Skip to content

Commit f34932c

Browse files
author
banko-marton
committed
#62 Added ModelViewerUrlProvider, integrated into html renderer
1 parent 43d0fdf commit f34932c

File tree

5 files changed

+65
-23
lines changed

5 files changed

+65
-23
lines changed

source/incqueryserver-jupyter/iqs_jupyter/analysis_extensions.py

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,9 @@ def _monkey_patch_analysis_result_repr_html(self : iqs_client.AnalysisResult, he
145145
param_headers = " ".join(["<th>{}</th> ".format(html.escape(param)) for param in pattern_params])
146146
match_rows = "\n".join([
147147
"<tr><th>{}</th><td>{}</td>{}</tr>\n".format(row_index, self.matches[row_index].message, " ".join([
148-
" <td>{} <a href=\"{}\">LINK</a></td>".format(_cell_to_html(_dict_to_element(argument_value.value)), _create_model_viewer_link(argument_value.value['element'])) # copartmentURI és relativeElementID
148+
" <td><a href=\"{}\">{}</a></td>".format(
149+
_dict_to_element(argument_value.value).url,
150+
_cell_to_html(_dict_to_element(argument_value.value)))
149151
for argument_value in self.matches[row_index].matching_elements
150152
])) for row_index in range(len(self.matches))
151153
])
@@ -170,19 +172,6 @@ def _monkey_patch_analysis_result_repr_html(self : iqs_client.AnalysisResult, he
170172
</div>
171173
'''.format(header_report, style, param_headers, match_rows)
172174

173-
from iqs_jupyter.authentication import IQSConnectorWidget
174-
import requests
175-
176-
def _create_model_viewer_link(element):
177-
# iqs_host = self.configuration
178-
# req = requests.get(iqs_host+"/api/web-console-config")
179-
# start = req.json()["modelViewerBaseURL"]
180-
start = "127.0.0.1:8080/"
181-
compURI = element['compartmentURI']
182-
relElementID = element['relativeElementID']
183-
184-
return start + '?compartmentURI='+compURI+'&elementId='+relElementID
185-
186175
def _do_monkey_patching():
187176
iqs_client.AnalysisResults._repr_html_ = _monkey_patch_analysis_results_repr_html
188177
iqs_client.AnalysisResult._repr_html_ = _monkey_patch_analysis_result_repr_html

source/incqueryserver-jupyter/iqs_jupyter/authentication.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ def connect(
4141
configuration.access_token = token
4242
return IQSClient(configuration, use_oidc)
4343

44+
import requests
4445

4546
class IQSClient:
4647
def __init__(
@@ -54,6 +55,43 @@ def __init__(
5455
api_composition.decorate_iqs_client(self, root_configuration, ApiClient)
5556
self.jupyter_tools = ext_point.IQSJupyterTools(self)
5657

58+
# Acquiring Model Viewer base link from host through internal API
59+
req = requests.get(f"http://{root_configuration.host}/api/web-console-config")
60+
61+
# Creating ModelViwer url holder to persist link
62+
self.mv_url = ModelViewerUrlProvider(self, req.json()["modelViewerBaseURL"])
63+
64+
# Url provider registering, a function to provide Model Viewer links
65+
ext_point.url_providers.append(self.mv_url.as_url_provider())
66+
ext_point.url_providers.append(ModelViewerUrlProvider(self, req.json()["modelViewerBaseURL"]))
67+
68+
class ModelViewerUrlProvider:
69+
def __init__(self, iqs, mv_address=None):
70+
self.mv_address = mv_address
71+
self.iqs = iqs
72+
73+
def __call__(self, element):
74+
if "compartmentURI" in element and "relativeElementID" in element:
75+
# Creating ModelViewer Link
76+
compURI = element['compartmentURI']
77+
relElementID = element['relativeElementID']
78+
return f"{self.mv_address}?compartmentURI={compURI}&elementId={relElementID}"
79+
else:
80+
return None
81+
82+
def as_url_provider(self):
83+
def url_provider(element_descriptor):
84+
return self.element_api_link(element_descriptor)
85+
return url_provider
86+
87+
def element_api_link(self, element):
88+
if "compartmentURI" in element and "relativeElementID" in element:
89+
# Creating ModelViewer Link
90+
compURI = element['compartmentURI']
91+
relElementID = element['relativeElementID']
92+
return f"{self.mv_address}?compartmentURI={compURI}&elementId={relElementID}"
93+
else:
94+
return None
5795

5896
class IQSConnectorWidget:
5997
def __init__(

source/incqueryserver-jupyter/iqs_jupyter/core_extensions.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,6 @@ def _recognize_typed_element_in_compartment_descriptor(
7070
ext_point.element_dict_recognizers.append(_recognize_typed_element_in_compartment_descriptor)
7171

7272

73-
74-
7573
## monkey patch section
7674

7775
def _monkey_patch_element_in_compartment_descriptor_repr_html(self):
@@ -250,7 +248,7 @@ def _monkey_patch_query_execution_response_to_html(self):
250248
param_headers = " ".join(["<th>{}</th> ".format(html.escape(param)) for param in pattern_params])
251249
match_rows = "\n".join([
252250
"<tr><th>{}</th>{}</tr>\n".format(row_index," ".join([
253-
" <td>{}</td>".format(_cell_to_html(match_list[row_index][param])) for param in pattern_params
251+
" <td><a href=\"{}\">{}</a></td>".format(_cell_to_html(match_list[row_index][param]).url, _cell_to_html(match_list[row_index][param])) for param in pattern_params
254252
])) for row_index in range(len(match_list))
255253
])
256254

source/incqueryserver-jupyter/iqs_jupyter/helpers.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,30 @@ def cell_to_html(cell):
3131
else:
3232
return str(cell)
3333

34-
def dict_to_element(dict_or_attribute_value, url_provider=None):
34+
def dict_to_element(dict_or_attribute_value):
3535
if isinstance(dict_or_attribute_value, dict):
3636
for recognizer in ext_point.element_dict_recognizers:
3737
recognized = recognizer(dict_or_attribute_value)
3838
if recognized:
39-
if url_provider is not None:
40-
recognized.url = url_provider(recognized)
39+
for url_provider in ext_point.url_providers:
40+
if url_provider(dict_or_attribute_value['element']) is not None: # maybe we should set url param to None - else
41+
setattr(recognized, 'url', url_provider(dict_or_attribute_value['element']))
4142
return recognized
42-
# not recognized as an element, treated as raw dict
43+
# not recognized as an element, treated as raw dict
4344
return dict_or_attribute_value
4445
else:
4546
return dict_or_attribute_value
4647

48+
# def dict_to_element(dict_or_attribute_value, url_provider=None):
49+
# if isinstance(dict_or_attribute_value, dict):
50+
# for recognizer in ext_point.element_dict_recognizers:
51+
# recognized = recognizer(dict_or_attribute_value)
52+
# if recognized:
53+
# if url_provider is not None:
54+
# recognized.url = url_provider(recognized)
55+
# return recognized
56+
# # not recognized as an element, treated as raw dict
57+
# return dict_or_attribute_value
58+
# else:
59+
# return dict_or_attribute_value
60+

source/incqueryserver-jupyter/iqs_jupyter/tool_extension_point.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,11 @@ def __init__(
2929
self._iqs = iqs
3030

3131

32-
# connector-specific extensions may add custom ways to convert a dict to an element representation;
32+
# connector-specific extensions may add custom ways to convert a dict to an element representation;
3333
# parse a dict and return the constructed element or None if not the right format
34-
# default is ElementInCompartmentDescriptor
34+
# default is ElementInCompartmentDescriptor
3535
element_dict_recognizers : List[Callable[[dict], Optional[Any]]] = []
3636

37+
38+
url_providers: List[Callable[[Any], Optional[Any]]] = []
39+

0 commit comments

Comments
 (0)