pyegeria 5.4.7.8__py3-none-any.whl → 5.4.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- commands/cat/dr_egeria_command_help.py +1 -1
- commands/cat/list_collections.py +2 -2
- commands/cat/run_report.py +12 -12
- commands/ops/list_archives.py +1 -3
- md_processing/data/generated_format_sets.json +43 -43
- md_processing/md_commands/data_designer_commands.py +10 -10
- md_processing/md_commands/ext_ref_commands.py +2 -2
- md_processing/md_commands/glossary_commands.py +3 -3
- md_processing/md_commands/governance_officer_commands.py +2 -2
- md_processing/md_commands/product_manager_commands.py +8 -8
- md_processing/md_commands/project_commands.py +2 -2
- md_processing/md_commands/solution_architect_commands.py +3 -3
- md_processing/md_commands/view_commands.py +7 -7
- md_processing/md_processing_utils/common_md_proc_utils.py +8 -8
- md_processing/md_processing_utils/gen_format_sets.py +12 -12
- md_processing/md_processing_utils/generate_dr_help.py +1 -1
- pyegeria/__init__.py +3 -3
- pyegeria/_base_client.py +564 -0
- pyegeria/_client_new.py +3378 -722
- pyegeria/_output_format_models.py +41 -16
- pyegeria/_output_formats.py +9 -2642
- pyegeria/automated_curation.py +90 -81
- pyegeria/base_report_formats.py +2835 -0
- pyegeria/classification_manager.py +184 -199
- pyegeria/classification_manager_omvs.py +45 -69
- pyegeria/collection_manager.py +87 -75
- pyegeria/data_designer.py +110 -110
- pyegeria/egeria_cat_client.py +23 -67
- pyegeria/egeria_client.py +2 -2
- pyegeria/egeria_tech_client.py +2 -2
- pyegeria/{external_references.py → external_links.py} +33 -34
- pyegeria/feedback_manager.py +191 -3931
- pyegeria/feedback_manager_omvs.py +104 -306
- pyegeria/format_set_executor.py +16 -16
- pyegeria/glossary_manager.py +30 -30
- pyegeria/governance_officer.py +22 -22
- pyegeria/mcp_adapter.py +6 -6
- pyegeria/output_formatter.py +59 -43
- pyegeria/platform_services.py +2 -1
- pyegeria/project_manager.py +45 -45
- pyegeria/reference_data.py +28 -28
- pyegeria/solution_architect.py +73 -73
- {pyegeria-5.4.7.8.dist-info → pyegeria-5.4.8.dist-info}/METADATA +33 -3
- {pyegeria-5.4.7.8.dist-info → pyegeria-5.4.8.dist-info}/RECORD +48 -47
- pyegeria/egeria_my_client.py +0 -91
- {pyegeria-5.4.7.8.dist-info → pyegeria-5.4.8.dist-info}/WHEEL +0 -0
- {pyegeria-5.4.7.8.dist-info → pyegeria-5.4.8.dist-info}/entry_points.txt +0 -0
- {pyegeria-5.4.7.8.dist-info → pyegeria-5.4.8.dist-info}/licenses/LICENSE +0 -0
- {pyegeria-5.4.7.8.dist-info → pyegeria-5.4.8.dist-info}/top_level.txt +0 -0
pyegeria/format_set_executor.py
CHANGED
|
@@ -26,12 +26,12 @@ from pyegeria.governance_officer import GovernanceOfficer
|
|
|
26
26
|
from pyegeria.glossary_manager import GlossaryManager
|
|
27
27
|
from pyegeria._globals import NO_ELEMENTS_FOUND
|
|
28
28
|
from pyegeria.config import settings
|
|
29
|
-
from pyegeria.
|
|
29
|
+
from pyegeria.external_links import ExternalReferences
|
|
30
30
|
from pyegeria._exceptions_new import PyegeriaException
|
|
31
|
-
from pyegeria.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
from pyegeria.base_report_formats import (
|
|
32
|
+
select_report_spec,
|
|
33
|
+
get_report_spec_heading,
|
|
34
|
+
get_report_spec_description,
|
|
35
35
|
)
|
|
36
36
|
|
|
37
37
|
|
|
@@ -95,7 +95,7 @@ async def _async_run_report(
|
|
|
95
95
|
user_pwd = egeria_client.user_pwd
|
|
96
96
|
|
|
97
97
|
# Resolve the format set and action
|
|
98
|
-
fmt =
|
|
98
|
+
fmt = select_report_spec(report_name, output_format)
|
|
99
99
|
if not fmt:
|
|
100
100
|
raise ValueError(
|
|
101
101
|
f"Output format set '{report_name}' does not have a compatible '{output_format}' format."
|
|
@@ -133,9 +133,9 @@ async def _async_run_report(
|
|
|
133
133
|
# Include fixed specifics
|
|
134
134
|
call_params.update(spec_params)
|
|
135
135
|
|
|
136
|
-
# Always include output_format and
|
|
136
|
+
# Always include output_format and report_spec for downstream rendering
|
|
137
137
|
call_params["output_format"] = output_format
|
|
138
|
-
call_params["
|
|
138
|
+
call_params["report_spec"] = report_name
|
|
139
139
|
|
|
140
140
|
client_class, method_name = _resolve_client_and_method(func_decl)
|
|
141
141
|
|
|
@@ -173,8 +173,8 @@ async def _async_run_report(
|
|
|
173
173
|
return {"kind": "empty"}
|
|
174
174
|
|
|
175
175
|
# Prepare optional preamble for narrative outputs
|
|
176
|
-
heading =
|
|
177
|
-
desc =
|
|
176
|
+
heading = get_report_spec_heading(report_name)
|
|
177
|
+
desc = get_report_spec_description(report_name)
|
|
178
178
|
preamble = f"# {heading}\n{desc}\n\n" if heading and desc else ""
|
|
179
179
|
|
|
180
180
|
if output_format in {"DICT", "JSON", "ALL"}:
|
|
@@ -201,7 +201,7 @@ async def _async_run_report(
|
|
|
201
201
|
|
|
202
202
|
|
|
203
203
|
|
|
204
|
-
def
|
|
204
|
+
def exec_report_spec(
|
|
205
205
|
format_set_name: str,
|
|
206
206
|
*,
|
|
207
207
|
output_format: str = "DICT",
|
|
@@ -224,7 +224,7 @@ def exec_format_set(
|
|
|
224
224
|
params = dict(params or {})
|
|
225
225
|
|
|
226
226
|
# Resolve the format set and action
|
|
227
|
-
fmt =
|
|
227
|
+
fmt = select_report_spec(format_set_name, output_format)
|
|
228
228
|
if not fmt:
|
|
229
229
|
raise ValueError(
|
|
230
230
|
f"Output format set '{format_set_name}' does not have a compatible '{output_format}' format."
|
|
@@ -255,9 +255,9 @@ def exec_format_set(
|
|
|
255
255
|
# Include fixed specifics
|
|
256
256
|
call_params.update(spec_params)
|
|
257
257
|
|
|
258
|
-
# Always include output_format and
|
|
258
|
+
# Always include output_format and report_spec for downstream rendering
|
|
259
259
|
call_params["output_format"] = output_format
|
|
260
|
-
call_params["
|
|
260
|
+
call_params["report_spec"] = format_set_name
|
|
261
261
|
|
|
262
262
|
client_class, method_name = _resolve_client_and_method(func_decl)
|
|
263
263
|
client = client_class(view_server, view_url, user_id=user, user_pwd=user_pass)
|
|
@@ -276,8 +276,8 @@ def exec_format_set(
|
|
|
276
276
|
return {"kind": "empty"}
|
|
277
277
|
|
|
278
278
|
# Prepare optional preamble for narrative outputs
|
|
279
|
-
heading =
|
|
280
|
-
desc =
|
|
279
|
+
heading = get_report_spec_heading(format_set_name)
|
|
280
|
+
desc = get_report_spec_description(format_set_name)
|
|
281
281
|
preamble = f"# {heading}\n{desc}\n\n" if heading and desc else ""
|
|
282
282
|
|
|
283
283
|
if output_format in {"DICT", "JSON", "ALL"}:
|
pyegeria/glossary_manager.py
CHANGED
|
@@ -27,7 +27,7 @@ from pyegeria.models import (NewElementRequestBody,
|
|
|
27
27
|
ReferenceableProperties, UpdateElementRequestBody, DeleteRequestBody, TemplateRequestBody,
|
|
28
28
|
NewRelationshipRequestBody, UpdateRelationshipRequestBody, NewClassificationRequestBody,
|
|
29
29
|
FilterRequestBody, GetRequestBody, SearchStringRequestBody, UpdateStatusRequestBody)
|
|
30
|
-
from pyegeria.
|
|
30
|
+
from pyegeria.base_report_formats import select_report_spec, get_report_spec_match
|
|
31
31
|
from pyegeria.output_formatter import (generate_output,
|
|
32
32
|
_extract_referenceable_properties, populate_columns_from_properties,
|
|
33
33
|
get_required_relationships, populate_common_columns, overlay_additional_values, resolve_output_formats)
|
|
@@ -2510,7 +2510,7 @@ class GlossaryManager(CollectionManager):
|
|
|
2510
2510
|
# Use centralized population
|
|
2511
2511
|
col_data = populate_common_columns(element, columns_struct)
|
|
2512
2512
|
# Term-specific classifications (collectionCategories) to 'classifications' column
|
|
2513
|
-
columns_list = col_data.get('formats', {}).get('
|
|
2513
|
+
columns_list = col_data.get('formats', {}).get('attributes', [])
|
|
2514
2514
|
try:
|
|
2515
2515
|
classification_names = ""
|
|
2516
2516
|
classifications = element.get('elementHeader', {}).get("collectionCategories", [])
|
|
@@ -2568,9 +2568,9 @@ class GlossaryManager(CollectionManager):
|
|
|
2568
2568
|
def _generate_glossary_output(self, elements: dict | list[dict], search_string: str,
|
|
2569
2569
|
element_type_name: str | None,
|
|
2570
2570
|
output_format: str = 'DICT',
|
|
2571
|
-
|
|
2571
|
+
report_spec: dict | str = None) -> str | list[dict]:
|
|
2572
2572
|
entity_type = 'Glossary'
|
|
2573
|
-
output_formats = resolve_output_formats(entity_type, output_format,
|
|
2573
|
+
output_formats = resolve_output_formats(entity_type, output_format, report_spec)
|
|
2574
2574
|
return generate_output(
|
|
2575
2575
|
elements=elements,
|
|
2576
2576
|
search_string=search_string,
|
|
@@ -2584,9 +2584,9 @@ class GlossaryManager(CollectionManager):
|
|
|
2584
2584
|
def _generate_term_output(self, elements: dict | list[dict], search_string: str,
|
|
2585
2585
|
element_type_name: str | None,
|
|
2586
2586
|
output_format: str = 'DICT',
|
|
2587
|
-
|
|
2587
|
+
report_spec: dict | str = None) -> str | list[dict]:
|
|
2588
2588
|
entity_type = 'GlossaryTerm'
|
|
2589
|
-
output_formats = resolve_output_formats(entity_type, output_format,
|
|
2589
|
+
output_formats = resolve_output_formats(entity_type, output_format, report_spec)
|
|
2590
2590
|
return generate_output(
|
|
2591
2591
|
elements=elements,
|
|
2592
2592
|
search_string=search_string,
|
|
@@ -2645,56 +2645,56 @@ class GlossaryManager(CollectionManager):
|
|
|
2645
2645
|
metadata_element_types: list[str] = ["Glossary"],
|
|
2646
2646
|
starts_with: bool = False, ends_with: bool = False, ignore_case: bool = False,
|
|
2647
2647
|
start_from: int = 0,page_size: int = 0, output_format: str = 'JSON',
|
|
2648
|
-
|
|
2648
|
+
report_spec: str | dict = None,
|
|
2649
2649
|
body: dict | SearchStringRequestBody = None) -> list | str:
|
|
2650
2650
|
|
|
2651
2651
|
response = await self._async_find_collections(search_string, classificaton_names,
|
|
2652
2652
|
metadata_element_types, starts_with, ends_with, ignore_case,
|
|
2653
|
-
start_from, page_size, output_format,
|
|
2653
|
+
start_from, page_size, output_format, report_spec, body)
|
|
2654
2654
|
return response
|
|
2655
2655
|
|
|
2656
2656
|
def find_glossaries(self, search_string: str = "*", classificaton_names: list[str] = None,
|
|
2657
2657
|
metadata_element_types: list[str] = ["Glossary"],
|
|
2658
2658
|
starts_with: bool = False, ends_with: bool = False, ignore_case: bool = False,
|
|
2659
2659
|
start_from: int = 0,page_size: int = 0, output_format: str = 'JSON',
|
|
2660
|
-
|
|
2660
|
+
report_spec: str | dict = None,
|
|
2661
2661
|
body: dict | SearchStringRequestBody = None) -> list | str:
|
|
2662
2662
|
loop = asyncio.get_event_loop()
|
|
2663
2663
|
response = loop.run_until_complete(
|
|
2664
|
-
self._async_find_glossaries(search_string, classificaton_names, metadata_element_types, starts_with, ends_with, ignore_case, start_from, page_size, output_format,
|
|
2664
|
+
self._async_find_glossaries(search_string, classificaton_names, metadata_element_types, starts_with, ends_with, ignore_case, start_from, page_size, output_format, report_spec, body))
|
|
2665
2665
|
return response
|
|
2666
2666
|
|
|
2667
2667
|
async def _async_get_glossaries_by_name(self, filter_string: str = None, classification_names: list[str] = None,
|
|
2668
2668
|
body: dict | FilterRequestBody = None,
|
|
2669
2669
|
start_from: int = 0, page_size: int = 0,
|
|
2670
2670
|
output_format: str = 'JSON',
|
|
2671
|
-
|
|
2672
|
-
return await self._async_get_collections_by_name(filter_string, classification_names, body, start_from, page_size, output_format,
|
|
2671
|
+
report_spec: str | dict = None) -> dict | str:
|
|
2672
|
+
return await self._async_get_collections_by_name(filter_string, classification_names, body, start_from, page_size, output_format, report_spec)
|
|
2673
2673
|
|
|
2674
2674
|
|
|
2675
2675
|
def get_glossaries_by_name(self, filter_string: str = None, classification_names: list[str] = None,
|
|
2676
2676
|
body: dict | FilterRequestBody = None,
|
|
2677
2677
|
start_from: int = 0, page_size: int = 0,
|
|
2678
2678
|
output_format: str = 'JSON',
|
|
2679
|
-
|
|
2679
|
+
report_spec: str | dict = None) -> dict | str:
|
|
2680
2680
|
loop = asyncio.get_event_loop()
|
|
2681
2681
|
response = loop.run_until_complete(
|
|
2682
2682
|
self._async_get_glossaries_by_name(filter_string, classification_names, body,start_from, page_size,
|
|
2683
|
-
output_format,
|
|
2683
|
+
output_format, report_spec))
|
|
2684
2684
|
return response
|
|
2685
2685
|
|
|
2686
2686
|
async def _async_get_glossary_by_guid(self, glossary_guid: str, element_type: str = "Glossary", body: dict | GetRequestBody = None,
|
|
2687
|
-
output_format: str = "JSON",
|
|
2687
|
+
output_format: str = "JSON", report_spec: str | dict = None) -> dict | str:
|
|
2688
2688
|
|
|
2689
|
-
return await self._async_get_collection_by_guid(glossary_guid, element_type, body, output_format,
|
|
2689
|
+
return await self._async_get_collection_by_guid(glossary_guid, element_type, body, output_format, report_spec)
|
|
2690
2690
|
|
|
2691
2691
|
|
|
2692
2692
|
|
|
2693
2693
|
def get_glossary_by_guid(self, glossary_guid: str, element_type: str = "Glossary", body: dict| GetRequestBody=None,
|
|
2694
|
-
output_format: str = "JSON",
|
|
2694
|
+
output_format: str = "JSON", report_spec: str | dict = None) -> dict | str:
|
|
2695
2695
|
loop = asyncio.get_event_loop()
|
|
2696
2696
|
response = loop.run_until_complete(
|
|
2697
|
-
self._async_get_glossary_by_guid(glossary_guid, element_type, body,output_format,
|
|
2697
|
+
self._async_get_glossary_by_guid(glossary_guid, element_type, body,output_format, report_spec))
|
|
2698
2698
|
return response
|
|
2699
2699
|
|
|
2700
2700
|
|
|
@@ -2703,7 +2703,7 @@ class GlossaryManager(CollectionManager):
|
|
|
2703
2703
|
body: dict | FilterRequestBody = None,
|
|
2704
2704
|
start_from: int = 0, page_size: int = 0,
|
|
2705
2705
|
output_format: str = 'JSON',
|
|
2706
|
-
|
|
2706
|
+
report_spec: str | dict = None) -> list:
|
|
2707
2707
|
url = (f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/glossary-manager/glossaries/"
|
|
2708
2708
|
f"terms/by-name")
|
|
2709
2709
|
response = await self._async_get_name_request(url, _type="GlossaryTerm",
|
|
@@ -2711,7 +2711,7 @@ class GlossaryManager(CollectionManager):
|
|
|
2711
2711
|
filter_string=filter_string,
|
|
2712
2712
|
classification_names=classification_names,
|
|
2713
2713
|
start_from=start_from, page_size=page_size,
|
|
2714
|
-
output_format=output_format,
|
|
2714
|
+
output_format=output_format, report_spec=report_spec,
|
|
2715
2715
|
body=body)
|
|
2716
2716
|
return response
|
|
2717
2717
|
|
|
@@ -2719,34 +2719,34 @@ class GlossaryManager(CollectionManager):
|
|
|
2719
2719
|
body: dict | FilterRequestBody = None,
|
|
2720
2720
|
start_from: int = 0, page_size: int = 0,
|
|
2721
2721
|
output_format: str = 'JSON',
|
|
2722
|
-
|
|
2722
|
+
report_spec: str | dict = None) -> list:
|
|
2723
2723
|
loop = asyncio.get_event_loop()
|
|
2724
2724
|
response = loop.run_until_complete(
|
|
2725
2725
|
self._async_get_terms_by_name(filter_string, classification_names, body,start_from, page_size,
|
|
2726
|
-
output_format,
|
|
2726
|
+
output_format, report_spec))
|
|
2727
2727
|
return response
|
|
2728
2728
|
|
|
2729
2729
|
async def _async_get_term_by_guid(self, term_guid: str, element_type: str = "GlossaryTerm", body: dict| GetRequestBody=None,
|
|
2730
|
-
output_format: str = "JSON",
|
|
2730
|
+
output_format: str = "JSON", report_spec: str | dict = None) -> dict | str:
|
|
2731
2731
|
url = (f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/glossary-manager/glossaries/terms/"
|
|
2732
2732
|
f"{term_guid}")
|
|
2733
2733
|
response = await self._async_get_guid_request(url, _type=element_type,
|
|
2734
2734
|
_gen_output=self._generate_term_output,
|
|
2735
|
-
output_format=output_format,
|
|
2735
|
+
output_format=output_format, report_spec=report_spec,
|
|
2736
2736
|
body=body)
|
|
2737
2737
|
return response
|
|
2738
2738
|
|
|
2739
2739
|
def get_term_by_guid(self, term_guid: str, element_type: str = "GlossaryTerm", body: dict| GetRequestBody=None,
|
|
2740
|
-
output_format: str = "JSON",
|
|
2740
|
+
output_format: str = "JSON", report_spec: str | dict = None) -> dict | str:
|
|
2741
2741
|
loop = asyncio.get_event_loop()
|
|
2742
|
-
response = loop.run_until_complete(self._async_get_term_by_guid(term_guid, element_type, body, output_format,
|
|
2742
|
+
response = loop.run_until_complete(self._async_get_term_by_guid(term_guid, element_type, body, output_format, report_spec))
|
|
2743
2743
|
return response
|
|
2744
2744
|
|
|
2745
2745
|
async def _async_find_glossary_terms(self, search_string: str, starts_with: bool = True,
|
|
2746
2746
|
ends_with: bool = False, ignore_case: bool = False, type_name: str = "GlossaryTerm",
|
|
2747
2747
|
classification_names: list[str] = None, start_from: int = 0,
|
|
2748
2748
|
page_size: int = 0, output_format: str = 'JSON',
|
|
2749
|
-
|
|
2749
|
+
report_spec: str | dict = "Glossary-Term-DrE", body: dict = None) -> list | str:
|
|
2750
2750
|
url = (f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/glossary-manager/glossaries/terms/"
|
|
2751
2751
|
f"by-search-string")
|
|
2752
2752
|
response = await self._async_find_request(url, _type= type_name,
|
|
@@ -2755,7 +2755,7 @@ class GlossaryManager(CollectionManager):
|
|
|
2755
2755
|
metadata_element_types = ["GlossaryTerm"],
|
|
2756
2756
|
starts_with = starts_with, ends_with = ends_with, ignore_case = ignore_case,
|
|
2757
2757
|
start_from = start_from, page_size = page_size,
|
|
2758
|
-
output_format=output_format,
|
|
2758
|
+
output_format=output_format, report_spec=report_spec,
|
|
2759
2759
|
body=body)
|
|
2760
2760
|
return response
|
|
2761
2761
|
|
|
@@ -2763,13 +2763,13 @@ class GlossaryManager(CollectionManager):
|
|
|
2763
2763
|
ends_with: bool = False, ignore_case: bool = False, type_name: str = "GlossaryTerm",
|
|
2764
2764
|
classification_names: list[str] = None, start_from: int = 0,
|
|
2765
2765
|
page_size: int = 0, output_format: str = 'JSON',
|
|
2766
|
-
|
|
2766
|
+
report_spec: str | dict = None, body: dict = None) -> list | str:
|
|
2767
2767
|
loop = asyncio.get_event_loop()
|
|
2768
2768
|
response = loop.run_until_complete(
|
|
2769
2769
|
self._async_find_glossary_terms(search_string, starts_with,
|
|
2770
2770
|
ends_with, ignore_case, type_name,classification_names,
|
|
2771
2771
|
start_from,
|
|
2772
|
-
page_size, output_format,
|
|
2772
|
+
page_size, output_format, report_spec, body))
|
|
2773
2773
|
return response
|
|
2774
2774
|
|
|
2775
2775
|
|
pyegeria/governance_officer.py
CHANGED
|
@@ -24,7 +24,7 @@ from pyegeria.output_formatter import (
|
|
|
24
24
|
get_required_relationships,
|
|
25
25
|
populate_common_columns,
|
|
26
26
|
)
|
|
27
|
-
from pyegeria.
|
|
27
|
+
from pyegeria.base_report_formats import select_report_spec, get_report_spec_match
|
|
28
28
|
|
|
29
29
|
sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))
|
|
30
30
|
from pyegeria._exceptions_new import PyegeriaInvalidParameterException
|
|
@@ -106,7 +106,7 @@ class GovernanceOfficer(Client2):
|
|
|
106
106
|
# Extract properties functions
|
|
107
107
|
#
|
|
108
108
|
def _generate_governance_definition_output(self, elements: list | dict, search_string: str, element_type_name: str = None,
|
|
109
|
-
output_format: str = 'DICT',
|
|
109
|
+
output_format: str = 'DICT', report_spec: dict | str = None
|
|
110
110
|
) -> str | list:
|
|
111
111
|
"""
|
|
112
112
|
Render governance definitions using the shared output pipeline.
|
|
@@ -121,7 +121,7 @@ class GovernanceOfficer(Client2):
|
|
|
121
121
|
Friendly type label to display (defaults to "Governance Definition").
|
|
122
122
|
output_format : str
|
|
123
123
|
One of: MD, FORM, REPORT, LIST, DICT, MERMAID, HTML.
|
|
124
|
-
|
|
124
|
+
report_spec : dict | str, optional
|
|
125
125
|
Either a label for a format set or a concrete format-set dict. When omitted, a sensible
|
|
126
126
|
default for Governance Definitions is chosen, falling back to "Default".
|
|
127
127
|
|
|
@@ -136,18 +136,18 @@ class GovernanceOfficer(Client2):
|
|
|
136
136
|
|
|
137
137
|
entity_type = element_type_name if element_type_name else "Governance Definition"
|
|
138
138
|
# Resolve columns_struct via output format sets
|
|
139
|
-
if
|
|
140
|
-
if isinstance(
|
|
141
|
-
output_formats =
|
|
142
|
-
elif isinstance(
|
|
143
|
-
output_formats =
|
|
139
|
+
if report_spec:
|
|
140
|
+
if isinstance(report_spec, str):
|
|
141
|
+
output_formats = select_report_spec(report_spec, output_format)
|
|
142
|
+
elif isinstance(report_spec, dict):
|
|
143
|
+
output_formats = get_report_spec_match(report_spec, output_format)
|
|
144
144
|
else:
|
|
145
145
|
output_formats = None
|
|
146
146
|
else:
|
|
147
147
|
# Default to the Governance Definitions format set
|
|
148
|
-
output_formats =
|
|
148
|
+
output_formats = select_report_spec("Governance Definitions", output_format)
|
|
149
149
|
if output_formats is None:
|
|
150
|
-
output_formats =
|
|
150
|
+
output_formats = select_report_spec("Default", output_format)
|
|
151
151
|
|
|
152
152
|
logger.trace(f"Executing generate_governance_definition_output: {output_formats}")
|
|
153
153
|
return generate_output(
|
|
@@ -1672,7 +1672,7 @@ class GovernanceOfficer(Client2):
|
|
|
1672
1672
|
starts_with: bool = True,
|
|
1673
1673
|
ends_with: bool = False, ignore_case: bool = False,
|
|
1674
1674
|
start_from: int = 0, page_size: int = 0,
|
|
1675
|
-
output_format: str = 'JSON',
|
|
1675
|
+
output_format: str = 'JSON', report_spec: dict = None,
|
|
1676
1676
|
body: dict | SearchStringRequestBody = None,
|
|
1677
1677
|
) -> list | str:
|
|
1678
1678
|
""" Retrieve the list of governance definition metadata elements that contain the search string.
|
|
@@ -1741,7 +1741,7 @@ class GovernanceOfficer(Client2):
|
|
|
1741
1741
|
metadata_element_types=metadata_element_types,
|
|
1742
1742
|
starts_with=starts_with, ends_with=ends_with, ignore_case=ignore_case,
|
|
1743
1743
|
start_from=start_from, page_size=page_size,
|
|
1744
|
-
output_format=output_format,
|
|
1744
|
+
output_format=output_format, report_spec=report_spec,
|
|
1745
1745
|
body=body)
|
|
1746
1746
|
|
|
1747
1747
|
@dynamic_catch
|
|
@@ -1749,7 +1749,7 @@ class GovernanceOfficer(Client2):
|
|
|
1749
1749
|
metadata_element_types: list[str] = None,
|
|
1750
1750
|
starts_with: bool = True, ends_with: bool = False,
|
|
1751
1751
|
ignore_case: bool = False, start_from: int = 0, page_size: int = 0,
|
|
1752
|
-
output_format: str = 'JSON',
|
|
1752
|
+
output_format: str = 'JSON', report_spec: dict = None,
|
|
1753
1753
|
body: dict | SearchStringRequestBody = None, ) -> list | str:
|
|
1754
1754
|
""" Retrieve the list of governance definition metadata elements that contain the search string.
|
|
1755
1755
|
|
|
@@ -1810,7 +1810,7 @@ class GovernanceOfficer(Client2):
|
|
|
1810
1810
|
response = loop.run_until_complete(
|
|
1811
1811
|
self._async_find_governance_definitions(search_string, classification_names, metadata_element_types,
|
|
1812
1812
|
starts_with, ends_with, ignore_case, start_from,
|
|
1813
|
-
page_size, output_format,
|
|
1813
|
+
page_size, output_format, report_spec, body))
|
|
1814
1814
|
return response
|
|
1815
1815
|
|
|
1816
1816
|
@dynamic_catch
|
|
@@ -1819,7 +1819,7 @@ class GovernanceOfficer(Client2):
|
|
|
1819
1819
|
body: dict | FilterRequestBody = None,
|
|
1820
1820
|
start_from: int = 0, page_size: int = 0,
|
|
1821
1821
|
output_format: str = "JSON",
|
|
1822
|
-
|
|
1822
|
+
report_spec: dict = None) -> list | str:
|
|
1823
1823
|
""" Returns the list of governance definitions with a particular name. Async Version.
|
|
1824
1824
|
|
|
1825
1825
|
Parameters
|
|
@@ -1877,7 +1877,7 @@ class GovernanceOfficer(Client2):
|
|
|
1877
1877
|
filter_string=filter_string,
|
|
1878
1878
|
classification_names=classification_names,
|
|
1879
1879
|
start_from=start_from, page_size=page_size,
|
|
1880
|
-
output_format=output_format,
|
|
1880
|
+
output_format=output_format, report_spec=report_spec,
|
|
1881
1881
|
body=body)
|
|
1882
1882
|
|
|
1883
1883
|
return response
|
|
@@ -1887,7 +1887,7 @@ class GovernanceOfficer(Client2):
|
|
|
1887
1887
|
body: dict | FilterRequestBody = None,
|
|
1888
1888
|
start_from: int = 0, page_size: int = 0,
|
|
1889
1889
|
output_format: str = "JSON",
|
|
1890
|
-
|
|
1890
|
+
report_spec: dict = None) -> list | str:
|
|
1891
1891
|
""" Returns the list of governance definitions with a particular name."""
|
|
1892
1892
|
|
|
1893
1893
|
""" Returns the list of information governance definitions with a particular name. Async Version.
|
|
@@ -1947,14 +1947,14 @@ class GovernanceOfficer(Client2):
|
|
|
1947
1947
|
loop = asyncio.get_event_loop()
|
|
1948
1948
|
response = loop.run_until_complete(
|
|
1949
1949
|
self._async_get_governance_definitions_by_name(filter_string, classification_names, body,
|
|
1950
|
-
start_from, page_size, output_format,
|
|
1950
|
+
start_from, page_size, output_format, report_spec))
|
|
1951
1951
|
return response
|
|
1952
1952
|
|
|
1953
1953
|
@dynamic_catch
|
|
1954
1954
|
async def _async_get_governance_definition_by_guid(self, guid: str, element_type: str = None,
|
|
1955
1955
|
body: dict | FilterRequestBody = None,
|
|
1956
1956
|
output_format: str = "JSON",
|
|
1957
|
-
|
|
1957
|
+
report_spec: dict = None) -> dict | str:
|
|
1958
1958
|
|
|
1959
1959
|
""" Get governance definition by guid.
|
|
1960
1960
|
Async version.
|
|
@@ -2008,7 +2008,7 @@ class GovernanceOfficer(Client2):
|
|
|
2008
2008
|
|
|
2009
2009
|
response = await self._async_get_guid_request(url, _type=type,
|
|
2010
2010
|
_gen_output=self._generate_governance_definition_output,
|
|
2011
|
-
output_format=output_format,
|
|
2011
|
+
output_format=output_format, report_spec=report_spec,
|
|
2012
2012
|
body=body)
|
|
2013
2013
|
|
|
2014
2014
|
return response
|
|
@@ -2016,7 +2016,7 @@ class GovernanceOfficer(Client2):
|
|
|
2016
2016
|
@dynamic_catch
|
|
2017
2017
|
def get_governance_definition_by_guid(self, guid: str, element_type: str = None, body: dict = None,
|
|
2018
2018
|
output_format: str = "JSON",
|
|
2019
|
-
|
|
2019
|
+
report_spec: dict = None) -> dict | str:
|
|
2020
2020
|
|
|
2021
2021
|
""" Get governance definition by guid.
|
|
2022
2022
|
|
|
@@ -2063,7 +2063,7 @@ class GovernanceOfficer(Client2):
|
|
|
2063
2063
|
loop = asyncio.get_event_loop()
|
|
2064
2064
|
response = loop.run_until_complete(self._async_get_governance_definition_by_guid(guid, element_type, body,
|
|
2065
2065
|
output_format,
|
|
2066
|
-
|
|
2066
|
+
report_spec))
|
|
2067
2067
|
return response
|
|
2068
2068
|
|
|
2069
2069
|
@dynamic_catch
|
pyegeria/mcp_adapter.py
CHANGED
|
@@ -15,12 +15,12 @@ from typing import Any, Dict, Optional
|
|
|
15
15
|
|
|
16
16
|
from loguru import logger
|
|
17
17
|
|
|
18
|
-
from pyegeria.
|
|
18
|
+
from pyegeria.base_report_formats import (
|
|
19
19
|
list_mcp_format_sets,
|
|
20
|
-
|
|
20
|
+
select_report_spec,
|
|
21
21
|
)
|
|
22
22
|
from pyegeria.egeria_tech_client import EgeriaTech
|
|
23
|
-
from pyegeria.format_set_executor import
|
|
23
|
+
from pyegeria.format_set_executor import exec_report_spec, _async_run_report
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
def list_reports() -> dict:
|
|
@@ -33,7 +33,7 @@ def describe_report(name: str, output_type: str = "DICT") -> Dict[str, Any]:
|
|
|
33
33
|
Describe a format set for MCP discovery. If outputType != ANY, a concrete format
|
|
34
34
|
will be resolved; otherwise only metadata/action are returned.
|
|
35
35
|
"""
|
|
36
|
-
meta =
|
|
36
|
+
meta = select_report_spec(name, output_type)
|
|
37
37
|
if not meta:
|
|
38
38
|
raise ValueError(f"Unknown or incompatible format set: {name}")
|
|
39
39
|
return meta
|
|
@@ -62,7 +62,7 @@ def _execute_egeria_call_blocking(
|
|
|
62
62
|
from pyegeria.config import settings as _settings
|
|
63
63
|
|
|
64
64
|
|
|
65
|
-
return
|
|
65
|
+
return exec_report_spec(
|
|
66
66
|
format_set_name=report,
|
|
67
67
|
output_format="DICT",
|
|
68
68
|
params=params or {},
|
|
@@ -97,7 +97,7 @@ def run_report(
|
|
|
97
97
|
# Lazy import of settings to avoid circulars when optional args are None
|
|
98
98
|
from pyegeria.config import settings as _settings
|
|
99
99
|
logger.info(f"Format set: {report}\nparams: {json.dumps(params)}\nview_server: {view_server}\nview_url: {view_url}\nuser: {user}\nuser_pass: {user_pass}")
|
|
100
|
-
return
|
|
100
|
+
return exec_report_spec(
|
|
101
101
|
format_set_name=report,
|
|
102
102
|
output_format="DICT",
|
|
103
103
|
params=params or {},
|