pyegeria 5.3.9.9.3__py3-none-any.whl → 5.5.3.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pyegeria might be problematic. Click here for more details.

Files changed (272) hide show
  1. commands/__init__.py +24 -0
  2. commands/cat/Dr-Egeria_md-orig.py +2 -2
  3. commands/cat/__init__.py +1 -17
  4. commands/cat/collection_actions.py +197 -0
  5. commands/cat/dr_egeria_command_help.py +372 -0
  6. commands/cat/dr_egeria_jupyter.py +7 -7
  7. commands/cat/dr_egeria_md.py +27 -182
  8. commands/cat/exp_list_glossaries.py +11 -14
  9. commands/cat/get_asset_graph.py +37 -267
  10. commands/cat/{get_collection.py → get_collection_tree.py} +10 -18
  11. commands/cat/get_project_dependencies.py +14 -14
  12. commands/cat/get_project_structure.py +15 -14
  13. commands/cat/get_tech_type_elements.py +16 -116
  14. commands/cat/glossary_actions.py +145 -298
  15. commands/cat/list_assets.py +3 -11
  16. commands/cat/list_cert_types.py +17 -63
  17. commands/cat/list_collections.py +46 -138
  18. commands/cat/list_deployed_catalogs.py +15 -27
  19. commands/cat/list_deployed_database_schemas.py +27 -43
  20. commands/cat/list_deployed_databases.py +16 -31
  21. commands/cat/list_deployed_servers.py +35 -54
  22. commands/cat/list_glossaries.py +18 -17
  23. commands/cat/list_projects.py +10 -12
  24. commands/cat/list_tech_type_elements.py +21 -37
  25. commands/cat/list_tech_types.py +13 -25
  26. commands/cat/list_terms.py +38 -79
  27. commands/cat/list_todos.py +4 -11
  28. commands/cat/list_user_ids.py +3 -10
  29. commands/cat/my_reports.py +559 -0
  30. commands/cat/run_report.py +394 -0
  31. commands/cat/run_report_orig.py +528 -0
  32. commands/cli/egeria.py +222 -247
  33. commands/cli/egeria_cat.py +68 -81
  34. commands/cli/egeria_my.py +13 -0
  35. commands/cli/egeria_ops.py +69 -74
  36. commands/cli/egeria_tech.py +17 -93
  37. commands/cli/ops_config.py +3 -6
  38. commands/{cat/list_categories.py → deprecated/list_data_designer.py} +53 -64
  39. commands/{cat/list_data_structures.py → deprecated/list_data_structures_full.py} +3 -6
  40. commands/deprecated/old_get_asset_graph.py +315 -0
  41. commands/my/__init__.py +0 -2
  42. commands/my/list_my_profile.py +27 -34
  43. commands/my/list_my_roles.py +1 -7
  44. commands/my/monitor_my_todos.py +1 -7
  45. commands/my/monitor_open_todos.py +6 -7
  46. commands/my/todo_actions.py +4 -5
  47. commands/ops/__init__.py +0 -2
  48. commands/ops/gov_server_actions.py +17 -21
  49. commands/ops/list_archives.py +17 -38
  50. commands/ops/list_catalog_targets.py +33 -40
  51. commands/ops/load_archive.py +35 -26
  52. commands/ops/{monitor_engine_activity_c.py → monitor_active_engine_activity.py} +51 -82
  53. commands/ops/{monitor_integ_daemon_status.py → monitor_daemon_status.py} +35 -55
  54. commands/ops/monitor_engine_activity.py +79 -77
  55. commands/ops/{monitor_gov_eng_status.py → monitor_engine_status.py} +10 -7
  56. commands/ops/monitor_platform_status.py +38 -50
  57. commands/ops/monitor_server_startup.py +6 -11
  58. commands/ops/monitor_server_status.py +7 -11
  59. commands/ops/orig_monitor_server_list.py +8 -8
  60. commands/ops/orig_monitor_server_status.py +1 -5
  61. commands/ops/refresh_integration_daemon.py +5 -5
  62. commands/ops/restart_integration_daemon.py +5 -5
  63. commands/ops/table_integ_daemon_status.py +6 -6
  64. commands/ops/x_engine_actions.py +7 -7
  65. commands/tech/__init__.py +0 -2
  66. commands/tech/{generic_actions.py → element_actions.py} +6 -11
  67. commands/tech/get_element_info.py +20 -29
  68. commands/tech/get_guid_info.py +23 -42
  69. commands/tech/get_tech_details.py +20 -35
  70. commands/tech/get_tech_type_template.py +28 -39
  71. commands/tech/list_all_om_type_elements.py +24 -30
  72. commands/tech/list_all_om_type_elements_x.py +22 -28
  73. commands/tech/list_all_related_elements.py +19 -28
  74. commands/tech/list_anchored_elements.py +22 -30
  75. commands/tech/list_asset_types.py +19 -24
  76. commands/tech/list_elements_by_classification_by_property_value.py +26 -32
  77. commands/tech/list_elements_by_property_value.py +19 -25
  78. commands/tech/list_elements_by_property_value_x.py +20 -28
  79. commands/tech/list_elements_for_classification.py +28 -41
  80. commands/tech/list_gov_action_processes.py +16 -27
  81. commands/tech/list_information_supply_chains.py +22 -30
  82. commands/tech/list_registered_services.py +14 -26
  83. commands/tech/list_related_elements_with_prop_value.py +15 -25
  84. commands/tech/list_related_specification.py +1 -4
  85. commands/tech/list_relationship_types.py +15 -25
  86. commands/tech/list_relationships.py +20 -36
  87. commands/tech/list_solution_blueprints.py +28 -33
  88. commands/tech/list_solution_components.py +23 -29
  89. commands/tech/list_solution_roles.py +21 -32
  90. commands/tech/list_tech_templates.py +51 -54
  91. commands/tech/list_valid_metadata_values.py +5 -9
  92. commands/tech/table_tech_templates.py +2 -6
  93. commands/tech/x_list_related_elements.py +1 -4
  94. examples/GeoSpatial Products Example.py +524 -0
  95. examples/Jupyter Notebooks/P-egeria-server-config.ipynb +2137 -0
  96. examples/Jupyter Notebooks/README.md +2 -0
  97. examples/Jupyter Notebooks/common/P-environment-check.ipynb +115 -0
  98. examples/Jupyter Notebooks/common/__init__.py +14 -0
  99. examples/Jupyter Notebooks/common/common-functions.ipynb +4694 -0
  100. examples/Jupyter Notebooks/common/environment-check.ipynb +52 -0
  101. examples/Jupyter Notebooks/common/globals.ipynb +184 -0
  102. examples/Jupyter Notebooks/common/globals.py +154 -0
  103. examples/Jupyter Notebooks/common/orig_globals.py +152 -0
  104. examples/format_sets/all_format_sets.json +910 -0
  105. examples/format_sets/custom_format_sets.json +268 -0
  106. examples/format_sets/subset_format_sets.json +187 -0
  107. examples/format_sets_save_load_example.py +291 -0
  108. examples/jacquard_data_sets.py +129 -0
  109. examples/output_formats_example.py +193 -0
  110. examples/test_jacquard_data_sets.py +54 -0
  111. examples/test_jacquard_data_sets_scenarios.py +94 -0
  112. md_processing/__init__.py +90 -0
  113. md_processing/command_dispatcher.py +33 -0
  114. md_processing/command_mapping.py +221 -0
  115. md_processing/data/commands/commands_data_designer.json +537 -0
  116. md_processing/data/commands/commands_external_reference.json +733 -0
  117. md_processing/data/commands/commands_feedback.json +155 -0
  118. md_processing/data/commands/commands_general.json +204 -0
  119. md_processing/data/commands/commands_glossary.json +218 -0
  120. md_processing/data/commands/commands_governance.json +3678 -0
  121. md_processing/data/commands/commands_product_manager.json +865 -0
  122. md_processing/data/commands/commands_project.json +642 -0
  123. md_processing/data/commands/commands_solution_architect.json +366 -0
  124. md_processing/data/commands.json +17568 -0
  125. md_processing/data/commands_working.json +30641 -0
  126. md_processing/data/gened_report_specs.py +6584 -0
  127. md_processing/data/generated_format_sets.json +6533 -0
  128. md_processing/data/generated_format_sets_old.json +4137 -0
  129. md_processing/data/generated_format_sets_old.py +45 -0
  130. md_processing/dr_egeria.py +182 -0
  131. md_processing/md_commands/__init__.py +3 -0
  132. md_processing/md_commands/data_designer_commands.py +1276 -0
  133. md_processing/md_commands/ext_ref_commands.py +530 -0
  134. md_processing/md_commands/feedback_commands.py +726 -0
  135. md_processing/md_commands/glossary_commands.py +684 -0
  136. md_processing/md_commands/governance_officer_commands.py +600 -0
  137. md_processing/md_commands/product_manager_commands.py +1266 -0
  138. md_processing/md_commands/project_commands.py +383 -0
  139. md_processing/md_commands/solution_architect_commands.py +1184 -0
  140. md_processing/md_commands/view_commands.py +295 -0
  141. md_processing/md_processing_utils/__init__.py +4 -0
  142. md_processing/md_processing_utils/common_md_proc_utils.py +1249 -0
  143. md_processing/md_processing_utils/common_md_utils.py +578 -0
  144. md_processing/md_processing_utils/determine_width.py +103 -0
  145. md_processing/md_processing_utils/extraction_utils.py +547 -0
  146. md_processing/md_processing_utils/gen_report_specs.py +643 -0
  147. md_processing/md_processing_utils/generate_dr_help.py +193 -0
  148. md_processing/md_processing_utils/generate_md_cmd_templates.py +144 -0
  149. md_processing/md_processing_utils/generate_md_templates.py +83 -0
  150. md_processing/md_processing_utils/md_processing_constants.py +1228 -0
  151. md_processing/md_processing_utils/message_constants.py +19 -0
  152. pyegeria/__init__.py +201 -443
  153. pyegeria/core/__init__.py +40 -0
  154. pyegeria/core/_base_platform_client.py +574 -0
  155. pyegeria/core/_base_server_client.py +573 -0
  156. pyegeria/core/_exceptions.py +457 -0
  157. pyegeria/core/_globals.py +60 -0
  158. pyegeria/core/_server_client.py +6073 -0
  159. pyegeria/core/_validators.py +257 -0
  160. pyegeria/core/config.py +654 -0
  161. pyegeria/{create_tech_guid_lists.py → core/create_tech_guid_lists.py} +0 -1
  162. pyegeria/core/load_config.py +37 -0
  163. pyegeria/core/logging_configuration.py +207 -0
  164. pyegeria/core/mcp_adapter.py +144 -0
  165. pyegeria/core/mcp_server.py +212 -0
  166. pyegeria/core/utils.py +405 -0
  167. pyegeria/deprecated/__init__.py +0 -0
  168. pyegeria/{_client.py → deprecated/_client.py} +62 -24
  169. pyegeria/{_deprecated_gov_engine.py → deprecated/_deprecated_gov_engine.py} +16 -16
  170. pyegeria/{classification_manager_omvs.py → deprecated/classification_manager_omvs.py} +1988 -1878
  171. pyegeria/deprecated/output_formatter_with_machine_keys.py +1127 -0
  172. pyegeria/{runtime_manager_omvs.py → deprecated/runtime_manager_omvs.py} +216 -229
  173. pyegeria/{valid_metadata_omvs.py → deprecated/valid_metadata_omvs.py} +93 -93
  174. pyegeria/{x_action_author_omvs.py → deprecated/x_action_author_omvs.py} +2 -3
  175. pyegeria/egeria_cat_client.py +25 -51
  176. pyegeria/egeria_client.py +140 -98
  177. pyegeria/egeria_config_client.py +48 -24
  178. pyegeria/egeria_tech_client.py +170 -83
  179. pyegeria/models/__init__.py +150 -0
  180. pyegeria/models/collection_models.py +168 -0
  181. pyegeria/models/models.py +654 -0
  182. pyegeria/omvs/__init__.py +84 -0
  183. pyegeria/omvs/action_author.py +342 -0
  184. pyegeria/omvs/actor_manager.py +5980 -0
  185. pyegeria/omvs/asset_catalog.py +842 -0
  186. pyegeria/omvs/asset_maker.py +2736 -0
  187. pyegeria/omvs/automated_curation.py +4403 -0
  188. pyegeria/omvs/classification_manager.py +11213 -0
  189. pyegeria/omvs/collection_manager.py +5780 -0
  190. pyegeria/omvs/community_matters_omvs.py +468 -0
  191. pyegeria/{core_omag_server_config.py → omvs/core_omag_server_config.py} +157 -157
  192. pyegeria/{data_designer_omvs.py → omvs/data_designer.py} +1991 -1691
  193. pyegeria/omvs/data_discovery.py +869 -0
  194. pyegeria/omvs/data_engineer.py +372 -0
  195. pyegeria/omvs/digital_business.py +1133 -0
  196. pyegeria/omvs/external_links.py +1752 -0
  197. pyegeria/omvs/feedback_manager.py +834 -0
  198. pyegeria/{full_omag_server_config.py → omvs/full_omag_server_config.py} +73 -69
  199. pyegeria/omvs/glossary_manager.py +3231 -0
  200. pyegeria/omvs/governance_officer.py +3009 -0
  201. pyegeria/omvs/lineage_linker.py +314 -0
  202. pyegeria/omvs/location_arena.py +1525 -0
  203. pyegeria/omvs/metadata_expert.py +668 -0
  204. pyegeria/omvs/metadata_explorer_omvs.py +2943 -0
  205. pyegeria/omvs/my_profile.py +1042 -0
  206. pyegeria/omvs/notification_manager.py +358 -0
  207. pyegeria/omvs/people_organizer.py +394 -0
  208. pyegeria/{platform_services.py → omvs/platform_services.py} +113 -193
  209. pyegeria/omvs/product_manager.py +1825 -0
  210. pyegeria/omvs/project_manager.py +1907 -0
  211. pyegeria/omvs/reference_data.py +1140 -0
  212. pyegeria/omvs/registered_info.py +334 -0
  213. pyegeria/omvs/runtime_manager.py +2817 -0
  214. pyegeria/omvs/schema_maker.py +446 -0
  215. pyegeria/{server_operations.py → omvs/server_operations.py} +27 -26
  216. pyegeria/omvs/solution_architect.py +6490 -0
  217. pyegeria/omvs/specification_properties.py +37 -0
  218. pyegeria/omvs/subject_area.py +1042 -0
  219. pyegeria/omvs/template_manager_omvs.py +236 -0
  220. pyegeria/omvs/time_keeper.py +1761 -0
  221. pyegeria/omvs/valid_metadata.py +3221 -0
  222. pyegeria/omvs/valid_metadata_lists.py +37 -0
  223. pyegeria/omvs/valid_type_lists.py +37 -0
  224. pyegeria/view/__init__.py +28 -0
  225. pyegeria/view/_output_format_models.py +514 -0
  226. pyegeria/view/_output_formats.py +14 -0
  227. pyegeria/view/base_report_formats.py +2719 -0
  228. pyegeria/view/dr_egeria_reports.py +56 -0
  229. pyegeria/view/format_set_executor.py +397 -0
  230. pyegeria/{md_processing_utils.py → view/md_processing_utils.py} +5 -5
  231. pyegeria/{mermaid_utilities.py → view/mermaid_utilities.py} +2 -154
  232. pyegeria/view/output_formatter.py +1297 -0
  233. pyegeria-5.5.3.3.dist-info/METADATA +218 -0
  234. pyegeria-5.5.3.3.dist-info/RECORD +241 -0
  235. {pyegeria-5.3.9.9.3.dist-info → pyegeria-5.5.3.3.dist-info}/WHEEL +2 -1
  236. pyegeria-5.5.3.3.dist-info/entry_points.txt +103 -0
  237. pyegeria-5.5.3.3.dist-info/top_level.txt +4 -0
  238. commands/cat/.DS_Store +0 -0
  239. commands/cat/README.md +0 -16
  240. commands/cli/txt_custom_v2.tcss +0 -19
  241. commands/my/README.md +0 -17
  242. commands/ops/README.md +0 -24
  243. commands/ops/monitor_asset_events.py +0 -108
  244. commands/tech/README.md +0 -24
  245. pyegeria/.DS_Store +0 -0
  246. pyegeria/README.md +0 -35
  247. pyegeria/_globals.py +0 -47
  248. pyegeria/_validators.py +0 -385
  249. pyegeria/asset_catalog_omvs.py +0 -864
  250. pyegeria/automated_curation_omvs.py +0 -3765
  251. pyegeria/collection_manager_omvs.py +0 -2744
  252. pyegeria/dr.egeria spec.md +0 -9
  253. pyegeria/egeria_my_client.py +0 -56
  254. pyegeria/feedback_manager_omvs.py +0 -4573
  255. pyegeria/glossary_browser_omvs.py +0 -3728
  256. pyegeria/glossary_manager_omvs.py +0 -2440
  257. pyegeria/m_test.py +0 -118
  258. pyegeria/md_processing_helpers.py +0 -58
  259. pyegeria/md_processing_utils_orig.py +0 -1103
  260. pyegeria/metadata_explorer_omvs.py +0 -2326
  261. pyegeria/my_profile_omvs.py +0 -1022
  262. pyegeria/output_formatter.py +0 -389
  263. pyegeria/project_manager_omvs.py +0 -1933
  264. pyegeria/registered_info.py +0 -167
  265. pyegeria/solution_architect_omvs.py +0 -2156
  266. pyegeria/template_manager_omvs.py +0 -1414
  267. pyegeria/utils.py +0 -197
  268. pyegeria-5.3.9.9.3.dist-info/METADATA +0 -72
  269. pyegeria-5.3.9.9.3.dist-info/RECORD +0 -143
  270. pyegeria-5.3.9.9.3.dist-info/entry_points.txt +0 -99
  271. /pyegeria/{_exceptions.py → deprecated/_exceptions.py} +0 -0
  272. {pyegeria-5.3.9.9.3.dist-info → pyegeria-5.5.3.3.dist-info/licenses}/LICENSE +0 -0
@@ -0,0 +1,372 @@
1
+ """
2
+ PDX-License-Identifier: Apache-2.0
3
+ Copyright Contributors to the ODPi Egeria project.
4
+
5
+ Access tabular data sets
6
+
7
+ """
8
+ import asyncio
9
+
10
+ from pydantic import HttpUrl
11
+
12
+ from pyegeria.core._exceptions import PyegeriaException
13
+ from pyegeria.core.utils import dynamic_catch, transform_json_to_tabular
14
+ from pyegeria.core._server_client import ServerClient
15
+ from pyegeria.models import SearchStringRequestBody
16
+ from pyegeria.view.output_formatter import _generate_default_output
17
+ from typing import Any, Optional
18
+
19
+ class DataEngineer(ServerClient):
20
+ """
21
+ Client for the Data Engineer View Service.
22
+
23
+ The Data Engineer View Service provides methods to access tabular data sets.
24
+
25
+ Attributes
26
+ ----------
27
+ view_server : str
28
+ The name of the View Server to use.
29
+ platform_url : str
30
+ URL of the server platform to connect to.
31
+ user_id : str
32
+ The identity of the user calling the method.
33
+ user_pwd : str
34
+ The password associated with the user_id. Defaults to None.
35
+ """
36
+ @dynamic_catch
37
+ def __init__(self, view_server: str, platform_url: str, user_id: str, user_pwd: Optional[str] = None, token: str = None):
38
+ """
39
+ Initialize the DataEngineer client.
40
+
41
+ Parameters
42
+ ----------
43
+ view_server : str
44
+ The name of the View Server to use.
45
+ platform_url : str
46
+ URL of the server platform to connect to.
47
+ user_id : str
48
+ The identity of the user calling the method.
49
+ user_pwd : str, optional
50
+ The password associated with the user_id. Defaults to None.
51
+ token : str, optional
52
+ An optional bearer token for authentication.
53
+ """
54
+ self.view_server = view_server
55
+ self.platform_url = platform_url
56
+ self.user_id = user_id
57
+ self.user_pwd = user_pwd
58
+
59
+ ServerClient.__init__(self, view_server, platform_url, user_id, user_pwd, token)
60
+ self.command_root: str = (
61
+ f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/data-engineer")
62
+
63
+ @dynamic_catch
64
+ async def _async_find_tabular_data_sets(self, search_string: str = "*",
65
+ starts_with: bool = True, ends_with: bool = False,
66
+ ignore_case: bool = False,
67
+ anchor_domain: Optional[str] = None,
68
+ metadata_element_type: str = "TabularDataSet",
69
+ metadata_element_subtypes: Optional[list[str]] = None,
70
+ skip_relationships: Optional[list[str]] = None,
71
+ include_only_relationships: Optional[list[str]] = None,
72
+ skip_classified_elements: list[str] = ["Template"],
73
+ include_only_classified_elements: Optional[list[str]] = None,
74
+ graph_query_depth: int = 3,
75
+ governance_zone_filter: Optional[list[str]] = None, as_of_time: Optional[str] = None,
76
+ effective_time: Optional[str] = None, relationship_page_size: int = 0,
77
+ limit_results_by_status: Optional[list[str]] = None, sequencing_order: Optional[str] = None,
78
+ sequencing_property: Optional[str] = None,
79
+ output_format: str = "JSON",
80
+ report_spec: str | dict = "Referenceable",
81
+ start_from: int = 0, page_size: int = 100,
82
+ property_names: Optional[list[str]] = None,
83
+ body: Optional[dict | SearchStringRequestBody] = None) -> list | str:
84
+ """ Retrieve the list of tabular data set metadata elements that contain the search string. Async Version.
85
+
86
+ Parameters
87
+ ----------
88
+ search_string: str
89
+ Search string to match against - None or '*' indicate match against all data sets.
90
+ starts_with : bool, [default=True], optional
91
+ Starts with the supplied string.
92
+ ends_with : bool, [default=False], optional
93
+ Ends with the supplied string
94
+ ignore_case : bool, [default=False], optional
95
+ Ignore case when searching
96
+ anchor_domain: str, optional
97
+ The anchor domain to search in.
98
+ metadata_element_type: str, optional
99
+ The type of metadata element to search for.
100
+ metadata_element_subtypes: list[str], optional
101
+ The subtypes of metadata element to search for.
102
+ skip_relationships: list[str], optional
103
+ The types of relationships to skip.
104
+ include_only_relationships: list[str], optional
105
+ The types of relationships to include.
106
+ skip_classified_elements: list[str], optional
107
+ The types of classified elements to skip.
108
+ include_only_classified_elements: list[str], optional
109
+ The types of classified elements to include.
110
+ graph_query_depth: int, [default=3], optional
111
+ The depth of the graph query.
112
+ governance_zone_filter: list[str], optional
113
+ The governance zones to search in.
114
+ as_of_time: str, optional
115
+ The time to search as of.
116
+ effective_time: str, optional
117
+ The effective time to search at.
118
+ relationship_page_size: int, [default=0], optional
119
+ The page size for relationships.
120
+ limit_results_by_status: list[str], optional
121
+ The statuses to limit results by.
122
+ sequencing_order: str, optional
123
+ The order to sequence results by.
124
+ sequencing_property: str, optional
125
+ The property to sequence results by.
126
+ output_format: str, default = "JSON"
127
+ - one of "MD", "LIST", "FORM", "REPORT", "DICT", "MERMAID" or "JSON"
128
+ report_spec: str | dict , optional, default = "Referenceable"
129
+ - The desired output columns/fields to include.
130
+ start_from: int, [default=0], optional
131
+ When multiple pages of results are available, the page number to start from.
132
+ page_size: int, [default=100]
133
+ The number of items to return in a single page.
134
+ property_names: list[str], optional
135
+ The names of properties to search for.
136
+ body: dict | SearchStringRequestBody, optional, default = None
137
+ - if provided, the search parameters in the body will supercede other attributes, such as "search_string"
138
+
139
+ Returns
140
+ -------
141
+ List | str
142
+
143
+ Output depends on the output format specified.
144
+
145
+ Raises
146
+ ------
147
+
148
+ ValidationError
149
+ If the client passes incorrect parameters on the request that don't conform to the data model.
150
+ PyegeriaException
151
+ Issues raised in communicating or server side processing.
152
+ NotAuthorizedException
153
+ The principle specified by the user_id does not have authorization for the requested action
154
+
155
+ """
156
+ url = f"{self.command_root}/assets/by-search-string"
157
+ response = await self._async_find_request(url, _type="TabularDataSet", _gen_output=self._generate_referenceable_output,
158
+ search_string=search_string, starts_with=starts_with,
159
+ ends_with=ends_with, ignore_case=ignore_case,
160
+ anchor_domain=anchor_domain,
161
+ metadata_element_type=metadata_element_type,
162
+ metadata_element_subtypes=metadata_element_subtypes,
163
+ skip_relationships=skip_relationships,
164
+ include_only_relationships=include_only_relationships,
165
+ skip_classified_elements=skip_classified_elements,
166
+ include_only_classified_elements=include_only_classified_elements,
167
+ graph_query_depth=graph_query_depth,
168
+ governance_zone_filter=governance_zone_filter,
169
+ as_of_time=as_of_time, effective_time=effective_time,
170
+ relationship_page_size=relationship_page_size,
171
+ limit_results_by_status=limit_results_by_status,
172
+ sequencing_order=sequencing_order,
173
+ sequencing_property=sequencing_property,
174
+ output_format=output_format, report_spec=report_spec,
175
+ start_from=start_from, page_size=page_size,
176
+ property_names=property_names, body=body)
177
+
178
+ return response
179
+
180
+ @dynamic_catch
181
+ def find_tabular_data_sets(self, search_string: str = "*",
182
+ starts_with: bool = True, ends_with: bool = False,
183
+ ignore_case: bool = False,
184
+ anchor_domain: Optional[str] = None,
185
+ metadata_element_type: str = "TabularDataSet",
186
+ metadata_element_subtypes: Optional[list[str]] = None,
187
+ skip_relationships: Optional[list[str]] = None,
188
+ include_only_relationships: Optional[list[str]] = None,
189
+ skip_classified_elements: list[str] = ["Template"],
190
+ include_only_classified_elements: Optional[list[str]] = None,
191
+ graph_query_depth: int = 3,
192
+ governance_zone_filter: Optional[list[str]] = None, as_of_time: Optional[str] = None,
193
+ effective_time: Optional[str] = None, relationship_page_size: int = 0,
194
+ limit_results_by_status: Optional[list[str]] = None, sequencing_order: Optional[str] = None,
195
+ sequencing_property: Optional[str] = None,
196
+ output_format: str = "JSON",
197
+ report_spec: str | dict = "Referenceable",
198
+ start_from: int = 0, page_size: int = 100,
199
+ property_names: Optional[list[str]] = None,
200
+ body: Optional[dict | SearchStringRequestBody] = None) -> list | str:
201
+ """ Retrieve the list of tabular data set metadata elements that contain the search string.
202
+
203
+ Parameters
204
+ ----------
205
+ search_string: str
206
+ Search string to match against - None or '*' indicate match against all data sets.
207
+ starts_with : bool, [default=True], optional
208
+ Starts with the supplied string.
209
+ ends_with : bool, [default=False], optional
210
+ Ends with the supplied string
211
+ ignore_case : bool, [default=False], optional
212
+ Ignore case when searching
213
+ anchor_domain: str, optional
214
+ The anchor domain to search in.
215
+ metadata_element_type: str, optional
216
+ The type of metadata element to search for.
217
+ metadata_element_subtypes: list[str], optional
218
+ The subtypes of metadata element to search for.
219
+ skip_relationships: list[str], optional
220
+ The types of relationships to skip.
221
+ include_only_relationships: list[str], optional
222
+ The types of relationships to include.
223
+ skip_classified_elements: list[str], optional
224
+ The types of classified elements to skip.
225
+ include_only_classified_elements: list[str], optional
226
+ The types of classified elements to include.
227
+ graph_query_depth: int, [default=3], optional
228
+ The depth of the graph query.
229
+ governance_zone_filter: list[str], optional
230
+ The governance zones to search in.
231
+ as_of_time: str, optional
232
+ The time to search as of.
233
+ effective_time: str, optional
234
+ The effective time to search at.
235
+ relationship_page_size: int, [default=0], optional
236
+ The page size for relationships.
237
+ limit_results_by_status: list[str], optional
238
+ The statuses to limit results by.
239
+ sequencing_order: str, optional
240
+ The order to sequence results by.
241
+ sequencing_property: str, optional
242
+ The property to sequence results by.
243
+ output_format: str, default = "JSON"
244
+ - one of "MD", "LIST", "FORM", "REPORT", "DICT", "MERMAID" or "JSON"
245
+ report_spec: str | dict , optional, default = "Referenceable"
246
+ - The desired output columns/fields to include.
247
+ start_from: int, [default=0], optional
248
+ When multiple pages of results are available, the page number to start from.
249
+ page_size: int, [default=100]
250
+ The number of items to return in a single page.
251
+ property_names: list[str], optional
252
+ The names of properties to search for.
253
+ body: dict | SearchStringRequestBody, optional, default = None
254
+ - if provided, the search parameters in the body will supercede other attributes, such as "search_string"
255
+
256
+ Returns
257
+ -------
258
+ List | str
259
+
260
+ Output depends on the output format specified.
261
+
262
+ Raises
263
+ -------
264
+
265
+ ValidationError
266
+ If the client passes incorrect parameters on the request that don't conform to the data model.
267
+ PyegeriaException
268
+ Issues raised in communicating or server side processing.
269
+ NotAuthorizedException
270
+ The principle specified by the user_id does not have authorization for the requested action
271
+
272
+ """
273
+ loop = asyncio.get_event_loop()
274
+ return loop.run_until_complete(self._async_find_tabular_data_sets(search_string=search_string,
275
+ starts_with=starts_with,
276
+ ends_with=ends_with,
277
+ ignore_case=ignore_case,
278
+ anchor_domain=anchor_domain,
279
+ metadata_element_type=metadata_element_type,
280
+ metadata_element_subtypes=metadata_element_subtypes,
281
+ skip_relationships=skip_relationships,
282
+ include_only_relationships=include_only_relationships,
283
+ skip_classified_elements=skip_classified_elements,
284
+ include_only_classified_elements=include_only_classified_elements,
285
+ graph_query_depth=graph_query_depth,
286
+ governance_zone_filter=governance_zone_filter,
287
+ as_of_time=as_of_time,
288
+ effective_time=effective_time,
289
+ relationship_page_size=relationship_page_size,
290
+ limit_results_by_status=limit_results_by_status,
291
+ sequencing_order=sequencing_order,
292
+ sequencing_property=sequencing_property,
293
+ output_format=output_format,
294
+ report_spec=report_spec,
295
+ start_from=start_from,
296
+ page_size=page_size,
297
+ property_names=property_names,
298
+ body=body))
299
+
300
+ @dynamic_catch
301
+ def get_tabular_data_set(self, tabular_data_set_guid: str, start_from_row: int = 0, max_row_count: int = 5000,
302
+ output_format: str = "JSON") -> dict:
303
+ """ Retrieve a tabular data set report.
304
+
305
+ Parameters
306
+ ----------
307
+ tabular_data_set_guid: str
308
+ The unique identifier of the tabular data set.
309
+ start_from_row: int, optional
310
+ The starting row number for the report.
311
+ max_row_count: int, optional
312
+ The maximum number of rows to return.
313
+ output_format: str, optional
314
+ The format of the output (JSON, CSV, RICH-TABLE).
315
+
316
+ Returns
317
+ -------
318
+ dict - the tabular data set report
319
+
320
+ Raises
321
+ ------
322
+ PyegeriaException
323
+ One of the pyegeria exceptions will be raised if there are issues in communications, message format, or
324
+ Egeria errors.
325
+ """
326
+ loop = asyncio.get_event_loop()
327
+ response = loop.run_until_complete(
328
+ self._async_get_tabular_data_set(tabular_data_set_guid, start_from_row, max_row_count, output_format)
329
+ )
330
+ return response
331
+
332
+ @dynamic_catch
333
+ async def _async_get_tabular_data_set(self, tabular_data_set_guid:str, start_from_row:int = 0, max_row_count: int = 5000,
334
+ output_format: str = "JSON") -> dict:
335
+ """Retrieve a tabular data set report. Async version.
336
+
337
+ Parameters
338
+ ----------
339
+ tabular_data_set_guid: str
340
+ The unique identifier of the tabular data set.
341
+ start_from_row: int, optional
342
+ The starting row number for the report.
343
+ max_row_count: int, optional
344
+ The maximum number of rows to return.
345
+ output_format: str, optional
346
+ The format of the output (JSON, CSV, RICH-TABLE).
347
+
348
+ Returns
349
+ -------
350
+ dict
351
+ The tabular data set report.
352
+
353
+ Raises
354
+ ------
355
+ PyegeriaException
356
+ If there are issues in communications, message format, or Egeria errors.
357
+ """
358
+ url = str(HttpUrl(f"{self.command_root}/tabular-data-sets/{tabular_data_set_guid}/report?"
359
+ f"startFromRow={start_from_row}&MaxRowCount={max_row_count}"))
360
+ response = await self._async_make_request("GET", url)
361
+ el_list = response.json().get('tabularDataSetReport',"No Dataset Found")
362
+ if isinstance(el_list, dict):
363
+ if output_format == "JSON":
364
+ return el_list
365
+ elif output_format == "CSV":
366
+ return transform_json_to_tabular(response, output_format="CSV")
367
+ elif output_format == "RICH-TABLE":
368
+ return transform_json_to_tabular(response, output_format="RICH-TABLE")
369
+ else:
370
+ raise PyegeriaException(f"Unsupported output format: {output_format}")
371
+ else:
372
+ raise PyegeriaException(f"Unsupported output format: {output_format}")