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
pyegeria/egeria_client.py CHANGED
@@ -11,70 +11,53 @@ for all use cases..using the more role based clients is often appropriate:
11
11
  * EgeriaTech - for technical users such as data scientists and engineers
12
12
 
13
13
  """
14
- # from pyegeria.x_action_author_omvs import ActionAuthor
15
- from pyegeria.asset_catalog_omvs import AssetCatalog
16
- from pyegeria.collection_manager_omvs import CollectionManager
17
- from pyegeria.glossary_manager_omvs import GlossaryManager
18
- from pyegeria.project_manager_omvs import ProjectManager
19
- from pyegeria.automated_curation_omvs import AutomatedCuration
20
- from pyegeria.classification_manager_omvs import ClassificationManager
21
- from pyegeria.template_manager_omvs import TemplateManager
22
- from pyegeria.runtime_manager_omvs import RuntimeManager
23
- from pyegeria.full_omag_server_config import FullServerConfig
24
- from pyegeria.metadata_explorer_omvs import MetadataExplorer
25
- from pyegeria.my_profile_omvs import MyProfile
26
- from pyegeria.feedback_manager_omvs import FeedbackManager
27
- from pyegeria.solution_architect_omvs import SolutionArchitect
28
- from pyegeria.server_operations import ServerOps
29
- from pyegeria.registered_info import RegisteredInfo
30
- from pyegeria.valid_metadata_omvs import ValidMetadataManager
14
+ from typing import Optional, Dict, Any
15
+
31
16
  from pyegeria.egeria_config_client import EgeriaConfig
32
- from pyegeria.data_designer_omvs import DataDesigner
33
- # from pyegeria.md_processing_utils import render_markdown
17
+ from pyegeria.omvs.action_author import ActionAuthor
18
+ from pyegeria.omvs.actor_manager import ActorManager
19
+ from pyegeria.omvs.asset_catalog import AssetCatalog
20
+ from pyegeria.omvs.asset_maker import AssetMaker
21
+ from pyegeria.omvs.automated_curation import AutomatedCuration
22
+ from pyegeria.omvs.classification_manager import ClassificationManager
23
+ from pyegeria.omvs.collection_manager import CollectionManager
24
+ from pyegeria.omvs.community_matters_omvs import CommunityMatters
25
+ from pyegeria.omvs.data_designer import DataDesigner
26
+ from pyegeria.omvs.data_discovery import DataDiscovery
27
+ from pyegeria.omvs.data_engineer import DataEngineer
28
+ from pyegeria.omvs.digital_business import DigitalBusiness
29
+ from pyegeria.omvs.external_links import ExternalReferences
30
+ from pyegeria.omvs.feedback_manager import FeedbackManager
31
+ from pyegeria.omvs.full_omag_server_config import FullServerConfig
32
+ from pyegeria.omvs.glossary_manager import GlossaryManager
33
+ from pyegeria.omvs.governance_officer import GovernanceOfficer
34
+ from pyegeria.omvs.lineage_linker import LineageLinker
35
+ from pyegeria.omvs.location_arena import Location
36
+ from pyegeria.omvs.metadata_expert import MetadataExpert
37
+ from pyegeria.omvs.metadata_explorer_omvs import MetadataExplorer
38
+ from pyegeria.omvs.my_profile import MyProfile
39
+ from pyegeria.omvs.notification_manager import NotificationManager
40
+ from pyegeria.omvs.people_organizer import PeopleOrganizer
41
+ from pyegeria.omvs.product_manager import ProductManager
42
+ from pyegeria.omvs.project_manager import ProjectManager
43
+ from pyegeria.omvs.reference_data import ReferenceDataManager
44
+ from pyegeria.omvs.registered_info import RegisteredInfo
45
+ from pyegeria.omvs.runtime_manager import RuntimeManager
46
+ from pyegeria.omvs.schema_maker import SchemaMaker
47
+ from pyegeria.omvs.server_operations import ServerOps
48
+ from pyegeria.omvs.solution_architect import SolutionArchitect
49
+ from pyegeria.omvs.specification_properties import SpecificationProperties
50
+ from pyegeria.omvs.subject_area import SubjectArea
51
+ from pyegeria.omvs.template_manager_omvs import TemplateManager
52
+ from pyegeria.omvs.time_keeper import TimeKeeper
53
+ from pyegeria.omvs.valid_metadata import ValidMetadataManager
54
+ from pyegeria.omvs.valid_metadata_lists import ValidMetadataLists
55
+ from pyegeria.omvs.valid_type_lists import ValidTypeLists
34
56
 
35
57
 
36
- class Egeria(
37
- AssetCatalog,
38
- CollectionManager,
39
- MyProfile,
40
- FeedbackManager,
41
- GlossaryManager,
42
- # GovernanceAuthor,
43
- # PeopleOrganizer,
44
- ProjectManager,
45
- RuntimeManager,
46
- ServerOps,
47
- FullServerConfig,
48
- # ActionAuthor,
49
- AutomatedCuration,
50
- ClassificationManager,
51
- RegisteredInfo,
52
- TemplateManager,
53
- ValidMetadataManager,
54
- MetadataExplorer,
55
- SolutionArchitect,
56
- EgeriaConfig,
57
- DataDesigner,
58
- ):
58
+ class Egeria:
59
59
  """
60
- Client to issue Runtime status requests.
61
-
62
- Attributes:
63
-
64
- view_server: str
65
- Name of the view server to use.
66
- platform_url : str
67
- URL of the server platform to connect to
68
- user_id : str
69
- The identity of the user calling the method - this sets a default optionally used by the methods
70
- when the user doesn't pass the user_id on a method call.
71
- user_pwd: str
72
- The password associated with the user_id. Defaults to None
73
- token: str
74
- An optional bearer token
75
-
76
- Methods:
77
-
60
+ Overall Egeria client that composes all functional pyegeria clients using lazy loading.
78
61
  """
79
62
 
80
63
  def __init__(
@@ -85,48 +68,107 @@ class Egeria(
85
68
  user_pwd: str = None,
86
69
  token: str = None,
87
70
  ):
88
- AssetCatalog.__init__(self, view_server, platform_url, user_id, user_pwd, token)
89
- CollectionManager.__init__(
90
- self, view_server, platform_url, user_id, user_pwd, token
91
- )
71
+ self.view_server = view_server
72
+ self.platform_url = platform_url
73
+ self.user_id = user_id
74
+ self.user_pwd = user_pwd
75
+ self.token = token
76
+
77
+ self._subclient_map = {
78
+ "action_author": ActionAuthor,
79
+ "actor_manager": ActorManager,
80
+ "asset_catalog": AssetCatalog,
81
+ "asset_maker": AssetMaker,
82
+ "auto_curate": AutomatedCuration,
83
+ "class_mgr": ClassificationManager,
84
+ "collections": CollectionManager,
85
+ "community": CommunityMatters,
86
+ "community_matters": CommunityMatters,
87
+ "config": EgeriaConfig,
88
+ "data_discovery": DataDiscovery,
89
+ "data_engineer": DataEngineer,
90
+ "designer": DataDesigner,
91
+ "data_designer": DataDesigner,
92
+ "digital_business": DigitalBusiness,
93
+ "expert": MetadataExpert,
94
+ "explorer": MetadataExplorer,
95
+ "external_refs": ExternalReferences,
96
+ "feedback": FeedbackManager,
97
+ "feedback_manager": FeedbackManager,
98
+ "full_server_config": FullServerConfig,
99
+ "glossary": GlossaryManager,
100
+ "gov_officer": GovernanceOfficer,
101
+ "lineage_linker": LineageLinker,
102
+ "location": Location,
103
+ "my_profile": MyProfile,
104
+ "notifications": NotificationManager,
105
+ "notification_manager": NotificationManager,
106
+ "people_organizer": PeopleOrganizer,
107
+ "product_manager": ProductManager,
108
+ "projects": ProjectManager,
109
+ "project_manager": ProjectManager,
110
+ "reference_data": ReferenceDataManager,
111
+ "reg_info": RegisteredInfo,
112
+ "runtime": RuntimeManager,
113
+ "schema_maker": SchemaMaker,
114
+ "server_ops": ServerOps,
115
+ "sol_arch": SolutionArchitect,
116
+ "specification_properties": SpecificationProperties,
117
+ "subject_area": SubjectArea,
118
+ "templates": TemplateManager,
119
+ "template_manager": TemplateManager,
120
+ "time_keeper": TimeKeeper,
121
+ "valid": ValidMetadataManager,
122
+ "valid_metadata": ValidMetadataManager,
123
+ "valid_metadata_lists": ValidMetadataLists,
124
+ "valid_type_lists": ValidTypeLists,
125
+ }
126
+ self._instantiated_clients = {}
92
127
 
93
- MyProfile.__init__(self, view_server, platform_url, user_id, user_pwd, token)
94
- FeedbackManager.__init__(
95
- self, view_server, platform_url, user_id, user_pwd, token
128
+ def _get_subclient(self, attr_name: str):
129
+ if attr_name not in self._instantiated_clients:
130
+ client_cls = self._subclient_map[attr_name]
131
+ self._instantiated_clients[attr_name] = client_cls(
132
+ self.view_server, self.platform_url, self.user_id, self.user_pwd, self.token
96
133
  )
134
+ return self._instantiated_clients[attr_name]
97
135
 
98
- GlossaryManager.__init__(
99
- self, view_server, platform_url, user_id, user_pwd, token
100
- )
136
+ def __getattr__(self, name):
137
+ """Resolves attributes via instantiated or mapped subclients"""
138
+ # Allow direct access to sub-clients if the name matches a key in the map
139
+ if name in self._subclient_map:
140
+ return self._get_subclient(name)
101
141
 
102
- ProjectManager.__init__(
103
- self, view_server, platform_url, user_id, user_pwd, token
104
- )
142
+ for inst in self._instantiated_clients.values():
143
+ if hasattr(inst, name):
144
+ return getattr(inst, name)
145
+ for attr_name, client_cls in self._subclient_map.items():
146
+ if hasattr(client_cls, name):
147
+ return getattr(self._get_subclient(attr_name), name)
148
+ raise AttributeError(f"{self.__class__.__name__} object has no attribute {name}")
105
149
 
106
- RuntimeManager.__init__(
107
- self, view_server, platform_url, user_id, user_pwd, token=token
108
- )
109
- ServerOps.__init__(self, view_server, platform_url, user_id, user_pwd)
150
+ def create_egeria_bearer_token(self, user_id: str = None, user_pwd: str = None):
151
+ # Use server_ops as a reliable helper for token generation
152
+ helper = self._get_subclient("server_ops")
153
+ token_val = helper.create_egeria_bearer_token(user_id, user_pwd)
154
+ self.set_bearer_token(token_val)
155
+ return token_val
110
156
 
111
- EgeriaConfig.__init__(self, view_server, platform_url, user_id, user_pwd)
157
+ def set_bearer_token(self, token: str) -> None:
158
+ self.token = token
159
+ for sub in self._instantiated_clients.values():
160
+ sub.set_bearer_token(token)
112
161
 
113
- # ActionAuthor.__init__(self, view_server, platform_url, user_id, user_pwd, token)
114
- AutomatedCuration.__init__(
115
- self, view_server, platform_url, user_id, user_pwd, token
116
- )
117
- ClassificationManager.__init__(
118
- self, view_server, platform_url, user_id, user_pwd, token
119
- )
120
- RegisteredInfo.__init__(
121
- self, view_server, platform_url, user_id, user_pwd, token
122
- )
123
- ValidMetadataManager.__init__(
124
- self, view_server, platform_url, user_id, user_pwd, token
125
- )
126
- SolutionArchitect.__init__(
127
- self, view_server, platform_url, user_id, user_pwd, token
128
- )
129
- DataDesigner.__init__(
130
- self, view_server, platform_url, user_id, user_pwd, token
131
- )
132
- print(Egeria.mro())
162
+ def get_token(self) -> str:
163
+ if self.token: return self.token
164
+ for sub in self._instantiated_clients.values():
165
+ if hasattr(sub, "get_token"):
166
+ return sub.get_token()
167
+ return None
168
+
169
+ def close_session(self) -> None:
170
+ for sub in self._instantiated_clients.values():
171
+ if hasattr(sub, "close_session"):
172
+ try: sub.close_session()
173
+ except Exception: pass
174
+ self._instantiated_clients.clear()
@@ -5,41 +5,65 @@ Copyright Contributors to the ODPi Egeria project.
5
5
  Client to configure the Egeria platform and servers
6
6
 
7
7
  """
8
+ from pyegeria.omvs.core_omag_server_config import CoreServerConfig
9
+ from pyegeria.omvs.full_omag_server_config import FullServerConfig
10
+ from pyegeria.omvs.server_operations import ServerOps
8
11
 
9
- from pyegeria.full_omag_server_config import FullServerConfig
10
- from pyegeria.server_operations import ServerOps
11
12
 
12
-
13
- class EgeriaConfig(FullServerConfig, ServerOps):
13
+ class EgeriaConfig:
14
14
  """
15
- Client for configuring the Egeria Platform and Servers
16
-
17
- Attributes:
18
-
19
- server_name: str
20
- Name of the server to use.
21
- platform_url : str
22
- URL of the server platform to connect to
23
- user_id : str
24
- The identity of the user calling the method - this sets a default optionally used by the methods
25
- when the user doesn't pass the user_id on a method call.
26
- user_pwd: str
27
- The password associated with the user_id. Defaults to None
28
-
29
- Methods:
30
- Inherits methods from FullServerConfig
15
+ Client for managing Egeria configuration using lazy loading.
31
16
  """
32
17
 
33
18
  def __init__(
34
- self, server_name: str, platform_url: str, user_id: str, user_pwd: str = None
19
+ self,
20
+ view_server: str,
21
+ platform_url: str,
22
+ user_id: str,
23
+ user_pwd: str = None,
24
+ token: str = None,
35
25
  ):
36
- self.server_name = server_name
26
+ self.view_server = view_server
37
27
  self.platform_url = platform_url
38
28
  self.user_id = user_id
39
29
  self.user_pwd = user_pwd
30
+ self.token = token
31
+
32
+ self._subclient_map = {
33
+ "core_config": CoreServerConfig,
34
+ "full_config": FullServerConfig,
35
+ }
36
+ self._instantiated_clients = {}
37
+
38
+ def _get_subclient(self, attr_name: str):
39
+ if attr_name not in self._instantiated_clients:
40
+ client_cls = self._subclient_map[attr_name]
41
+ self._instantiated_clients[attr_name] = client_cls(
42
+ self.view_server, self.platform_url, self.user_id, self.user_pwd, self.token
43
+ )
44
+ return self._instantiated_clients[attr_name]
45
+
46
+ def __getattr__(self, name):
47
+ """Resolves attribute via instantiated or mapped subclients"""
48
+ for inst in self._instantiated_clients.values():
49
+ if hasattr(inst, name):
50
+ return getattr(inst, name)
51
+ for attr_name, client_cls in self._subclient_map.items():
52
+ if hasattr(client_cls, name):
53
+ return getattr(self._get_subclient(attr_name), name)
54
+ raise AttributeError(f"{self.__class__.__name__} object has no attribute {name}")
55
+
56
+ def set_bearer_token(self, token: str) -> None:
57
+ self.token = token
58
+ for sub in self._instantiated_clients.values():
59
+ sub.set_bearer_token(token)
40
60
 
41
- FullServerConfig.__init__(self, server_name, platform_url, user_id, user_pwd)
42
- ServerOps.__init__(self, server_name, platform_url, user_id, user_pwd)
61
+ def close_session(self) -> None:
62
+ for sub in self._instantiated_clients.values():
63
+ if hasattr(sub, "close_session"):
64
+ try: sub.close_session()
65
+ except Exception: pass
66
+ self._instantiated_clients.clear()
43
67
 
44
68
 
45
69
  if __name__ == "__main__":
@@ -2,75 +2,66 @@
2
2
  SPDX-License-Identifier: Apache-2.0
3
3
  Copyright Contributors to the ODPi Egeria project.
4
4
 
5
- Runtime manager is a view service that supports user interaction with the running platforms.
6
-
5
+ The Tech Client is a facade that provides a unified interface to the most
6
+ commonly used technical OMVS modules.
7
7
  """
8
- from pyegeria.x_action_author_omvs import ActionAuthor
9
- from pyegeria.asset_catalog_omvs import AssetCatalog
10
- from pyegeria.collection_manager_omvs import CollectionManager
11
- from pyegeria.glossary_manager_omvs import GlossaryManager
12
- from pyegeria.project_manager_omvs import ProjectManager
13
- from pyegeria.automated_curation_omvs import AutomatedCuration
14
- from pyegeria.classification_manager_omvs import ClassificationManager
15
- from pyegeria.template_manager_omvs import TemplateManager
16
- from pyegeria.runtime_manager_omvs import RuntimeManager
17
- from pyegeria.full_omag_server_config import FullServerConfig
18
- from pyegeria.metadata_explorer_omvs import MetadataExplorer
19
- from pyegeria.egeria_my_client import EgeriaMy
20
- from pyegeria.solution_architect_omvs import SolutionArchitect
21
- from pyegeria.server_operations import ServerOps
22
- from pyegeria.registered_info import RegisteredInfo
23
- from pyegeria.valid_metadata_omvs import ValidMetadataManager
24
- from pyegeria.egeria_cat_client import EgeriaCat
25
- from pyegeria.metadata_explorer_omvs import MetadataExplorer
26
- from pyegeria.feedback_manager_omvs import FeedbackManager
27
- from pyegeria.my_profile_omvs import MyProfile
28
- from pyegeria.solution_architect_omvs import SolutionArchitect
29
- from pyegeria.data_designer_omvs import DataDesigner
30
- from pyegeria.template_manager_omvs import TemplateManager
31
- from pyegeria.my_profile_omvs import MyProfile
32
- from pyegeria.utils import body_slimmer
33
- from pyegeria import (
34
- INTEGRATION_GUIDS,
35
- TEMPLATE_GUIDS, # ActionAuthor,
36
- max_paging_size,
37
- )
38
- from pyegeria._exceptions import InvalidParameterException
39
-
40
-
41
- class EgeriaTech(
42
- # ActionAuthor,
43
- AutomatedCuration,
44
- EgeriaCat,
45
- ClassificationManager,
46
- RegisteredInfo,
47
- RuntimeManager,
48
- ValidMetadataManager,
49
- MetadataExplorer,
50
- SolutionArchitect,
51
- DataDesigner,
52
- TemplateManager,
53
- ):
8
+ from pyegeria.omvs.action_author import ActionAuthor
9
+ from pyegeria.omvs.actor_manager import ActorManager
10
+ from pyegeria.omvs.asset_catalog import AssetCatalog
11
+ from pyegeria.omvs.asset_maker import AssetMaker
12
+ from pyegeria.omvs.automated_curation import AutomatedCuration
13
+ from pyegeria.omvs.classification_manager import ClassificationManager
14
+ from pyegeria.omvs.collection_manager import CollectionManager
15
+ from pyegeria.omvs.community_matters_omvs import CommunityMatters
16
+ from pyegeria.omvs.data_designer import DataDesigner
17
+ from pyegeria.omvs.data_discovery import DataDiscovery
18
+ from pyegeria.omvs.data_engineer import DataEngineer
19
+ from pyegeria.omvs.digital_business import DigitalBusiness
20
+ from pyegeria.omvs.external_links import ExternalReferences
21
+ from pyegeria.omvs.feedback_manager import FeedbackManager
22
+ from pyegeria.omvs.glossary_manager import GlossaryManager
23
+ from pyegeria.omvs.governance_officer import GovernanceOfficer
24
+ from pyegeria.omvs.lineage_linker import LineageLinker
25
+ from pyegeria.omvs.location_arena import Location
26
+ from pyegeria.omvs.metadata_expert import MetadataExpert
27
+ from pyegeria.omvs.metadata_explorer_omvs import MetadataExplorer
28
+ from pyegeria.omvs.my_profile import MyProfile
29
+ from pyegeria.omvs.notification_manager import NotificationManager
30
+ from pyegeria.omvs.people_organizer import PeopleOrganizer
31
+ from pyegeria.omvs.product_manager import ProductManager
32
+ from pyegeria.omvs.project_manager import ProjectManager
33
+ from pyegeria.omvs.reference_data import ReferenceDataManager
34
+ from pyegeria.omvs.registered_info import RegisteredInfo
35
+ from pyegeria.omvs.runtime_manager import RuntimeManager
36
+ from pyegeria.omvs.schema_maker import SchemaMaker
37
+ from pyegeria.omvs.solution_architect import SolutionArchitect
38
+ from pyegeria.omvs.specification_properties import SpecificationProperties
39
+ from pyegeria.omvs.subject_area import SubjectArea
40
+ from pyegeria.omvs.template_manager_omvs import TemplateManager
41
+ from pyegeria.omvs.time_keeper import TimeKeeper
42
+ from pyegeria.omvs.valid_metadata import ValidMetadataManager
43
+ from pyegeria.omvs.valid_metadata_lists import ValidMetadataLists
44
+ from pyegeria.omvs.valid_type_lists import ValidTypeLists
45
+ from pyegeria.core._globals import NO_ELEMENTS_FOUND
46
+
47
+ class EgeriaTech:
54
48
  """
55
- Client for technical Egeria users.
49
+ Client for technical Egeria users using lazy-loading composition.
56
50
 
57
51
  Attributes:
58
-
59
52
  view_server: str
60
- Name of the server to use.
53
+ Name of the view server to use.
61
54
  platform_url : str
62
55
  URL of the server platform to connect to
63
56
  user_id : str
64
- The identity of the user calling the method - this sets a default optionally used by the methods
65
- when the user doesn't pass the user_id on a method call.
57
+ The identity of the user calling the method.
66
58
  user_pwd: str
67
59
  The password associated with the user_id. Defaults to None
68
60
  token: str, optional
69
61
  Bearer token
70
62
 
71
63
  Methods:
72
- Inherits methods from EgeriaCat, ActionAuthor, AutomatedCuration,
73
- ClassificationManager, RegisteredInfo, ValidMetadataManager
64
+ Methods are provided by composed sub-clients via delegation.
74
65
  """
75
66
 
76
67
  def __init__(
@@ -81,35 +72,131 @@ class EgeriaTech(
81
72
  user_pwd: str = None,
82
73
  token: str = None,
83
74
  ):
84
- # ActionAuthor.__init__(self, view_server, platform_url, user_id, user_pwd, token)
85
- AutomatedCuration.__init__(
86
- self, view_server, platform_url, user_id, user_pwd, token
87
- )
88
- EgeriaCat.__init__(self, view_server, platform_url, user_id, user_pwd, token)
89
- ClassificationManager.__init__(
90
- self, view_server, platform_url, user_id, user_pwd, token
91
- )
92
- RegisteredInfo.__init__(
93
- self, view_server, platform_url, user_id, user_pwd, token
94
- )
95
- RuntimeManager.__init__(
96
- self, view_server, platform_url, user_id, user_pwd, token
97
- )
98
- ValidMetadataManager.__init__(
99
- self, view_server, platform_url, user_id, user_pwd, token
100
- )
101
- MetadataExplorer.__init__(
102
- self, view_server, platform_url, user_id, user_pwd, token
103
- )
104
- SolutionArchitect.__init__(
105
- self, view_server, platform_url, user_id, user_pwd, token
106
- )
107
- DataDesigner.__init__(
108
- self, view_server, platform_url, user_id, user_pwd, token
109
- )
110
- TemplateManager.__init__(
111
- self, view_server, platform_url, user_id, user_pwd, token
75
+ self.view_server = view_server
76
+ self.platform_url = platform_url
77
+ self.user_id = user_id
78
+ self.user_pwd = user_pwd
79
+ self.token = token
80
+
81
+ # Mapping of attribute names to their classes for lazy loading
82
+ self._subclient_map = {
83
+ "auto_curate": AutomatedCuration,
84
+ "class_mgr": ClassificationManager,
85
+ "reg_info": RegisteredInfo,
86
+ "runtime": RuntimeManager,
87
+ "valid": ValidMetadataManager,
88
+ "explorer": MetadataExplorer,
89
+ "expert": MetadataExpert,
90
+ "sol_arch": SolutionArchitect,
91
+ "designer": DataDesigner,
92
+ "data_designer": DataDesigner,
93
+ "glossary": GlossaryManager,
94
+ "templates": TemplateManager,
95
+ "template_manager": TemplateManager,
96
+ "gov_officer": GovernanceOfficer,
97
+ "collections": CollectionManager,
98
+ "external_references": ExternalReferences,
99
+ "actor_manager": ActorManager,
100
+ "time_keeper": TimeKeeper,
101
+ "product_manager": ProductManager,
102
+ "location_arena": Location,
103
+ "data_discovery": DataDiscovery,
104
+ "data_engineer": DataEngineer,
105
+ "digital_business": DigitalBusiness,
106
+ "lineage_linker": LineageLinker,
107
+ "schema_maker": SchemaMaker,
108
+ "valid_types": ValidTypeLists,
109
+ "valid_type_lists": ValidTypeLists,
110
+ "valid_metadata_lists": ValidMetadataLists,
111
+ "action_author": ActionAuthor,
112
+ "asset_catalog": AssetCatalog,
113
+ "asset_maker": AssetMaker,
114
+ "community": CommunityMatters,
115
+ "community_matters": CommunityMatters,
116
+ "feedback": FeedbackManager,
117
+ "feedback_manager": FeedbackManager,
118
+ "my_profile": MyProfile,
119
+ "notifications": NotificationManager,
120
+ "notification_manager": NotificationManager,
121
+ "people_organizer": PeopleOrganizer,
122
+ "projects": ProjectManager,
123
+ "project_manager": ProjectManager,
124
+ "reference_data": ReferenceDataManager,
125
+ "specification_properties": SpecificationProperties,
126
+ "subject_area": SubjectArea,
127
+ "valid": ValidMetadataManager,
128
+ "valid_metadata": ValidMetadataManager,
129
+ }
130
+ self._instantiated_clients = {}
131
+ self.NO_ELEMENTS_FOUND = NO_ELEMENTS_FOUND
132
+
133
+ def _get_subclient(self, attr_name: str):
134
+ """Lazy-load and cache sub-clients."""
135
+ if attr_name not in self._instantiated_clients:
136
+ client_cls = self._subclient_map[attr_name]
137
+ self._instantiated_clients[attr_name] = client_cls(
138
+ self.view_server,
139
+ self.platform_url,
140
+ self.user_id,
141
+ self.user_pwd,
142
+ self.token,
112
143
  )
144
+ return self._instantiated_clients[attr_name]
145
+
146
+ def __getattr__(self, name):
147
+ """Delegate method calls to sub-clients, instantiating them on-demand."""
148
+ # Allow direct access to sub-clients if the name matches a key in the map
149
+ if name in self._subclient_map:
150
+ return self._get_subclient(name)
151
+
152
+ # Check already instantiated clients first for speed
153
+ for inst in self._instantiated_clients.values():
154
+ if hasattr(inst, name):
155
+ return getattr(inst, name)
156
+
157
+ # Look through the map for a class that provides this method
158
+ for attr_name, client_cls in self._subclient_map.items():
159
+ if hasattr(client_cls, name):
160
+ client = self._get_subclient(attr_name)
161
+ return getattr(client, name)
162
+
163
+ raise AttributeError(
164
+ f"{self.__class__.__name__!s} object has no attribute {name!r}"
165
+ )
166
+
167
+ def create_egeria_bearer_token(self, user_id: str = None, user_pwd: str = None):
168
+ """Create token and synchronize it across all instantiated sub-clients."""
169
+ # Use a reliable sub-client to generate the token (e.g., collections)
170
+ helper = self._get_subclient("collections")
171
+ token_val = helper.create_egeria_bearer_token(user_id, user_pwd)
172
+ self.set_bearer_token(token_val)
173
+ return token_val
174
+
175
+ def set_bearer_token(self, token: str) -> None:
176
+ """Update token for the tech client and all active sub-clients."""
177
+ self.token = token
178
+ for sub in self._instantiated_clients.values():
179
+ sub.set_bearer_token(token)
180
+
181
+ def get_token(self) -> str:
182
+ """Retrieve the current token from state or an active sub-client."""
183
+ if self.token:
184
+ return self.token
185
+ for sub in self._instantiated_clients.values():
186
+ if hasattr(sub, "get_token"):
187
+ return sub.get_token()
188
+ return None
189
+
190
+ def close_session(self) -> None:
191
+ """Close sessions for all sub-clients that were instantiated."""
192
+ for sub in self._instantiated_clients.values():
193
+ if hasattr(sub, "close_session"):
194
+ try:
195
+ sub.close_session()
196
+ except Exception:
197
+ pass
198
+ self._instantiated_clients.clear()
199
+
113
200
 
114
201
  if __name__ == "__main__":
115
202
  print("Main-Tech Client")