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/solution_architect.py
CHANGED
|
@@ -18,7 +18,7 @@ from pyegeria.models import NewElementRequestBody, TemplateRequestBody, UpdateEl
|
|
|
18
18
|
NewRelationshipRequestBody, DeleteRequestBody, UpdateStatusRequestBody, SearchStringRequestBody
|
|
19
19
|
from pyegeria.output_formatter import make_preamble, make_md_attribute, generate_output, extract_mermaid_only, \
|
|
20
20
|
extract_basic_dict, MD_SEPARATOR, populate_common_columns
|
|
21
|
-
from pyegeria.
|
|
21
|
+
from pyegeria.base_report_formats import select_report_spec, get_report_spec_match
|
|
22
22
|
from pyegeria._validators import validate_guid
|
|
23
23
|
from pyegeria.governance_officer import GovernanceOfficer
|
|
24
24
|
from pyegeria._client_new import Client2, max_paging_size
|
|
@@ -502,7 +502,7 @@ class SolutionArchitect(Client2):
|
|
|
502
502
|
# We only set a column's value if it is currently empty (None or "").
|
|
503
503
|
try:
|
|
504
504
|
formats = col_data.get('formats') if isinstance(col_data, dict) else None
|
|
505
|
-
columns = formats.get('
|
|
505
|
+
columns = formats.get('attributes') if isinstance(formats, dict) else None
|
|
506
506
|
if isinstance(columns, list) and isinstance(rel_dict, dict):
|
|
507
507
|
for col in columns:
|
|
508
508
|
if not isinstance(col, dict):
|
|
@@ -531,24 +531,24 @@ class SolutionArchitect(Client2):
|
|
|
531
531
|
# Markdown output support
|
|
532
532
|
#
|
|
533
533
|
def generate_info_supply_chain_output(self, elements: list | dict, search_string: str, element_type_name: str | None,
|
|
534
|
-
output_format: str = 'MD',
|
|
534
|
+
output_format: str = 'MD', report_spec: dict | str = None) -> str | list:
|
|
535
535
|
"""Render Information Supply Chains using the shared output pipeline.
|
|
536
536
|
"""
|
|
537
537
|
if output_format == "MERMAID":
|
|
538
538
|
return extract_mermaid_only(elements)
|
|
539
539
|
|
|
540
540
|
entity_type = "Information Supply Chain"
|
|
541
|
-
if
|
|
542
|
-
if isinstance(
|
|
543
|
-
output_formats =
|
|
544
|
-
elif isinstance(
|
|
545
|
-
output_formats =
|
|
541
|
+
if report_spec:
|
|
542
|
+
if isinstance(report_spec, str):
|
|
543
|
+
output_formats = select_report_spec(report_spec, output_format)
|
|
544
|
+
elif isinstance(report_spec, dict):
|
|
545
|
+
output_formats = get_report_spec_match(report_spec, output_format)
|
|
546
546
|
else:
|
|
547
547
|
output_formats = None
|
|
548
548
|
else:
|
|
549
|
-
output_formats =
|
|
549
|
+
output_formats = select_report_spec("Information Supply Chains", output_format)
|
|
550
550
|
if output_formats is None:
|
|
551
|
-
output_formats =
|
|
551
|
+
output_formats = select_report_spec("Default", output_format)
|
|
552
552
|
|
|
553
553
|
return generate_output(
|
|
554
554
|
elements=elements,
|
|
@@ -561,7 +561,7 @@ class SolutionArchitect(Client2):
|
|
|
561
561
|
)
|
|
562
562
|
|
|
563
563
|
def generate_solution_blueprint_output(self, elements: list | dict, search_string: str, element_type_name: str | None,
|
|
564
|
-
output_format: str = 'MD',
|
|
564
|
+
output_format: str = 'MD', report_spec: dict | str = None) -> str | list:
|
|
565
565
|
"""
|
|
566
566
|
Generate output for solution blueprints in the specified format.
|
|
567
567
|
|
|
@@ -577,17 +577,17 @@ class SolutionArchitect(Client2):
|
|
|
577
577
|
return extract_mermaid_only(elements)
|
|
578
578
|
|
|
579
579
|
entity_type = "Solution Blueprint"
|
|
580
|
-
if
|
|
581
|
-
if isinstance(
|
|
582
|
-
output_formats =
|
|
583
|
-
elif isinstance(
|
|
584
|
-
output_formats =
|
|
580
|
+
if report_spec:
|
|
581
|
+
if isinstance(report_spec, str):
|
|
582
|
+
output_formats = select_report_spec(report_spec, output_format)
|
|
583
|
+
elif isinstance(report_spec, dict):
|
|
584
|
+
output_formats = get_report_spec_match(report_spec, output_format)
|
|
585
585
|
else:
|
|
586
586
|
output_formats = None
|
|
587
587
|
else:
|
|
588
|
-
output_formats =
|
|
588
|
+
output_formats = select_report_spec("Solution Blueprints", output_format)
|
|
589
589
|
if output_formats is None:
|
|
590
|
-
output_formats =
|
|
590
|
+
output_formats = select_report_spec("Default", output_format)
|
|
591
591
|
|
|
592
592
|
return generate_output(
|
|
593
593
|
elements=elements,
|
|
@@ -600,7 +600,7 @@ class SolutionArchitect(Client2):
|
|
|
600
600
|
)
|
|
601
601
|
|
|
602
602
|
def generate_solution_roles_output(self, elements: list | dict, search_string: str, element_type_name: str | None,
|
|
603
|
-
output_format: str = 'MD',
|
|
603
|
+
output_format: str = 'MD', report_spec: dict | str = None) -> str | list:
|
|
604
604
|
"""
|
|
605
605
|
Generate output for solution roles in the specified format.
|
|
606
606
|
|
|
@@ -616,17 +616,17 @@ class SolutionArchitect(Client2):
|
|
|
616
616
|
return extract_mermaid_only(elements)
|
|
617
617
|
|
|
618
618
|
entity_type = "Solution Role"
|
|
619
|
-
if
|
|
620
|
-
if isinstance(
|
|
621
|
-
output_formats =
|
|
622
|
-
elif isinstance(
|
|
623
|
-
output_formats =
|
|
619
|
+
if report_spec:
|
|
620
|
+
if isinstance(report_spec, str):
|
|
621
|
+
output_formats = select_report_spec(report_spec, output_format)
|
|
622
|
+
elif isinstance(report_spec, dict):
|
|
623
|
+
output_formats = get_report_spec_match(report_spec, output_format)
|
|
624
624
|
else:
|
|
625
625
|
output_formats = None
|
|
626
626
|
else:
|
|
627
|
-
output_formats =
|
|
627
|
+
output_formats = select_report_spec("Solution Roles", output_format)
|
|
628
628
|
if output_formats is None:
|
|
629
|
-
output_formats =
|
|
629
|
+
output_formats = select_report_spec("Default", output_format)
|
|
630
630
|
|
|
631
631
|
return generate_output(
|
|
632
632
|
elements=elements,
|
|
@@ -639,7 +639,7 @@ class SolutionArchitect(Client2):
|
|
|
639
639
|
)
|
|
640
640
|
|
|
641
641
|
def generate_solution_components_output(self, elements: list | dict, search_string: str, element_type_name: str | None,
|
|
642
|
-
output_format: str = 'MD',
|
|
642
|
+
output_format: str = 'MD', report_spec: dict | str = None) -> str | list:
|
|
643
643
|
"""
|
|
644
644
|
Generate output for solution components in the specified format.
|
|
645
645
|
|
|
@@ -660,17 +660,17 @@ class SolutionArchitect(Client2):
|
|
|
660
660
|
return extract_mermaid_only(elements)
|
|
661
661
|
|
|
662
662
|
entity_type = "Solution Component"
|
|
663
|
-
if
|
|
664
|
-
if isinstance(
|
|
665
|
-
output_formats =
|
|
666
|
-
elif isinstance(
|
|
667
|
-
output_formats =
|
|
663
|
+
if report_spec:
|
|
664
|
+
if isinstance(report_spec, str):
|
|
665
|
+
output_formats = select_report_spec(report_spec, output_format)
|
|
666
|
+
elif isinstance(report_spec, dict):
|
|
667
|
+
output_formats = get_report_spec_match(report_spec, output_format)
|
|
668
668
|
else:
|
|
669
669
|
output_formats = None
|
|
670
670
|
else:
|
|
671
|
-
output_formats =
|
|
671
|
+
output_formats = select_report_spec("Solution Components", output_format)
|
|
672
672
|
if output_formats is None:
|
|
673
|
-
output_formats =
|
|
673
|
+
output_formats = select_report_spec("Default", output_format)
|
|
674
674
|
|
|
675
675
|
return generate_output(
|
|
676
676
|
elements=elements,
|
|
@@ -1604,7 +1604,7 @@ class SolutionArchitect(Client2):
|
|
|
1604
1604
|
starts_with: bool = True, ends_with: bool = False,
|
|
1605
1605
|
ignore_case: bool = False, start_from: int = 0,
|
|
1606
1606
|
page_size: int = 0, output_format: str = 'JSON',
|
|
1607
|
-
|
|
1607
|
+
report_spec: str = None,
|
|
1608
1608
|
body: dict| SearchStringRequestBody = None) -> (list[dict] | str):
|
|
1609
1609
|
""" Retrieve a list of all information supply chains
|
|
1610
1610
|
Parameters
|
|
@@ -1652,7 +1652,7 @@ class SolutionArchitect(Client2):
|
|
|
1652
1652
|
}
|
|
1653
1653
|
"""
|
|
1654
1654
|
|
|
1655
|
-
return self.find_information_supply_chains("*", classification_names, metadata_element_types, starts_with, ends_with, ignore_case, start_from, page_size, output_format,
|
|
1655
|
+
return self.find_information_supply_chains("*", classification_names, metadata_element_types, starts_with, ends_with, ignore_case, start_from, page_size, output_format, report_spec, body)
|
|
1656
1656
|
|
|
1657
1657
|
async def _async_find_information_supply_chains(self, search_string: str = "*", add_implementation: bool = True,
|
|
1658
1658
|
classification_names: list[str] = None,
|
|
@@ -1660,7 +1660,7 @@ class SolutionArchitect(Client2):
|
|
|
1660
1660
|
starts_with: bool = True, ends_with: bool = False,
|
|
1661
1661
|
ignore_case: bool = False, start_from: int = 0,
|
|
1662
1662
|
page_size: int = 0, output_format: str = 'JSON',
|
|
1663
|
-
|
|
1663
|
+
report_spec: str = None,
|
|
1664
1664
|
body: dict| SearchStringRequestBody = None) -> list[dict] | str:
|
|
1665
1665
|
"""Retrieve the list of information supply chain metadata elements that contain the search string.
|
|
1666
1666
|
https://egeria-project.org/concepts/information-supply-chain
|
|
@@ -1725,7 +1725,7 @@ class SolutionArchitect(Client2):
|
|
|
1725
1725
|
metadata_element_types=metadata_element_types,
|
|
1726
1726
|
starts_with=starts_with, ends_with=ends_with, ignore_case=ignore_case,
|
|
1727
1727
|
start_from=start_from, page_size=page_size,
|
|
1728
|
-
output_format=output_format,
|
|
1728
|
+
output_format=output_format, report_spec=report_spec,
|
|
1729
1729
|
body=body)
|
|
1730
1730
|
|
|
1731
1731
|
|
|
@@ -1736,7 +1736,7 @@ class SolutionArchitect(Client2):
|
|
|
1736
1736
|
starts_with: bool = True, ends_with: bool = False,
|
|
1737
1737
|
ignore_case: bool = False, start_from: int = 0,
|
|
1738
1738
|
page_size: int = 0, output_format: str = 'JSON',
|
|
1739
|
-
|
|
1739
|
+
report_spec: str = None,
|
|
1740
1740
|
body: dict| SearchStringRequestBody = None) -> list[dict] | str:
|
|
1741
1741
|
"""Retrieve the list of information supply chain metadata elements that contain the search string.
|
|
1742
1742
|
https://egeria-project.org/concepts/information-supply-chain
|
|
@@ -1803,7 +1803,7 @@ class SolutionArchitect(Client2):
|
|
|
1803
1803
|
self._async_find_information_supply_chains(search_string, add_implementation,classification_names, metadata_element_types,
|
|
1804
1804
|
starts_with, ends_with, ignore_case,
|
|
1805
1805
|
start_from, page_size, output_format,
|
|
1806
|
-
|
|
1806
|
+
report_spec, body))
|
|
1807
1807
|
return response
|
|
1808
1808
|
|
|
1809
1809
|
async def _async_get_info_supply_chain_by_name(self, search_filter: str, body: dict = None,
|
|
@@ -2947,7 +2947,7 @@ class SolutionArchitect(Client2):
|
|
|
2947
2947
|
starts_with: bool = True, ends_with: bool = False,
|
|
2948
2948
|
ignore_case: bool = False, start_from: int = 0,
|
|
2949
2949
|
page_size: int = 0, output_format: str = 'JSON',
|
|
2950
|
-
|
|
2950
|
+
report_spec: str = "Solution-Blueprint",
|
|
2951
2951
|
body: dict| SearchStringRequestBody = None) -> list[dict] | str:
|
|
2952
2952
|
"""Retrieve the solution blueprint elements that contain the search string.
|
|
2953
2953
|
https://egeria-project.org/concepts/solution-blueprint
|
|
@@ -3012,7 +3012,7 @@ class SolutionArchitect(Client2):
|
|
|
3012
3012
|
metadata_element_types=metadata_element_types,
|
|
3013
3013
|
starts_with=starts_with, ends_with=ends_with, ignore_case=ignore_case,
|
|
3014
3014
|
start_from=start_from, page_size=page_size,
|
|
3015
|
-
output_format=output_format,
|
|
3015
|
+
output_format=output_format, report_spec=report_spec,
|
|
3016
3016
|
body=body)
|
|
3017
3017
|
|
|
3018
3018
|
|
|
@@ -3021,7 +3021,7 @@ class SolutionArchitect(Client2):
|
|
|
3021
3021
|
starts_with: bool = True, ends_with: bool = False,
|
|
3022
3022
|
ignore_case: bool = False, start_from: int = 0,
|
|
3023
3023
|
page_size: int = 0, output_format: str = 'JSON',
|
|
3024
|
-
|
|
3024
|
+
report_spec: str = None,
|
|
3025
3025
|
body: dict| SearchStringRequestBody = None) -> list[dict] | str:
|
|
3026
3026
|
"""Retrieve the list of solution blueprint elements that contain the search string.
|
|
3027
3027
|
https://egeria-project.org/concepts/solution-blueprint
|
|
@@ -3084,7 +3084,7 @@ class SolutionArchitect(Client2):
|
|
|
3084
3084
|
response = loop.run_until_complete(
|
|
3085
3085
|
self._async_find_solution_blueprints(search_string, classification_names, metadata_element_types,
|
|
3086
3086
|
starts_with, ends_with, ignore_case, start_from,
|
|
3087
|
-
page_size, output_format,
|
|
3087
|
+
page_size, output_format, report_spec, body))
|
|
3088
3088
|
return response
|
|
3089
3089
|
|
|
3090
3090
|
def find_all_solution_blueprints(self, classification_names: list[str] = None,
|
|
@@ -3092,19 +3092,19 @@ class SolutionArchitect(Client2):
|
|
|
3092
3092
|
starts_with: bool = True, ends_with: bool = False,
|
|
3093
3093
|
ignore_case: bool = False, start_from: int = 0,
|
|
3094
3094
|
page_size: int = 0, output_format: str = 'JSON',
|
|
3095
|
-
|
|
3095
|
+
report_spec: str = None,
|
|
3096
3096
|
body: dict| SearchStringRequestBody = None) -> list[dict] | str:
|
|
3097
3097
|
"""Retrieve a list of all solution blueprint elements
|
|
3098
3098
|
https://egeria-project.org/concepts/solution-blueprint
|
|
3099
3099
|
"""
|
|
3100
3100
|
return self.find_solution_blueprints("*", classification_names, metadata_element_types,
|
|
3101
3101
|
starts_with, ends_with, ignore_case, start_from,
|
|
3102
|
-
page_size, output_format,
|
|
3102
|
+
page_size, output_format, report_spec, body)
|
|
3103
3103
|
|
|
3104
3104
|
|
|
3105
3105
|
async def _async_get_solution_blueprint_by_guid(self, guid: str, body: dict = None,
|
|
3106
3106
|
output_format: str = "JSON",
|
|
3107
|
-
|
|
3107
|
+
report_spec: str| Dict = "Solution-Blueprint") -> dict | str:
|
|
3108
3108
|
"""Return the properties of a specific solution blueprint. Async Version.
|
|
3109
3109
|
|
|
3110
3110
|
Parameters
|
|
@@ -3120,7 +3120,7 @@ class SolutionArchitect(Client2):
|
|
|
3120
3120
|
FORM - output markdown with a preamble for a form
|
|
3121
3121
|
REPORT - output markdown with a preamble for a report
|
|
3122
3122
|
MERMAID - output mermaid markdown
|
|
3123
|
-
|
|
3123
|
+
report_spec: str|Dict, optional
|
|
3124
3124
|
Structure of content to return.
|
|
3125
3125
|
|
|
3126
3126
|
Returns
|
|
@@ -3161,11 +3161,11 @@ class SolutionArchitect(Client2):
|
|
|
3161
3161
|
return NO_ELEMENTS_FOUND
|
|
3162
3162
|
if output_format != 'JSON': # return a simplified markdown representation
|
|
3163
3163
|
return self.generate_solution_blueprint_output(element, guid, "SolutionBlueprint",
|
|
3164
|
-
output_format,
|
|
3164
|
+
output_format, report_spec=report_spec)
|
|
3165
3165
|
return response.json().get("element", NO_ELEMENTS_FOUND)
|
|
3166
3166
|
|
|
3167
3167
|
def get_solution_blueprint_by_guid(self, guid: str, body: dict = None, output_format: str = "JSON",
|
|
3168
|
-
|
|
3168
|
+
report_spec: str| Dict = "Solution-Blueprint") -> dict | str:
|
|
3169
3169
|
""" Return the properties of a specific solution blueprint.
|
|
3170
3170
|
|
|
3171
3171
|
Parameters
|
|
@@ -3181,7 +3181,7 @@ class SolutionArchitect(Client2):
|
|
|
3181
3181
|
FORM - output markdown with a preamble for a form
|
|
3182
3182
|
REPORT - output markdown with a preamble for a report
|
|
3183
3183
|
MERMAID - output mermaid markdown
|
|
3184
|
-
|
|
3184
|
+
report_spec: str|Dict, optional
|
|
3185
3185
|
Structure of content to return.
|
|
3186
3186
|
|
|
3187
3187
|
Returns
|
|
@@ -3211,12 +3211,12 @@ class SolutionArchitect(Client2):
|
|
|
3211
3211
|
"""
|
|
3212
3212
|
loop = asyncio.get_event_loop()
|
|
3213
3213
|
response = loop.run_until_complete(self._async_get_solution_blueprint_by_guid(guid, body,
|
|
3214
|
-
output_format,
|
|
3214
|
+
output_format, report_spec))
|
|
3215
3215
|
return response
|
|
3216
3216
|
|
|
3217
3217
|
async def _async_get_solution_blueprints_by_name(self, search_filter: str, body: dict = None, start_from: int = 0,
|
|
3218
3218
|
page_size: int = max_paging_size,
|
|
3219
|
-
output_format: str = "JSON",
|
|
3219
|
+
output_format: str = "JSON", report_spec: str| Dict = "Solution-Blueprint") -> dict | str:
|
|
3220
3220
|
""" Returns the list of solution blueprints with a particular name. Async Version.
|
|
3221
3221
|
|
|
3222
3222
|
Parameters
|
|
@@ -3232,7 +3232,7 @@ class SolutionArchitect(Client2):
|
|
|
3232
3232
|
FORM - output markdown with a preamble for a form
|
|
3233
3233
|
REPORT - output markdown with a preamble for a report
|
|
3234
3234
|
MERMAID - output mermaid markdown
|
|
3235
|
-
|
|
3235
|
+
report_spec: str|Dict, optional
|
|
3236
3236
|
Structure of content to return.
|
|
3237
3237
|
|
|
3238
3238
|
Returns
|
|
@@ -3280,12 +3280,12 @@ class SolutionArchitect(Client2):
|
|
|
3280
3280
|
if element == NO_ELEMENTS_FOUND:
|
|
3281
3281
|
return NO_ELEMENTS_FOUND
|
|
3282
3282
|
if output_format != 'JSON': # return a simplified markdown representation
|
|
3283
|
-
return self.generate_solution_blueprint_output(element, search_filter, output_format,
|
|
3283
|
+
return self.generate_solution_blueprint_output(element, search_filter, output_format, report_spec=report_spec)
|
|
3284
3284
|
return response.json().get("elements", NO_ELEMENTS_FOUND)
|
|
3285
3285
|
|
|
3286
3286
|
def get_solution_blueprints_by_name(self, search_filter: str, body: dict = None, start_from: int = 0,
|
|
3287
3287
|
page_size: int = max_paging_size, output_format: str = "JSON",
|
|
3288
|
-
|
|
3288
|
+
report_spec: str| Dict = "Solution-Blueprint") -> dict | str:
|
|
3289
3289
|
""" Returns the list of solution blueprints with a particular name.
|
|
3290
3290
|
|
|
3291
3291
|
Parameters
|
|
@@ -3306,7 +3306,7 @@ class SolutionArchitect(Client2):
|
|
|
3306
3306
|
FORM - output markdown with a preamble for a form
|
|
3307
3307
|
REPORT - output markdown with a preamble for a report
|
|
3308
3308
|
MERMAID - output mermaid markdown
|
|
3309
|
-
|
|
3309
|
+
report_spec: str|Dict, optional
|
|
3310
3310
|
Structure of content to return.
|
|
3311
3311
|
|
|
3312
3312
|
Returns
|
|
@@ -3341,7 +3341,7 @@ class SolutionArchitect(Client2):
|
|
|
3341
3341
|
"""
|
|
3342
3342
|
loop = asyncio.get_event_loop()
|
|
3343
3343
|
response = loop.run_until_complete(
|
|
3344
|
-
self._async_get_solution_blueprints_by_name(search_filter, body, start_from, page_size, output_format,
|
|
3344
|
+
self._async_get_solution_blueprints_by_name(search_filter, body, start_from, page_size, output_format, report_spec))
|
|
3345
3345
|
return response
|
|
3346
3346
|
|
|
3347
3347
|
|
|
@@ -4268,7 +4268,7 @@ class SolutionArchitect(Client2):
|
|
|
4268
4268
|
starts_with: bool = True, ends_with: bool = False,
|
|
4269
4269
|
ignore_case: bool = False, start_from: int = 0,
|
|
4270
4270
|
page_size: int = 0, output_format: str = 'JSON',
|
|
4271
|
-
|
|
4271
|
+
report_spec: str = None,
|
|
4272
4272
|
body: dict| SearchStringRequestBody = None) -> list[dict] | str:
|
|
4273
4273
|
""" Retrieve the solution component elements that contain the search string. The solutions components returned
|
|
4274
4274
|
include information about consumers, actors, and other solution components that are associated with them.
|
|
@@ -4335,7 +4335,7 @@ class SolutionArchitect(Client2):
|
|
|
4335
4335
|
metadata_element_types=metadata_element_types,
|
|
4336
4336
|
starts_with=starts_with, ends_with=ends_with, ignore_case=ignore_case,
|
|
4337
4337
|
start_from=start_from, page_size=page_size,
|
|
4338
|
-
output_format=output_format,
|
|
4338
|
+
output_format=output_format, report_spec=report_spec,
|
|
4339
4339
|
body=body)
|
|
4340
4340
|
|
|
4341
4341
|
def find_solution_components(self, search_string: str = "*", classification_names: list[str] = None,
|
|
@@ -4343,7 +4343,7 @@ class SolutionArchitect(Client2):
|
|
|
4343
4343
|
starts_with: bool = True, ends_with: bool = False,
|
|
4344
4344
|
ignore_case: bool = False, start_from: int = 0,
|
|
4345
4345
|
page_size: int = 0, output_format: str = 'JSON',
|
|
4346
|
-
|
|
4346
|
+
report_spec: str = None,
|
|
4347
4347
|
body: dict| SearchStringRequestBody = None) -> list[dict] | str:
|
|
4348
4348
|
""" Retrieve the solution component elements that contain the search string. The solutions components returned
|
|
4349
4349
|
include information about consumers, actors, and other solution components that are associated with them.
|
|
@@ -4402,7 +4402,7 @@ class SolutionArchitect(Client2):
|
|
|
4402
4402
|
|
|
4403
4403
|
loop = asyncio.get_event_loop()
|
|
4404
4404
|
response = loop.run_until_complete(
|
|
4405
|
-
self._async_find_solution_components(search_string, classification_names, metadata_element_types, starts_with, ends_with, ignore_case, start_from, page_size, output_format,
|
|
4405
|
+
self._async_find_solution_components(search_string, classification_names, metadata_element_types, starts_with, ends_with, ignore_case, start_from, page_size, output_format, report_spec, body))
|
|
4406
4406
|
return response
|
|
4407
4407
|
|
|
4408
4408
|
def find_all_solution_components(self, classification_names: list[str] = None,
|
|
@@ -4410,12 +4410,12 @@ class SolutionArchitect(Client2):
|
|
|
4410
4410
|
starts_with: bool = True, ends_with: bool = False,
|
|
4411
4411
|
ignore_case: bool = False, start_from: int = 0,
|
|
4412
4412
|
page_size: int = 0, output_format: str = 'JSON',
|
|
4413
|
-
|
|
4413
|
+
report_spec: str = None,
|
|
4414
4414
|
body: dict| SearchStringRequestBody = None) -> list[dict] | str:
|
|
4415
4415
|
"""Retrieve a list of all solution component elements
|
|
4416
4416
|
https://egeria-project.org/concepts/solution-components
|
|
4417
4417
|
"""
|
|
4418
|
-
return self.find_solution_components("*", classification_names, metadata_element_types, starts_with, ends_with, ignore_case, start_from, page_size, output_format,
|
|
4418
|
+
return self.find_solution_components("*", classification_names, metadata_element_types, starts_with, ends_with, ignore_case, start_from, page_size, output_format, report_spec, body)
|
|
4419
4419
|
|
|
4420
4420
|
|
|
4421
4421
|
async def _async_get_solution_components_by_name(self, search_filter: str, body: dict = None, start_from: int = 0,
|
|
@@ -4543,7 +4543,7 @@ class SolutionArchitect(Client2):
|
|
|
4543
4543
|
return response
|
|
4544
4544
|
|
|
4545
4545
|
async def _async_get_solution_component_by_guid(self, guid: str, body: dict = None,
|
|
4546
|
-
output_format: str = "JSON",
|
|
4546
|
+
output_format: str = "JSON", report_spec: str = "Solution-Component-DrE") -> dict | str:
|
|
4547
4547
|
""" Return the properties of a specific solution component. Async Version.
|
|
4548
4548
|
|
|
4549
4549
|
Parameters
|
|
@@ -4559,7 +4559,7 @@ class SolutionArchitect(Client2):
|
|
|
4559
4559
|
FORM - output markdown with a preamble for a form
|
|
4560
4560
|
REPORT - output markdown with a preamble for a report
|
|
4561
4561
|
MERMAID - output mermaid markdown
|
|
4562
|
-
|
|
4562
|
+
report_spec: str, default = "Solution-Component-DrE"
|
|
4563
4563
|
Structure of output to produce:
|
|
4564
4564
|
|
|
4565
4565
|
Returns
|
|
@@ -4592,7 +4592,7 @@ class SolutionArchitect(Client2):
|
|
|
4592
4592
|
f"solution-components/{guid}/retrieve")
|
|
4593
4593
|
response = await self._async_get_guid_request(url, 'SolutionComponent',
|
|
4594
4594
|
self.generate_solution_components_output,
|
|
4595
|
-
output_format,
|
|
4595
|
+
output_format, report_spec, body)
|
|
4596
4596
|
return response
|
|
4597
4597
|
|
|
4598
4598
|
# if body is None:
|
|
@@ -5549,7 +5549,7 @@ class SolutionArchitect(Client2):
|
|
|
5549
5549
|
starts_with: bool = True, ends_with: bool = False,
|
|
5550
5550
|
ignore_case: bool = False, start_from: int = 0,
|
|
5551
5551
|
page_size: int = 0, output_format: str = 'JSON',
|
|
5552
|
-
|
|
5552
|
+
report_spec: str = None,
|
|
5553
5553
|
body: dict| SearchStringRequestBody = None) -> list[dict] | str:
|
|
5554
5554
|
"""Retrieve the solution role elements that contain the search string.
|
|
5555
5555
|
https://egeria-project.org/concepts/actor
|
|
@@ -5616,7 +5616,7 @@ class SolutionArchitect(Client2):
|
|
|
5616
5616
|
metadata_element_types=metadata_element_types,
|
|
5617
5617
|
starts_with=starts_with, ends_with=ends_with, ignore_case=ignore_case,
|
|
5618
5618
|
start_from=start_from, page_size=page_size,
|
|
5619
|
-
output_format=output_format,
|
|
5619
|
+
output_format=output_format, report_spec=report_spec,
|
|
5620
5620
|
body=body)
|
|
5621
5621
|
|
|
5622
5622
|
def find_solution_roles(self, search_string: str = "*", classification_names: list[str] = None,
|
|
@@ -5624,7 +5624,7 @@ class SolutionArchitect(Client2):
|
|
|
5624
5624
|
starts_with: bool = True, ends_with: bool = False,
|
|
5625
5625
|
ignore_case: bool = False, start_from: int = 0,
|
|
5626
5626
|
page_size: int = 0, output_format: str = 'JSON',
|
|
5627
|
-
|
|
5627
|
+
report_spec: str = None,
|
|
5628
5628
|
body: dict| SearchStringRequestBody = None) -> list[dict] | str:
|
|
5629
5629
|
"""Retrieve the list of solution role elements that contain the search string.
|
|
5630
5630
|
https://egeria-project.org/concepts/actor
|
|
@@ -5689,7 +5689,7 @@ class SolutionArchitect(Client2):
|
|
|
5689
5689
|
|
|
5690
5690
|
loop = asyncio.get_event_loop()
|
|
5691
5691
|
response = loop.run_until_complete(
|
|
5692
|
-
self._async_find_solution_roles(search_string, classification_names, metadata_element_types, starts_with, ends_with, ignore_case, start_from, page_size, output_format,
|
|
5692
|
+
self._async_find_solution_roles(search_string, classification_names, metadata_element_types, starts_with, ends_with, ignore_case, start_from, page_size, output_format, report_spec, body))
|
|
5693
5693
|
return response
|
|
5694
5694
|
|
|
5695
5695
|
def find_all_solution_roles(self, classification_names: list[str] = None,
|
|
@@ -5697,12 +5697,12 @@ class SolutionArchitect(Client2):
|
|
|
5697
5697
|
starts_with: bool = True, ends_with: bool = False,
|
|
5698
5698
|
ignore_case: bool = False, start_from: int = 0,
|
|
5699
5699
|
page_size: int = 0, output_format: str = 'JSON',
|
|
5700
|
-
|
|
5700
|
+
report_spec: str = None,
|
|
5701
5701
|
body: dict| SearchStringRequestBody = None) -> list[dict] | str:
|
|
5702
5702
|
"""Retrieve a list of all solution blueprint elements
|
|
5703
5703
|
https://egeria-project.org/concepts/actor
|
|
5704
5704
|
"""
|
|
5705
|
-
return self.find_solution_roles("*", classification_names, metadata_element_types, starts_with, ends_with, ignore_case, start_from, page_size, output_format,
|
|
5705
|
+
return self.find_solution_roles("*", classification_names, metadata_element_types, starts_with, ends_with, ignore_case, start_from, page_size, output_format, report_spec, body)
|
|
5706
5706
|
|
|
5707
5707
|
|
|
5708
5708
|
async def _async_get_solution_roles_by_name(self, search_filter: str, body: dict = None, start_from: int = 0,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyegeria
|
|
3
|
-
Version: 5.4.
|
|
3
|
+
Version: 5.4.8
|
|
4
4
|
Summary: A python client for Egeria
|
|
5
5
|
Author-email: Dan Wolfson <dan.wolfson@pdr-associates.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -19,7 +19,7 @@ Requires-Dist: jupyter
|
|
|
19
19
|
Requires-Dist: click
|
|
20
20
|
Requires-Dist: trogon
|
|
21
21
|
Requires-Dist: mermaid-py
|
|
22
|
-
Requires-Dist: psycopg2-binary
|
|
22
|
+
Requires-Dist: psycopg2-binary>=2.9.11
|
|
23
23
|
Requires-Dist: jupyter-notebook-parser
|
|
24
24
|
Requires-Dist: loguru
|
|
25
25
|
Requires-Dist: inflect
|
|
@@ -30,6 +30,9 @@ Requires-Dist: wcwidth
|
|
|
30
30
|
Requires-Dist: altair
|
|
31
31
|
Requires-Dist: modelcontextprotocol
|
|
32
32
|
Requires-Dist: mcp>=1.15.0
|
|
33
|
+
Requires-Dist: markers>=0.3.0
|
|
34
|
+
Provides-Extra: test
|
|
35
|
+
Requires-Dist: pytest; extra == "test"
|
|
33
36
|
Dynamic: license-file
|
|
34
37
|
|
|
35
38
|
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
|
@@ -57,6 +60,9 @@ to visualize and use Egeria. The commands also serve as useful examples.
|
|
|
57
60
|
|
|
58
61
|
An examples folder holds some useful examples showing different facets of using pyegeria.
|
|
59
62
|
|
|
63
|
+
For detailed guidance on report formats (selection, dynamic loading, runtime registration, and migration from columns→attributes), see:
|
|
64
|
+
- examples/doc_samples/report_formats.md
|
|
65
|
+
|
|
60
66
|
WARNING: files that start with "X" are in-progress placeholders that are not meant to be used..they will mature and
|
|
61
67
|
evolve.
|
|
62
68
|
|
|
@@ -142,10 +148,34 @@ print(cfg.Logging.enable_logging)
|
|
|
142
148
|
python scripts/validate_env.py --env config/env
|
|
143
149
|
python scripts/validate_env.py # auto-detects ./config/env or ./.env
|
|
144
150
|
|
|
145
|
-
|
|
151
|
+
### Testing
|
|
152
|
+
|
|
153
|
+
By default, running pytest executes unit tests that use monkeypatching/fakes and do not contact a live Egeria.
|
|
154
|
+
|
|
155
|
+
- Run unit tests (recommended default):
|
|
146
156
|
poetry install
|
|
147
157
|
poetry run pytest -v
|
|
148
158
|
|
|
159
|
+
You can also run tests live against a local Egeria instance. Enable live mode with either a CLI flag or an environment variable. In live mode, tests marked as `unit` are skipped and live tests run using a real Client2 connection.
|
|
160
|
+
|
|
161
|
+
- Enable live mode via CLI:
|
|
162
|
+
poetry run pytest -q --live-egeria
|
|
163
|
+
|
|
164
|
+
- Or enable via environment variable:
|
|
165
|
+
PYEG_LIVE_EGERIA=1 poetry run pytest -q
|
|
166
|
+
|
|
167
|
+
Default live connection parameters (can be overridden via env):
|
|
168
|
+
- server_name = "qs-view-server" (override with PYEG_SERVER_NAME)
|
|
169
|
+
- platform_url = "https://localhost:9443" (override with PYEG_PLATFORM_URL)
|
|
170
|
+
- user_id = "peterprofile" (override with PYEG_USER_ID)
|
|
171
|
+
- user_pwd = "secret" (override with PYEG_USER_PWD)
|
|
172
|
+
|
|
173
|
+
Notes:
|
|
174
|
+
- SSL verification is controlled by pyegeria._globals.enable_ssl_check, which defaults to False in this repo to support localhost/self-signed certs.
|
|
175
|
+
- See tests/conftest.py for the live test fixtures and switches.
|
|
176
|
+
|
|
177
|
+
### Troubleshooting
|
|
178
|
+
|
|
149
179
|
### Troubleshooting
|
|
150
180
|
|
|
151
181
|
- If your env doesn’t seem to apply, confirm which config.json is used (the loader checks PYEGERIA_CONFIG_DIRECTORY first, then PYEGERIA_ROOT_PATH, then ./config.json).
|