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.

Files changed (272) hide show
  1. commands/__init__.py +24 -0
  2. commands/cat/Dr-Egeria_md-orig.py +2 -2
  3. commands/cat/__init__.py +1 -17
  4. commands/cat/collection_actions.py +197 -0
  5. commands/cat/dr_egeria_command_help.py +372 -0
  6. commands/cat/dr_egeria_jupyter.py +7 -7
  7. commands/cat/dr_egeria_md.py +27 -182
  8. commands/cat/exp_list_glossaries.py +11 -14
  9. commands/cat/get_asset_graph.py +37 -267
  10. commands/cat/{get_collection.py → get_collection_tree.py} +10 -18
  11. commands/cat/get_project_dependencies.py +14 -14
  12. commands/cat/get_project_structure.py +15 -14
  13. commands/cat/get_tech_type_elements.py +16 -116
  14. commands/cat/glossary_actions.py +145 -298
  15. commands/cat/list_assets.py +3 -11
  16. commands/cat/list_cert_types.py +17 -63
  17. commands/cat/list_collections.py +46 -138
  18. commands/cat/list_deployed_catalogs.py +15 -27
  19. commands/cat/list_deployed_database_schemas.py +27 -43
  20. commands/cat/list_deployed_databases.py +16 -31
  21. commands/cat/list_deployed_servers.py +35 -54
  22. commands/cat/list_glossaries.py +18 -17
  23. commands/cat/list_projects.py +10 -12
  24. commands/cat/list_tech_type_elements.py +21 -37
  25. commands/cat/list_tech_types.py +13 -25
  26. commands/cat/list_terms.py +38 -79
  27. commands/cat/list_todos.py +4 -11
  28. commands/cat/list_user_ids.py +3 -10
  29. commands/cat/my_reports.py +559 -0
  30. commands/cat/run_report.py +394 -0
  31. commands/cat/run_report_orig.py +528 -0
  32. commands/cli/egeria.py +222 -247
  33. commands/cli/egeria_cat.py +68 -81
  34. commands/cli/egeria_my.py +13 -0
  35. commands/cli/egeria_ops.py +69 -74
  36. commands/cli/egeria_tech.py +17 -93
  37. commands/cli/ops_config.py +3 -6
  38. commands/{cat/list_categories.py → deprecated/list_data_designer.py} +53 -64
  39. commands/{cat/list_data_structures.py → deprecated/list_data_structures_full.py} +3 -6
  40. commands/deprecated/old_get_asset_graph.py +315 -0
  41. commands/my/__init__.py +0 -2
  42. commands/my/list_my_profile.py +27 -34
  43. commands/my/list_my_roles.py +1 -7
  44. commands/my/monitor_my_todos.py +1 -7
  45. commands/my/monitor_open_todos.py +6 -7
  46. commands/my/todo_actions.py +4 -5
  47. commands/ops/__init__.py +0 -2
  48. commands/ops/gov_server_actions.py +17 -21
  49. commands/ops/list_archives.py +17 -38
  50. commands/ops/list_catalog_targets.py +33 -40
  51. commands/ops/load_archive.py +35 -26
  52. commands/ops/{monitor_engine_activity_c.py → monitor_active_engine_activity.py} +51 -82
  53. commands/ops/{monitor_integ_daemon_status.py → monitor_daemon_status.py} +35 -55
  54. commands/ops/monitor_engine_activity.py +79 -77
  55. commands/ops/{monitor_gov_eng_status.py → monitor_engine_status.py} +10 -7
  56. commands/ops/monitor_platform_status.py +38 -50
  57. commands/ops/monitor_server_startup.py +6 -11
  58. commands/ops/monitor_server_status.py +7 -11
  59. commands/ops/orig_monitor_server_list.py +8 -8
  60. commands/ops/orig_monitor_server_status.py +1 -5
  61. commands/ops/refresh_integration_daemon.py +5 -5
  62. commands/ops/restart_integration_daemon.py +5 -5
  63. commands/ops/table_integ_daemon_status.py +6 -6
  64. commands/ops/x_engine_actions.py +7 -7
  65. commands/tech/__init__.py +0 -2
  66. commands/tech/{generic_actions.py → element_actions.py} +6 -11
  67. commands/tech/get_element_info.py +20 -29
  68. commands/tech/get_guid_info.py +23 -42
  69. commands/tech/get_tech_details.py +20 -35
  70. commands/tech/get_tech_type_template.py +28 -39
  71. commands/tech/list_all_om_type_elements.py +24 -30
  72. commands/tech/list_all_om_type_elements_x.py +22 -28
  73. commands/tech/list_all_related_elements.py +19 -28
  74. commands/tech/list_anchored_elements.py +22 -30
  75. commands/tech/list_asset_types.py +19 -24
  76. commands/tech/list_elements_by_classification_by_property_value.py +26 -32
  77. commands/tech/list_elements_by_property_value.py +19 -25
  78. commands/tech/list_elements_by_property_value_x.py +20 -28
  79. commands/tech/list_elements_for_classification.py +28 -41
  80. commands/tech/list_gov_action_processes.py +16 -27
  81. commands/tech/list_information_supply_chains.py +22 -30
  82. commands/tech/list_registered_services.py +14 -26
  83. commands/tech/list_related_elements_with_prop_value.py +15 -25
  84. commands/tech/list_related_specification.py +1 -4
  85. commands/tech/list_relationship_types.py +15 -25
  86. commands/tech/list_relationships.py +20 -36
  87. commands/tech/list_solution_blueprints.py +28 -33
  88. commands/tech/list_solution_components.py +23 -29
  89. commands/tech/list_solution_roles.py +21 -32
  90. commands/tech/list_tech_templates.py +51 -54
  91. commands/tech/list_valid_metadata_values.py +5 -9
  92. commands/tech/table_tech_templates.py +2 -6
  93. commands/tech/x_list_related_elements.py +1 -4
  94. examples/GeoSpatial Products Example.py +524 -0
  95. examples/Jupyter Notebooks/P-egeria-server-config.ipynb +2137 -0
  96. examples/Jupyter Notebooks/README.md +2 -0
  97. examples/Jupyter Notebooks/common/P-environment-check.ipynb +115 -0
  98. examples/Jupyter Notebooks/common/__init__.py +14 -0
  99. examples/Jupyter Notebooks/common/common-functions.ipynb +4694 -0
  100. examples/Jupyter Notebooks/common/environment-check.ipynb +52 -0
  101. examples/Jupyter Notebooks/common/globals.ipynb +184 -0
  102. examples/Jupyter Notebooks/common/globals.py +154 -0
  103. examples/Jupyter Notebooks/common/orig_globals.py +152 -0
  104. examples/format_sets/all_format_sets.json +910 -0
  105. examples/format_sets/custom_format_sets.json +268 -0
  106. examples/format_sets/subset_format_sets.json +187 -0
  107. examples/format_sets_save_load_example.py +291 -0
  108. examples/jacquard_data_sets.py +129 -0
  109. examples/output_formats_example.py +193 -0
  110. examples/test_jacquard_data_sets.py +54 -0
  111. examples/test_jacquard_data_sets_scenarios.py +94 -0
  112. md_processing/__init__.py +90 -0
  113. md_processing/command_dispatcher.py +33 -0
  114. md_processing/command_mapping.py +221 -0
  115. md_processing/data/commands/commands_data_designer.json +537 -0
  116. md_processing/data/commands/commands_external_reference.json +733 -0
  117. md_processing/data/commands/commands_feedback.json +155 -0
  118. md_processing/data/commands/commands_general.json +204 -0
  119. md_processing/data/commands/commands_glossary.json +218 -0
  120. md_processing/data/commands/commands_governance.json +3678 -0
  121. md_processing/data/commands/commands_product_manager.json +865 -0
  122. md_processing/data/commands/commands_project.json +642 -0
  123. md_processing/data/commands/commands_solution_architect.json +366 -0
  124. md_processing/data/commands.json +17568 -0
  125. md_processing/data/commands_working.json +30641 -0
  126. md_processing/data/gened_report_specs.py +6584 -0
  127. md_processing/data/generated_format_sets.json +6533 -0
  128. md_processing/data/generated_format_sets_old.json +4137 -0
  129. md_processing/data/generated_format_sets_old.py +45 -0
  130. md_processing/dr_egeria.py +182 -0
  131. md_processing/md_commands/__init__.py +3 -0
  132. md_processing/md_commands/data_designer_commands.py +1276 -0
  133. md_processing/md_commands/ext_ref_commands.py +530 -0
  134. md_processing/md_commands/feedback_commands.py +726 -0
  135. md_processing/md_commands/glossary_commands.py +684 -0
  136. md_processing/md_commands/governance_officer_commands.py +600 -0
  137. md_processing/md_commands/product_manager_commands.py +1266 -0
  138. md_processing/md_commands/project_commands.py +383 -0
  139. md_processing/md_commands/solution_architect_commands.py +1184 -0
  140. md_processing/md_commands/view_commands.py +295 -0
  141. md_processing/md_processing_utils/__init__.py +4 -0
  142. md_processing/md_processing_utils/common_md_proc_utils.py +1249 -0
  143. md_processing/md_processing_utils/common_md_utils.py +578 -0
  144. md_processing/md_processing_utils/determine_width.py +103 -0
  145. md_processing/md_processing_utils/extraction_utils.py +547 -0
  146. md_processing/md_processing_utils/gen_report_specs.py +643 -0
  147. md_processing/md_processing_utils/generate_dr_help.py +193 -0
  148. md_processing/md_processing_utils/generate_md_cmd_templates.py +144 -0
  149. md_processing/md_processing_utils/generate_md_templates.py +83 -0
  150. md_processing/md_processing_utils/md_processing_constants.py +1228 -0
  151. md_processing/md_processing_utils/message_constants.py +19 -0
  152. pyegeria/__init__.py +201 -443
  153. pyegeria/core/__init__.py +40 -0
  154. pyegeria/core/_base_platform_client.py +574 -0
  155. pyegeria/core/_base_server_client.py +573 -0
  156. pyegeria/core/_exceptions.py +457 -0
  157. pyegeria/core/_globals.py +60 -0
  158. pyegeria/core/_server_client.py +6073 -0
  159. pyegeria/core/_validators.py +257 -0
  160. pyegeria/core/config.py +654 -0
  161. pyegeria/{create_tech_guid_lists.py → core/create_tech_guid_lists.py} +0 -1
  162. pyegeria/core/load_config.py +37 -0
  163. pyegeria/core/logging_configuration.py +207 -0
  164. pyegeria/core/mcp_adapter.py +144 -0
  165. pyegeria/core/mcp_server.py +212 -0
  166. pyegeria/core/utils.py +405 -0
  167. pyegeria/deprecated/__init__.py +0 -0
  168. pyegeria/{_client.py → deprecated/_client.py} +62 -24
  169. pyegeria/{_deprecated_gov_engine.py → deprecated/_deprecated_gov_engine.py} +16 -16
  170. pyegeria/{classification_manager_omvs.py → deprecated/classification_manager_omvs.py} +1988 -1878
  171. pyegeria/deprecated/output_formatter_with_machine_keys.py +1127 -0
  172. pyegeria/{runtime_manager_omvs.py → deprecated/runtime_manager_omvs.py} +216 -229
  173. pyegeria/{valid_metadata_omvs.py → deprecated/valid_metadata_omvs.py} +93 -93
  174. pyegeria/{x_action_author_omvs.py → deprecated/x_action_author_omvs.py} +2 -3
  175. pyegeria/egeria_cat_client.py +25 -51
  176. pyegeria/egeria_client.py +140 -98
  177. pyegeria/egeria_config_client.py +48 -24
  178. pyegeria/egeria_tech_client.py +170 -83
  179. pyegeria/models/__init__.py +150 -0
  180. pyegeria/models/collection_models.py +168 -0
  181. pyegeria/models/models.py +654 -0
  182. pyegeria/omvs/__init__.py +84 -0
  183. pyegeria/omvs/action_author.py +342 -0
  184. pyegeria/omvs/actor_manager.py +5980 -0
  185. pyegeria/omvs/asset_catalog.py +842 -0
  186. pyegeria/omvs/asset_maker.py +2736 -0
  187. pyegeria/omvs/automated_curation.py +4403 -0
  188. pyegeria/omvs/classification_manager.py +11213 -0
  189. pyegeria/omvs/collection_manager.py +5780 -0
  190. pyegeria/omvs/community_matters_omvs.py +468 -0
  191. pyegeria/{core_omag_server_config.py → omvs/core_omag_server_config.py} +157 -157
  192. pyegeria/{data_designer_omvs.py → omvs/data_designer.py} +1991 -1691
  193. pyegeria/omvs/data_discovery.py +869 -0
  194. pyegeria/omvs/data_engineer.py +372 -0
  195. pyegeria/omvs/digital_business.py +1133 -0
  196. pyegeria/omvs/external_links.py +1752 -0
  197. pyegeria/omvs/feedback_manager.py +834 -0
  198. pyegeria/{full_omag_server_config.py → omvs/full_omag_server_config.py} +73 -69
  199. pyegeria/omvs/glossary_manager.py +3231 -0
  200. pyegeria/omvs/governance_officer.py +3009 -0
  201. pyegeria/omvs/lineage_linker.py +314 -0
  202. pyegeria/omvs/location_arena.py +1525 -0
  203. pyegeria/omvs/metadata_expert.py +668 -0
  204. pyegeria/omvs/metadata_explorer_omvs.py +2943 -0
  205. pyegeria/omvs/my_profile.py +1042 -0
  206. pyegeria/omvs/notification_manager.py +358 -0
  207. pyegeria/omvs/people_organizer.py +394 -0
  208. pyegeria/{platform_services.py → omvs/platform_services.py} +113 -193
  209. pyegeria/omvs/product_manager.py +1825 -0
  210. pyegeria/omvs/project_manager.py +1907 -0
  211. pyegeria/omvs/reference_data.py +1140 -0
  212. pyegeria/omvs/registered_info.py +334 -0
  213. pyegeria/omvs/runtime_manager.py +2817 -0
  214. pyegeria/omvs/schema_maker.py +446 -0
  215. pyegeria/{server_operations.py → omvs/server_operations.py} +27 -26
  216. pyegeria/omvs/solution_architect.py +6490 -0
  217. pyegeria/omvs/specification_properties.py +37 -0
  218. pyegeria/omvs/subject_area.py +1042 -0
  219. pyegeria/omvs/template_manager_omvs.py +236 -0
  220. pyegeria/omvs/time_keeper.py +1761 -0
  221. pyegeria/omvs/valid_metadata.py +3221 -0
  222. pyegeria/omvs/valid_metadata_lists.py +37 -0
  223. pyegeria/omvs/valid_type_lists.py +37 -0
  224. pyegeria/view/__init__.py +28 -0
  225. pyegeria/view/_output_format_models.py +514 -0
  226. pyegeria/view/_output_formats.py +14 -0
  227. pyegeria/view/base_report_formats.py +2719 -0
  228. pyegeria/view/dr_egeria_reports.py +56 -0
  229. pyegeria/view/format_set_executor.py +397 -0
  230. pyegeria/{md_processing_utils.py → view/md_processing_utils.py} +5 -5
  231. pyegeria/{mermaid_utilities.py → view/mermaid_utilities.py} +2 -154
  232. pyegeria/view/output_formatter.py +1297 -0
  233. pyegeria-5.5.3.3.dist-info/METADATA +218 -0
  234. pyegeria-5.5.3.3.dist-info/RECORD +241 -0
  235. {pyegeria-5.3.9.9.3.dist-info → pyegeria-5.5.3.3.dist-info}/WHEEL +2 -1
  236. pyegeria-5.5.3.3.dist-info/entry_points.txt +103 -0
  237. pyegeria-5.5.3.3.dist-info/top_level.txt +4 -0
  238. commands/cat/.DS_Store +0 -0
  239. commands/cat/README.md +0 -16
  240. commands/cli/txt_custom_v2.tcss +0 -19
  241. commands/my/README.md +0 -17
  242. commands/ops/README.md +0 -24
  243. commands/ops/monitor_asset_events.py +0 -108
  244. commands/tech/README.md +0 -24
  245. pyegeria/.DS_Store +0 -0
  246. pyegeria/README.md +0 -35
  247. pyegeria/_globals.py +0 -47
  248. pyegeria/_validators.py +0 -385
  249. pyegeria/asset_catalog_omvs.py +0 -864
  250. pyegeria/automated_curation_omvs.py +0 -3765
  251. pyegeria/collection_manager_omvs.py +0 -2744
  252. pyegeria/dr.egeria spec.md +0 -9
  253. pyegeria/egeria_my_client.py +0 -56
  254. pyegeria/feedback_manager_omvs.py +0 -4573
  255. pyegeria/glossary_browser_omvs.py +0 -3728
  256. pyegeria/glossary_manager_omvs.py +0 -2440
  257. pyegeria/m_test.py +0 -118
  258. pyegeria/md_processing_helpers.py +0 -58
  259. pyegeria/md_processing_utils_orig.py +0 -1103
  260. pyegeria/metadata_explorer_omvs.py +0 -2326
  261. pyegeria/my_profile_omvs.py +0 -1022
  262. pyegeria/output_formatter.py +0 -389
  263. pyegeria/project_manager_omvs.py +0 -1933
  264. pyegeria/registered_info.py +0 -167
  265. pyegeria/solution_architect_omvs.py +0 -2156
  266. pyegeria/template_manager_omvs.py +0 -1414
  267. pyegeria/utils.py +0 -197
  268. pyegeria-5.3.9.9.3.dist-info/METADATA +0 -72
  269. pyegeria-5.3.9.9.3.dist-info/RECORD +0 -143
  270. pyegeria-5.3.9.9.3.dist-info/entry_points.txt +0 -99
  271. /pyegeria/{_exceptions.py → deprecated/_exceptions.py} +0 -0
  272. {pyegeria-5.3.9.9.3.dist-info → pyegeria-5.5.3.3.dist-info/licenses}/LICENSE +0 -0
@@ -0,0 +1,193 @@
1
+ """
2
+ This file contains general utility functions for processing Egeria Markdown
3
+ """
4
+ import os
5
+ import sys
6
+ from datetime import datetime
7
+
8
+ from loguru import logger
9
+ from rich import print
10
+ from rich.console import Console
11
+
12
+ from commands.cat.dr_egeria_command_help import EGERIA_INBOX_PATH
13
+ from md_processing.md_processing_utils.md_processing_constants import (get_command_spec, load_commands,
14
+ COMMAND_DEFINITIONS,
15
+ add_default_upsert_attributes,
16
+ add_default_link_attributes)
17
+
18
+ from pyegeria.core._globals import DEBUG_LEVEL
19
+ from pyegeria.view.output_formatter import generate_entity_md_table, populate_columns_from_properties
20
+
21
+ # Constants
22
+ EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", "200"))
23
+ EGERIA_ROOT_PATH = os.environ.get("EGERIA_ROOT_PATH", ".")
24
+ EGERIA_INBOX_PATH = os.environ.get("EGERIA_INBOX_PATH", ".")
25
+
26
+ console = Console(width=EGERIA_WIDTH)
27
+
28
+ debug_level = DEBUG_LEVEL
29
+ global COMMAND_DEFINITIONS
30
+
31
+ load_commands('commands.json')
32
+
33
+
34
+ log_format = "D {time} | {level} | {function} | {line} | {message} | {extra}"
35
+ logger.remove()
36
+ logger.add(sys.stderr, level="INFO", format=log_format, colorize=True)
37
+ full_file_path = os.path.join(EGERIA_ROOT_PATH, EGERIA_INBOX_PATH, "data_designer_debug.log")
38
+ # logger.add(full_file_path, rotation="1 day", retention="1 week", compression="zip", level="TRACE", format=log_format,
39
+ # colorize=True)
40
+ logger.add("debug_log", rotation="1 day", retention="1 week", compression="zip", level="TRACE", format=log_format,
41
+ colorize=True)
42
+ def get_iso8601_datetime():
43
+ """Returns the current date and time in ISO 8601 format."""
44
+ return datetime.now().strftime('%Y-%m-%dT%H:%M:%S')
45
+
46
+ def yes_no(input: str)->str:
47
+ if type(input) is bool:
48
+ if input:
49
+ return "True"
50
+ else:
51
+ return "False"
52
+
53
+ input = input.title()
54
+ if input in ["Yes","No"]:
55
+ return input
56
+
57
+ if input in ["True", "T"]:
58
+ return "Yes"
59
+ else:
60
+ return "No"
61
+
62
+ @logger.catch
63
+ def _extract_help_fields(command: dict):
64
+ """
65
+ Build a list of attribute dictionaries for a given command spec.
66
+ This prepares the data rows used to render the help table.
67
+ """
68
+
69
+ command_spec = get_command_spec(command)
70
+ verb = command_spec.get('verb', None)
71
+ if verb == "Create":
72
+ distinguished_attributes = command_spec.get('Attributes', [])
73
+ attributes = add_default_upsert_attributes(distinguished_attributes)
74
+ elif verb in ["Link","Attach"] :
75
+ distinguished_attributes = command_spec.get('Attributes', [])
76
+ attributes = add_default_link_attributes(distinguished_attributes)
77
+ else:
78
+ attributes = command_spec.get('Attributes', [])
79
+
80
+
81
+ term_entry: list = []
82
+ for attr in attributes:
83
+ for key in attr:
84
+ if attr[key].get('level', 'Basic') != "Basic":
85
+ continue
86
+ attribute_name = key
87
+ input_required = yes_no(attr[key].get('input_required', "No"))
88
+
89
+ read_only = yes_no(attr[key].get('user_specified', "No"))
90
+ generated = yes_no(attr[key].get('generated', "No"))
91
+ default = attr[key].get('default', None)
92
+ if default:
93
+ generated = default
94
+ unique = yes_no(attr[key].get('unique', "No"))
95
+ notes = attr[key].get('description', "")
96
+ valid_values = attr[key].get('valid_values', [])
97
+ term_entry.append({
98
+ 'Attribute Name': attribute_name,
99
+ 'Input Required': input_required,
100
+ 'Read Only': read_only,
101
+ 'Generated': generated,
102
+ 'Default Value': default,
103
+ 'Notes': notes,
104
+ 'Unique Values': unique,
105
+ 'Valid Values': valid_values,
106
+ })
107
+
108
+ return term_entry
109
+
110
+ @logger.catch
111
+ def _extract_help_function(element: dict, columns_struct: dict) -> dict:
112
+ """
113
+ Return a populated columns data structure matching the signature and structure
114
+ of _extract_glossary_properties in glossary_manager.
115
+
116
+ Args:
117
+ element: One row (dict) describing a help attribute with keys matching columns_struct
118
+ columns_struct: Dict containing formats->columns definitions
119
+
120
+ Returns:
121
+ dict: A structure with key 'formats' and a 'columns' list whose entries have
122
+ their 'value' fields populated from the element dict.
123
+ """
124
+ # Normalize to a shape compatible with populate_columns_from_properties
125
+ normalized = {
126
+ 'properties': element or {},
127
+ 'elementHeader': {},
128
+ }
129
+ col_data = populate_columns_from_properties(normalized, columns_struct)
130
+ return col_data
131
+
132
+ def create_help_terms():
133
+ term_entry:str = ""
134
+ glossary_name = "Egeria-Markdown"
135
+ commands = COMMAND_DEFINITIONS["Command Specifications"]
136
+ columns = [{'name': "Attribute Name", 'key': 'Attribute Name'},
137
+ {'name': 'Input Required', 'key': 'Input Required'},
138
+ {'name': 'Read Only', 'key': 'Read Only'},
139
+ {'name': 'Generated', 'key': 'Generated'},
140
+ {'name': 'Default Value', 'key': 'Default Value'},
141
+ {'name': 'Notes', 'key': 'Notes'},
142
+ {'name': 'Unique Values', 'key': 'Unique Values'},
143
+ {'name': 'Valid Values', 'key': 'Valid Values'}]
144
+ columns_struct = {"target_type": "Term", "formats": {
145
+ "types": "ALL",
146
+ "attributes": columns}
147
+ }
148
+
149
+ term_entry = """# Generating glossary entries for the documented commands\n\n
150
+ This file contains generated Dr.Egeria commands to generate glossary term entries describing
151
+ each Dr.Egeria command.
152
+
153
+ > Usage: Before executing this file, make sure you have a glossary named `Egeria-Markdown`
154
+ > already created. If you Need to create one, you can use the `hey_egeria tui` command.\n"""
155
+
156
+ for command, values in commands.items():
157
+ if command == "exported":
158
+ continue
159
+ if commands[command].get("level","") not in ["Basic"]:
160
+ continue
161
+ command_description = commands[command].get("description","")
162
+ command_verb = commands[command].get("verb","")
163
+
164
+ term_entry+= "# Create Term\n"
165
+ term_entry+= f"## Term Name\n\n{command}\n\n"
166
+ term_entry+= f"## Description\n\n{command_description}\n\n"
167
+ term_entry+= f"## Glossary\n\n{glossary_name}\n\n"
168
+ term_entry+= f"## Folders\n\nWriting Dr.Egeria Markdown\n\n"
169
+
170
+
171
+ du = _extract_help_fields(command)
172
+ output = generate_entity_md_table(du, "", "", _extract_help_function, columns_struct, None, "help" )
173
+
174
+ term_entry+= f"## Usage\n\n{output}\n\n___\n\n"
175
+
176
+ print(term_entry)
177
+ # Generate filename with current date and time in ISO 8601 format
178
+ current_datetime = get_iso8601_datetime()
179
+ filename = f"dr-egeria-help-{current_datetime}.md"
180
+ file_path = os.path.join(EGERIA_ROOT_PATH, EGERIA_INBOX_PATH, filename)
181
+
182
+ # Write the content to the file
183
+ with open(file_path, 'w', encoding="utf-8") as f:
184
+ f.write(term_entry)
185
+
186
+ logger.info(f"Help documentation saved to {file_path}")
187
+
188
+ def main():
189
+ create_help_terms()
190
+
191
+
192
+ if __name__ == "__main__":
193
+ main()
@@ -0,0 +1,144 @@
1
+ """
2
+ This file contains general utility functions for processing Egeria Markdown
3
+ """
4
+ import os
5
+ import sys
6
+ import io
7
+ import copy
8
+ from loguru import logger
9
+ from rich import print
10
+ from rich.console import Console
11
+
12
+ from md_processing.md_processing_utils.md_processing_constants import (load_commands,
13
+ COMMAND_DEFINITIONS, add_default_link_attributes,
14
+ add_default_upsert_attributes)
15
+
16
+ from pyegeria.core._globals import DEBUG_LEVEL
17
+
18
+
19
+ # Constants
20
+ EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", "200"))
21
+ EGERIA_ROOT_PATH = os.environ.get("EGERIA_ROOT_PATH", ".")
22
+ EGERIA_INBOX_PATH = os.environ.get("EGERIA_INBOX_PATH", ".")
23
+
24
+ console = Console(width=EGERIA_WIDTH)
25
+
26
+ debug_level = DEBUG_LEVEL
27
+ global COMMAND_DEFINITIONS
28
+
29
+ load_commands('commands.json')
30
+
31
+
32
+ log_format = "D {time} | {level} | {function} | {line} | {message} | {extra}"
33
+ logger.remove()
34
+ logger.add(sys.stderr, level="INFO", format=log_format, colorize=True)
35
+ full_file_path = os.path.join(EGERIA_ROOT_PATH, EGERIA_INBOX_PATH, "data_designer_debug.log")
36
+ # logger.add(full_file_path, rotation="1 day", retention="1 week", compression="zip", level="TRACE", format=log_format,
37
+ # colorize=True)
38
+ logger.add("debug_log", rotation="1 day", retention="1 week", compression="zip", level="TRACE", format=log_format,
39
+ colorize=True)
40
+ @logger.catch
41
+ def main():
42
+ """
43
+ Generate markdown command templates organized by family
44
+ """
45
+ glossary_name = "Egeria-Markdown"
46
+ commands = COMMAND_DEFINITIONS["Command Specifications"]
47
+
48
+ # Create base output directory if it doesn't exist
49
+ base_output_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "family_docs")
50
+ os.makedirs(base_output_dir, exist_ok=True)
51
+
52
+ # Group commands by family
53
+ families = {}
54
+ for command, values in commands.items():
55
+ if command == "exported":
56
+ continue
57
+ if values.get("level", "") not in ["Basic", "Advanced"]:
58
+ continue
59
+
60
+ family = values.get("family", "Other")
61
+ if family not in families:
62
+ families[family] = []
63
+
64
+ families[family].append(command)
65
+
66
+ # Process each family
67
+ for family, command_list in sorted(families.items()):
68
+ # Create a folder for each family
69
+ family_dir = os.path.join(base_output_dir, family)
70
+ os.makedirs(family_dir, exist_ok=True)
71
+
72
+ print(f"\n# Family: {family}\n")
73
+
74
+ # Process each command in the family
75
+ for command in sorted(command_list):
76
+ values = commands[command]
77
+ command_description = values.get("description", "")
78
+ command_verb = values.get("verb", "")
79
+
80
+ # Create a string buffer for the command's output
81
+ command_output = io.StringIO()
82
+
83
+ # Write command header
84
+ command_output.write(f"# {command}\n>\t{command_description}\n")
85
+ # print(f"\n## {command_verb} {command}\n>\t{command_description}")
86
+ print(f"\n# {command}\n>\t{command_description}")
87
+
88
+ # Process command attributes
89
+ distinguished_attributes = values['Attributes']
90
+ if command_verb == "Link":
91
+ attributes = add_default_link_attributes(copy.deepcopy(distinguished_attributes))
92
+ elif command_verb == "Create":
93
+ attributes = add_default_upsert_attributes(copy.deepcopy(distinguished_attributes))
94
+ else:
95
+ attributes = add_default_link_attributes(copy.deepcopy(distinguished_attributes))
96
+
97
+ for attribute in attributes:
98
+ for key, value in attribute.items():
99
+ if value.get('level', "") not in ["Basic","Advanced"]:
100
+ continue
101
+ user_specified = value.get('user_specified', 'true') in ["true", "True"]
102
+
103
+ command_output.write(f"\n## {key}\n")
104
+ print(f"\n### {key}")
105
+
106
+ command_output.write(f">\t**Input Required**: {value.get('input_required', 'false')}\n\n")
107
+ print(f">\tInput Required: {value.get('input_required', 'false')}")
108
+
109
+ command_output.write(f">\t**Description**: {value.get('description', '')}\n\n")
110
+ print(f">\tDescription: {value.get('description', '')}")
111
+
112
+ labels = value.get("attr_labels", None)
113
+ if labels:
114
+ command_output.write(f">\t**Alternative Labels**: {labels}\n\n")
115
+ print(f">\tAlternative Labels: {labels}")
116
+
117
+ valid_values = value.get("valid_values", None)
118
+ if valid_values:
119
+ command_output.write(f">\t**Valid Values**: {valid_values}\n\n")
120
+ print(f">\tValid Values: {valid_values}")
121
+
122
+ default_value = value.get("default_value", None)
123
+ if default_value:
124
+ command_output.write(f">\t**Default Value**: {default_value}\n\n")
125
+ print(f">\tDefault Value: {default_value}")
126
+
127
+ # Save the command to its own file in the family directory
128
+ # Use a sanitized version of the command name for the filename
129
+ command_filename = command.replace(" ", "_").replace(":", "").replace("/", "_")
130
+ command_file_path = os.path.join(family_dir, f"{command_filename}.md")
131
+
132
+ with open(command_file_path, 'w') as f:
133
+ f.write(command_output.getvalue())
134
+
135
+ logger.info(f"Saved command documentation to {command_file_path}")
136
+ print("\n___\n")
137
+
138
+
139
+
140
+
141
+ #
142
+
143
+ if __name__ == "__main__":
144
+ main()
@@ -0,0 +1,83 @@
1
+ """
2
+ This file contains general utility functions for processing Egeria Markdown
3
+ """
4
+ import os
5
+ import sys
6
+
7
+ from loguru import logger
8
+ from rich import print
9
+ from rich.console import Console
10
+
11
+ from md_processing.md_processing_utils.md_processing_constants import (load_commands, COMMAND_DEFINITIONS)
12
+
13
+ from pyegeria.core._globals import DEBUG_LEVEL
14
+
15
+
16
+ # Constants
17
+ EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", "200"))
18
+ EGERIA_ROOT_PATH = os.environ.get("EGERIA_ROOT_PATH", ".")
19
+ EGERIA_INBOX_PATH = os.environ.get("EGERIA_INBOX_PATH", ".")
20
+
21
+ console = Console(width=EGERIA_WIDTH)
22
+
23
+ debug_level = DEBUG_LEVEL
24
+ global COMMAND_DEFINITIONS
25
+
26
+ load_commands('commands.json')
27
+
28
+
29
+ log_format = "D {time} | {level} | {function} | {line} | {message} | {extra}"
30
+ logger.remove()
31
+ logger.add(sys.stderr, level="INFO", format=log_format, colorize=True)
32
+ full_file_path = os.path.join(EGERIA_ROOT_PATH, EGERIA_INBOX_PATH, "data_designer_debug.log")
33
+ # logger.add(full_file_path, rotation="1 day", retention="1 week", compression="zip", level="TRACE", format=log_format,
34
+ # colorize=True)
35
+ logger.add("debug_log", rotation="1 day", retention="1 week", compression="zip", level="TRACE", format=log_format,
36
+ colorize=True)
37
+ @logger.catch
38
+ def main():
39
+ """
40
+
41
+ """
42
+ glossary_name = "Egeria-Markdown"
43
+ commands = COMMAND_DEFINITIONS["Command Specifications"]
44
+ for command, values in commands.items():
45
+ if command == "exported":
46
+ continue
47
+ if commands[command].get("level","") not in ["Basic"]:
48
+ continue
49
+ command_description = commands[command].get("description","")
50
+ command_verb = commands[command].get("verb","")
51
+ print(f"\n# {command_verb} {command}\n>\t{command_description}")
52
+
53
+ attributes = commands[command]['Attributes']
54
+ for attribute in attributes:
55
+ for key, value in attribute.items():
56
+ if value.get('level',"") not in ["Basic"]:
57
+ continue
58
+ user_specified = value.get('user_specified', 'true') in ["true", "True"]
59
+
60
+ print(f"\n## {key}")
61
+
62
+ print(f">\tInput Required: {value.get('input_required', "false")}")
63
+
64
+ print(f">\tDescription: {value.get("description","")}")
65
+ labels = value.get("attr_labels", None)
66
+ if labels:
67
+ print(f">\tAlternative Labels: {labels}")
68
+
69
+ valid_values = value.get("valid_values", None)
70
+ if valid_values:
71
+ print(f">\tValid Values: {valid_values}")
72
+ default_value = value.get("default_value", None)
73
+ if default_value:
74
+ print(f">\tDefault Value: {default_value}")
75
+ print("\n___\n")
76
+
77
+
78
+
79
+
80
+ #
81
+
82
+ if __name__ == "__main__":
83
+ main()