pyegeria 5.3.9.9.3__py3-none-any.whl → 5.5.3.3__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.
Potentially problematic release.
This version of pyegeria might be problematic. Click here for more details.
- commands/__init__.py +24 -0
- commands/cat/Dr-Egeria_md-orig.py +2 -2
- commands/cat/__init__.py +1 -17
- commands/cat/collection_actions.py +197 -0
- commands/cat/dr_egeria_command_help.py +372 -0
- commands/cat/dr_egeria_jupyter.py +7 -7
- commands/cat/dr_egeria_md.py +27 -182
- commands/cat/exp_list_glossaries.py +11 -14
- commands/cat/get_asset_graph.py +37 -267
- commands/cat/{get_collection.py → get_collection_tree.py} +10 -18
- commands/cat/get_project_dependencies.py +14 -14
- commands/cat/get_project_structure.py +15 -14
- commands/cat/get_tech_type_elements.py +16 -116
- commands/cat/glossary_actions.py +145 -298
- commands/cat/list_assets.py +3 -11
- commands/cat/list_cert_types.py +17 -63
- commands/cat/list_collections.py +46 -138
- commands/cat/list_deployed_catalogs.py +15 -27
- commands/cat/list_deployed_database_schemas.py +27 -43
- commands/cat/list_deployed_databases.py +16 -31
- commands/cat/list_deployed_servers.py +35 -54
- commands/cat/list_glossaries.py +18 -17
- commands/cat/list_projects.py +10 -12
- commands/cat/list_tech_type_elements.py +21 -37
- commands/cat/list_tech_types.py +13 -25
- commands/cat/list_terms.py +38 -79
- commands/cat/list_todos.py +4 -11
- commands/cat/list_user_ids.py +3 -10
- commands/cat/my_reports.py +559 -0
- commands/cat/run_report.py +394 -0
- commands/cat/run_report_orig.py +528 -0
- commands/cli/egeria.py +222 -247
- commands/cli/egeria_cat.py +68 -81
- commands/cli/egeria_my.py +13 -0
- commands/cli/egeria_ops.py +69 -74
- commands/cli/egeria_tech.py +17 -93
- commands/cli/ops_config.py +3 -6
- commands/{cat/list_categories.py → deprecated/list_data_designer.py} +53 -64
- commands/{cat/list_data_structures.py → deprecated/list_data_structures_full.py} +3 -6
- commands/deprecated/old_get_asset_graph.py +315 -0
- commands/my/__init__.py +0 -2
- commands/my/list_my_profile.py +27 -34
- commands/my/list_my_roles.py +1 -7
- commands/my/monitor_my_todos.py +1 -7
- commands/my/monitor_open_todos.py +6 -7
- commands/my/todo_actions.py +4 -5
- commands/ops/__init__.py +0 -2
- commands/ops/gov_server_actions.py +17 -21
- commands/ops/list_archives.py +17 -38
- commands/ops/list_catalog_targets.py +33 -40
- commands/ops/load_archive.py +35 -26
- commands/ops/{monitor_engine_activity_c.py → monitor_active_engine_activity.py} +51 -82
- commands/ops/{monitor_integ_daemon_status.py → monitor_daemon_status.py} +35 -55
- commands/ops/monitor_engine_activity.py +79 -77
- commands/ops/{monitor_gov_eng_status.py → monitor_engine_status.py} +10 -7
- commands/ops/monitor_platform_status.py +38 -50
- commands/ops/monitor_server_startup.py +6 -11
- commands/ops/monitor_server_status.py +7 -11
- commands/ops/orig_monitor_server_list.py +8 -8
- commands/ops/orig_monitor_server_status.py +1 -5
- commands/ops/refresh_integration_daemon.py +5 -5
- commands/ops/restart_integration_daemon.py +5 -5
- commands/ops/table_integ_daemon_status.py +6 -6
- commands/ops/x_engine_actions.py +7 -7
- commands/tech/__init__.py +0 -2
- commands/tech/{generic_actions.py → element_actions.py} +6 -11
- commands/tech/get_element_info.py +20 -29
- commands/tech/get_guid_info.py +23 -42
- commands/tech/get_tech_details.py +20 -35
- commands/tech/get_tech_type_template.py +28 -39
- commands/tech/list_all_om_type_elements.py +24 -30
- commands/tech/list_all_om_type_elements_x.py +22 -28
- commands/tech/list_all_related_elements.py +19 -28
- commands/tech/list_anchored_elements.py +22 -30
- commands/tech/list_asset_types.py +19 -24
- commands/tech/list_elements_by_classification_by_property_value.py +26 -32
- commands/tech/list_elements_by_property_value.py +19 -25
- commands/tech/list_elements_by_property_value_x.py +20 -28
- commands/tech/list_elements_for_classification.py +28 -41
- commands/tech/list_gov_action_processes.py +16 -27
- commands/tech/list_information_supply_chains.py +22 -30
- commands/tech/list_registered_services.py +14 -26
- commands/tech/list_related_elements_with_prop_value.py +15 -25
- commands/tech/list_related_specification.py +1 -4
- commands/tech/list_relationship_types.py +15 -25
- commands/tech/list_relationships.py +20 -36
- commands/tech/list_solution_blueprints.py +28 -33
- commands/tech/list_solution_components.py +23 -29
- commands/tech/list_solution_roles.py +21 -32
- commands/tech/list_tech_templates.py +51 -54
- commands/tech/list_valid_metadata_values.py +5 -9
- commands/tech/table_tech_templates.py +2 -6
- commands/tech/x_list_related_elements.py +1 -4
- examples/GeoSpatial Products Example.py +524 -0
- examples/Jupyter Notebooks/P-egeria-server-config.ipynb +2137 -0
- examples/Jupyter Notebooks/README.md +2 -0
- examples/Jupyter Notebooks/common/P-environment-check.ipynb +115 -0
- examples/Jupyter Notebooks/common/__init__.py +14 -0
- examples/Jupyter Notebooks/common/common-functions.ipynb +4694 -0
- examples/Jupyter Notebooks/common/environment-check.ipynb +52 -0
- examples/Jupyter Notebooks/common/globals.ipynb +184 -0
- examples/Jupyter Notebooks/common/globals.py +154 -0
- examples/Jupyter Notebooks/common/orig_globals.py +152 -0
- examples/format_sets/all_format_sets.json +910 -0
- examples/format_sets/custom_format_sets.json +268 -0
- examples/format_sets/subset_format_sets.json +187 -0
- examples/format_sets_save_load_example.py +291 -0
- examples/jacquard_data_sets.py +129 -0
- examples/output_formats_example.py +193 -0
- examples/test_jacquard_data_sets.py +54 -0
- examples/test_jacquard_data_sets_scenarios.py +94 -0
- md_processing/__init__.py +90 -0
- md_processing/command_dispatcher.py +33 -0
- md_processing/command_mapping.py +221 -0
- md_processing/data/commands/commands_data_designer.json +537 -0
- md_processing/data/commands/commands_external_reference.json +733 -0
- md_processing/data/commands/commands_feedback.json +155 -0
- md_processing/data/commands/commands_general.json +204 -0
- md_processing/data/commands/commands_glossary.json +218 -0
- md_processing/data/commands/commands_governance.json +3678 -0
- md_processing/data/commands/commands_product_manager.json +865 -0
- md_processing/data/commands/commands_project.json +642 -0
- md_processing/data/commands/commands_solution_architect.json +366 -0
- md_processing/data/commands.json +17568 -0
- md_processing/data/commands_working.json +30641 -0
- md_processing/data/gened_report_specs.py +6584 -0
- md_processing/data/generated_format_sets.json +6533 -0
- md_processing/data/generated_format_sets_old.json +4137 -0
- md_processing/data/generated_format_sets_old.py +45 -0
- md_processing/dr_egeria.py +182 -0
- md_processing/md_commands/__init__.py +3 -0
- md_processing/md_commands/data_designer_commands.py +1276 -0
- md_processing/md_commands/ext_ref_commands.py +530 -0
- md_processing/md_commands/feedback_commands.py +726 -0
- md_processing/md_commands/glossary_commands.py +684 -0
- md_processing/md_commands/governance_officer_commands.py +600 -0
- md_processing/md_commands/product_manager_commands.py +1266 -0
- md_processing/md_commands/project_commands.py +383 -0
- md_processing/md_commands/solution_architect_commands.py +1184 -0
- md_processing/md_commands/view_commands.py +295 -0
- md_processing/md_processing_utils/__init__.py +4 -0
- md_processing/md_processing_utils/common_md_proc_utils.py +1249 -0
- md_processing/md_processing_utils/common_md_utils.py +578 -0
- md_processing/md_processing_utils/determine_width.py +103 -0
- md_processing/md_processing_utils/extraction_utils.py +547 -0
- md_processing/md_processing_utils/gen_report_specs.py +643 -0
- md_processing/md_processing_utils/generate_dr_help.py +193 -0
- md_processing/md_processing_utils/generate_md_cmd_templates.py +144 -0
- md_processing/md_processing_utils/generate_md_templates.py +83 -0
- md_processing/md_processing_utils/md_processing_constants.py +1228 -0
- md_processing/md_processing_utils/message_constants.py +19 -0
- pyegeria/__init__.py +201 -443
- pyegeria/core/__init__.py +40 -0
- pyegeria/core/_base_platform_client.py +574 -0
- pyegeria/core/_base_server_client.py +573 -0
- pyegeria/core/_exceptions.py +457 -0
- pyegeria/core/_globals.py +60 -0
- pyegeria/core/_server_client.py +6073 -0
- pyegeria/core/_validators.py +257 -0
- pyegeria/core/config.py +654 -0
- pyegeria/{create_tech_guid_lists.py → core/create_tech_guid_lists.py} +0 -1
- pyegeria/core/load_config.py +37 -0
- pyegeria/core/logging_configuration.py +207 -0
- pyegeria/core/mcp_adapter.py +144 -0
- pyegeria/core/mcp_server.py +212 -0
- pyegeria/core/utils.py +405 -0
- pyegeria/deprecated/__init__.py +0 -0
- pyegeria/{_client.py → deprecated/_client.py} +62 -24
- pyegeria/{_deprecated_gov_engine.py → deprecated/_deprecated_gov_engine.py} +16 -16
- pyegeria/{classification_manager_omvs.py → deprecated/classification_manager_omvs.py} +1988 -1878
- pyegeria/deprecated/output_formatter_with_machine_keys.py +1127 -0
- pyegeria/{runtime_manager_omvs.py → deprecated/runtime_manager_omvs.py} +216 -229
- pyegeria/{valid_metadata_omvs.py → deprecated/valid_metadata_omvs.py} +93 -93
- pyegeria/{x_action_author_omvs.py → deprecated/x_action_author_omvs.py} +2 -3
- pyegeria/egeria_cat_client.py +25 -51
- pyegeria/egeria_client.py +140 -98
- pyegeria/egeria_config_client.py +48 -24
- pyegeria/egeria_tech_client.py +170 -83
- pyegeria/models/__init__.py +150 -0
- pyegeria/models/collection_models.py +168 -0
- pyegeria/models/models.py +654 -0
- pyegeria/omvs/__init__.py +84 -0
- pyegeria/omvs/action_author.py +342 -0
- pyegeria/omvs/actor_manager.py +5980 -0
- pyegeria/omvs/asset_catalog.py +842 -0
- pyegeria/omvs/asset_maker.py +2736 -0
- pyegeria/omvs/automated_curation.py +4403 -0
- pyegeria/omvs/classification_manager.py +11213 -0
- pyegeria/omvs/collection_manager.py +5780 -0
- pyegeria/omvs/community_matters_omvs.py +468 -0
- pyegeria/{core_omag_server_config.py → omvs/core_omag_server_config.py} +157 -157
- pyegeria/{data_designer_omvs.py → omvs/data_designer.py} +1991 -1691
- pyegeria/omvs/data_discovery.py +869 -0
- pyegeria/omvs/data_engineer.py +372 -0
- pyegeria/omvs/digital_business.py +1133 -0
- pyegeria/omvs/external_links.py +1752 -0
- pyegeria/omvs/feedback_manager.py +834 -0
- pyegeria/{full_omag_server_config.py → omvs/full_omag_server_config.py} +73 -69
- pyegeria/omvs/glossary_manager.py +3231 -0
- pyegeria/omvs/governance_officer.py +3009 -0
- pyegeria/omvs/lineage_linker.py +314 -0
- pyegeria/omvs/location_arena.py +1525 -0
- pyegeria/omvs/metadata_expert.py +668 -0
- pyegeria/omvs/metadata_explorer_omvs.py +2943 -0
- pyegeria/omvs/my_profile.py +1042 -0
- pyegeria/omvs/notification_manager.py +358 -0
- pyegeria/omvs/people_organizer.py +394 -0
- pyegeria/{platform_services.py → omvs/platform_services.py} +113 -193
- pyegeria/omvs/product_manager.py +1825 -0
- pyegeria/omvs/project_manager.py +1907 -0
- pyegeria/omvs/reference_data.py +1140 -0
- pyegeria/omvs/registered_info.py +334 -0
- pyegeria/omvs/runtime_manager.py +2817 -0
- pyegeria/omvs/schema_maker.py +446 -0
- pyegeria/{server_operations.py → omvs/server_operations.py} +27 -26
- pyegeria/omvs/solution_architect.py +6490 -0
- pyegeria/omvs/specification_properties.py +37 -0
- pyegeria/omvs/subject_area.py +1042 -0
- pyegeria/omvs/template_manager_omvs.py +236 -0
- pyegeria/omvs/time_keeper.py +1761 -0
- pyegeria/omvs/valid_metadata.py +3221 -0
- pyegeria/omvs/valid_metadata_lists.py +37 -0
- pyegeria/omvs/valid_type_lists.py +37 -0
- pyegeria/view/__init__.py +28 -0
- pyegeria/view/_output_format_models.py +514 -0
- pyegeria/view/_output_formats.py +14 -0
- pyegeria/view/base_report_formats.py +2719 -0
- pyegeria/view/dr_egeria_reports.py +56 -0
- pyegeria/view/format_set_executor.py +397 -0
- pyegeria/{md_processing_utils.py → view/md_processing_utils.py} +5 -5
- pyegeria/{mermaid_utilities.py → view/mermaid_utilities.py} +2 -154
- pyegeria/view/output_formatter.py +1297 -0
- pyegeria-5.5.3.3.dist-info/METADATA +218 -0
- pyegeria-5.5.3.3.dist-info/RECORD +241 -0
- {pyegeria-5.3.9.9.3.dist-info → pyegeria-5.5.3.3.dist-info}/WHEEL +2 -1
- pyegeria-5.5.3.3.dist-info/entry_points.txt +103 -0
- pyegeria-5.5.3.3.dist-info/top_level.txt +4 -0
- commands/cat/.DS_Store +0 -0
- commands/cat/README.md +0 -16
- commands/cli/txt_custom_v2.tcss +0 -19
- commands/my/README.md +0 -17
- commands/ops/README.md +0 -24
- commands/ops/monitor_asset_events.py +0 -108
- commands/tech/README.md +0 -24
- pyegeria/.DS_Store +0 -0
- pyegeria/README.md +0 -35
- pyegeria/_globals.py +0 -47
- pyegeria/_validators.py +0 -385
- pyegeria/asset_catalog_omvs.py +0 -864
- pyegeria/automated_curation_omvs.py +0 -3765
- pyegeria/collection_manager_omvs.py +0 -2744
- pyegeria/dr.egeria spec.md +0 -9
- pyegeria/egeria_my_client.py +0 -56
- pyegeria/feedback_manager_omvs.py +0 -4573
- pyegeria/glossary_browser_omvs.py +0 -3728
- pyegeria/glossary_manager_omvs.py +0 -2440
- pyegeria/m_test.py +0 -118
- pyegeria/md_processing_helpers.py +0 -58
- pyegeria/md_processing_utils_orig.py +0 -1103
- pyegeria/metadata_explorer_omvs.py +0 -2326
- pyegeria/my_profile_omvs.py +0 -1022
- pyegeria/output_formatter.py +0 -389
- pyegeria/project_manager_omvs.py +0 -1933
- pyegeria/registered_info.py +0 -167
- pyegeria/solution_architect_omvs.py +0 -2156
- pyegeria/template_manager_omvs.py +0 -1414
- pyegeria/utils.py +0 -197
- pyegeria-5.3.9.9.3.dist-info/METADATA +0 -72
- pyegeria-5.3.9.9.3.dist-info/RECORD +0 -143
- pyegeria-5.3.9.9.3.dist-info/entry_points.txt +0 -99
- /pyegeria/{_exceptions.py → deprecated/_exceptions.py} +0 -0
- {pyegeria-5.3.9.9.3.dist-info → pyegeria-5.5.3.3.dist-info/licenses}/LICENSE +0 -0
pyegeria/output_formatter.py
DELETED
|
@@ -1,389 +0,0 @@
|
|
|
1
|
-
from datetime import datetime
|
|
2
|
-
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
|
|
3
|
-
from rich.console import Console
|
|
4
|
-
|
|
5
|
-
console = Console(width= 250)
|
|
6
|
-
# Constants
|
|
7
|
-
MD_SEPARATOR = "\n---\n\n"
|
|
8
|
-
|
|
9
|
-
def make_preamble(obj_type: str, search_string: str, output_format: str = 'MD') -> Tuple[str, Optional[str]]:
|
|
10
|
-
"""
|
|
11
|
-
Creates a preamble string and an elements action based on the given object type, search string,
|
|
12
|
-
and output format.
|
|
13
|
-
|
|
14
|
-
Args:
|
|
15
|
-
obj_type: The type of object being updated or reported on (e.g., "Product", "Category").
|
|
16
|
-
search_string: The search string used to filter objects. Defaults to "All Elements" if None.
|
|
17
|
-
output_format: A format identifier determining the output structure.
|
|
18
|
-
JSON - output standard json
|
|
19
|
-
MD - output standard markdown with no preamble
|
|
20
|
-
FORM - output markdown with a preamble for a form
|
|
21
|
-
REPORT - output markdown with a preamble for a report
|
|
22
|
-
|
|
23
|
-
Returns:
|
|
24
|
-
tuple: A tuple containing:
|
|
25
|
-
- A string representing the formatted update or report preamble.
|
|
26
|
-
- A string or None indicating the action description for the elements,
|
|
27
|
-
depending on the output format.
|
|
28
|
-
"""
|
|
29
|
-
search_string = search_string if search_string else "All Elements"
|
|
30
|
-
elements_action = "Update " + obj_type
|
|
31
|
-
if output_format == "FORM":
|
|
32
|
-
preamble = (f"\n# Update {obj_type} Form - created at {datetime.now().strftime('%Y-%m-%d %H:%M')}\n"
|
|
33
|
-
f"\t {obj_type} found from the search string: `{search_string}`\n\n")
|
|
34
|
-
return preamble, elements_action
|
|
35
|
-
elif output_format == "REPORT":
|
|
36
|
-
elements_md = (f"# {obj_type} Report - created at {datetime.now().strftime('%Y-%m-%d %H:%M')}\n"
|
|
37
|
-
f"\t{obj_type} found from the search string: `{search_string}`\n\n")
|
|
38
|
-
elements_action = None
|
|
39
|
-
return elements_md, elements_action
|
|
40
|
-
else:
|
|
41
|
-
return "\n", elements_action
|
|
42
|
-
|
|
43
|
-
def make_md_attribute(attribute_name: str, attribute_value: str, output_type: str) -> Optional[str]:
|
|
44
|
-
"""
|
|
45
|
-
Create a markdown attribute line for a given attribute name and value.
|
|
46
|
-
|
|
47
|
-
Args:
|
|
48
|
-
attribute_name: The name of the attribute
|
|
49
|
-
attribute_value: The value of the attribute
|
|
50
|
-
output_type: The output format (FORM, MD, REPORT)
|
|
51
|
-
|
|
52
|
-
Returns:
|
|
53
|
-
str: Formatted markdown for the attribute
|
|
54
|
-
"""
|
|
55
|
-
output = ""
|
|
56
|
-
attribute_value = attribute_value.strip() if attribute_value else ""
|
|
57
|
-
attribute_title = attribute_name.title() if attribute_name else ""
|
|
58
|
-
if output_type in ["FORM", "MD"]:
|
|
59
|
-
output = f"## {attribute_title}\n{attribute_value}\n\n"
|
|
60
|
-
elif output_type == "REPORT":
|
|
61
|
-
if attribute_value:
|
|
62
|
-
output = f"## {attribute_title}\n{attribute_value}\n\n"
|
|
63
|
-
return output
|
|
64
|
-
|
|
65
|
-
def format_for_markdown_table(text: str) -> str:
|
|
66
|
-
"""
|
|
67
|
-
Format text for markdown tables by replacing newlines with spaces and escaping pipe characters.
|
|
68
|
-
No truncation is applied to allow full-length text display regardless of console width.
|
|
69
|
-
|
|
70
|
-
Args:
|
|
71
|
-
text (str): The text to format
|
|
72
|
-
|
|
73
|
-
Returns:
|
|
74
|
-
str: Formatted text safe for markdown tables
|
|
75
|
-
"""
|
|
76
|
-
if not text:
|
|
77
|
-
return ""
|
|
78
|
-
# Replace newlines with spaces and escape pipe characters
|
|
79
|
-
return text.replace("\n", " ").replace("|", "\\|")
|
|
80
|
-
|
|
81
|
-
def generate_entity_md(elements: List[Dict],
|
|
82
|
-
elements_action: str,
|
|
83
|
-
output_format: str,
|
|
84
|
-
entity_type: str,
|
|
85
|
-
extract_properties_func: Callable,
|
|
86
|
-
get_additional_props_func: Optional[Callable] = None) -> str:
|
|
87
|
-
"""
|
|
88
|
-
Generic method to generate markdown for entities.
|
|
89
|
-
|
|
90
|
-
Args:
|
|
91
|
-
elements (list): List of entity elements
|
|
92
|
-
elements_action (str): Action description for elements
|
|
93
|
-
output_format (str): Output format
|
|
94
|
-
entity_type (str): Type of entity (Glossary, Term, Category, etc.)
|
|
95
|
-
extract_properties_func: Function to extract properties from an element
|
|
96
|
-
get_additional_props_func: Optional function to get additional properties
|
|
97
|
-
|
|
98
|
-
Returns:
|
|
99
|
-
str: Markdown representation
|
|
100
|
-
"""
|
|
101
|
-
elements_md = ""
|
|
102
|
-
|
|
103
|
-
for element in elements:
|
|
104
|
-
props = extract_properties_func(element)
|
|
105
|
-
|
|
106
|
-
# Get additional properties if function is provided
|
|
107
|
-
additional_props = {}
|
|
108
|
-
if get_additional_props_func:
|
|
109
|
-
additional_props = get_additional_props_func(element, props['guid'], output_format)
|
|
110
|
-
|
|
111
|
-
# Format header based on output format
|
|
112
|
-
if output_format in ['FORM', 'MD']:
|
|
113
|
-
elements_md += f"# {elements_action}\n\n"
|
|
114
|
-
elements_md += f"## {entity_type} Name \n\n{props['display_name']}\n\n"
|
|
115
|
-
elif output_format == 'REPORT':
|
|
116
|
-
elements_md += f"# {entity_type} Name: {props['display_name']}\n\n"
|
|
117
|
-
else:
|
|
118
|
-
elements_md += f"## {entity_type} Name \n\n{props['display_name']}\n\n"
|
|
119
|
-
|
|
120
|
-
# Add common attributes
|
|
121
|
-
for key, value in props.items():
|
|
122
|
-
if key not in ['guid', 'properties', 'display_name']:
|
|
123
|
-
elements_md += make_md_attribute(key.replace('_', ' '), value, output_format)
|
|
124
|
-
|
|
125
|
-
# Add additional properties
|
|
126
|
-
for key, value in additional_props.items():
|
|
127
|
-
elements_md += make_md_attribute(key.replace('_', ' '), value, output_format)
|
|
128
|
-
|
|
129
|
-
# Add GUID
|
|
130
|
-
elements_md += make_md_attribute("GUID", props['guid'], output_format)
|
|
131
|
-
|
|
132
|
-
# Add separator if not the last element
|
|
133
|
-
if element != elements[-1]:
|
|
134
|
-
elements_md += MD_SEPARATOR
|
|
135
|
-
|
|
136
|
-
return elements_md
|
|
137
|
-
|
|
138
|
-
def generate_entity_md_table(elements: List[Dict],
|
|
139
|
-
search_string: str,
|
|
140
|
-
entity_type: str,
|
|
141
|
-
extract_properties_func: Callable,
|
|
142
|
-
columns: List[Dict],
|
|
143
|
-
get_additional_props_func: Optional[Callable] = None,
|
|
144
|
-
output_format: str = 'LIST') -> str:
|
|
145
|
-
"""
|
|
146
|
-
Generic method to generate a markdown table for entities.
|
|
147
|
-
|
|
148
|
-
Args:
|
|
149
|
-
elements (list): List of entity elements
|
|
150
|
-
search_string (str): The search string used
|
|
151
|
-
entity_type (str): Type of entity (Glossary, Term, Category, etc.)
|
|
152
|
-
extract_properties_func: Function to extract properties from an element
|
|
153
|
-
columns: List of column definitions, each containing 'name', 'key', and 'format' (optional)
|
|
154
|
-
get_additional_props_func: Optional function to get additional properties
|
|
155
|
-
output_format (str): Output format (FORM, REPORT, LIST, etc.)
|
|
156
|
-
|
|
157
|
-
Returns:
|
|
158
|
-
str: Markdown table
|
|
159
|
-
"""
|
|
160
|
-
# Handle pluralization - if entity_type ends with 'y', use 'ies' instead of 's'
|
|
161
|
-
entity_type_plural = f"{entity_type[:-1]}ies" if entity_type.endswith('y') else f"{entity_type}s"
|
|
162
|
-
|
|
163
|
-
elements_md = f"# {entity_type_plural} Table\n\n"
|
|
164
|
-
elements_md += f"{entity_type_plural} found from the search string: `{search_string}`\n\n"
|
|
165
|
-
|
|
166
|
-
# Add column headers
|
|
167
|
-
header_row = "| "
|
|
168
|
-
separator_row = "|"
|
|
169
|
-
for column in columns:
|
|
170
|
-
header_row += f"{column['name']} | "
|
|
171
|
-
separator_row += "-------------|"
|
|
172
|
-
|
|
173
|
-
elements_md += header_row + "\n"
|
|
174
|
-
elements_md += separator_row + "\n"
|
|
175
|
-
|
|
176
|
-
# Add rows
|
|
177
|
-
for element in elements:
|
|
178
|
-
props = extract_properties_func(element)
|
|
179
|
-
|
|
180
|
-
# Get additional properties if function is provided
|
|
181
|
-
additional_props = {}
|
|
182
|
-
if get_additional_props_func:
|
|
183
|
-
additional_props = get_additional_props_func(element, props['guid'], output_format)
|
|
184
|
-
|
|
185
|
-
# Build row
|
|
186
|
-
row = "| "
|
|
187
|
-
for column in columns:
|
|
188
|
-
key = column['key']
|
|
189
|
-
value = ""
|
|
190
|
-
|
|
191
|
-
# Check if the key is in props or additional_props
|
|
192
|
-
if key in props:
|
|
193
|
-
value = props[key]
|
|
194
|
-
elif key in additional_props:
|
|
195
|
-
value = additional_props[key]
|
|
196
|
-
|
|
197
|
-
# Format the value if needed
|
|
198
|
-
if 'format' in column and column['format']:
|
|
199
|
-
value = format_for_markdown_table(value)
|
|
200
|
-
|
|
201
|
-
row += f"{value} | "
|
|
202
|
-
|
|
203
|
-
elements_md += row + "\n"
|
|
204
|
-
|
|
205
|
-
return elements_md
|
|
206
|
-
|
|
207
|
-
def generate_entity_dict(elements: List[Dict],
|
|
208
|
-
extract_properties_func: Callable,
|
|
209
|
-
get_additional_props_func: Optional[Callable] = None,
|
|
210
|
-
include_keys: Optional[List[str]] = None,
|
|
211
|
-
exclude_keys: Optional[List[str]] = None,
|
|
212
|
-
output_format: str = 'DICT') -> List[Dict]:
|
|
213
|
-
"""
|
|
214
|
-
Generic method to generate a dictionary representation of entities.
|
|
215
|
-
|
|
216
|
-
Args:
|
|
217
|
-
elements (list): List of entity elements
|
|
218
|
-
extract_properties_func: Function to extract properties from an element
|
|
219
|
-
get_additional_props_func: Optional function to get additional properties
|
|
220
|
-
include_keys: Optional list of keys to include in the result (if None, include all)
|
|
221
|
-
exclude_keys: Optional list of keys to exclude from the result (if None, exclude none)
|
|
222
|
-
output_format (str): Output format (FORM, REPORT, DICT, etc.)
|
|
223
|
-
|
|
224
|
-
Returns:
|
|
225
|
-
list: List of entity dictionaries
|
|
226
|
-
"""
|
|
227
|
-
result = []
|
|
228
|
-
|
|
229
|
-
for element in elements:
|
|
230
|
-
props = extract_properties_func(element)
|
|
231
|
-
|
|
232
|
-
# Get additional properties if function is provided
|
|
233
|
-
additional_props = {}
|
|
234
|
-
if get_additional_props_func:
|
|
235
|
-
additional_props = get_additional_props_func(element, props['guid'], output_format)
|
|
236
|
-
|
|
237
|
-
# Create entity dictionary
|
|
238
|
-
entity_dict = {}
|
|
239
|
-
|
|
240
|
-
# Add properties based on include/exclude lists
|
|
241
|
-
for key, value in props.items():
|
|
242
|
-
if key != 'properties': # Skip the raw properties object
|
|
243
|
-
if (include_keys is None or key in include_keys) and (
|
|
244
|
-
exclude_keys is None or key not in exclude_keys):
|
|
245
|
-
entity_dict[key] = value
|
|
246
|
-
|
|
247
|
-
# Add additional properties
|
|
248
|
-
for key, value in additional_props.items():
|
|
249
|
-
if (include_keys is None or key in include_keys) and (exclude_keys is None or key not in exclude_keys):
|
|
250
|
-
entity_dict[key] = value
|
|
251
|
-
|
|
252
|
-
result.append(entity_dict)
|
|
253
|
-
|
|
254
|
-
return result
|
|
255
|
-
|
|
256
|
-
def extract_mermaid_only(elements: Union[Dict, List[Dict]]) -> Union[str, List[str]]:
|
|
257
|
-
"""
|
|
258
|
-
Extract mermaid graph data from elements.
|
|
259
|
-
|
|
260
|
-
Args:
|
|
261
|
-
elements: Dictionary or list of dictionaries containing element data
|
|
262
|
-
|
|
263
|
-
Returns:
|
|
264
|
-
String or list of strings containing mermaid graph data
|
|
265
|
-
"""
|
|
266
|
-
if isinstance(elements, dict):
|
|
267
|
-
return elements.get('mermaidGraph', '___')
|
|
268
|
-
|
|
269
|
-
result = []
|
|
270
|
-
for element in elements:
|
|
271
|
-
result.append(element.get('mermaidGraph', '___'))
|
|
272
|
-
return result
|
|
273
|
-
|
|
274
|
-
def extract_basic_dict(elements: Union[Dict, List[Dict]]) -> Union[Dict, List[Dict]]:
|
|
275
|
-
"""
|
|
276
|
-
Extract basic dictionary data from elements.
|
|
277
|
-
|
|
278
|
-
Args:
|
|
279
|
-
elements: Dictionary or list of dictionaries containing element data
|
|
280
|
-
|
|
281
|
-
Returns:
|
|
282
|
-
Dictionary or list of dictionaries with extracted data
|
|
283
|
-
"""
|
|
284
|
-
if isinstance(elements, dict):
|
|
285
|
-
body = {'guid': elements['elementHeader']['guid']}
|
|
286
|
-
for key in elements['properties']:
|
|
287
|
-
body[key] = elements['properties'][key]
|
|
288
|
-
|
|
289
|
-
# Add classifications if present
|
|
290
|
-
classifications = elements['elementHeader'].get('classifications', [])
|
|
291
|
-
if classifications:
|
|
292
|
-
classification_names = ""
|
|
293
|
-
for classification in classifications:
|
|
294
|
-
classification_names += f"* {classification['classificationName']}\n"
|
|
295
|
-
body['classification_names'] = classification_names
|
|
296
|
-
|
|
297
|
-
return body
|
|
298
|
-
|
|
299
|
-
result = []
|
|
300
|
-
for element in elements:
|
|
301
|
-
body = {'guid': element['elementHeader']['guid']}
|
|
302
|
-
for key in element['properties']:
|
|
303
|
-
body[key] = element['properties'][key]
|
|
304
|
-
|
|
305
|
-
# Add classifications if present
|
|
306
|
-
classifications = element['elementHeader'].get('classifications', [])
|
|
307
|
-
if classifications:
|
|
308
|
-
classification_names = ""
|
|
309
|
-
for classification in classifications:
|
|
310
|
-
classification_names += f"* {classification['classificationName']}\n"
|
|
311
|
-
body['classifications'] = classification_names
|
|
312
|
-
|
|
313
|
-
result.append(body)
|
|
314
|
-
return result
|
|
315
|
-
|
|
316
|
-
def generate_output(elements: Union[Dict, List[Dict]],
|
|
317
|
-
search_string: str,
|
|
318
|
-
entity_type: str,
|
|
319
|
-
output_format: str,
|
|
320
|
-
extract_properties_func: Callable,
|
|
321
|
-
get_additional_props_func: Optional[Callable] = None,
|
|
322
|
-
columns: Optional[List[Dict]] = None) -> Union[str, List[Dict]]:
|
|
323
|
-
"""
|
|
324
|
-
Generate output in the specified format for the given elements.
|
|
325
|
-
|
|
326
|
-
Args:
|
|
327
|
-
elements: Dictionary or list of dictionaries containing element data
|
|
328
|
-
search_string: The search string used to find the elements
|
|
329
|
-
entity_type: The type of entity (e.g., "Glossary", "Term", "Category")
|
|
330
|
-
output_format: The desired output format (MD, FORM, REPORT, LIST, DICT, MERMAID)
|
|
331
|
-
extract_properties_func: Function to extract properties from an element
|
|
332
|
-
get_additional_props_func: Optional function to get additional properties
|
|
333
|
-
columns: Optional list of column definitions for table output
|
|
334
|
-
|
|
335
|
-
Returns:
|
|
336
|
-
Formatted output as string or list of dictionaries
|
|
337
|
-
"""
|
|
338
|
-
# Ensure elements is a list
|
|
339
|
-
if isinstance(elements, dict):
|
|
340
|
-
elements = [elements]
|
|
341
|
-
|
|
342
|
-
# Handle empty search string
|
|
343
|
-
if search_string is None or search_string == '':
|
|
344
|
-
search_string = "All"
|
|
345
|
-
|
|
346
|
-
# Generate output based on format
|
|
347
|
-
if output_format == 'MERMAID':
|
|
348
|
-
return extract_mermaid_only(elements)
|
|
349
|
-
|
|
350
|
-
elif output_format == 'DICT':
|
|
351
|
-
return generate_entity_dict(
|
|
352
|
-
elements=elements,
|
|
353
|
-
extract_properties_func=extract_properties_func,
|
|
354
|
-
get_additional_props_func=get_additional_props_func,
|
|
355
|
-
exclude_keys=['properties'],
|
|
356
|
-
output_format=output_format
|
|
357
|
-
)
|
|
358
|
-
|
|
359
|
-
elif output_format == 'LIST':
|
|
360
|
-
if columns is None:
|
|
361
|
-
raise ValueError("Columns must be provided for LIST output format")
|
|
362
|
-
|
|
363
|
-
return generate_entity_md_table(
|
|
364
|
-
elements=elements,
|
|
365
|
-
search_string=search_string,
|
|
366
|
-
entity_type=entity_type,
|
|
367
|
-
extract_properties_func=extract_properties_func,
|
|
368
|
-
columns=columns,
|
|
369
|
-
get_additional_props_func=get_additional_props_func,
|
|
370
|
-
output_format=output_format
|
|
371
|
-
)
|
|
372
|
-
|
|
373
|
-
else: # MD, FORM, REPORT
|
|
374
|
-
elements_md, elements_action = make_preamble(
|
|
375
|
-
obj_type=entity_type,
|
|
376
|
-
search_string=search_string,
|
|
377
|
-
output_format=output_format
|
|
378
|
-
)
|
|
379
|
-
|
|
380
|
-
elements_md += generate_entity_md(
|
|
381
|
-
elements=elements,
|
|
382
|
-
elements_action=elements_action,
|
|
383
|
-
output_format=output_format,
|
|
384
|
-
entity_type=entity_type,
|
|
385
|
-
extract_properties_func=extract_properties_func,
|
|
386
|
-
get_additional_props_func=get_additional_props_func
|
|
387
|
-
)
|
|
388
|
-
|
|
389
|
-
return elements_md
|