pyegeria 5.4.0.28__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 (433) hide show
  1. commands/__init__.py +24 -0
  2. commands/cat/Dr-Egeria_md-orig.py +2 -2
  3. commands/cat/collection_actions.py +197 -0
  4. commands/cat/dr_egeria_command_help.py +137 -38
  5. commands/cat/dr_egeria_jupyter.py +7 -7
  6. commands/cat/dr_egeria_md.py +10 -267
  7. commands/cat/exp_list_glossaries.py +11 -14
  8. commands/cat/get_asset_graph.py +37 -267
  9. commands/cat/{get_collection.py → get_collection_tree.py} +10 -18
  10. commands/cat/get_project_dependencies.py +14 -14
  11. commands/cat/get_project_structure.py +15 -14
  12. commands/cat/get_tech_type_elements.py +16 -116
  13. commands/cat/glossary_actions.py +145 -298
  14. commands/cat/list_assets.py +3 -11
  15. commands/cat/list_cert_types.py +17 -63
  16. commands/cat/list_collections.py +17 -139
  17. commands/cat/list_deployed_catalogs.py +15 -27
  18. commands/cat/list_deployed_database_schemas.py +27 -43
  19. commands/cat/list_deployed_databases.py +16 -31
  20. commands/cat/list_deployed_servers.py +35 -54
  21. commands/cat/list_glossaries.py +18 -17
  22. commands/cat/list_projects.py +10 -12
  23. commands/cat/list_tech_type_elements.py +21 -37
  24. commands/cat/list_tech_types.py +13 -25
  25. commands/cat/list_terms.py +38 -79
  26. commands/cat/list_todos.py +4 -11
  27. commands/cat/list_user_ids.py +3 -10
  28. commands/cat/my_reports.py +559 -0
  29. commands/cat/run_report.py +394 -0
  30. commands/cat/{list_format_set.py → run_report_orig.py} +136 -44
  31. commands/cli/egeria.py +182 -219
  32. commands/cli/egeria_cat.py +32 -59
  33. commands/cli/egeria_my.py +13 -0
  34. commands/cli/egeria_ops.py +69 -74
  35. commands/cli/egeria_tech.py +17 -93
  36. commands/{cat → deprecated}/list_data_designer.py +2 -4
  37. commands/{cat → deprecated}/list_data_structures_full.py +3 -6
  38. commands/deprecated/old_get_asset_graph.py +315 -0
  39. commands/my/__init__.py +0 -2
  40. commands/my/list_my_profile.py +27 -34
  41. commands/my/list_my_roles.py +1 -7
  42. commands/my/monitor_my_todos.py +1 -7
  43. commands/my/monitor_open_todos.py +6 -7
  44. commands/my/todo_actions.py +4 -5
  45. commands/ops/__init__.py +0 -2
  46. commands/ops/gov_server_actions.py +17 -21
  47. commands/ops/list_archives.py +17 -38
  48. commands/ops/list_catalog_targets.py +33 -40
  49. commands/ops/load_archive.py +14 -11
  50. commands/ops/{monitor_engine_activity_c.py → monitor_active_engine_activity.py} +51 -82
  51. commands/ops/{monitor_integ_daemon_status.py → monitor_daemon_status.py} +35 -55
  52. commands/ops/monitor_engine_activity.py +79 -77
  53. commands/ops/{monitor_gov_eng_status.py → monitor_engine_status.py} +10 -7
  54. commands/ops/monitor_platform_status.py +38 -50
  55. commands/ops/monitor_server_startup.py +6 -11
  56. commands/ops/monitor_server_status.py +7 -11
  57. commands/ops/orig_monitor_server_list.py +8 -8
  58. commands/ops/orig_monitor_server_status.py +1 -5
  59. commands/ops/refresh_integration_daemon.py +5 -5
  60. commands/ops/restart_integration_daemon.py +5 -5
  61. commands/ops/table_integ_daemon_status.py +6 -6
  62. commands/ops/x_engine_actions.py +7 -7
  63. commands/tech/__init__.py +0 -2
  64. commands/tech/{generic_actions.py → element_actions.py} +6 -11
  65. commands/tech/get_element_info.py +20 -29
  66. commands/tech/get_guid_info.py +23 -42
  67. commands/tech/get_tech_details.py +20 -35
  68. commands/tech/get_tech_type_template.py +28 -39
  69. commands/tech/list_all_om_type_elements.py +24 -30
  70. commands/tech/list_all_om_type_elements_x.py +22 -28
  71. commands/tech/list_all_related_elements.py +19 -28
  72. commands/tech/list_anchored_elements.py +22 -30
  73. commands/tech/list_asset_types.py +19 -24
  74. commands/tech/list_elements_by_classification_by_property_value.py +26 -32
  75. commands/tech/list_elements_by_property_value.py +19 -25
  76. commands/tech/list_elements_by_property_value_x.py +20 -28
  77. commands/tech/list_elements_for_classification.py +28 -41
  78. commands/tech/list_gov_action_processes.py +16 -27
  79. commands/tech/list_information_supply_chains.py +22 -30
  80. commands/tech/list_registered_services.py +14 -26
  81. commands/tech/list_related_elements_with_prop_value.py +15 -25
  82. commands/tech/list_related_specification.py +1 -4
  83. commands/tech/list_relationship_types.py +15 -25
  84. commands/tech/list_relationships.py +20 -36
  85. commands/tech/list_solution_blueprints.py +28 -33
  86. commands/tech/list_solution_components.py +23 -29
  87. commands/tech/list_solution_roles.py +21 -32
  88. commands/tech/list_tech_templates.py +51 -54
  89. commands/tech/list_valid_metadata_values.py +5 -9
  90. commands/tech/table_tech_templates.py +2 -6
  91. commands/tech/x_list_related_elements.py +1 -4
  92. examples/GeoSpatial Products Example.py +524 -0
  93. examples/Jupyter Notebooks/P-egeria-server-config.ipynb +2137 -0
  94. examples/Jupyter Notebooks/README.md +2 -0
  95. examples/Jupyter Notebooks/common/P-environment-check.ipynb +115 -0
  96. examples/Jupyter Notebooks/common/__init__.py +14 -0
  97. examples/Jupyter Notebooks/common/common-functions.ipynb +4694 -0
  98. examples/Jupyter Notebooks/common/environment-check.ipynb +52 -0
  99. examples/Jupyter Notebooks/common/globals.ipynb +184 -0
  100. examples/Jupyter Notebooks/common/globals.py +154 -0
  101. examples/Jupyter Notebooks/common/orig_globals.py +152 -0
  102. examples/format_sets/all_format_sets.json +910 -0
  103. examples/format_sets/custom_format_sets.json +268 -0
  104. examples/format_sets/subset_format_sets.json +187 -0
  105. examples/format_sets_save_load_example.py +291 -0
  106. examples/jacquard_data_sets.py +129 -0
  107. examples/output_formats_example.py +193 -0
  108. examples/test_jacquard_data_sets.py +54 -0
  109. examples/test_jacquard_data_sets_scenarios.py +94 -0
  110. md_processing/__init__.py +33 -24
  111. md_processing/command_dispatcher.py +33 -0
  112. md_processing/command_mapping.py +221 -0
  113. md_processing/data/commands/commands_data_designer.json +537 -0
  114. md_processing/data/commands/commands_external_reference.json +733 -0
  115. md_processing/data/commands/commands_feedback.json +155 -0
  116. md_processing/data/commands/commands_general.json +204 -0
  117. md_processing/data/commands/commands_glossary.json +218 -0
  118. md_processing/data/commands/commands_governance.json +3678 -0
  119. md_processing/data/commands/commands_product_manager.json +865 -0
  120. md_processing/data/commands/commands_project.json +642 -0
  121. md_processing/data/commands/commands_solution_architect.json +366 -0
  122. md_processing/data/commands.json +6489 -30060
  123. md_processing/data/{commands-working.json → commands_working.json} +9304 -13513
  124. md_processing/data/gened_report_specs.py +6584 -0
  125. md_processing/data/generated_format_sets.json +6533 -0
  126. md_processing/data/generated_format_sets_old.json +4137 -0
  127. md_processing/data/generated_format_sets_old.py +45 -0
  128. md_processing/dr_egeria.py +182 -0
  129. md_processing/md_commands/data_designer_commands.py +195 -583
  130. md_processing/md_commands/ext_ref_commands.py +530 -0
  131. md_processing/md_commands/feedback_commands.py +726 -0
  132. md_processing/md_commands/glossary_commands.py +106 -490
  133. md_processing/md_commands/governance_officer_commands.py +129 -18
  134. md_processing/md_commands/product_manager_commands.py +362 -115
  135. md_processing/md_commands/project_commands.py +351 -134
  136. md_processing/md_commands/solution_architect_commands.py +276 -232
  137. md_processing/md_commands/view_commands.py +295 -0
  138. md_processing/md_processing_utils/common_md_proc_utils.py +258 -166
  139. md_processing/md_processing_utils/common_md_utils.py +138 -43
  140. md_processing/md_processing_utils/determine_width.py +103 -0
  141. md_processing/md_processing_utils/extraction_utils.py +100 -39
  142. md_processing/md_processing_utils/gen_report_specs.py +643 -0
  143. md_processing/md_processing_utils/generate_dr_help.py +61 -33
  144. md_processing/md_processing_utils/generate_md_cmd_templates.py +20 -19
  145. md_processing/md_processing_utils/generate_md_templates.py +3 -12
  146. md_processing/md_processing_utils/md_processing_constants.py +1053 -72
  147. pyegeria/__init__.py +203 -158
  148. pyegeria/core/__init__.py +40 -0
  149. pyegeria/core/_base_platform_client.py +574 -0
  150. pyegeria/core/_base_server_client.py +573 -0
  151. pyegeria/{_exceptions_new.py → core/_exceptions.py} +62 -30
  152. pyegeria/{_globals.py → core/_globals.py} +14 -3
  153. pyegeria/core/_server_client.py +6073 -0
  154. pyegeria/{_validators.py → core/_validators.py} +7 -8
  155. pyegeria/core/config.py +654 -0
  156. pyegeria/{create_tech_guid_lists.py → core/create_tech_guid_lists.py} +0 -1
  157. pyegeria/core/load_config.py +37 -0
  158. pyegeria/{logging_configuration.py → core/logging_configuration.py} +1 -1
  159. pyegeria/core/mcp_adapter.py +144 -0
  160. pyegeria/core/mcp_server.py +212 -0
  161. pyegeria/core/utils.py +405 -0
  162. pyegeria/{_client.py → deprecated/_client.py} +24 -25
  163. pyegeria/{_deprecated_gov_engine.py → deprecated/_deprecated_gov_engine.py} +16 -16
  164. pyegeria/{classification_manager_omvs.py → deprecated/classification_manager_omvs.py} +1987 -1877
  165. pyegeria/{output_formatter.py → deprecated/output_formatter_with_machine_keys.py} +298 -45
  166. pyegeria/{runtime_manager_omvs.py → deprecated/runtime_manager_omvs.py} +155 -171
  167. pyegeria/{valid_metadata_omvs.py → deprecated/valid_metadata_omvs.py} +93 -93
  168. pyegeria/{x_action_author_omvs.py → deprecated/x_action_author_omvs.py} +2 -3
  169. pyegeria/egeria_cat_client.py +26 -70
  170. pyegeria/egeria_client.py +130 -93
  171. pyegeria/egeria_config_client.py +40 -46
  172. pyegeria/egeria_tech_client.py +141 -54
  173. pyegeria/models/__init__.py +150 -0
  174. pyegeria/{models.py → models/models.py} +156 -20
  175. pyegeria/omvs/__init__.py +84 -0
  176. pyegeria/omvs/action_author.py +342 -0
  177. pyegeria/omvs/actor_manager.py +5980 -0
  178. pyegeria/omvs/asset_catalog.py +842 -0
  179. pyegeria/omvs/asset_maker.py +2736 -0
  180. pyegeria/omvs/automated_curation.py +4403 -0
  181. pyegeria/omvs/classification_manager.py +11213 -0
  182. pyegeria/{collection_manager.py → omvs/collection_manager.py} +1334 -1160
  183. pyegeria/omvs/community_matters_omvs.py +468 -0
  184. pyegeria/{core_omag_server_config.py → omvs/core_omag_server_config.py} +157 -157
  185. pyegeria/{data_designer.py → omvs/data_designer.py} +1115 -660
  186. pyegeria/omvs/data_discovery.py +869 -0
  187. pyegeria/omvs/data_engineer.py +372 -0
  188. pyegeria/omvs/digital_business.py +1133 -0
  189. pyegeria/omvs/external_links.py +1752 -0
  190. pyegeria/omvs/feedback_manager.py +834 -0
  191. pyegeria/{full_omag_server_config.py → omvs/full_omag_server_config.py} +73 -69
  192. pyegeria/{glossary_manager.py → omvs/glossary_manager.py} +857 -519
  193. pyegeria/{governance_officer.py → omvs/governance_officer.py} +964 -468
  194. pyegeria/omvs/lineage_linker.py +314 -0
  195. pyegeria/omvs/location_arena.py +1525 -0
  196. pyegeria/omvs/metadata_expert.py +668 -0
  197. pyegeria/omvs/metadata_explorer_omvs.py +2943 -0
  198. pyegeria/omvs/my_profile.py +1042 -0
  199. pyegeria/omvs/notification_manager.py +358 -0
  200. pyegeria/omvs/people_organizer.py +394 -0
  201. pyegeria/{platform_services.py → omvs/platform_services.py} +113 -193
  202. pyegeria/omvs/product_manager.py +1825 -0
  203. pyegeria/omvs/project_manager.py +1907 -0
  204. pyegeria/omvs/reference_data.py +1140 -0
  205. pyegeria/omvs/registered_info.py +334 -0
  206. pyegeria/omvs/runtime_manager.py +2817 -0
  207. pyegeria/omvs/schema_maker.py +446 -0
  208. pyegeria/{server_operations.py → omvs/server_operations.py} +27 -26
  209. pyegeria/{solution_architect_omvs.py → omvs/solution_architect.py} +1886 -1505
  210. pyegeria/omvs/specification_properties.py +37 -0
  211. pyegeria/omvs/subject_area.py +1042 -0
  212. pyegeria/omvs/template_manager_omvs.py +236 -0
  213. pyegeria/omvs/time_keeper.py +1761 -0
  214. pyegeria/omvs/valid_metadata.py +3221 -0
  215. pyegeria/omvs/valid_metadata_lists.py +37 -0
  216. pyegeria/omvs/valid_type_lists.py +37 -0
  217. pyegeria/view/__init__.py +28 -0
  218. pyegeria/{_output_format_models.py → view/_output_format_models.py} +160 -24
  219. pyegeria/view/_output_formats.py +14 -0
  220. pyegeria/view/base_report_formats.py +2719 -0
  221. pyegeria/view/dr_egeria_reports.py +56 -0
  222. pyegeria/view/format_set_executor.py +397 -0
  223. pyegeria/{md_processing_utils.py → view/md_processing_utils.py} +5 -5
  224. pyegeria/{mermaid_utilities.py → view/mermaid_utilities.py} +2 -154
  225. pyegeria/view/output_formatter.py +1297 -0
  226. pyegeria-5.5.3.3.dist-info/METADATA +218 -0
  227. pyegeria-5.5.3.3.dist-info/RECORD +241 -0
  228. {pyegeria-5.4.0.28.dist-info → pyegeria-5.5.3.3.dist-info}/WHEEL +2 -1
  229. pyegeria-5.5.3.3.dist-info/entry_points.txt +103 -0
  230. pyegeria-5.5.3.3.dist-info/top_level.txt +4 -0
  231. commands/cat/.DS_Store +0 -0
  232. commands/cat/.env +0 -8
  233. commands/cat/README.md +0 -16
  234. commands/cat/debug_log +0 -1126
  235. commands/cat/debug_log.2025-08-18_11-34-38_088636.zip +0 -0
  236. commands/cat/list_categories.py +0 -192
  237. commands/cat/logs/pyegeria.log +0 -4
  238. commands/cli/debug_log +0 -0
  239. commands/cli/debug_log.log +0 -0
  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/logs/pyegeria.log +0 -0
  244. commands/ops/monitor_asset_events.py +0 -108
  245. commands/tech/README.md +0 -24
  246. md_processing/.DS_Store +0 -0
  247. md_processing/dr-egeria-outbox/Collections-2025-08-12-13-30-37.md +0 -163
  248. md_processing/dr-egeria-outbox/Collections-2025-08-12-13-35-58.md +0 -474
  249. md_processing/dr_egeria_inbox/Derive-Dr-Gov-Defs.md +0 -8
  250. md_processing/dr_egeria_inbox/Dr.Egeria Templates.md +0 -873
  251. md_processing/dr_egeria_inbox/arch_test.md +0 -57
  252. md_processing/dr_egeria_inbox/archive/dr_egeria_intro.md +0 -254
  253. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_more_terms.md +0 -696
  254. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part1.md +0 -254
  255. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part2.md +0 -298
  256. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part3.md +0 -608
  257. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part4.md +0 -94
  258. md_processing/dr_egeria_inbox/archive/freddie_intro.md +0 -284
  259. md_processing/dr_egeria_inbox/archive/freddie_intro_orig.md +0 -275
  260. md_processing/dr_egeria_inbox/archive/test-term.md +0 -110
  261. md_processing/dr_egeria_inbox/cat_test.md +0 -100
  262. md_processing/dr_egeria_inbox/collections.md +0 -39
  263. md_processing/dr_egeria_inbox/data_designer_debug.log +0 -6
  264. md_processing/dr_egeria_inbox/data_designer_out.md +0 -60
  265. md_processing/dr_egeria_inbox/data_designer_search_test.md +0 -11
  266. md_processing/dr_egeria_inbox/data_field.md +0 -54
  267. md_processing/dr_egeria_inbox/data_spec.md +0 -77
  268. md_processing/dr_egeria_inbox/data_spec_test.md +0 -2406
  269. md_processing/dr_egeria_inbox/data_test.md +0 -179
  270. md_processing/dr_egeria_inbox/data_test2.md +0 -429
  271. md_processing/dr_egeria_inbox/data_test3.md +0 -462
  272. md_processing/dr_egeria_inbox/dr_egeria_data_designer_1.md +0 -124
  273. md_processing/dr_egeria_inbox/dr_egeria_intro_categories.md +0 -168
  274. md_processing/dr_egeria_inbox/dr_egeria_intro_part1.md +0 -280
  275. md_processing/dr_egeria_inbox/dr_egeria_intro_part2.md +0 -318
  276. md_processing/dr_egeria_inbox/dr_egeria_intro_part3.md +0 -1073
  277. md_processing/dr_egeria_inbox/dr_egeria_isc1.md +0 -44
  278. md_processing/dr_egeria_inbox/generated_help_report.md +0 -9
  279. md_processing/dr_egeria_inbox/glossary_creation_experiment.ipynb +0 -341
  280. md_processing/dr_egeria_inbox/glossary_list.md +0 -5
  281. md_processing/dr_egeria_inbox/glossary_search_test.md +0 -40
  282. md_processing/dr_egeria_inbox/glossary_test1.md +0 -324
  283. md_processing/dr_egeria_inbox/gov_def.md +0 -482
  284. md_processing/dr_egeria_inbox/gov_def2.md +0 -447
  285. md_processing/dr_egeria_inbox/img.png +0 -0
  286. md_processing/dr_egeria_inbox/product.md +0 -211
  287. md_processing/dr_egeria_inbox/rel.md +0 -8
  288. md_processing/dr_egeria_inbox/sb.md +0 -119
  289. md_processing/dr_egeria_inbox/solution-components.md +0 -136
  290. md_processing/dr_egeria_inbox/solution_blueprints.md +0 -118
  291. md_processing/dr_egeria_inbox/synonym_test.md +0 -42
  292. md_processing/dr_egeria_inbox/t2.md +0 -268
  293. md_processing/dr_egeria_outbox/.obsidian/app.json +0 -1
  294. md_processing/dr_egeria_outbox/.obsidian/appearance.json +0 -1
  295. md_processing/dr_egeria_outbox/.obsidian/community-plugins.json +0 -6
  296. md_processing/dr_egeria_outbox/.obsidian/core-plugins.json +0 -31
  297. md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/data.json +0 -10
  298. md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/main.js +0 -4459
  299. md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/manifest.json +0 -10
  300. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/data.json +0 -3
  301. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/main.js +0 -153
  302. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/manifest.json +0 -11
  303. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/styles.css +0 -1
  304. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/main.js +0 -500
  305. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/manifest.json +0 -12
  306. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/styles.css +0 -1
  307. md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/main.js +0 -37
  308. md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/manifest.json +0 -11
  309. md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/styles.css +0 -220
  310. md_processing/dr_egeria_outbox/.obsidian/types.json +0 -28
  311. md_processing/dr_egeria_outbox/.obsidian/workspace.json +0 -220
  312. md_processing/dr_egeria_outbox/Untitled.canvas +0 -1
  313. md_processing/dr_egeria_outbox/friday/processed-2025-08-22 21:22-dr_egeria_intro_part1.md +0 -312
  314. md_processing/dr_egeria_outbox/friday/processed-2025-08-22 21:23-dr_egeria_intro_part1.md +0 -265
  315. md_processing/dr_egeria_outbox/friday/processed-2025-08-23 15:06-dr_egeria_intro_part1.md +0 -230
  316. md_processing/dr_egeria_outbox/friday/processed-2025-08-23 15:30-dr_egeria_intro_part1.md +0 -296
  317. md_processing/dr_egeria_outbox/friday/processed-2025-08-23 15:31-dr_egeria_intro_part1.md +0 -253
  318. md_processing/dr_egeria_outbox/friday/processed-2025-08-23 16:08-dr_egeria_intro_part2.md +0 -343
  319. md_processing/dr_egeria_outbox/friday/processed-2025-08-23 16:12-dr_egeria_intro_part2.md +0 -343
  320. md_processing/dr_egeria_outbox/monday/processed-2025-08-19 07:05-product.md +0 -426
  321. md_processing/dr_egeria_outbox/monday/processed-2025-08-19 07:56-product.md +0 -212
  322. md_processing/dr_egeria_outbox/monday/processed-2025-08-19 09:43-product.md +0 -201
  323. md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 14:55-product.md +0 -77
  324. md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 15:05-product.md +0 -75
  325. md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 15:11-product.md +0 -74
  326. md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 20:40-collections.md +0 -49
  327. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 15:00-Derive-Dr-Gov-Defs.md +0 -719
  328. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:13-Derive-Dr-Gov-Defs.md +0 -41
  329. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:14-Derive-Dr-Gov-Defs.md +0 -33
  330. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:50-Derive-Dr-Gov-Defs.md +0 -192
  331. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 22:08-gov_def2.md +0 -486
  332. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 22:10-gov_def2.md +0 -486
  333. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 08:53-gov_def2.md +0 -486
  334. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 08:54-gov_def2.md +0 -486
  335. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:03-gov_def2.md +0 -486
  336. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:06-gov_def2.md +0 -486
  337. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:10-gov_def2.md +0 -486
  338. md_processing/dr_egeria_outbox/tuesday/processed-2025-07-16 19:15-gov_def2.md +0 -527
  339. md_processing/dr_egeria_outbox/tuesday/processed-2025-07-17 12:08-gov_def2.md +0 -527
  340. md_processing/dr_egeria_outbox/tuesday/processed-2025-07-17 14:27-gov_def2.md +0 -485
  341. md_processing/dr_egeria_outbox/tuesday/processed-2025-08-19 10:55-product.md +0 -209
  342. md_processing/family_docs/Data Designer/Create_Data_Class.md +0 -164
  343. md_processing/family_docs/Data Designer/Create_Data_Dictionary.md +0 -30
  344. md_processing/family_docs/Data Designer/Create_Data_Field.md +0 -162
  345. md_processing/family_docs/Data Designer/Create_Data_Specification.md +0 -36
  346. md_processing/family_docs/Data Designer/Create_Data_Structure.md +0 -38
  347. md_processing/family_docs/Data Designer/View_Data_Classes.md +0 -78
  348. md_processing/family_docs/Data Designer/View_Data_Dictionaries.md +0 -78
  349. md_processing/family_docs/Data Designer/View_Data_Fields.md +0 -78
  350. md_processing/family_docs/Data Designer/View_Data_Specifications.md +0 -78
  351. md_processing/family_docs/Data Designer/View_Data_Structures.md +0 -78
  352. md_processing/family_docs/Data Designer.md +0 -842
  353. md_processing/family_docs/Digital Product Manager/Add_Member->Collection.md +0 -42
  354. md_processing/family_docs/Digital Product Manager/Attach_Collection->Resource.md +0 -36
  355. md_processing/family_docs/Digital Product Manager/Create_Agreement.md +0 -96
  356. md_processing/family_docs/Digital Product Manager/Create_Data_Sharing_Agreement.md +0 -72
  357. md_processing/family_docs/Digital Product Manager/Create_DigitalSubscription.md +0 -102
  358. md_processing/family_docs/Digital Product Manager/Create_Digital_Product.md +0 -134
  359. md_processing/family_docs/Digital Product Manager/Link_Agreement_Items.md +0 -60
  360. md_processing/family_docs/Digital Product Manager/Link_Contracts.md +0 -26
  361. md_processing/family_docs/Digital Product Manager/Link_Digital_Product_-_Digital_Product.md +0 -30
  362. md_processing/family_docs/Digital Product Manager/Link_Subscribers.md +0 -48
  363. md_processing/family_docs/Digital Product Manager.md +0 -668
  364. md_processing/family_docs/Glossary/Attach_Category_Parent.md +0 -18
  365. md_processing/family_docs/Glossary/Attach_Term-Term_Relationship.md +0 -26
  366. md_processing/family_docs/Glossary/Create_Category.md +0 -38
  367. md_processing/family_docs/Glossary/Create_Glossary.md +0 -42
  368. md_processing/family_docs/Glossary/Create_Term.md +0 -70
  369. md_processing/family_docs/Glossary.md +0 -206
  370. md_processing/family_docs/Governance Officer/Create_Business_Imperative.md +0 -106
  371. md_processing/family_docs/Governance Officer/Create_Certification_Type.md +0 -112
  372. md_processing/family_docs/Governance Officer/Create_Governance_Approach.md +0 -114
  373. md_processing/family_docs/Governance Officer/Create_Governance_Obligation.md +0 -114
  374. md_processing/family_docs/Governance Officer/Create_Governance_Principle.md +0 -114
  375. md_processing/family_docs/Governance Officer/Create_Governance_Procedure.md +0 -128
  376. md_processing/family_docs/Governance Officer/Create_Governance_Process.md +0 -122
  377. md_processing/family_docs/Governance Officer/Create_Governance_Processing_Purpose.md +0 -106
  378. md_processing/family_docs/Governance Officer/Create_Governance_Responsibility.md +0 -122
  379. md_processing/family_docs/Governance Officer/Create_Governance_Rule.md +0 -122
  380. md_processing/family_docs/Governance Officer/Create_Governance_Strategy.md +0 -106
  381. md_processing/family_docs/Governance Officer/Create_License_Type.md +0 -112
  382. md_processing/family_docs/Governance Officer/Create_Naming_Standard_Rule.md +0 -122
  383. md_processing/family_docs/Governance Officer/Create_Regulation_Article.md +0 -106
  384. md_processing/family_docs/Governance Officer/Create_Regulation_Definition.md +0 -118
  385. md_processing/family_docs/Governance Officer/Create_Security_Access_Control.md +0 -114
  386. md_processing/family_docs/Governance Officer/Create_Security_Group.md +0 -120
  387. md_processing/family_docs/Governance Officer/Create_Service_Level_Objectives.md +0 -122
  388. md_processing/family_docs/Governance Officer/Create_Threat_Definition.md +0 -106
  389. md_processing/family_docs/Governance Officer/Link_Governance_Controls.md +0 -32
  390. md_processing/family_docs/Governance Officer/Link_Governance_Drivers.md +0 -32
  391. md_processing/family_docs/Governance Officer/Link_Governance_Policies.md +0 -32
  392. md_processing/family_docs/Governance Officer/View_Governance_Definitions.md +0 -82
  393. md_processing/family_docs/Governance Officer.md +0 -2412
  394. md_processing/family_docs/Solution Architect/Create_Information_Supply_Chain.md +0 -70
  395. md_processing/family_docs/Solution Architect/Create_Solution_Blueprint.md +0 -44
  396. md_processing/family_docs/Solution Architect/Create_Solution_Component.md +0 -96
  397. md_processing/family_docs/Solution Architect/Create_Solution_Role.md +0 -66
  398. md_processing/family_docs/Solution Architect/Link_Information_Supply_Chain_Peers.md +0 -32
  399. md_processing/family_docs/Solution Architect/Link_Solution_Component_Peers.md +0 -32
  400. md_processing/family_docs/Solution Architect/View_Information_Supply_Chains.md +0 -32
  401. md_processing/family_docs/Solution Architect/View_Solution_Blueprints.md +0 -32
  402. md_processing/family_docs/Solution Architect/View_Solution_Components.md +0 -32
  403. md_processing/family_docs/Solution Architect/View_Solution_Roles.md +0 -32
  404. md_processing/family_docs/Solution Architect.md +0 -490
  405. md_processing/md_processing_utils/debug_log +0 -574
  406. md_processing/md_processing_utils/debug_log.log +0 -0
  407. md_processing/md_processing_utils/dr-egeria-help-2025-07-17T17:22:09.md +0 -2065
  408. md_processing/md_processing_utils/generated_help_terms.md +0 -842
  409. pyegeria/.DS_Store +0 -0
  410. pyegeria/README.md +0 -35
  411. pyegeria/_client_new.py +0 -1102
  412. pyegeria/_output_formats.py +0 -730
  413. pyegeria/asset_catalog_omvs.py +0 -864
  414. pyegeria/automated_curation_omvs.py +0 -3765
  415. pyegeria/config.py +0 -523
  416. pyegeria/egeria_my_client.py +0 -91
  417. pyegeria/feedback_manager_omvs.py +0 -4573
  418. pyegeria/load_config_orig.py +0 -218
  419. pyegeria/md_processing_helpers.py +0 -58
  420. pyegeria/md_processing_utils_orig.py +0 -1103
  421. pyegeria/metadata_explorer_omvs.py +0 -2326
  422. pyegeria/my_profile_omvs.py +0 -1022
  423. pyegeria/project_manager.py +0 -1591
  424. pyegeria/registered_info.py +0 -167
  425. pyegeria/template_manager_omvs.py +0 -1414
  426. pyegeria/utils.py +0 -256
  427. pyegeria-5.4.0.28.dist-info/METADATA +0 -77
  428. pyegeria-5.4.0.28.dist-info/RECORD +0 -343
  429. pyegeria-5.4.0.28.dist-info/entry_points.txt +0 -105
  430. /commands/cat/debug_log.log → /pyegeria/deprecated/__init__.py +0 -0
  431. /pyegeria/{_exceptions.py → deprecated/_exceptions.py} +0 -0
  432. /pyegeria/{collection_models.py → models/collection_models.py} +0 -0
  433. {pyegeria-5.4.0.28.dist-info → pyegeria-5.5.3.3.dist-info/licenses}/LICENSE +0 -0
@@ -4,27 +4,22 @@ This file contains display-related constants and formatting functions for Egeria
4
4
  import importlib.resources
5
5
  import json
6
6
  import os
7
- import inflect
8
7
 
8
+ import inflect
9
+ from loguru import logger
9
10
  from rich.markdown import Markdown
10
11
 
11
- from md_processing.md_processing_utils.message_constants import ERROR
12
- from pyegeria._globals import DEBUG_LEVEL
13
- from md_processing.md_processing_utils.message_constants import message_types, ALWAYS, ERROR, INFO, WARNING
12
+ from pyegeria.core._globals import DEBUG_LEVEL
13
+ from pyegeria.core.logging_configuration import config_logging
14
14
 
15
15
  inflect_engine = inflect.engine()
16
16
 
17
-
18
17
  EGERIA_ROOT_PATH = os.environ.get("EGERIA_ROOT_PATH", "/home/jovyan")
19
18
  EGERIA_INBOX_PATH = os.environ.get("EGERIA_INBOX_PATH", "loading-bay/dr_egeria_inbox")
20
19
 
21
20
  # Constants for element labels
22
21
  GLOSSARY_NAME_LABELS = ["Glossary Name", "Glossary", "Glossaries", "Owning Glossary", "In Glossary"]
23
- CATEGORY_NAME_LABELS = ["Glossary Category Name", "Glossary Category", "Glossary Categories", "Category Name",
24
- "Category", "Categories"]
25
- PARENT_CATEGORY_LABELS = ["Parent Category Name", "Parent Category", "parent category name", "parent category"]
26
- CHILD_CATEGORY_LABELS = ["Child Categories", "Child Category", "child category names", "child categories",
27
- "Child Category Names"]
22
+
28
23
  TERM_NAME_LABELS = ["Glossary Term Name", "Glossary Term", "Glossary Terms", "Term Name", "Term", "Terms", "Term Names"]
29
24
  PROJECT_NAME_LABELS = ["Project Name", "Project", "Project Names", "Projects"]
30
25
  BLUEPRINT_NAME_LABELS = ["Solution Blueprint Name", "Solution Blueprint", "Solution Blueprints", "Blueprint Name",
@@ -51,19 +46,20 @@ TERM_RELATIONSHPS = ["Synonym", "Translation", "PreferredTerm", "TermISATYPEOFRe
51
46
  "ISARelationship"]
52
47
 
53
48
  # List of supported md_commands
54
- GOV_LINK_LIST = [ "Link Governance Drivers", "Link Drivers", "Detach Governance Drivers", "Detach Drivers",
55
- "Link Governance Policies", "Link Policies", "Detach Governance Policies", "Detach Policies",
56
- "Link Governance Controls", "Link Controls", "Detach Governance Controls", "Detach Controls",
57
- ]
49
+ GOV_LINK_LIST = ["Link Governance Drivers", "Link Drivers", "Detach Governance Drivers", "Detach Drivers",
50
+ "Link Governance Policies", "Link Policies", "Detach Governance Policies", "Detach Policies",
51
+ "Link Governance Controls", "Link Controls", "Detach Governance Controls", "Detach Controls",
52
+ ]
58
53
 
59
- GOV_COM_LIST = [ "Create Business Imperative", "Update Business Imperative",
54
+ GOV_COM_LIST = ["Create Business Imperative", "Update Business Imperative",
60
55
  "Create Regulation Article Definition", "Update Regulation Article Definition",
61
56
  "Create Threat Definition", "Update Threat Definition",
62
57
  "Create Governance Principle", "Update Governance Principle",
63
58
  "Create Governance Obligation", "Update Governance Obligation",
64
59
  "Create Governance Approach", "Update Governance Approach",
65
60
  "Create Governance Strategy", "Update Governance Strategy",
66
- "Create Regulation", "Create Regulation Definition", "Update Regulation", "Update Regulation Definition",
61
+ "Create Regulation", "Create Regulation Definition", "Update Regulation",
62
+ "Update Regulation Definition",
67
63
  "Create Governance Control:", "Update Governance Control",
68
64
  "Create Governance Rule:", "Update Governance Rule",
69
65
  "Create Service Level Objective", "Update Service Level Objective",
@@ -74,16 +70,51 @@ GOV_COM_LIST = [ "Create Business Imperative", "Update Business Imperative",
74
70
  "Create Security Group", "Update Security Group",
75
71
  "Create Naming Standard Rule", "Update Naming Standard Rule",
76
72
  "Create Certification Type", "Update Certification Type",
77
- "Create License Type", "Update License Type",]
78
-
79
- SIMPLE_BASE_COLLECTIONS: set = { "Collection", "Home Collection", "Digital Product", "Result Set" , "Recent Access",
80
- "Reference List", "Work Item List", "Data Sharing Agreement", "Namespace", "Agreement",
81
- "Digital Subscription", "Data Product", "Subscription",
82
- "Root Collection", "Folders", "Context Event Collection", "Name Space Collection",
83
- # "Data Specifications", "Data Specifications", "Data Specs", "Data Specs",
84
- # "Data Dictionaries", "Data Dictionaries",
85
- "Event Set Collection", "Naming Standard Ruleset",
86
- }
73
+ "Create License Type", "Update License Type",
74
+
75
+ ]
76
+
77
+ SIMPLE_BASE_COLLECTIONS: set = {"Collection", "Home Collection", "Digital Product", "Result Set", "Recent Access",
78
+ "Reference List", "Work Item List", "Data Sharing Agreement", "Namespace", "Agreement",
79
+ "Digital Subscription", "Data Product", "Subscription",
80
+ "Root Collection", "Folder", "Context Event Collection", "Name Space Collection",
81
+ # "Data Specifications", "Data Specifications", "Data Specs", "Data Specs",
82
+ # "Data Dictionaries", "Data Dictionaries",
83
+ "Event Set Collection", "Naming Standard Ruleset", "Digital Product Catalog"
84
+ }
85
+ LIST_COMMANDS = {"List Collections", "View Collections", "List Agreements", "View Agreements",
86
+ "List Digital Products", "View Digital Products", "List Products", "View Products",
87
+ "List Subscriptions", "View Subscriptions", "List Folders", "View Folders",
88
+ "List Data Specifications", "View Data Specifications", "List Data Specs", "View Data Specs",
89
+ "List Data Dictionaries", "View Data Dictionaries",
90
+ "List Governance Definitions", "View Governance Definitions", "List Governance Drivers",
91
+ "View Governance Drivers",
92
+ "List Governance Policies", "View Governance Policies", "List Governance Controls",
93
+ "View Governance Controls",
94
+ "List Governance Rules", "View Governance Rules", "List Governance Principles",
95
+ "View Governance Principles",
96
+ "List Governance Obligations", "View Governance Obligations", "List Governance Approaches",
97
+ "View Governance Approaches",
98
+ "List Governance Strategies", "View Governance Strategies", "List Regulations", "View Regulations",
99
+ "List Regulation Definitions", "View Regulation Definitions",
100
+ "List Naming Standard Rulesets", "View Naming Standard Rulesets", "List Governance Drivers",
101
+ "List Governance Strategies", "List Business Imperatives" "List Regulations",
102
+ "List Regulation Articles", "List Threats",
103
+ "List Governance Metrics", "View Governance Metrics", "List Service Level Objectives",
104
+ "View Service Level Objectives",
105
+ "List Governance Rules", "View Governance Rules", "List Notification Types", "View Notification Types",
106
+ "List Security Access Controls", "View Security Access Controls", "List Security Groups",
107
+ "View Security Groups",
108
+ "List Governance Procedures", "View Governance Procedures", "List Methodologies", "View Methodologies",
109
+ "List Governance Responsibilities", "View Governance Responsibilities", "List Terms and Conditions",
110
+ "View Terms and Conditions", "List License Types", "View License Types", "List Certification Types",
111
+ "View Certification Types",
112
+ "List Subject Area Definitions", "View Subject Area Definitions", "List Data Processing Purposes",
113
+ "View Data Processing Purposes",
114
+ "List Projects", "View Projects",
115
+
116
+ }
117
+
87
118
  SIMPLE_COLLECTIONS: set = set()
88
119
  for element in SIMPLE_BASE_COLLECTIONS:
89
120
  SIMPLE_COLLECTIONS.add(f"Create {element}")
@@ -92,8 +123,6 @@ for element in SIMPLE_BASE_COLLECTIONS:
92
123
  SIMPLE_COLLECTIONS.add(f"Create {plural}")
93
124
  SIMPLE_COLLECTIONS.add(f"Update {plural}")
94
125
 
95
-
96
-
97
126
  COLLECTIONS_LIST = ["List Collections", "View Collections", "List Digital Products", "View Digital Products",
98
127
  "List Data Products", "View Data Products",
99
128
  "List Data Sharing Agreements", "View Data Sharing Agreements",
@@ -107,99 +136,288 @@ COLLECTIONS_LIST = ["List Collections", "View Collections", "List Digital Produc
107
136
  "List Context Event Collections", "View Context Event Collections",
108
137
  "List Name Space Collections", "View Name Space Collections",
109
138
  "List Event Set Collections", "View Event Set Collections",
110
- "List Naming Standard Rulesets", "View Naming Standard Rulesets",
111
- ]
139
+ "List Naming Standard Rulesets", "View Naming Standard Rulesets", "List External Reference",
140
+ "List Related Media", "List Cited Document", "List External Data Source",
141
+ "List External Model Source",
142
+ "List Digital Product Catalogs", "View Digital Product Catalogs", ]
143
+
144
+ PROJECT_COMMANDS = ["Create Project", "Update Project", "Create Campaign", "Update Campaign",
145
+ "Create Task", "Update Task", "Create Study Project", "Update Study Project",
146
+ "Create Personal Project", "Update Personal Project"]
147
+
148
+ LINK_EXT_REF = ["Link External Reference", "Link Referenceable->External Reference", "Attach External Reference",
149
+ "Detach External Reference", "Detach External Reference Link", "Link External Data Source",
150
+ "Link External Model Source", "Detach External Data Source", "Detach External Model Source", ]
151
+
152
+ LINK_MEDIA = ["Link Related Media", "Link Referenceable->Related Media", "Attach Related Media",
153
+ "Attach Media Reference Link",
154
+ "Detach Related Media", "Detach Related Media Link", "Detach Media Reference Link"]
155
+
156
+ LINK_CITED_DOC = ["Link Cited Document", "Link Referenceable->Cited Document", "Attach Cited Document",
157
+ "Attach Cited Document Link",
158
+ "Detach Cited Document", "Detach Cited Document Link", ]
159
+
160
+ EXT_REF_UPSERT = ["Create External Reference", "Update External Reference",
161
+ "Create Related Media", "Update Related Media",
162
+ "Create Cited Document", "Update Cited Document",
163
+ "Create External Data Source", "Update External Data Source", "Create External Model Source",
164
+ "Update External Model Source", ]
165
+ EXT_REF_COMMANDS = EXT_REF_UPSERT + LINK_EXT_REF + LINK_MEDIA + LINK_CITED_DOC
166
+
167
+ COLLECTION_CREATE = ["Create Collection", "Update Collection", "Create Digital Product Catalog",
168
+ "Update Digital Product Catalog",
169
+ "Create Root Collection", "Update Root Collection", "Create Folder", "Update Folder",
170
+ ]
171
+ FEEDBACK_COMMANDS = ["Create Comment", "Update Comment", "Create Journal Entry",
172
+ "Create Informal Tag", "Update Informal Tag", "Link Tag->Element", "Link Tag", "Detach Tag"]
112
173
 
113
174
  command_list = ["Provenance", "Create Glossary", "Update Glossary", "Create Term", "Update Term", "List Terms",
114
175
  "List Term Details", "List Glossary Terms", "List Term History", "List Term Revision History",
115
176
  "List Term Update History", "List Glossary Structure", "List Glossaries", "List Categories",
116
- "List Glossary Categories", "Create Personal Project", "Update Personal Project", "Create Category",
117
- "Update Category", "Create Solution Blueprint", "Update Solution Blueprint", "View Solution Blueprint",
177
+ "List Glossary Categories", "Link Project Dependency", "Attach Project Dependency",
178
+ "Detach Project Dependency", "Link Parent Project", "Attach Parent Project", "Detach Parent Project",
179
+ "Detach Parent Project",
180
+ "Create Solution Blueprint", "Update Solution Blueprint", "View Solution Blueprint",
118
181
  "View Solution Blueprints", "View Blueprints",
119
- "View Information Supply Chain", "View Information Supply Chains", "View Supply Chains", "View Supply Chain",
182
+ "View Information Supply Chain", "View Information Supply Chains", "View Supply Chains",
183
+ "View Supply Chain",
120
184
  "View Solution Components", "View Solution Component", "View Solution Roles", "View Solution Role",
121
185
  "Create Information Supply Chain", "Update Information Supply Chain",
122
186
  "Link Information Supply Chain Peers", "Link Supply Chains", "Link Information Supply Chains",
123
187
  "Unlink Information Supply Chain Peers", "Unlink Information Supply Chains", "Unlink Supply Chains",
124
- "Create Solution Component", "Update Solution Component", "Link Solution Components", "Wire Solution Components",
125
- "Detach Solution Components", "Unlink Solution Components", "Create Term-Term Relationship",
126
- "Update Term-Term Relationship", "Create Data Spec", "Create Data Specification", "Update Data Spec",
188
+ "Create Solution Component", "Update Solution Component", "Link Solution Components",
189
+ "Wire Solution Components",
190
+ "Detach Solution Components", "Unlink Solution Components", "Link Term-Term Relationship", "Link Terms",
191
+ "Detach Terms",
192
+ "Detach Term-Term Relationship", "Create Data Spec", "Create Data Specification", "Update Data Spec",
127
193
  "Update Data Specification", "Create Data Field", "Update Data Field", "Create Data Structure",
128
194
  "Update Data Structure", "Create Data Dictionary", "Update Data Dictionary", "Create Data Dict",
129
195
  "Update Data Dict",
130
196
  "View Data Structures", "View Data Structure", "View Data Fields", "View Data Field",
131
- "View Dataa Classes", "View Data Class", "Create Data Class", "Update Data Class",
197
+ "View Data Classes", "View Data Class", "Create Data Class", "Update Data Class",
198
+
199
+ "Create Data Specifications", "Update Data Specifications", "Create Data Specs", "Update Data Specs",
200
+ "Create Data Dictionaries", "Update Data Dictionaries", "Create Data Dicts", "Update Data Dicts",
201
+ "View Data Specifications", "View Data Specification", "View Data Specs", "View Data Specification",
202
+ "View Data Dictionaries", "View Data Dictionary", "View Data Dicts", "View Data Dictionary",
203
+ "Link Collection->Root Collection", "Link Collection->Folder",
204
+ "Link Collection->Context Event Collection", "Link Collection->Name Space Collection",
205
+ "Link Collection->Event Set Collection", "Link Collection->Naming Standard Ruleset",
132
206
  "Create Digital Product", "Create Data Product", "Update Digital Product", "Update Data Product",
133
207
  "Create Agreement", "Update Agreement",
134
208
  "Link Digital Products", "Link Product-Product", "Detach Digital Products", "Detach Product-Product",
135
209
  "Create Data Sharing Agreement", "Update Data Sharing Agreement",
136
- "Create Digital Subscription", "Create Product Subscription", "Update Digital Subscription", "Update Product Subscription",
210
+ "Create Digital Subscription", "Create Product Subscription", "Update Digital Subscription",
211
+ "Update Product Subscription",
137
212
  "Link Agreement->Item", "Detach Agreement->Item",
138
213
  "Attach Contract", "Detach Contract",
139
214
  "Link Subscriber->Subscription", "Detach Subscriber->Subscription",
140
215
  "Link Collection->Resource", "Attach Collection->Resource",
141
216
  "Unlink Collection->Resource", "Detach Collection->Resource",
142
- "Add Member to Collection", "Add Member", "Member->Collection",
143
- "Remove Member from Collection","Remove Member->Collection",
144
- "View Governance Definitions", "View Gov Definitions",
145
- "List Governance Definitions", "List Gov Definitions",
146
- "View Governance Definition Context","List Governance Definition Context",
217
+ "Add Member to Collection", "Add Member", "Add Member->Collection", 'Add Member', 'Add to Folder',
218
+ "Remove Member from Collection", "Remove Member->Collection", ' Remove Member', 'Remove from Folder',
219
+ "View Governance Definitions", "View Gov Definitions",
220
+ "List Governance Definitions", "List Gov Definitions",
221
+ "View Governance Definition Context", "List Governance Definition Context",
147
222
  "View Governance Def Context", "List Governance Def Context",
148
223
  "View Report",
149
- # "Create Business Imperative", "Update Business Imperative",
150
- # "Create Regulation Article Definition", "Update Regulation Article Definition",
151
- # "Create Threat Definition", "Update Threat Definition",
152
- # "Create Governance Principle", "Update Governance Principle",
153
- # "Create Governance Obligation", "Update Governance Obligation",
154
- # "Create Governance Approach", "Update Governance Approach",
155
- # "Create Governance Strategy", "Update Governance Strategy",
156
- # "Create Regulation", "Create Regulation Definition", "Update Regulation", "Update Regulation Definition",
157
- # "Create Governance Control:", "Update Governance Control",
158
- # "Create Governance Rule:", "Update Governance Rule",
159
- # "Create Service Level Objective", "Update Service Level Objective",
160
- # "Create Governance Process", "Update Governance Process",
161
- # "Create Governance Responsibility", "Update Governance Responsibility",
162
- # "Create Governance Procedure", "Update Governance Procedure",
163
- # "Create Security Access Control", "Update Security Access Control",
164
- # "Create Security Group", "Update Security Group",
165
- # "Create Naming Standard Rule", "Update Naming Standard Rule",
166
- # "Create Certification Type", "Update Certification Type",
167
- # "Create License Type", "Update License Type",
168
- # "Link Governance Drivers", "Detach Governance Drivers",
169
- # "Link Governance Policies", "Detach Governance Policies",
170
- # "Link Governance Controls", "Detach Governance Controls",
224
+ "Create Business Imperative", "Update Business Imperative",
225
+ "Create Regulation Article Definition", "Update Regulation Article Definition",
226
+ "Create Threat Definition", "Update Threat Definition",
227
+ "Create Governance Principle", "Update Governance Principle",
228
+ "Create Governance Obligation", "Update Governance Obligation",
229
+ "Create Governance Approach", "Update Governance Approach",
230
+ "Create Governance Strategy", "Update Governance Strategy",
231
+ "Create Regulation", "Create Regulation Definition", "Update Regulation",
232
+ "Update Regulation Definition",
233
+ "Create Governance Control:", "Update Governance Control",
234
+ "Create Governance Rule:", "Update Governance Rule",
235
+ "Create Service Level Objective", "Update Service Level Objective",
236
+ "Create Governance Process", "Update Governance Process",
237
+ "Create Governance Responsibility", "Update Governance Responsibility",
238
+ "Create Governance Procedure", "Update Governance Procedure",
239
+ "Create Security Access Control", "Update Security Access Control",
240
+ "Create Security Group", "Update Security Group",
241
+ "Create Naming Standard Rule", "Update Naming Standard Rule",
242
+ "Create Certification Type", "Update Certification Type",
243
+ "Create License Type", "Update License Type",
244
+ "Link Governance Drivers", "Detach Governance Drivers",
245
+ "Link Governance Policies", "Detach Governance Policies",
246
+ "Link Governance Controls", "Detach Governance Controls",
247
+ "Link Governed By", "Attach Governed By", "Detach Governed By",
248
+ "Create CSV File"
171
249
 
172
250
  ]
173
-
251
+ command_list.extend(LIST_COMMANDS)
174
252
  command_list.extend(GOV_COM_LIST)
175
253
  command_list.extend(GOV_LINK_LIST)
176
254
  command_list.extend(COLLECTIONS_LIST)
255
+ command_list.extend(COLLECTION_CREATE)
177
256
  command_list.extend(SIMPLE_COLLECTIONS)
257
+ command_list.extend(PROJECT_COMMANDS)
258
+ command_list.extend(EXT_REF_COMMANDS)
178
259
  command_list.extend(["Link Governance Response", "Detach Governance Response",
179
- "Link Governance Mechanism", "Detach Governance Mechanism"])
180
-
260
+ "Link Governance Mechanism", "Detach Governance Mechanism"])
261
+ command_list.extend(FEEDBACK_COMMANDS)
181
262
  pre_command = "\n---\n==> Processing object_action:"
182
263
  command_seperator = Markdown("\n---\n")
183
264
  EXISTS_REQUIRED = "Exists Required"
184
265
  COMMAND_DEFINITIONS = {}
185
266
 
267
+ generic_bodies = {
268
+
269
+ }
270
+
271
+ config_logging()
272
+ logger.enable("pyegeria")
186
273
  debug_level = DEBUG_LEVEL
187
274
 
188
275
 
276
+ # def load_commands(filename: str) -> None:
277
+ # global COMMAND_DEFINITIONS
278
+ #
279
+ # try:
280
+ # config_path = importlib.resources.files("md_processing") / "data" / filename
281
+ # config_str = config_path.read_text(encoding="utf-8")
282
+ # COMMAND_DEFINITIONS = json.loads(config_str)
283
+ #
284
+ # except FileNotFoundError:
285
+ # msg = f"ERROR: File {filename} not found."
286
+ # print(ERROR, msg, debug_level)
287
+
189
288
  def load_commands(filename: str) -> None:
190
289
  global COMMAND_DEFINITIONS
191
290
 
192
291
  try:
193
292
  config_path = importlib.resources.files("md_processing") / "data" / filename
194
293
  config_str = config_path.read_text(encoding="utf-8")
195
- COMMAND_DEFINITIONS = json.loads(config_str)
294
+
295
+ # Validate JSON before attempting to load
296
+ try:
297
+ COMMAND_DEFINITIONS = json.loads(config_str)
298
+ msg = f"Successfully loaded {filename}"
299
+ logger.debug(msg)
300
+ except json.JSONDecodeError as json_err:
301
+ # Provide detailed error information
302
+ error_line = json_err.lineno
303
+ error_col = json_err.colno
304
+ error_pos = json_err.pos
305
+
306
+ # Extract context around the error
307
+ lines = config_str.split('\n')
308
+ start_line = max(0, error_line - 3)
309
+ end_line = min(len(lines), error_line + 2)
310
+
311
+ context = '\n'.join([
312
+ f"Line {i + 1}: {lines[i]}"
313
+ for i in range(start_line, end_line)
314
+ ])
315
+
316
+ error_msg = (
317
+ f"\n{'=' * 80}\n"
318
+ f"ERROR: Invalid JSON in {filename}\n"
319
+ f"{'=' * 80}\n"
320
+ f"Location: Line {error_line}, Column {error_col} (char position {error_pos})\n"
321
+ f"Error: {json_err.msg}\n"
322
+ f"\nContext around error:\n{context}\n"
323
+ f"{'=' * 80}\n"
324
+ f"\nPlease fix the JSON syntax error in {filename} at line {error_line}.\n"
325
+ f"Common issues:\n"
326
+ f" - Missing comma between elements\n"
327
+ f" - Trailing comma before closing bracket/brace\n"
328
+ f" - Unescaped quotes in strings\n"
329
+ f" - Missing closing bracket/brace\n"
330
+ f"{'=' * 80}\n"
331
+ )
332
+
333
+ print(error_msg)
334
+
335
+ # Initialize with empty dict to allow application to continue
336
+ # (though functionality will be limited)
337
+ COMMAND_DEFINITIONS = {}
338
+
339
+ # Re-raise with more context
340
+ raise json.JSONDecodeError(
341
+ f"Invalid JSON in {filename}: {json_err.msg}",
342
+ json_err.doc,
343
+ json_err.pos
344
+ ) from json_err
196
345
 
197
346
  except FileNotFoundError:
198
347
  msg = f"ERROR: File {filename} not found."
199
- print(ERROR, msg, debug_level)
348
+ print(msg)
349
+ COMMAND_DEFINITIONS = {}
350
+ raise FileNotFoundError(msg)
351
+ except Exception as e:
352
+ msg = f"ERROR: Unexpected error loading {filename}: {str(e)}"
353
+ print(msg)
354
+ COMMAND_DEFINITIONS = {}
355
+ raise
356
+
357
+
358
+ def validate_json_file(filename: str) -> tuple[bool, str]:
359
+ """
360
+ Validate a JSON file and return status with error details.
361
+
362
+ Returns:
363
+ tuple: (is_valid: bool, message: str)
364
+ """
365
+ try:
366
+ config_path = importlib.resources.files("md_processing") / "data" / filename
367
+ config_str = config_path.read_text(encoding="utf-8")
368
+ json.loads(config_str)
369
+ return True, f"JSON file {filename} is valid"
370
+ except json.JSONDecodeError as e:
371
+ error_msg = (
372
+ f"Invalid JSON at line {e.lineno}, column {e.colno}: {e.msg}\n"
373
+ f"Character position: {e.pos}"
374
+ )
375
+ return False, error_msg
376
+ except Exception as e:
377
+ return False, f"Error reading file: {str(e)}"
378
+
379
+
380
+ def find_json_errors(filename: str, max_errors: int = 10) -> list[str]:
381
+ """
382
+ Attempt to find multiple JSON errors in a file.
383
+
384
+ This function tries to parse the JSON and collect error information.
385
+ """
386
+ errors = []
387
+ try:
388
+ config_path = importlib.resources.files("md_processing") / "data" / filename
389
+ config_str = config_path.read_text(encoding="utf-8")
390
+
391
+ # Try to parse
392
+ json.loads(config_str)
393
+ return ["No errors found - JSON is valid"]
394
+
395
+ except json.JSONDecodeError as e:
396
+ lines = config_str.split('\n')
397
+ error_line = e.lineno - 1 # Convert to 0-indexed
398
+
399
+ # Get context
400
+ start = max(0, error_line - 2)
401
+ end = min(len(lines), error_line + 3)
200
402
 
403
+ error_context = []
404
+ for i in range(start, end):
405
+ prefix = ">>> " if i == error_line else " "
406
+ error_context.append(f"{prefix}Line {i + 1}: {lines[i]}")
201
407
 
202
- def get_command_spec(command: str) -> dict | None:
408
+ error_msg = (
409
+ f"Error at line {e.lineno}, column {e.colno}: {e.msg}\n" +
410
+ "\n".join(error_context)
411
+ )
412
+ errors.append(error_msg)
413
+
414
+ except Exception as e:
415
+ errors.append(f"Unexpected error: {str(e)}")
416
+
417
+ return errors
418
+
419
+
420
+ def get_command_spec(command: str, body_type: str = None) -> dict | None:
203
421
  global COMMAND_DEFINITIONS
204
422
 
205
423
  com = COMMAND_DEFINITIONS.get('Command Specifications', {}).get(command, None)
@@ -211,6 +429,31 @@ def get_command_spec(command: str) -> dict | None:
211
429
  return COMMAND_DEFINITIONS.get('Command Specifications', {}).get(obj, None)
212
430
 
213
431
 
432
+ def does_command_match(command: str, alt_names: list[str]) -> bool:
433
+ # Define verb synonyms
434
+ verbs_synonyms = {
435
+ "Link": ["Link", "Attach", "Detach", "Unlink"],
436
+ "Create": ["Create", "Update"],
437
+ "View": ["List", "View"],
438
+ }
439
+
440
+ # Extract the verb from the command
441
+ command_parts = command.split(maxsplit=1)
442
+ if len(command_parts) < 2:
443
+ return False # Invalid command structure
444
+ verb, terms = command_parts
445
+
446
+ # Generate all possible combinations and check for a match
447
+ for primary_verb, synonyms in verbs_synonyms.items():
448
+ for synonym in synonyms:
449
+ for alt_name in alt_names:
450
+ alt_name = alt_name.strip()
451
+ tst = f"{synonym} {alt_name}"
452
+ if tst == command:
453
+ return True
454
+ return False
455
+
456
+
214
457
  def find_alternate_names(command: str) -> str | None:
215
458
  global COMMAND_DEFINITIONS
216
459
 
@@ -218,7 +461,13 @@ def find_alternate_names(command: str) -> str | None:
218
461
  for key, value in comm_spec.items():
219
462
  if isinstance(value, dict):
220
463
  v = value.get('alternate_names', "")
221
- if command in v:
464
+ v = v.split(';') if v else ""
465
+ verb = command.split()[0] if command else ""
466
+ normalized_command = " ".join(command.split())
467
+ # normalized_alternates = (" ".join(s.split()) for s in v)
468
+ if (normalized_command in v):
469
+ return key
470
+ elif does_command_match(normalized_command, v):
222
471
  return key
223
472
  return None
224
473
 
@@ -245,3 +494,735 @@ def get_attribute_labels(command: str, attrib_name: str) -> list | None:
245
494
  else:
246
495
  print("Key not found in the dictionary.")
247
496
  return None
497
+
498
+
499
+ def add_default_upsert_attributes(attributes: list[dict]) -> list[dict]:
500
+ new_attributes = attributes
501
+ default_upsert_attributes = [
502
+ {
503
+ "Status": {
504
+ "variable_name": "element_status",
505
+ "inUpdate": True,
506
+ "attr_labels": "",
507
+ "examples": "APPROVED",
508
+ "default_value": "ACTIVE",
509
+ "valid_values": "DRAFT; PREPARED; PROPOSED; APPROVED; REJECTED; APPROVED_CONCEPT; UNDER_DEVELOPMENT; DEVELOPMENT_COMPLETE; APPROVED_FOR_DEPLOYMENT; ACTIVE; DISABLED; DEPRECATED; OTHER",
510
+ "existing_element": "",
511
+ "description": "The status of the digital product. There is a list of valid values that this conforms to.",
512
+
513
+ "generated": False,
514
+ "style": "Valid Value",
515
+ "user_specified": True,
516
+ "unique": False,
517
+ "input_required": False,
518
+
519
+ "min_cardinality": 1,
520
+ "max_cardinality": 1,
521
+ "level": "INVISIBLE",
522
+
523
+ }
524
+ },
525
+ {
526
+ "User Defined Status": {
527
+ "variable_name": "user_defined_status",
528
+ "inUpdate": True,
529
+ "attr_labels": "",
530
+ "examples": "Pink",
531
+ "default_value": "",
532
+ "valid_values": "",
533
+ "existing_element": "",
534
+ "description": "Only valid if Product Status is set to OTHER. User defined & managed status values.",
535
+ "generated": False,
536
+ "style": "Simple",
537
+ "user_specified": True,
538
+ "unique": False,
539
+ "input_required": False,
540
+ "min_cardinality": 0,
541
+ "max_cardinality": 1,
542
+ "level": "Basic",
543
+ }
544
+ },
545
+
546
+ {
547
+ "Category": {
548
+ "variable_name": "category",
549
+ "inUpdate": True,
550
+ "attr_labels": "Category Name",
551
+ "examples": "",
552
+ "default_value": "",
553
+ "valid_values": "",
554
+ "existing_element": "",
555
+ "description": "A user specified category name that can be used for example, to define product types or agreement types.",
556
+
557
+ "generated": False,
558
+ "style": "Simple",
559
+ "user_specified": True,
560
+ "unique": False,
561
+ "input_required": False,
562
+
563
+ "min_cardinality": 0,
564
+ "max_cardinality": 1,
565
+ "level": "Basic",
566
+
567
+ }
568
+ },
569
+ {
570
+ "Version Identifier": {
571
+ "variable_name": "current_version",
572
+ "inUpdate": True,
573
+ "attr_labels": "",
574
+ "examples": "V1.01",
575
+ "default_value": "1.0",
576
+ "valid_values": "",
577
+ "existing_element": "",
578
+ "description": "Published product version identifier.",
579
+
580
+ "generated": False,
581
+ "style": "Simple",
582
+ "user_specified": True,
583
+ "unique": False,
584
+ "input_required": False,
585
+
586
+ "min_cardinality": 0,
587
+ "max_cardinality": 1,
588
+ "level": "Basic",
589
+
590
+ }
591
+ },
592
+ {
593
+ "URL": {
594
+ "variable_name": "url",
595
+ "inUpdate": True,
596
+ "attr_labels": "",
597
+ "examples": "",
598
+ "default_value": "",
599
+ "valid_values": "",
600
+ "existing_element": "",
601
+ "description": "Link to supporting information",
602
+
603
+ "generated": False,
604
+ "style": "Simple",
605
+ "user_specified": True,
606
+ "unique": False,
607
+ "input_required": False,
608
+
609
+ "min_cardinality": 0,
610
+ "max_cardinality": 1,
611
+ "level": "Basic",
612
+
613
+ }
614
+ },
615
+ {
616
+ "Identifier": {
617
+ "variable_name": "identifier",
618
+ "inUpdate": True,
619
+ "attr_labels": "",
620
+ "examples": "",
621
+ "default_value": "",
622
+ "valid_values": "",
623
+ "existing_element": "",
624
+ "description": "role identifier",
625
+
626
+ "generated": False,
627
+ "style": "Simple",
628
+ "user_specified": True,
629
+ "unique": False,
630
+ "input_required": False,
631
+
632
+ "min_cardinality": 1,
633
+ "max_cardinality": 1,
634
+ "level": "Basic",
635
+
636
+ }
637
+ },
638
+ {
639
+ "Classifications": {
640
+ "variable_name": "classifications",
641
+ "inUpdate": True,
642
+ "attr_labels": "classification",
643
+ "examples": "Folder; RootCollection; ReferenceList; HomeCollection; ResultSet; RecentAccess; WorkItemList; NameSpace ",
644
+ "default_value": "",
645
+ "valid_values": "",
646
+ "existing_element": "",
647
+ "description": "Optionally specify the initial classifications for a collection. Multiple classifications can be specified. ",
648
+
649
+ "generated": False,
650
+ "style": "Named DICT",
651
+ "min_cardinality": 0,
652
+ "max_cardinality": 1,
653
+ "level": "Advanced"
654
+ }
655
+ },
656
+ {
657
+ "Is Own Anchor": {
658
+ "variable_name": "is_own_anchor",
659
+ "inUpdate": True,
660
+ "attr_labels": "Own Anchor",
661
+ "examples": "",
662
+ "default_value": "True",
663
+ "valid_values": "",
664
+ "existing_element": "",
665
+ "description": "Generally True. ",
666
+
667
+ "generated": False,
668
+ "style": "Bool",
669
+ "user_specified": True,
670
+ "unique": False,
671
+ "input_required": False,
672
+
673
+ "min_cardinality": 1,
674
+ "max_cardinality": 1,
675
+ "level": "Advanced",
676
+
677
+ }
678
+ },
679
+ {
680
+ "Anchor ID": {
681
+ "variable_name": "anchor_id",
682
+ "inUpdate": True,
683
+ "attr_labels": "",
684
+ "examples": "",
685
+ "default_value": "",
686
+ "valid_values": "",
687
+ "existing_element": "",
688
+ "description": "Anchor identity for the collection. Typically a qualified name but if display name is unique then it could be used (not recommended)",
689
+
690
+ "generated": False,
691
+ "style": "Reference Name",
692
+ "user_specified": True,
693
+ "unique": True,
694
+ "input_required": False,
695
+
696
+ "min_cardinality": 0,
697
+ "max_cardinality": 1,
698
+ "level": "Advanced",
699
+
700
+ }
701
+ },
702
+ {
703
+ "Parent ID": {
704
+ "variable_name": "parent_id",
705
+ "inUpdate": True,
706
+ "attr_labels": "Parent;",
707
+ "examples": "DataDict::MyParent",
708
+ "default_value": "",
709
+ "valid_values": "",
710
+ "existing_element": "DataDicti",
711
+ "description": "Unique name of the parent element.",
712
+
713
+ "generated": False,
714
+ "style": "Reference Name",
715
+ "user_specified": True,
716
+ "unique": False,
717
+ "input_required": False,
718
+
719
+ "min_cardinality": 0,
720
+ "max_cardinality": 1,
721
+ "level": "Advanced",
722
+ "Journal Entry": "Should the parent be anything or just a collection?"
723
+ }
724
+ },
725
+ {
726
+ "Parent Relationship Type Name": {
727
+ "variable_name": "parent_rel_type_name",
728
+ "inUpdate": True,
729
+ "attr_labels": "",
730
+ "examples": "",
731
+ "default_value": "",
732
+ "valid_values": "",
733
+ "existing_element": "",
734
+ "description": "The kind of the relationship to the parent element.",
735
+
736
+ "generated": False,
737
+ "style": "Simple",
738
+ "user_specified": True,
739
+ "unique": False,
740
+ "input_required": False,
741
+
742
+ "min_cardinality": 0,
743
+ "max_cardinality": 1,
744
+ "level": "Advanced",
745
+ "Journal Entry": "Any restrictions?"
746
+ }
747
+ },
748
+ {
749
+ "Anchor Scope Name": {
750
+ "variable_name": "anchor_scope_guid",
751
+ "inUpdate": True,
752
+ "attr_labels": "",
753
+ "examples": "",
754
+ "default_value": "",
755
+ "valid_values": "",
756
+ "existing_element": "DataDict",
757
+ "description": "Optional qualified name of an anchor scope.",
758
+
759
+ "generated": False,
760
+ "style": "Reference Name",
761
+ "user_specified": True,
762
+ "unique": False,
763
+ "input_required": False,
764
+
765
+ "min_cardinality": 0,
766
+ "max_cardinality": 1,
767
+ "level": "Advanced",
768
+
769
+ }
770
+ },
771
+ {
772
+ "Parent at End1": {
773
+ "variable_name": "parent_end1",
774
+ "inUpdate": True,
775
+ "attr_labels": "",
776
+ "examples": "",
777
+ "default_value": "True",
778
+ "valid_values": "",
779
+ "existing_element": "",
780
+ "description": "Is the parent at end1 of the relationship?",
781
+
782
+ "generated": False,
783
+ "style": "Bool",
784
+ "user_specified": True,
785
+ "unique": False,
786
+ "input_required": False,
787
+
788
+ "min_cardinality": 0,
789
+ "max_cardinality": 1,
790
+ "level": "Advanced",
791
+
792
+ }
793
+ },
794
+ {
795
+ "Qualified Name": {
796
+ "variable_name": "qualified_name",
797
+ "inUpdate": True,
798
+ "attr_labels": "",
799
+ "examples": "dataField::a data field",
800
+ "default_value": "",
801
+ "valid_values": "",
802
+ "existing_element": "",
803
+ "description": "A unique qualified name for the element. Generated using the qualified name pattern if not user specified.",
804
+ "qualified_name_pattern": "local_qualifier::namespace::DataDictionary:display_name::version_id",
805
+ "generated": True,
806
+ "style": "QN",
807
+ "user_specified": True,
808
+ "unique": True,
809
+ "input_required": False,
810
+
811
+ "min_cardinality": 1,
812
+ "max_cardinality": 1,
813
+ "level": "Basic",
814
+
815
+ }
816
+ },
817
+ {
818
+ "GUID": {
819
+ "variable_name": "guid",
820
+ "inUpdate": True,
821
+ "attr_labels": "Guid; guid",
822
+ "examples": "00585a82-0f7d-45ef-9b87-7078665917a9",
823
+ "default_value": "",
824
+ "valid_values": "",
825
+ "existing_element": "",
826
+ "description": "A system generated unique identifier.",
827
+
828
+ "generated": True,
829
+ "style": "GUID",
830
+ "user_specified": False,
831
+ "unique": True,
832
+ "input_required": False,
833
+
834
+ "min_cardinality": 1,
835
+ "max_cardinality": 1,
836
+ "level": "Basic",
837
+
838
+ }
839
+ },
840
+ {
841
+ "Effective Time": {
842
+ "variable_name": "effective_time",
843
+ "inUpdate": True,
844
+ "attr_labels": "",
845
+ "examples": "",
846
+ "default_value": "",
847
+ "valid_values": "",
848
+ "existing_element": "",
849
+ "description": "An ISO-8601 string representing the time to use for evaluating effectivity of the elements related to this one.",
850
+
851
+ "generated": False,
852
+ "style": "Simple",
853
+ "user_specified": True,
854
+ "unique": False,
855
+ "input_required": False,
856
+
857
+ "min_cardinality": 1,
858
+ "max_cardinality": 1,
859
+ "level": "Advanced",
860
+
861
+ }
862
+ },
863
+ {
864
+ "Effective From": {
865
+ "variable_name": "effective_from",
866
+ "inUpdate": True,
867
+ "attr_labels": "",
868
+ "examples": "",
869
+ "default_value": "",
870
+ "valid_values": "",
871
+ "existing_element": "",
872
+ "description": "A string in ISO-8601 format that defines the when an element becomes effective (visible).",
873
+ "generated": False,
874
+ "style": "Simple",
875
+ "user_specified": True,
876
+ "unique": False,
877
+ "input_required": False,
878
+ "min_cardinality": 0,
879
+ "max_cardinality": 1,
880
+ "level": "Advanced",
881
+
882
+ }
883
+ },
884
+ {
885
+ "Effective To": {
886
+ "variable_name": "effective_to",
887
+ "inUpdate": True,
888
+ "attr_labels": "",
889
+ "examples": "",
890
+ "default_value": "",
891
+ "valid_values": "",
892
+ "existing_element": "",
893
+ "description": "A string in ISO-8601 format that defines the when an element is no longer effective (visible).",
894
+
895
+ "generated": False,
896
+ "style": "Simple",
897
+ "user_specified": True,
898
+ "unique": False,
899
+ "input_required": False,
900
+
901
+ "min_cardinality": 1,
902
+ "max_cardinality": 1,
903
+ "level": "Advanced",
904
+
905
+ }
906
+ },
907
+ {
908
+ "Merge Update": {
909
+ "variable_name": "merge_update",
910
+ "inUpdate": True,
911
+ "attr_labels": "Merge",
912
+ "examples": "",
913
+ "default_value": "True",
914
+ "valid_values": "",
915
+ "existing_element": "",
916
+ "description": "If True, only those attributes specified in the update will be updated; If False, any attributes not provided during the update will be set to None.",
917
+
918
+ "generated": False,
919
+ "style": "Bool",
920
+ "user_specified": True,
921
+ "unique": False,
922
+ "input_required": False,
923
+
924
+ "min_cardinality": 0,
925
+ "max_cardinality": 1,
926
+ "level": "Advanced",
927
+
928
+ }
929
+ },
930
+ {
931
+ "Additional Properties": {
932
+ "variable_name": "additional_properties",
933
+ "inUpdate": True,
934
+ "attr_labels": "",
935
+ "examples": "",
936
+ "default_value": "",
937
+ "valid_values": "",
938
+ "existing_element": "",
939
+ "description": "Additional user defined values organized as name value pairs in a dictionary.",
940
+
941
+ "generated": False,
942
+ "style": "Dictionary",
943
+ "user_specified": True,
944
+ "unique": False,
945
+ "input_required": False,
946
+
947
+ "min_cardinality": 0,
948
+ "max_cardinality": -1,
949
+ "level": "Advanced",
950
+
951
+ }
952
+ },
953
+ {
954
+ "Extended Properties": {
955
+ "variable_name": "additional_properties",
956
+ "inUpdate": True,
957
+ "attr_labels": "",
958
+ "examples": "",
959
+ "default_value": "",
960
+ "valid_values": "",
961
+ "existing_element": "",
962
+ "description": "Additional user defined values organized as name value pairs in a dictionary.",
963
+ "generated": False,
964
+ "style": "Named DICT",
965
+ "user_specified": True,
966
+ "unique": False,
967
+ "input_required": False,
968
+ "min_cardinality": 0,
969
+ "max_cardinality": -1,
970
+ "level": "Invisible",
971
+ }
972
+ },
973
+ {
974
+ "External Source GUID": {
975
+ "variable_name": "external_source_guid",
976
+ "inUpdate": True,
977
+ "attr_labels": "",
978
+ "examples": "",
979
+ "default_value": "",
980
+ "valid_values": "",
981
+ "existing_element": "",
982
+ "description": "Identifier of an external source that is associated with this element.",
983
+
984
+ "generated": False,
985
+ "style": "Simple",
986
+ "user_specified": True,
987
+ "unique": False,
988
+ "input_required": False,
989
+
990
+ "min_cardinality": 0,
991
+ "max_cardinality": 1,
992
+ "level": "Advanced",
993
+
994
+ }
995
+ },
996
+ {
997
+ "External Source Name": {
998
+ "variable_name": "external_source_name",
999
+ "inUpdate": True,
1000
+ "attr_labels": "",
1001
+ "examples": "",
1002
+ "default_value": "",
1003
+ "valid_values": "",
1004
+ "existing_element": "",
1005
+ "description": "Name of an external element that is associated with this element.",
1006
+ "generated": False,
1007
+ "style": "Simple",
1008
+ "user_specified": True,
1009
+ "unique": False,
1010
+ "input_required": False,
1011
+ "min_cardinality": 0,
1012
+ "max_cardinality": 1,
1013
+ "level": "Advanced",
1014
+
1015
+ }
1016
+ },
1017
+ {
1018
+ "Journal Entry": {
1019
+ "variable_name": "journal_entry",
1020
+ "inUpdate": True,
1021
+ "attr_labels": "",
1022
+ "examples": "",
1023
+ "default_value": "",
1024
+ "valid_values": "",
1025
+ "existing_element": "",
1026
+ "description": "",
1027
+ "generated": False,
1028
+ "style": "Simple",
1029
+ "user_specified": True,
1030
+ "unique": False,
1031
+ "input_required": False,
1032
+
1033
+ "min_cardinality": 0,
1034
+ "max_cardinality": 1,
1035
+ "level": "Basic",
1036
+
1037
+ }
1038
+ },
1039
+ {
1040
+ "URL": {
1041
+ "variable_name": "url",
1042
+ "inUpdate": True,
1043
+ "attr_labels": "",
1044
+ "examples": "",
1045
+ "default_value": "",
1046
+ "valid_values": "",
1047
+ "existing_element": "",
1048
+ "description": "Link to supporting information",
1049
+
1050
+ "generated": False,
1051
+ "style": "Simple",
1052
+ "user_specified": True,
1053
+ "unique": False,
1054
+ "input_required": False,
1055
+
1056
+ "min_cardinality": 0,
1057
+ "max_cardinality": 1,
1058
+ "level": "Basic",
1059
+
1060
+ }
1061
+ },
1062
+ {
1063
+ "Search Keywords": {
1064
+ "variable_name": "search_keywords",
1065
+ "inUpdate": True,
1066
+ "attr_labels": "",
1067
+ "examples": "",
1068
+ "default_value": "",
1069
+ "valid_values": "",
1070
+ "existing_element": "",
1071
+ "description": "Keywords to facilitate finding the element",
1072
+
1073
+ "generated": False,
1074
+ "style": "Simple List",
1075
+ "user_specified": True,
1076
+ "unique": False,
1077
+ "input_required": False,
1078
+
1079
+ "min_cardinality": 0,
1080
+ "max_cardinality": 20,
1081
+ "level": "Basic",
1082
+
1083
+ }
1084
+ },
1085
+ {
1086
+ "Translation Details": {
1087
+ "variable_name": "translation_details",
1088
+ "inUpdate": True,
1089
+ "attr_labels": "",
1090
+ "examples": "",
1091
+ "default_value": "",
1092
+ "valid_values": "",
1093
+ "existing_element": "",
1094
+ "description": "Allow translation information for the element to be provided.",
1095
+ "generated": False,
1096
+ "style": "Named DICT",
1097
+ "user_specified": True,
1098
+ "unique": False,
1099
+ "input_required": False,
1100
+ "min_cardinality": 0,
1101
+ "max_cardinality": -1,
1102
+ "level": "Invisible",
1103
+ }
1104
+ },
1105
+ {
1106
+ "Supplementary Properties": {
1107
+ "variable_name": "supplementary_properties",
1108
+ "inUpdate": True,
1109
+ "attr_labels": "",
1110
+ "examples": "",
1111
+ "default_value": "",
1112
+ "valid_values": "",
1113
+ "existing_element": "",
1114
+ "description": "Provide supplementary information to the element using the structure of a glossary term",
1115
+ "generated": False,
1116
+ "style": "Named DICT",
1117
+ "user_specified": True,
1118
+ "unique": False,
1119
+ "input_required": False,
1120
+ "min_cardinality": 0,
1121
+ "max_cardinality": -1,
1122
+ "level": "Advanced",
1123
+ }
1124
+ },
1125
+ ]
1126
+ new_attributes.extend(default_upsert_attributes)
1127
+ return new_attributes
1128
+
1129
+
1130
+ def add_default_link_attributes(attributes: list[dict]) -> list[dict]:
1131
+ new_attributes = attributes
1132
+ default_link_attributes = [
1133
+ {
1134
+ "Effective Time": {
1135
+ "variable_name": "effective_time",
1136
+ "inUpdate": True,
1137
+ "attr_labels": "",
1138
+ "examples": "",
1139
+ "default_value": "",
1140
+ "valid_values": "",
1141
+ "existing_element": "",
1142
+ "description": "An ISO-8601 string representing the time to use for evaluating effectivity of the elements related to this one.",
1143
+
1144
+ "generated": False,
1145
+ "style": "Simple",
1146
+ "user_specified": True,
1147
+ "unique": False,
1148
+ "input_required": False,
1149
+
1150
+ "min_cardinality": 1,
1151
+ "max_cardinality": 1,
1152
+ "level": "Advanced",
1153
+
1154
+ }
1155
+ },
1156
+ {
1157
+ "Effective From": {
1158
+ "variable_name": "effective_from",
1159
+ "inUpdate": True,
1160
+ "attr_labels": "",
1161
+ "examples": "",
1162
+ "default_value": "",
1163
+ "valid_values": "",
1164
+ "existing_element": "",
1165
+ "description": "A string in ISO-8601 format that defines the when an element becomes effective (visible).",
1166
+
1167
+ "generated": False,
1168
+ "style": "Simple",
1169
+ "user_specified": True,
1170
+ "unique": False,
1171
+ "input_required": False,
1172
+
1173
+ "min_cardinality": 0,
1174
+ "max_cardinality": 1,
1175
+ "level": "Advanced",
1176
+
1177
+ }
1178
+ },
1179
+ {
1180
+ "Effective To": {
1181
+ "variable_name": "effective_to",
1182
+ "inUpdate": True,
1183
+ "attr_labels": "",
1184
+ "examples": "",
1185
+ "default_value": "",
1186
+ "valid_values": "",
1187
+ "existing_element": "",
1188
+ "description": "A string in ISO-8601 format that defines the when an element is no longer effective (visible).",
1189
+
1190
+ "generated": False,
1191
+ "style": "Simple",
1192
+ "user_specified": True,
1193
+ "unique": False,
1194
+ "input_required": False,
1195
+
1196
+ "min_cardinality": 1,
1197
+ "max_cardinality": 1,
1198
+ "level": "Advanced",
1199
+
1200
+ }
1201
+ },
1202
+ {
1203
+ "Extended Properties": {
1204
+ "variable_name": "additional_properties",
1205
+ "inUpdate": True,
1206
+ "attr_labels": "",
1207
+ "examples": "",
1208
+ "default_value": "",
1209
+ "valid_values": "",
1210
+ "existing_element": "",
1211
+ "description": "Additional user defined values organized as name value pairs in a dictionary.",
1212
+
1213
+ "generated": False,
1214
+ "style": "Dictionary",
1215
+ "user_specified": True,
1216
+ "unique": False,
1217
+ "input_required": False,
1218
+
1219
+ "min_cardinality": 0,
1220
+ "max_cardinality": -1,
1221
+ "level": "Invisible",
1222
+
1223
+ }
1224
+ }
1225
+
1226
+ ]
1227
+ new_attributes.extend(default_link_attributes)
1228
+ return new_attributes