pyegeria 5.3.9.9.3__py3-none-any.whl → 5.5.3.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pyegeria might be problematic. Click here for more details.
- commands/__init__.py +24 -0
- commands/cat/Dr-Egeria_md-orig.py +2 -2
- commands/cat/__init__.py +1 -17
- commands/cat/collection_actions.py +197 -0
- commands/cat/dr_egeria_command_help.py +372 -0
- commands/cat/dr_egeria_jupyter.py +7 -7
- commands/cat/dr_egeria_md.py +27 -182
- commands/cat/exp_list_glossaries.py +11 -14
- commands/cat/get_asset_graph.py +37 -267
- commands/cat/{get_collection.py → get_collection_tree.py} +10 -18
- commands/cat/get_project_dependencies.py +14 -14
- commands/cat/get_project_structure.py +15 -14
- commands/cat/get_tech_type_elements.py +16 -116
- commands/cat/glossary_actions.py +145 -298
- commands/cat/list_assets.py +3 -11
- commands/cat/list_cert_types.py +17 -63
- commands/cat/list_collections.py +46 -138
- commands/cat/list_deployed_catalogs.py +15 -27
- commands/cat/list_deployed_database_schemas.py +27 -43
- commands/cat/list_deployed_databases.py +16 -31
- commands/cat/list_deployed_servers.py +35 -54
- commands/cat/list_glossaries.py +18 -17
- commands/cat/list_projects.py +10 -12
- commands/cat/list_tech_type_elements.py +21 -37
- commands/cat/list_tech_types.py +13 -25
- commands/cat/list_terms.py +38 -79
- commands/cat/list_todos.py +4 -11
- commands/cat/list_user_ids.py +3 -10
- commands/cat/my_reports.py +559 -0
- commands/cat/run_report.py +394 -0
- commands/cat/run_report_orig.py +528 -0
- commands/cli/egeria.py +222 -247
- commands/cli/egeria_cat.py +68 -81
- commands/cli/egeria_my.py +13 -0
- commands/cli/egeria_ops.py +69 -74
- commands/cli/egeria_tech.py +17 -93
- commands/cli/ops_config.py +3 -6
- commands/{cat/list_categories.py → deprecated/list_data_designer.py} +53 -64
- commands/{cat/list_data_structures.py → deprecated/list_data_structures_full.py} +3 -6
- commands/deprecated/old_get_asset_graph.py +315 -0
- commands/my/__init__.py +0 -2
- commands/my/list_my_profile.py +27 -34
- commands/my/list_my_roles.py +1 -7
- commands/my/monitor_my_todos.py +1 -7
- commands/my/monitor_open_todos.py +6 -7
- commands/my/todo_actions.py +4 -5
- commands/ops/__init__.py +0 -2
- commands/ops/gov_server_actions.py +17 -21
- commands/ops/list_archives.py +17 -38
- commands/ops/list_catalog_targets.py +33 -40
- commands/ops/load_archive.py +35 -26
- commands/ops/{monitor_engine_activity_c.py → monitor_active_engine_activity.py} +51 -82
- commands/ops/{monitor_integ_daemon_status.py → monitor_daemon_status.py} +35 -55
- commands/ops/monitor_engine_activity.py +79 -77
- commands/ops/{monitor_gov_eng_status.py → monitor_engine_status.py} +10 -7
- commands/ops/monitor_platform_status.py +38 -50
- commands/ops/monitor_server_startup.py +6 -11
- commands/ops/monitor_server_status.py +7 -11
- commands/ops/orig_monitor_server_list.py +8 -8
- commands/ops/orig_monitor_server_status.py +1 -5
- commands/ops/refresh_integration_daemon.py +5 -5
- commands/ops/restart_integration_daemon.py +5 -5
- commands/ops/table_integ_daemon_status.py +6 -6
- commands/ops/x_engine_actions.py +7 -7
- commands/tech/__init__.py +0 -2
- commands/tech/{generic_actions.py → element_actions.py} +6 -11
- commands/tech/get_element_info.py +20 -29
- commands/tech/get_guid_info.py +23 -42
- commands/tech/get_tech_details.py +20 -35
- commands/tech/get_tech_type_template.py +28 -39
- commands/tech/list_all_om_type_elements.py +24 -30
- commands/tech/list_all_om_type_elements_x.py +22 -28
- commands/tech/list_all_related_elements.py +19 -28
- commands/tech/list_anchored_elements.py +22 -30
- commands/tech/list_asset_types.py +19 -24
- commands/tech/list_elements_by_classification_by_property_value.py +26 -32
- commands/tech/list_elements_by_property_value.py +19 -25
- commands/tech/list_elements_by_property_value_x.py +20 -28
- commands/tech/list_elements_for_classification.py +28 -41
- commands/tech/list_gov_action_processes.py +16 -27
- commands/tech/list_information_supply_chains.py +22 -30
- commands/tech/list_registered_services.py +14 -26
- commands/tech/list_related_elements_with_prop_value.py +15 -25
- commands/tech/list_related_specification.py +1 -4
- commands/tech/list_relationship_types.py +15 -25
- commands/tech/list_relationships.py +20 -36
- commands/tech/list_solution_blueprints.py +28 -33
- commands/tech/list_solution_components.py +23 -29
- commands/tech/list_solution_roles.py +21 -32
- commands/tech/list_tech_templates.py +51 -54
- commands/tech/list_valid_metadata_values.py +5 -9
- commands/tech/table_tech_templates.py +2 -6
- commands/tech/x_list_related_elements.py +1 -4
- examples/GeoSpatial Products Example.py +524 -0
- examples/Jupyter Notebooks/P-egeria-server-config.ipynb +2137 -0
- examples/Jupyter Notebooks/README.md +2 -0
- examples/Jupyter Notebooks/common/P-environment-check.ipynb +115 -0
- examples/Jupyter Notebooks/common/__init__.py +14 -0
- examples/Jupyter Notebooks/common/common-functions.ipynb +4694 -0
- examples/Jupyter Notebooks/common/environment-check.ipynb +52 -0
- examples/Jupyter Notebooks/common/globals.ipynb +184 -0
- examples/Jupyter Notebooks/common/globals.py +154 -0
- examples/Jupyter Notebooks/common/orig_globals.py +152 -0
- examples/format_sets/all_format_sets.json +910 -0
- examples/format_sets/custom_format_sets.json +268 -0
- examples/format_sets/subset_format_sets.json +187 -0
- examples/format_sets_save_load_example.py +291 -0
- examples/jacquard_data_sets.py +129 -0
- examples/output_formats_example.py +193 -0
- examples/test_jacquard_data_sets.py +54 -0
- examples/test_jacquard_data_sets_scenarios.py +94 -0
- md_processing/__init__.py +90 -0
- md_processing/command_dispatcher.py +33 -0
- md_processing/command_mapping.py +221 -0
- md_processing/data/commands/commands_data_designer.json +537 -0
- md_processing/data/commands/commands_external_reference.json +733 -0
- md_processing/data/commands/commands_feedback.json +155 -0
- md_processing/data/commands/commands_general.json +204 -0
- md_processing/data/commands/commands_glossary.json +218 -0
- md_processing/data/commands/commands_governance.json +3678 -0
- md_processing/data/commands/commands_product_manager.json +865 -0
- md_processing/data/commands/commands_project.json +642 -0
- md_processing/data/commands/commands_solution_architect.json +366 -0
- md_processing/data/commands.json +17568 -0
- md_processing/data/commands_working.json +30641 -0
- md_processing/data/gened_report_specs.py +6584 -0
- md_processing/data/generated_format_sets.json +6533 -0
- md_processing/data/generated_format_sets_old.json +4137 -0
- md_processing/data/generated_format_sets_old.py +45 -0
- md_processing/dr_egeria.py +182 -0
- md_processing/md_commands/__init__.py +3 -0
- md_processing/md_commands/data_designer_commands.py +1276 -0
- md_processing/md_commands/ext_ref_commands.py +530 -0
- md_processing/md_commands/feedback_commands.py +726 -0
- md_processing/md_commands/glossary_commands.py +684 -0
- md_processing/md_commands/governance_officer_commands.py +600 -0
- md_processing/md_commands/product_manager_commands.py +1266 -0
- md_processing/md_commands/project_commands.py +383 -0
- md_processing/md_commands/solution_architect_commands.py +1184 -0
- md_processing/md_commands/view_commands.py +295 -0
- md_processing/md_processing_utils/__init__.py +4 -0
- md_processing/md_processing_utils/common_md_proc_utils.py +1249 -0
- md_processing/md_processing_utils/common_md_utils.py +578 -0
- md_processing/md_processing_utils/determine_width.py +103 -0
- md_processing/md_processing_utils/extraction_utils.py +547 -0
- md_processing/md_processing_utils/gen_report_specs.py +643 -0
- md_processing/md_processing_utils/generate_dr_help.py +193 -0
- md_processing/md_processing_utils/generate_md_cmd_templates.py +144 -0
- md_processing/md_processing_utils/generate_md_templates.py +83 -0
- md_processing/md_processing_utils/md_processing_constants.py +1228 -0
- md_processing/md_processing_utils/message_constants.py +19 -0
- pyegeria/__init__.py +201 -443
- pyegeria/core/__init__.py +40 -0
- pyegeria/core/_base_platform_client.py +574 -0
- pyegeria/core/_base_server_client.py +573 -0
- pyegeria/core/_exceptions.py +457 -0
- pyegeria/core/_globals.py +60 -0
- pyegeria/core/_server_client.py +6073 -0
- pyegeria/core/_validators.py +257 -0
- pyegeria/core/config.py +654 -0
- pyegeria/{create_tech_guid_lists.py → core/create_tech_guid_lists.py} +0 -1
- pyegeria/core/load_config.py +37 -0
- pyegeria/core/logging_configuration.py +207 -0
- pyegeria/core/mcp_adapter.py +144 -0
- pyegeria/core/mcp_server.py +212 -0
- pyegeria/core/utils.py +405 -0
- pyegeria/deprecated/__init__.py +0 -0
- pyegeria/{_client.py → deprecated/_client.py} +62 -24
- pyegeria/{_deprecated_gov_engine.py → deprecated/_deprecated_gov_engine.py} +16 -16
- pyegeria/{classification_manager_omvs.py → deprecated/classification_manager_omvs.py} +1988 -1878
- pyegeria/deprecated/output_formatter_with_machine_keys.py +1127 -0
- pyegeria/{runtime_manager_omvs.py → deprecated/runtime_manager_omvs.py} +216 -229
- pyegeria/{valid_metadata_omvs.py → deprecated/valid_metadata_omvs.py} +93 -93
- pyegeria/{x_action_author_omvs.py → deprecated/x_action_author_omvs.py} +2 -3
- pyegeria/egeria_cat_client.py +25 -51
- pyegeria/egeria_client.py +140 -98
- pyegeria/egeria_config_client.py +48 -24
- pyegeria/egeria_tech_client.py +170 -83
- pyegeria/models/__init__.py +150 -0
- pyegeria/models/collection_models.py +168 -0
- pyegeria/models/models.py +654 -0
- pyegeria/omvs/__init__.py +84 -0
- pyegeria/omvs/action_author.py +342 -0
- pyegeria/omvs/actor_manager.py +5980 -0
- pyegeria/omvs/asset_catalog.py +842 -0
- pyegeria/omvs/asset_maker.py +2736 -0
- pyegeria/omvs/automated_curation.py +4403 -0
- pyegeria/omvs/classification_manager.py +11213 -0
- pyegeria/omvs/collection_manager.py +5780 -0
- pyegeria/omvs/community_matters_omvs.py +468 -0
- pyegeria/{core_omag_server_config.py → omvs/core_omag_server_config.py} +157 -157
- pyegeria/{data_designer_omvs.py → omvs/data_designer.py} +1991 -1691
- pyegeria/omvs/data_discovery.py +869 -0
- pyegeria/omvs/data_engineer.py +372 -0
- pyegeria/omvs/digital_business.py +1133 -0
- pyegeria/omvs/external_links.py +1752 -0
- pyegeria/omvs/feedback_manager.py +834 -0
- pyegeria/{full_omag_server_config.py → omvs/full_omag_server_config.py} +73 -69
- pyegeria/omvs/glossary_manager.py +3231 -0
- pyegeria/omvs/governance_officer.py +3009 -0
- pyegeria/omvs/lineage_linker.py +314 -0
- pyegeria/omvs/location_arena.py +1525 -0
- pyegeria/omvs/metadata_expert.py +668 -0
- pyegeria/omvs/metadata_explorer_omvs.py +2943 -0
- pyegeria/omvs/my_profile.py +1042 -0
- pyegeria/omvs/notification_manager.py +358 -0
- pyegeria/omvs/people_organizer.py +394 -0
- pyegeria/{platform_services.py → omvs/platform_services.py} +113 -193
- pyegeria/omvs/product_manager.py +1825 -0
- pyegeria/omvs/project_manager.py +1907 -0
- pyegeria/omvs/reference_data.py +1140 -0
- pyegeria/omvs/registered_info.py +334 -0
- pyegeria/omvs/runtime_manager.py +2817 -0
- pyegeria/omvs/schema_maker.py +446 -0
- pyegeria/{server_operations.py → omvs/server_operations.py} +27 -26
- pyegeria/omvs/solution_architect.py +6490 -0
- pyegeria/omvs/specification_properties.py +37 -0
- pyegeria/omvs/subject_area.py +1042 -0
- pyegeria/omvs/template_manager_omvs.py +236 -0
- pyegeria/omvs/time_keeper.py +1761 -0
- pyegeria/omvs/valid_metadata.py +3221 -0
- pyegeria/omvs/valid_metadata_lists.py +37 -0
- pyegeria/omvs/valid_type_lists.py +37 -0
- pyegeria/view/__init__.py +28 -0
- pyegeria/view/_output_format_models.py +514 -0
- pyegeria/view/_output_formats.py +14 -0
- pyegeria/view/base_report_formats.py +2719 -0
- pyegeria/view/dr_egeria_reports.py +56 -0
- pyegeria/view/format_set_executor.py +397 -0
- pyegeria/{md_processing_utils.py → view/md_processing_utils.py} +5 -5
- pyegeria/{mermaid_utilities.py → view/mermaid_utilities.py} +2 -154
- pyegeria/view/output_formatter.py +1297 -0
- pyegeria-5.5.3.3.dist-info/METADATA +218 -0
- pyegeria-5.5.3.3.dist-info/RECORD +241 -0
- {pyegeria-5.3.9.9.3.dist-info → pyegeria-5.5.3.3.dist-info}/WHEEL +2 -1
- pyegeria-5.5.3.3.dist-info/entry_points.txt +103 -0
- pyegeria-5.5.3.3.dist-info/top_level.txt +4 -0
- commands/cat/.DS_Store +0 -0
- commands/cat/README.md +0 -16
- commands/cli/txt_custom_v2.tcss +0 -19
- commands/my/README.md +0 -17
- commands/ops/README.md +0 -24
- commands/ops/monitor_asset_events.py +0 -108
- commands/tech/README.md +0 -24
- pyegeria/.DS_Store +0 -0
- pyegeria/README.md +0 -35
- pyegeria/_globals.py +0 -47
- pyegeria/_validators.py +0 -385
- pyegeria/asset_catalog_omvs.py +0 -864
- pyegeria/automated_curation_omvs.py +0 -3765
- pyegeria/collection_manager_omvs.py +0 -2744
- pyegeria/dr.egeria spec.md +0 -9
- pyegeria/egeria_my_client.py +0 -56
- pyegeria/feedback_manager_omvs.py +0 -4573
- pyegeria/glossary_browser_omvs.py +0 -3728
- pyegeria/glossary_manager_omvs.py +0 -2440
- pyegeria/m_test.py +0 -118
- pyegeria/md_processing_helpers.py +0 -58
- pyegeria/md_processing_utils_orig.py +0 -1103
- pyegeria/metadata_explorer_omvs.py +0 -2326
- pyegeria/my_profile_omvs.py +0 -1022
- pyegeria/output_formatter.py +0 -389
- pyegeria/project_manager_omvs.py +0 -1933
- pyegeria/registered_info.py +0 -167
- pyegeria/solution_architect_omvs.py +0 -2156
- pyegeria/template_manager_omvs.py +0 -1414
- pyegeria/utils.py +0 -197
- pyegeria-5.3.9.9.3.dist-info/METADATA +0 -72
- pyegeria-5.3.9.9.3.dist-info/RECORD +0 -143
- pyegeria-5.3.9.9.3.dist-info/entry_points.txt +0 -99
- /pyegeria/{_exceptions.py → deprecated/_exceptions.py} +0 -0
- {pyegeria-5.3.9.9.3.dist-info → pyegeria-5.5.3.3.dist-info/licenses}/LICENSE +0 -0
|
@@ -0,0 +1,1042 @@
|
|
|
1
|
+
"""
|
|
2
|
+
PDX-License-Identifier: Apache-2.0
|
|
3
|
+
Copyright Contributors to the ODPi Egeria project.
|
|
4
|
+
|
|
5
|
+
This module contains the MyProfile class and its methods.
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
import json
|
|
9
|
+
|
|
10
|
+
from loguru import logger
|
|
11
|
+
from typing import Any, Optional
|
|
12
|
+
from pyegeria.core._server_client import ServerClient
|
|
13
|
+
from pyegeria.core._validators import validate_name, validate_search_string
|
|
14
|
+
from pyegeria.core.utils import dynamic_catch, body_slimmer
|
|
15
|
+
from pyegeria.models import NewElementRequestBody, SearchStringRequestBody
|
|
16
|
+
import asyncio
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class MyProfile(ServerClient):
|
|
20
|
+
"""A class representing the profile of a user.
|
|
21
|
+
|
|
22
|
+
This class provides methods for retrieving and managing the profile details
|
|
23
|
+
of a user associated with a token.
|
|
24
|
+
|
|
25
|
+
Parameters
|
|
26
|
+
----------
|
|
27
|
+
view_server : str
|
|
28
|
+
The name of the view server to configure.
|
|
29
|
+
platform_url : str
|
|
30
|
+
The URL of the platform.
|
|
31
|
+
token : str, optional
|
|
32
|
+
The token associated with the user. Default is None.
|
|
33
|
+
user_id : str, optional
|
|
34
|
+
The user ID. Default is None.
|
|
35
|
+
user_pwd : str, optional
|
|
36
|
+
The user password. Default is None.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
def __init__(self, view_server: str, platform_url: str, user_id: str | None = None, user_pwd: str|None = None,
|
|
40
|
+
token: str|None = None):
|
|
41
|
+
self.view_server = view_server
|
|
42
|
+
self.platform_url = platform_url
|
|
43
|
+
self.user_id = user_id
|
|
44
|
+
self.user_pwd = user_pwd
|
|
45
|
+
ServerClient.__init__(
|
|
46
|
+
self,
|
|
47
|
+
view_server,
|
|
48
|
+
platform_url,
|
|
49
|
+
user_id=user_id,
|
|
50
|
+
user_pwd=user_pwd,
|
|
51
|
+
token=token,
|
|
52
|
+
)
|
|
53
|
+
self.my_profile_command_root: str = f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/my-profile"
|
|
54
|
+
|
|
55
|
+
@dynamic_catch
|
|
56
|
+
async def _async_get_my_profile(
|
|
57
|
+
self, output_format: str = "JSON", report_spec: str | dict = None
|
|
58
|
+
) -> dict | str:
|
|
59
|
+
"""Retrieve the profile details of the user associated with the token. Async version.
|
|
60
|
+
|
|
61
|
+
Parameters
|
|
62
|
+
----------
|
|
63
|
+
output_format: str, default = "JSON"
|
|
64
|
+
- one of "DICT", "JSON"
|
|
65
|
+
report_spec: str | dict, optional, default = None
|
|
66
|
+
- The desired output columns/field options.
|
|
67
|
+
|
|
68
|
+
Returns
|
|
69
|
+
-------
|
|
70
|
+
dict | str
|
|
71
|
+
A dictionary containing the profile details or formatted output.
|
|
72
|
+
|
|
73
|
+
Raises
|
|
74
|
+
------
|
|
75
|
+
PyegeriaException
|
|
76
|
+
One of the pyegeria exceptions will be raised if there are issues in communications, message format, or
|
|
77
|
+
Egeria errors.
|
|
78
|
+
"""
|
|
79
|
+
url = self.my_profile_command_root
|
|
80
|
+
response = await self._async_make_request("GET",url)
|
|
81
|
+
if type(response) == str:
|
|
82
|
+
return "No Profile Found"
|
|
83
|
+
|
|
84
|
+
elements = response.json().get("element", "No Profile Found")
|
|
85
|
+
if output_format != 'JSON': # return a simplified markdown representation
|
|
86
|
+
logger.info(f"Found elements, output format: {output_format} and report_spec: {report_spec}")
|
|
87
|
+
return super()._generate_referenceable_output(elements, self.user_id, "Person",
|
|
88
|
+
output_format, report_spec)
|
|
89
|
+
return elements
|
|
90
|
+
|
|
91
|
+
@dynamic_catch
|
|
92
|
+
def get_my_profile(
|
|
93
|
+
self, output_format: str = "JSON", report_spec: str | dict = None
|
|
94
|
+
) -> dict | str:
|
|
95
|
+
"""Retrieve the profile details of the user associated with the token.
|
|
96
|
+
|
|
97
|
+
Parameters
|
|
98
|
+
----------
|
|
99
|
+
output_format: str, default = "JSON"
|
|
100
|
+
- one of "DICT", "JSON"
|
|
101
|
+
report_spec: str | dict, optional, default = None
|
|
102
|
+
- The desired output columns/field options.
|
|
103
|
+
|
|
104
|
+
Returns
|
|
105
|
+
-------
|
|
106
|
+
dict | str
|
|
107
|
+
A dictionary containing the profile details or formatted output.
|
|
108
|
+
|
|
109
|
+
Raises
|
|
110
|
+
------
|
|
111
|
+
PyegeriaException
|
|
112
|
+
One of the pyegeria exceptions will be raised if there are issues in communications, message format, or
|
|
113
|
+
Egeria errors.
|
|
114
|
+
"""
|
|
115
|
+
return asyncio.get_event_loop().run_until_complete(
|
|
116
|
+
self._async_get_my_profile(output_format, report_spec)
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
@dynamic_catch
|
|
120
|
+
async def _async_create_my_profile(self, body: dict | NewElementRequestBody) -> str:
|
|
121
|
+
""" Create a new profile for the user. Async version.
|
|
122
|
+
|
|
123
|
+
Parameters
|
|
124
|
+
----------
|
|
125
|
+
body : dict | NewElementRequestBody
|
|
126
|
+
A dictionary or NewElementRequestBody containing the profile properties.
|
|
127
|
+
|
|
128
|
+
Returns
|
|
129
|
+
-------
|
|
130
|
+
str
|
|
131
|
+
The GUID of the created profile.
|
|
132
|
+
|
|
133
|
+
Raises
|
|
134
|
+
------
|
|
135
|
+
PyegeriaException
|
|
136
|
+
One of the pyegeria exceptions will be raised if there are issues in communications, message format, or
|
|
137
|
+
Egeria errors.
|
|
138
|
+
|
|
139
|
+
Notes
|
|
140
|
+
-----
|
|
141
|
+
Example body:
|
|
142
|
+
{
|
|
143
|
+
"class" : "NewElementRequestBody",
|
|
144
|
+
"isOwnAnchor": true,
|
|
145
|
+
"properties": {
|
|
146
|
+
"class" : "PersonProperties",
|
|
147
|
+
"qualifiedName": "add unique name here",
|
|
148
|
+
"displayName": "add preferred name here",
|
|
149
|
+
"courtesyTitle" : "",
|
|
150
|
+
"initials" : "",
|
|
151
|
+
"givenNames" : "",
|
|
152
|
+
"surname" : "",
|
|
153
|
+
"fullName" : "",
|
|
154
|
+
"pronouns" : "",
|
|
155
|
+
"jobTitle" : "",
|
|
156
|
+
"employeeNumber" : "",
|
|
157
|
+
"employeeType" : "",
|
|
158
|
+
"preferredLanguage" : "",
|
|
159
|
+
"residentCountry" : "",
|
|
160
|
+
"timeZone" : "",
|
|
161
|
+
"description": "add description here",
|
|
162
|
+
"additionalProperties": {
|
|
163
|
+
"property1" : "propertyValue1",
|
|
164
|
+
"property2" : "propertyValue2"
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
"externalSourceGUID": "add guid here",
|
|
168
|
+
"externalSourceName": "add qualified name here",
|
|
169
|
+
"effectiveTime" : "{{$isoTimestamp}}",
|
|
170
|
+
"forLineage" : false,
|
|
171
|
+
"forDuplicateProcessing" : false
|
|
172
|
+
}
|
|
173
|
+
"""
|
|
174
|
+
url = self.my_profile_command_root
|
|
175
|
+
return await self._async_create_element_body_request(url, ["PersonProperties"], body)
|
|
176
|
+
|
|
177
|
+
@dynamic_catch
|
|
178
|
+
def create_my_profile(self, body: dict | NewElementRequestBody) -> str:
|
|
179
|
+
""" Create a new profile for the user.
|
|
180
|
+
|
|
181
|
+
Parameters
|
|
182
|
+
----------
|
|
183
|
+
body : dict | NewElementRequestBody
|
|
184
|
+
A dictionary or NewElementRequestBody containing the profile properties.
|
|
185
|
+
|
|
186
|
+
Returns
|
|
187
|
+
-------
|
|
188
|
+
str
|
|
189
|
+
The GUID of the created profile.
|
|
190
|
+
|
|
191
|
+
Raises
|
|
192
|
+
------
|
|
193
|
+
PyegeriaException
|
|
194
|
+
One of the pyegeria exceptions will be raised if there are issues in communications, message format, or
|
|
195
|
+
Egeria errors.
|
|
196
|
+
|
|
197
|
+
Notes
|
|
198
|
+
-----
|
|
199
|
+
Example body:
|
|
200
|
+
{
|
|
201
|
+
"class" : "NewElementRequestBody",
|
|
202
|
+
"isOwnAnchor": true,
|
|
203
|
+
"properties": {
|
|
204
|
+
"class" : "PersonProperties",
|
|
205
|
+
"qualifiedName": "add unique name here",
|
|
206
|
+
"displayName": "add preferred name here",
|
|
207
|
+
"courtesyTitle" : "",
|
|
208
|
+
"initials" : "",
|
|
209
|
+
"givenNames" : "",
|
|
210
|
+
"surname" : "",
|
|
211
|
+
"fullName" : "",
|
|
212
|
+
"pronouns" : "",
|
|
213
|
+
"jobTitle" : "",
|
|
214
|
+
"employeeNumber" : "",
|
|
215
|
+
"employeeType" : "",
|
|
216
|
+
"preferredLanguage" : "",
|
|
217
|
+
"residentCountry" : "",
|
|
218
|
+
"timeZone" : "",
|
|
219
|
+
"description": "add description here",
|
|
220
|
+
"additionalProperties": {
|
|
221
|
+
"property1" : "propertyValue1",
|
|
222
|
+
"property2" : "propertyValue2"
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
"externalSourceGUID": "add guid here",
|
|
226
|
+
"externalSourceName": "add qualified name here",
|
|
227
|
+
"effectiveTime" : "{{$isoTimestamp}}",
|
|
228
|
+
"forLineage" : false,
|
|
229
|
+
"forDuplicateProcessing" : false
|
|
230
|
+
}
|
|
231
|
+
"""
|
|
232
|
+
return asyncio.get_event_loop().run_until_complete(self._async_create_my_profile(body))
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
async def _async_get_assigned_actions(
|
|
236
|
+
self,
|
|
237
|
+
actor_guid: str,
|
|
238
|
+
status: str = "OPEN",
|
|
239
|
+
start_from: int = 0,
|
|
240
|
+
page_size: int = 100,
|
|
241
|
+
) -> list | str:
|
|
242
|
+
"""Get assigned actions for the actor. Async version.
|
|
243
|
+
|
|
244
|
+
Parameters
|
|
245
|
+
----------
|
|
246
|
+
actor_guid: str
|
|
247
|
+
The GUID of the actor whose assigned actions are to be retrieved.
|
|
248
|
+
status: str
|
|
249
|
+
The status of teh action to filter on. Default value is "OPEN".
|
|
250
|
+
|
|
251
|
+
start_from: int, optional
|
|
252
|
+
The index from which to start retrieving the assigned actions. Default is 0.
|
|
253
|
+
page_size: int, optional
|
|
254
|
+
The number of assigned actions to retrieve per page. Default is 100.
|
|
255
|
+
|
|
256
|
+
Returns
|
|
257
|
+
-------
|
|
258
|
+
list or str
|
|
259
|
+
A list of assigned actions is returned. If there aren't any, a string is returned indicating that.
|
|
260
|
+
|
|
261
|
+
Raises
|
|
262
|
+
------
|
|
263
|
+
PyegeriaInvalidParameterException
|
|
264
|
+
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
265
|
+
PyegeriaAPIException
|
|
266
|
+
Raised by the server when an issue arises in processing a valid request
|
|
267
|
+
NotAuthorizedException
|
|
268
|
+
The principle specified by the user_id does not have authorization for the requested action
|
|
269
|
+
"""
|
|
270
|
+
|
|
271
|
+
if page_size is None:
|
|
272
|
+
page_size = self.page_size
|
|
273
|
+
|
|
274
|
+
body = {"status": status}
|
|
275
|
+
|
|
276
|
+
url = (
|
|
277
|
+
f"{self.my_profile_command_root}/{self.view_server}/api/open-metadata/my-profile/actors/{actor_guid}"
|
|
278
|
+
f"/assigned/to-dos?startFrom={start_from}&pageSize={page_size}&"
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
response = await self._async_make_request("POST", url, body)
|
|
282
|
+
|
|
283
|
+
return response.json().get("elements", "No entries found")
|
|
284
|
+
|
|
285
|
+
def get_assigned_actions(
|
|
286
|
+
self,
|
|
287
|
+
actor_guid: str,
|
|
288
|
+
status: str = "OPEN",
|
|
289
|
+
start_from: int = 0,
|
|
290
|
+
page_size: int = 100,
|
|
291
|
+
) -> list | str:
|
|
292
|
+
"""Get assigned actions for the actor.
|
|
293
|
+
Parameters
|
|
294
|
+
----------
|
|
295
|
+
actor_guid: str
|
|
296
|
+
The GUID of the actor whose assigned actions are to be retrieved.
|
|
297
|
+
status: str
|
|
298
|
+
The status of teh action to filter on. Default value is "OPEN".
|
|
299
|
+
|
|
300
|
+
start_from: int, optional
|
|
301
|
+
The index from which to start retrieving the assigned actions. Default is 0.
|
|
302
|
+
page_size: int, optional
|
|
303
|
+
The number of assigned actions to retrieve per page. Default is 100.
|
|
304
|
+
|
|
305
|
+
Returns
|
|
306
|
+
-------
|
|
307
|
+
list or str
|
|
308
|
+
A list of assigned actions is returned. If there aren't any, a string is returned indicating that.
|
|
309
|
+
|
|
310
|
+
Raises
|
|
311
|
+
------
|
|
312
|
+
PyegeriaInvalidParameterException
|
|
313
|
+
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
314
|
+
PyegeriaAPIException
|
|
315
|
+
Raised by the server when an issue arises in processing a valid request
|
|
316
|
+
NotAuthorizedException
|
|
317
|
+
The principle specified by the user_id does not have authorization for the requested action
|
|
318
|
+
"""
|
|
319
|
+
loop = asyncio.get_event_loop()
|
|
320
|
+
response = loop.run_until_complete(
|
|
321
|
+
self._async_get_assigned_actions(actor_guid, status, start_from, page_size)
|
|
322
|
+
)
|
|
323
|
+
|
|
324
|
+
return response
|
|
325
|
+
|
|
326
|
+
async def _async_get_actions_for_action_target(
|
|
327
|
+
self,
|
|
328
|
+
element_guid: str,
|
|
329
|
+
status: str = "OPEN",
|
|
330
|
+
start_from: int = 0,
|
|
331
|
+
page_size: int = 100,
|
|
332
|
+
) -> list | str:
|
|
333
|
+
"""Get actions assigned to the action target. Async version.
|
|
334
|
+
|
|
335
|
+
Parameters
|
|
336
|
+
----------
|
|
337
|
+
element_guid: str
|
|
338
|
+
The GUID of the target whose assigned actions are to be retrieved.
|
|
339
|
+
status: str
|
|
340
|
+
The status of teh action to filter on. Default value is "OPEN".
|
|
341
|
+
|
|
342
|
+
start_from: int, optional
|
|
343
|
+
The index from which to start retrieving the assigned actions. Default is 0.
|
|
344
|
+
page_size: int, optional
|
|
345
|
+
The number of assigned actions to retrieve per page. Default is 100.
|
|
346
|
+
|
|
347
|
+
Returns
|
|
348
|
+
-------
|
|
349
|
+
list or str
|
|
350
|
+
A list of assigned actions is returned. If there aren't any, a string is returned indicating that.
|
|
351
|
+
|
|
352
|
+
Raises
|
|
353
|
+
------
|
|
354
|
+
PyegeriaInvalidParameterException
|
|
355
|
+
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
356
|
+
PyegeriaAPIException
|
|
357
|
+
Raised by the server when an issue arises in processing a valid request
|
|
358
|
+
NotAuthorizedException
|
|
359
|
+
The principle specified by the user_id does not have authorization for the requested action
|
|
360
|
+
"""
|
|
361
|
+
|
|
362
|
+
validate_name(element_guid)
|
|
363
|
+
|
|
364
|
+
body = {"status": status}
|
|
365
|
+
|
|
366
|
+
url = (
|
|
367
|
+
f"{self.my_profile_command_root}/{self.view_server}/api/open-metadata/my-profile/elements/{element_guid}"
|
|
368
|
+
f"/action-targets/to-dos?start-from={start_from}&page-size={page_size}"
|
|
369
|
+
)
|
|
370
|
+
|
|
371
|
+
response = await self._async_make_request("POST", url, body)
|
|
372
|
+
return response.json() if response is not None else "No Results"
|
|
373
|
+
|
|
374
|
+
def get_actions_for_action_target(
|
|
375
|
+
self,
|
|
376
|
+
element_guid: str,
|
|
377
|
+
status: str = "OPEN",
|
|
378
|
+
start_from: int = 0,
|
|
379
|
+
page_size: int = 100,
|
|
380
|
+
) -> list | str:
|
|
381
|
+
"""Get actions assigned to the action target.
|
|
382
|
+
|
|
383
|
+
Parameters
|
|
384
|
+
----------
|
|
385
|
+
element_guid: str
|
|
386
|
+
The GUID of the target whose assigned actions are to be retrieved.
|
|
387
|
+
status: str
|
|
388
|
+
The status of teh action to filter on. Default value is "OPEN"
|
|
389
|
+
|
|
390
|
+
start_from: int, optional
|
|
391
|
+
The index from which to start retrieving the assigned actions. Default is 0.
|
|
392
|
+
page_size: int, optional
|
|
393
|
+
The number of assigned actions to retrieve per page. Default is 100.
|
|
394
|
+
|
|
395
|
+
Returns
|
|
396
|
+
-------
|
|
397
|
+
list or str
|
|
398
|
+
A list of assigned actions is returned. If there aren't any, a string is returned indicating that.
|
|
399
|
+
|
|
400
|
+
Raises
|
|
401
|
+
------
|
|
402
|
+
PyegeriaInvalidParameterException
|
|
403
|
+
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
404
|
+
PyegeriaAPIException
|
|
405
|
+
Raised by the server when an issue arises in processing a valid request
|
|
406
|
+
NotAuthorizedException
|
|
407
|
+
The principle specified by the user_id does not have authorization for the requested action
|
|
408
|
+
"""
|
|
409
|
+
loop = asyncio.get_event_loop()
|
|
410
|
+
response = loop.run_until_complete(
|
|
411
|
+
self._async_get_actions_for_action_target(
|
|
412
|
+
element_guid, status, start_from, page_size
|
|
413
|
+
)
|
|
414
|
+
)
|
|
415
|
+
|
|
416
|
+
return response
|
|
417
|
+
|
|
418
|
+
#
|
|
419
|
+
# Lifecycle
|
|
420
|
+
#
|
|
421
|
+
async def _async_create_person_action(self, body: dict) -> str:
|
|
422
|
+
"""Create a person action (Meeting, ToDo, Notification, Review). Async version.
|
|
423
|
+
|
|
424
|
+
Parameters
|
|
425
|
+
----------
|
|
426
|
+
body : dict
|
|
427
|
+
The dictionary containing the details of the action.
|
|
428
|
+
|
|
429
|
+
Returns
|
|
430
|
+
-------
|
|
431
|
+
GUID
|
|
432
|
+
GUID of the person action
|
|
433
|
+
|
|
434
|
+
Raises
|
|
435
|
+
------
|
|
436
|
+
PyegeriaException
|
|
437
|
+
|
|
438
|
+
ValidationError
|
|
439
|
+
|
|
440
|
+
Notes
|
|
441
|
+
_____
|
|
442
|
+
|
|
443
|
+
This method can be used to create a person action. The type of person action depends on the "Class" element
|
|
444
|
+
in the body. Here are brief examples of bodies:
|
|
445
|
+
|
|
446
|
+
{
|
|
447
|
+
"class" : "NewElementRequestBody",
|
|
448
|
+
"isOwnAnchor": true,
|
|
449
|
+
"properties": {
|
|
450
|
+
"class" : "Meeting",
|
|
451
|
+
"qualifiedName": "add unique name here",
|
|
452
|
+
"displayName": "add short name here",
|
|
453
|
+
"description": "add description here",
|
|
454
|
+
"situation": "add situation here",
|
|
455
|
+
"objective": "add objective here",
|
|
456
|
+
"minutes": "add minutes here",
|
|
457
|
+
"decisions": "add decisions here"
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
{
|
|
462
|
+
"class" : "NewElementRequestBody",
|
|
463
|
+
"isOwnAnchor": true,
|
|
464
|
+
"properties": {
|
|
465
|
+
"class" : "ToDo",
|
|
466
|
+
"qualifiedName": "add unique name here",
|
|
467
|
+
"displayName": "add short name here",
|
|
468
|
+
"description": "add description here",
|
|
469
|
+
"situation": "add situation here"
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
{
|
|
474
|
+
"class" : "NewElementRequestBody",
|
|
475
|
+
"isOwnAnchor": true,
|
|
476
|
+
"properties": {
|
|
477
|
+
"class" : "Notification",
|
|
478
|
+
"qualifiedName": "add unique name here",
|
|
479
|
+
"displayName": "add short name here",
|
|
480
|
+
"description": "add description here",
|
|
481
|
+
"situation": "add situation here"
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
{
|
|
486
|
+
"class" : "NewElementRequestBody",
|
|
487
|
+
"isOwnAnchor": true,
|
|
488
|
+
"properties": {
|
|
489
|
+
"class" : "Review",
|
|
490
|
+
"qualifiedName": "add unique name here",
|
|
491
|
+
"displayName": "add short name here",
|
|
492
|
+
"description": "add description here",
|
|
493
|
+
"situation": "add situation here",
|
|
494
|
+
"reviewDate": "add date here",
|
|
495
|
+
"comment": "add comment here"
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
"""
|
|
499
|
+
|
|
500
|
+
response = await super().create_asset(["Meeting","Todo","Notification","Review"], body)
|
|
501
|
+
return response.json().get("guid", "No guid returned")
|
|
502
|
+
|
|
503
|
+
def create_person_action(self, body: dict) -> str:
|
|
504
|
+
"""Create a person action (Meeting, ToDo, Notification, Review).
|
|
505
|
+
Parameters
|
|
506
|
+
----------
|
|
507
|
+
body : dict
|
|
508
|
+
The dictionary containing the details of the to-do item.
|
|
509
|
+
|
|
510
|
+
Returns
|
|
511
|
+
-------
|
|
512
|
+
None
|
|
513
|
+
This method does not return any value.
|
|
514
|
+
|
|
515
|
+
Raises
|
|
516
|
+
------
|
|
517
|
+
PyegeriaInvalidParameterException
|
|
518
|
+
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
519
|
+
PyegeriaAPIException
|
|
520
|
+
Raised by the server when an issue arises in processing a valid request
|
|
521
|
+
NotAuthorizedException
|
|
522
|
+
The principle specified by the user_id does not have authorization for the requested action
|
|
523
|
+
|
|
524
|
+
Notes
|
|
525
|
+
-----
|
|
526
|
+
|
|
527
|
+
{
|
|
528
|
+
"class" : "NewElementRequestBody",
|
|
529
|
+
"isOwnAnchor": true,
|
|
530
|
+
"properties": {
|
|
531
|
+
"class" : "Meeting",
|
|
532
|
+
"qualifiedName": "add unique name here",
|
|
533
|
+
"displayName": "add short name here",
|
|
534
|
+
"description": "add description here",
|
|
535
|
+
"situation": "add situation here",
|
|
536
|
+
"objective": "add objective here",
|
|
537
|
+
"minutes": "add minutes here",
|
|
538
|
+
"decisions": "add decisions here"
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
{
|
|
543
|
+
"class" : "NewElementRequestBody",
|
|
544
|
+
"isOwnAnchor": true,
|
|
545
|
+
"properties": {
|
|
546
|
+
"class" : "ToDo",
|
|
547
|
+
"qualifiedName": "add unique name here",
|
|
548
|
+
"displayName": "add short name here",
|
|
549
|
+
"description": "add description here",
|
|
550
|
+
"situation": "add situation here"
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
{
|
|
555
|
+
"class" : "NewElementRequestBody",
|
|
556
|
+
"isOwnAnchor": true,
|
|
557
|
+
"properties": {
|
|
558
|
+
"class" : "Notification",
|
|
559
|
+
"qualifiedName": "add unique name here",
|
|
560
|
+
"displayName": "add short name here",
|
|
561
|
+
"description": "add description here",
|
|
562
|
+
"situation": "add situation here"
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
{
|
|
567
|
+
"class" : "NewElementRequestBody",
|
|
568
|
+
"isOwnAnchor": true,
|
|
569
|
+
"properties": {
|
|
570
|
+
"class" : "Review",
|
|
571
|
+
"qualifiedName": "add unique name here",
|
|
572
|
+
"displayName": "add short name here",
|
|
573
|
+
"description": "add description here",
|
|
574
|
+
"situation": "add situation here",
|
|
575
|
+
"reviewDate": "add date here",
|
|
576
|
+
"comment": "add comment here"
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
"""
|
|
580
|
+
loop = asyncio.get_event_loop()
|
|
581
|
+
response = loop.run_until_complete(self._async_create_person_action(body))
|
|
582
|
+
return response
|
|
583
|
+
|
|
584
|
+
|
|
585
|
+
|
|
586
|
+
# async def _async_get_to_do(self, todo_guid: str) -> dict | str:
|
|
587
|
+
# """Get a To-Do item. Async version.
|
|
588
|
+
# Parameters
|
|
589
|
+
# ----------
|
|
590
|
+
# todo_guid: str
|
|
591
|
+
# Identifier of the To-Do item.
|
|
592
|
+
#
|
|
593
|
+
#
|
|
594
|
+
# Returns
|
|
595
|
+
# -------
|
|
596
|
+
# None
|
|
597
|
+
# This method does not return any value.
|
|
598
|
+
#
|
|
599
|
+
# Raises
|
|
600
|
+
# ------
|
|
601
|
+
# PyegeriaInvalidParameterException
|
|
602
|
+
# If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
603
|
+
# PyegeriaAPIException
|
|
604
|
+
# Raised by the server when an issue arises in processing a valid request
|
|
605
|
+
# NotAuthorizedException
|
|
606
|
+
# The principle specified by the user_id does not have authorization for the requested action
|
|
607
|
+
# """
|
|
608
|
+
#
|
|
609
|
+
# validate_name(todo_guid)
|
|
610
|
+
#
|
|
611
|
+
# url = f"{self.my_profile_command_root}/{self.view_server}/api/open-metadata/my-profile/to-dos/{todo_guid}"
|
|
612
|
+
#
|
|
613
|
+
# response = await self._async_make_request("GET", url)
|
|
614
|
+
# # return response.text if response is not None else "No Results"
|
|
615
|
+
# return json.loads(response.text).get("elements", "No TODO returned")
|
|
616
|
+
#
|
|
617
|
+
# def get_to_do(self, todo_guid: str) -> dict | str:
|
|
618
|
+
# """Get a To-Do item. Async version.
|
|
619
|
+
# Parameters
|
|
620
|
+
# ----------
|
|
621
|
+
# todo_guid: str
|
|
622
|
+
# Identifier of the To-Do item.
|
|
623
|
+
#
|
|
624
|
+
#
|
|
625
|
+
# Returns
|
|
626
|
+
# -------
|
|
627
|
+
# None
|
|
628
|
+
# This method does not return any value.
|
|
629
|
+
#
|
|
630
|
+
# Raises
|
|
631
|
+
# ------
|
|
632
|
+
# PyegeriaInvalidParameterException
|
|
633
|
+
# If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
634
|
+
# PyegeriaAPIException
|
|
635
|
+
# Raised by the server when an issue arises in processing a valid request
|
|
636
|
+
# NotAuthorizedException
|
|
637
|
+
# The principle specified by the user_id does not have authorization for the requested action
|
|
638
|
+
# """
|
|
639
|
+
# loop = asyncio.get_event_loop()
|
|
640
|
+
# response = loop.run_until_complete(self._async_get_to_do(todo_guid))
|
|
641
|
+
#
|
|
642
|
+
# return response
|
|
643
|
+
|
|
644
|
+
async def _async_update_to_do(
|
|
645
|
+
self,
|
|
646
|
+
todo_guid: str,
|
|
647
|
+
body: dict,
|
|
648
|
+
is_merge_update: bool = True,
|
|
649
|
+
) -> None:
|
|
650
|
+
"""Update a To-Do item. Async version.
|
|
651
|
+
Parameters
|
|
652
|
+
----------
|
|
653
|
+
todo_guid: str
|
|
654
|
+
Identifier of the To-Do item.
|
|
655
|
+
body: str
|
|
656
|
+
The details to update the to-do item with.
|
|
657
|
+
|
|
658
|
+
|
|
659
|
+
Returns
|
|
660
|
+
-------
|
|
661
|
+
None
|
|
662
|
+
This method does not return any value.
|
|
663
|
+
|
|
664
|
+
Raises
|
|
665
|
+
------
|
|
666
|
+
PyegeriaInvalidParameterException
|
|
667
|
+
One of the parameters is null or invalid (for example, bad URL or invalid values).
|
|
668
|
+
PyegeriaAPIException
|
|
669
|
+
The server reported an error while processing a valid request.
|
|
670
|
+
PyegeriaUnauthorizedException
|
|
671
|
+
The requesting user is not authorized to issue this request.
|
|
672
|
+
"""
|
|
673
|
+
|
|
674
|
+
is_merge_update_t = str(is_merge_update).lower()
|
|
675
|
+
|
|
676
|
+
validate_name(todo_guid)
|
|
677
|
+
|
|
678
|
+
url = (
|
|
679
|
+
f"{self.my_profile_command_root}/{self.view_server}/api/open-metadata/my-profile/to-dos/"
|
|
680
|
+
f"{todo_guid}?isMergeUpdate={is_merge_update_t}"
|
|
681
|
+
)
|
|
682
|
+
|
|
683
|
+
await self._async_make_request("POST", url, body)
|
|
684
|
+
return
|
|
685
|
+
|
|
686
|
+
def update_to_do(
|
|
687
|
+
self,
|
|
688
|
+
todo_guid: str,
|
|
689
|
+
body: dict,
|
|
690
|
+
is_merge_update: bool = True,
|
|
691
|
+
) -> None:
|
|
692
|
+
"""Update a To-Do item.
|
|
693
|
+
Parameters
|
|
694
|
+
----------
|
|
695
|
+
todo_guid: str
|
|
696
|
+
Identifier of the To-Do item.
|
|
697
|
+
body: str
|
|
698
|
+
The details to update the to-do item with.
|
|
699
|
+
is_merge_update: bool [default: True]
|
|
700
|
+
If true then merges the updated information, otherwise replace the existing information.
|
|
701
|
+
|
|
702
|
+
|
|
703
|
+
Returns
|
|
704
|
+
-------
|
|
705
|
+
None
|
|
706
|
+
This method does not return any value.
|
|
707
|
+
|
|
708
|
+
Raises
|
|
709
|
+
------
|
|
710
|
+
PyegeriaInvalidParameterException
|
|
711
|
+
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
712
|
+
PyegeriaAPIException
|
|
713
|
+
Raised by the server when an issue arises in processing a valid request
|
|
714
|
+
NotAuthorizedException
|
|
715
|
+
The principle specified by the user_id does not have authorization for the requested action
|
|
716
|
+
"""
|
|
717
|
+
|
|
718
|
+
loop = asyncio.get_event_loop()
|
|
719
|
+
loop.run_until_complete(
|
|
720
|
+
self._async_update_to_do(todo_guid, body, is_merge_update)
|
|
721
|
+
)
|
|
722
|
+
return
|
|
723
|
+
|
|
724
|
+
async def _async_delete_to_do(self, todo_guid: str) -> None:
|
|
725
|
+
"""Delete a To-Do item. Async version.
|
|
726
|
+
Parameters
|
|
727
|
+
----------
|
|
728
|
+
todo_guid: str
|
|
729
|
+
Identifier of the To-Do item.
|
|
730
|
+
|
|
731
|
+
|
|
732
|
+
Returns
|
|
733
|
+
-------
|
|
734
|
+
None
|
|
735
|
+
This method does not return any value.
|
|
736
|
+
|
|
737
|
+
Raises
|
|
738
|
+
------
|
|
739
|
+
PyegeriaInvalidParameterException
|
|
740
|
+
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
741
|
+
PyegeriaAPIException
|
|
742
|
+
Raised by the server when an issue arises in processing a valid request
|
|
743
|
+
NotAuthorizedException
|
|
744
|
+
The principle specified by the user_id does not have authorization for the requested action
|
|
745
|
+
"""
|
|
746
|
+
|
|
747
|
+
validate_name(todo_guid)
|
|
748
|
+
|
|
749
|
+
url = f"{self.my_profile_command_root}/{self.view_server}/api/open-metadata/my-profile/to-dos/{todo_guid}/delete"
|
|
750
|
+
|
|
751
|
+
await self._async_make_request("POST", url)
|
|
752
|
+
return
|
|
753
|
+
|
|
754
|
+
def delete_to_do(self, todo_guid: str) -> None:
|
|
755
|
+
"""Delete a To-Do item.
|
|
756
|
+
Parameters
|
|
757
|
+
----------
|
|
758
|
+
todo_guid: str
|
|
759
|
+
Identifier of the To-Do item.
|
|
760
|
+
|
|
761
|
+
|
|
762
|
+
Returns
|
|
763
|
+
-------
|
|
764
|
+
None
|
|
765
|
+
This method does not return any value.
|
|
766
|
+
|
|
767
|
+
Raises
|
|
768
|
+
------
|
|
769
|
+
PyegeriaInvalidParameterException
|
|
770
|
+
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
771
|
+
PyegeriaAPIException
|
|
772
|
+
Raised by the server when an issue arises in processing a valid request
|
|
773
|
+
NotAuthorizedException
|
|
774
|
+
The principle specified by the user_id does not have authorization for the requested action
|
|
775
|
+
"""
|
|
776
|
+
loop = asyncio.get_event_loop()
|
|
777
|
+
loop.run_until_complete(self._async_delete_to_do(todo_guid))
|
|
778
|
+
return
|
|
779
|
+
|
|
780
|
+
async def _async_reassign_to_do(
|
|
781
|
+
self,
|
|
782
|
+
todo_guid: str,
|
|
783
|
+
actor_guid: str,
|
|
784
|
+
status: str = "OPEN",
|
|
785
|
+
) -> None:
|
|
786
|
+
"""Reassign a To-Do item. Async version.
|
|
787
|
+
Parameters
|
|
788
|
+
----------
|
|
789
|
+
todo_guid: str
|
|
790
|
+
Identifier of the To-Do item.
|
|
791
|
+
actor_guid: str
|
|
792
|
+
The actor to receive the reassigned to-do item.
|
|
793
|
+
status: str [default = "OPEN"]
|
|
794
|
+
Filter items to match this status.
|
|
795
|
+
|
|
796
|
+
Returns
|
|
797
|
+
-------
|
|
798
|
+
None
|
|
799
|
+
This method does not return any value.
|
|
800
|
+
|
|
801
|
+
Raises
|
|
802
|
+
------
|
|
803
|
+
PyegeriaInvalidParameterException
|
|
804
|
+
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
805
|
+
PyegeriaAPIException
|
|
806
|
+
Raised by the server when an issue arises in processing a valid request
|
|
807
|
+
NotAuthorizedException
|
|
808
|
+
The principle specified by the user_id does not have authorization for the requested action
|
|
809
|
+
"""
|
|
810
|
+
|
|
811
|
+
validate_name(todo_guid)
|
|
812
|
+
validate_name(actor_guid)
|
|
813
|
+
body = {"status": status}
|
|
814
|
+
|
|
815
|
+
url = (
|
|
816
|
+
f"{self.my_profile_command_root}/{self.view_server}/api/open-metadata/my-profile/to-dos/"
|
|
817
|
+
f"{todo_guid}/reassign/{actor_guid}"
|
|
818
|
+
)
|
|
819
|
+
|
|
820
|
+
await self._async_make_request("POST", url, body)
|
|
821
|
+
return
|
|
822
|
+
|
|
823
|
+
def reassign_to_do(
|
|
824
|
+
self,
|
|
825
|
+
todo_guid: str,
|
|
826
|
+
actor_guid: str,
|
|
827
|
+
status: str = "OPEN",
|
|
828
|
+
) -> None:
|
|
829
|
+
"""Reassign a To-Do item.
|
|
830
|
+
Parameters
|
|
831
|
+
----------
|
|
832
|
+
todo_guid: str
|
|
833
|
+
Identifier of the To-Do item.
|
|
834
|
+
actor_guid: str
|
|
835
|
+
The actor to receive the reassigned to-do item.
|
|
836
|
+
status: str [default = "OPEN"]
|
|
837
|
+
Filter items to match this status.
|
|
838
|
+
|
|
839
|
+
Returns
|
|
840
|
+
-------
|
|
841
|
+
None
|
|
842
|
+
This method does not return any value.
|
|
843
|
+
|
|
844
|
+
Raises
|
|
845
|
+
------
|
|
846
|
+
PyegeriaInvalidParameterException
|
|
847
|
+
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
848
|
+
PyegeriaAPIException
|
|
849
|
+
Raised by the server when an issue arises in processing a valid request
|
|
850
|
+
NotAuthorizedException
|
|
851
|
+
The principle specified by the user_id does not have authorization for the requested action
|
|
852
|
+
"""
|
|
853
|
+
loop = asyncio.get_event_loop()
|
|
854
|
+
loop.run_until_complete(
|
|
855
|
+
self._async_reassign_to_do(todo_guid, actor_guid, status)
|
|
856
|
+
)
|
|
857
|
+
return
|
|
858
|
+
|
|
859
|
+
async def _async_find_to_do(
|
|
860
|
+
self,
|
|
861
|
+
search_string: str = "*",
|
|
862
|
+
starts_with: bool = False,
|
|
863
|
+
ends_with: bool = False,
|
|
864
|
+
ignore_case: bool = True,
|
|
865
|
+
anchor_domain: Optional[str] = None,
|
|
866
|
+
metadata_element_type: Optional[str] = None,
|
|
867
|
+
metadata_element_subtypes: list[str] = ["ToDo", "Notification", "Review", "Meeting"],
|
|
868
|
+
skip_relationships: Optional[list[str]] = None,
|
|
869
|
+
include_only_relationships: Optional[list[str]] = None,
|
|
870
|
+
skip_classified_elements: Optional[list[str]] = None,
|
|
871
|
+
include_only_classified_elements: Optional[list[str]] = None,
|
|
872
|
+
graph_query_depth: int = 3,
|
|
873
|
+
governance_zone_filter: Optional[list[str]] = None,
|
|
874
|
+
as_of_time: Optional[str] = None,
|
|
875
|
+
effective_time: Optional[str] = None,
|
|
876
|
+
relationship_page_size: int = 0,
|
|
877
|
+
limit_results_by_status: Optional[list[str]] = None,
|
|
878
|
+
sequencing_order: Optional[str] = None,
|
|
879
|
+
sequencing_property: Optional[str] = None,
|
|
880
|
+
output_format: str = "JSON",
|
|
881
|
+
report_spec: str | dict = None,
|
|
882
|
+
start_from: int = 0,
|
|
883
|
+
page_size: int = 100,
|
|
884
|
+
property_names: Optional[list[str]] = None,
|
|
885
|
+
body: Optional[dict | SearchStringRequestBody] = None,
|
|
886
|
+
) -> list | str:
|
|
887
|
+
"""find To-Do items. Async version.
|
|
888
|
+
Parameters
|
|
889
|
+
----------
|
|
890
|
+
search_string: str
|
|
891
|
+
String to search against. If '*' then all to-do items will match.
|
|
892
|
+
starts_with : bool, [default=False], optional
|
|
893
|
+
Starts with the supplied string.
|
|
894
|
+
ends_with : bool, [default=False], optional
|
|
895
|
+
Ends with the supplied string
|
|
896
|
+
ignore_case : bool, [default=False], optional
|
|
897
|
+
Ignore case when searching
|
|
898
|
+
Returns
|
|
899
|
+
-------
|
|
900
|
+
None
|
|
901
|
+
List of To-Do items that match the criteria
|
|
902
|
+
|
|
903
|
+
Raises
|
|
904
|
+
------
|
|
905
|
+
PyegeriaInvalidParameterException
|
|
906
|
+
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
907
|
+
PyegeriaAPIException
|
|
908
|
+
Raised by the server when an issue arises in processing a valid request
|
|
909
|
+
NotAuthorizedException
|
|
910
|
+
The principle specified by the user_id does not have authorization for the requested action
|
|
911
|
+
"""
|
|
912
|
+
|
|
913
|
+
url = f"{self.my_profile_command_root}/to-dos/find-by-search-string"
|
|
914
|
+
|
|
915
|
+
return await self._async_find_request(
|
|
916
|
+
url,
|
|
917
|
+
_type="ToDo",
|
|
918
|
+
_gen_output=self._generate_referenceable_output,
|
|
919
|
+
search_string=search_string,
|
|
920
|
+
starts_with=starts_with,
|
|
921
|
+
ends_with=ends_with,
|
|
922
|
+
ignore_case=ignore_case,
|
|
923
|
+
anchor_domain=anchor_domain,
|
|
924
|
+
metadata_element_type=metadata_element_type,
|
|
925
|
+
metadata_element_subtypes=metadata_element_subtypes,
|
|
926
|
+
skip_relationships=skip_relationships,
|
|
927
|
+
include_only_relationships=include_only_relationships,
|
|
928
|
+
skip_classified_elements=skip_classified_elements,
|
|
929
|
+
include_only_classified_elements=include_only_classified_elements,
|
|
930
|
+
graph_query_depth=graph_query_depth,
|
|
931
|
+
governance_zone_filter=governance_zone_filter,
|
|
932
|
+
as_of_time=as_of_time,
|
|
933
|
+
effective_time=effective_time,
|
|
934
|
+
relationship_page_size=relationship_page_size,
|
|
935
|
+
limit_results_by_status=limit_results_by_status,
|
|
936
|
+
sequencing_order=sequencing_order,
|
|
937
|
+
sequencing_property=sequencing_property,
|
|
938
|
+
output_format=output_format,
|
|
939
|
+
report_spec=report_spec,
|
|
940
|
+
start_from=start_from,
|
|
941
|
+
page_size=page_size,
|
|
942
|
+
property_names=property_names,
|
|
943
|
+
body=body,
|
|
944
|
+
)
|
|
945
|
+
|
|
946
|
+
def find_to_do(
|
|
947
|
+
self,
|
|
948
|
+
search_string: str = "*",
|
|
949
|
+
starts_with: bool = False,
|
|
950
|
+
ends_with: bool = False,
|
|
951
|
+
ignore_case: bool = True,
|
|
952
|
+
anchor_domain: Optional[str] = None,
|
|
953
|
+
metadata_element_type: Optional[str] = None,
|
|
954
|
+
metadata_element_subtypes: list[str] = ["ToDo", "Notification", "Review", "Meeting"],
|
|
955
|
+
skip_relationships: Optional[list[str]] = None,
|
|
956
|
+
include_only_relationships: Optional[list[str]] = None,
|
|
957
|
+
skip_classified_elements: Optional[list[str]] = None,
|
|
958
|
+
include_only_classified_elements: Optional[list[str]] = None,
|
|
959
|
+
graph_query_depth: int = 3,
|
|
960
|
+
governance_zone_filter: Optional[list[str]] = None,
|
|
961
|
+
as_of_time: Optional[str] = None,
|
|
962
|
+
effective_time: Optional[str] = None,
|
|
963
|
+
relationship_page_size: int = 0,
|
|
964
|
+
limit_results_by_status: Optional[list[str]] = None,
|
|
965
|
+
sequencing_order: Optional[str] = None,
|
|
966
|
+
sequencing_property: Optional[str] = None,
|
|
967
|
+
output_format: str = "JSON",
|
|
968
|
+
report_spec: str | dict = None,
|
|
969
|
+
start_from: int = 0,
|
|
970
|
+
page_size: int = 100,
|
|
971
|
+
property_names: Optional[list[str]] = None,
|
|
972
|
+
body: Optional[dict | SearchStringRequestBody] = None,
|
|
973
|
+
) -> list | str:
|
|
974
|
+
"""find To-Do items.
|
|
975
|
+
Parameters
|
|
976
|
+
----------
|
|
977
|
+
search_string: str
|
|
978
|
+
String to search against. If '*' then all to-do items will match.
|
|
979
|
+
starts_with : bool, [default=False], optional
|
|
980
|
+
Starts with the supplied string.
|
|
981
|
+
ends_with : bool, [default=False], optional
|
|
982
|
+
Ends with the supplied string
|
|
983
|
+
ignore_case : bool, [default=False], optional
|
|
984
|
+
Ignore case when searching
|
|
985
|
+
start_from: int, [default=0], optional
|
|
986
|
+
When multiple pages of results are available, the page number to start from.
|
|
987
|
+
page_size: int, [default=100]
|
|
988
|
+
The number of items to return in a single page.
|
|
989
|
+
Returns
|
|
990
|
+
-------
|
|
991
|
+
None
|
|
992
|
+
List of To-Do items that match the criteria
|
|
993
|
+
|
|
994
|
+
Raises
|
|
995
|
+
------
|
|
996
|
+
PyegeriaInvalidParameterException
|
|
997
|
+
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
998
|
+
PyegeriaAPIException
|
|
999
|
+
Raised by the server when an issue arises in processing a valid request
|
|
1000
|
+
NotAuthorizedException
|
|
1001
|
+
The principle specified by the user_id does not have authorization for the requested action
|
|
1002
|
+
"""
|
|
1003
|
+
loop = asyncio.get_event_loop()
|
|
1004
|
+
response = loop.run_until_complete(
|
|
1005
|
+
self._async_find_to_do(
|
|
1006
|
+
search_string=search_string,
|
|
1007
|
+
starts_with=starts_with,
|
|
1008
|
+
ends_with=ends_with,
|
|
1009
|
+
ignore_case=ignore_case,
|
|
1010
|
+
anchor_domain=anchor_domain,
|
|
1011
|
+
metadata_element_type=metadata_element_type,
|
|
1012
|
+
metadata_element_subtypes=metadata_element_subtypes,
|
|
1013
|
+
skip_relationships=skip_relationships,
|
|
1014
|
+
include_only_relationships=include_only_relationships,
|
|
1015
|
+
skip_classified_elements=skip_classified_elements,
|
|
1016
|
+
include_only_classified_elements=include_only_classified_elements,
|
|
1017
|
+
graph_query_depth=graph_query_depth,
|
|
1018
|
+
governance_zone_filter=governance_zone_filter,
|
|
1019
|
+
as_of_time=as_of_time,
|
|
1020
|
+
effective_time=effective_time,
|
|
1021
|
+
relationship_page_size=relationship_page_size,
|
|
1022
|
+
limit_results_by_status=limit_results_by_status,
|
|
1023
|
+
sequencing_order=sequencing_order,
|
|
1024
|
+
sequencing_property=sequencing_property,
|
|
1025
|
+
output_format=output_format,
|
|
1026
|
+
report_spec=report_spec,
|
|
1027
|
+
start_from=start_from,
|
|
1028
|
+
page_size=page_size,
|
|
1029
|
+
property_names=property_names,
|
|
1030
|
+
body=body,
|
|
1031
|
+
)
|
|
1032
|
+
)
|
|
1033
|
+
return response
|
|
1034
|
+
|
|
1035
|
+
|
|
1036
|
+
|
|
1037
|
+
|
|
1038
|
+
|
|
1039
|
+
|
|
1040
|
+
|
|
1041
|
+
if __name__ == "__main__":
|
|
1042
|
+
print("Main-My Profile")
|