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
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
|
-
|
|
15
|
-
|
|
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.
|
|
33
|
-
|
|
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
|
-
|
|
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
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
-
|
|
99
|
-
|
|
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
|
-
|
|
103
|
-
|
|
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
|
-
|
|
107
|
-
|
|
108
|
-
)
|
|
109
|
-
|
|
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
|
-
|
|
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
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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()
|
pyegeria/egeria_config_client.py
CHANGED
|
@@ -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
|
|
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,
|
|
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.
|
|
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
|
-
|
|
42
|
-
|
|
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__":
|
pyegeria/egeria_tech_client.py
CHANGED
|
@@ -2,75 +2,66 @@
|
|
|
2
2
|
SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
Copyright Contributors to the ODPi Egeria project.
|
|
4
4
|
|
|
5
|
-
|
|
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.
|
|
9
|
-
from pyegeria.
|
|
10
|
-
from pyegeria.
|
|
11
|
-
from pyegeria.
|
|
12
|
-
from pyegeria.
|
|
13
|
-
from pyegeria.
|
|
14
|
-
from pyegeria.
|
|
15
|
-
from pyegeria.
|
|
16
|
-
from pyegeria.
|
|
17
|
-
from pyegeria.
|
|
18
|
-
from pyegeria.
|
|
19
|
-
from pyegeria.
|
|
20
|
-
from pyegeria.
|
|
21
|
-
from pyegeria.
|
|
22
|
-
from pyegeria.
|
|
23
|
-
from pyegeria.
|
|
24
|
-
from pyegeria.
|
|
25
|
-
from pyegeria.
|
|
26
|
-
from pyegeria.
|
|
27
|
-
from pyegeria.
|
|
28
|
-
from pyegeria.
|
|
29
|
-
from pyegeria.
|
|
30
|
-
from pyegeria.
|
|
31
|
-
from pyegeria.
|
|
32
|
-
from pyegeria.
|
|
33
|
-
from pyegeria import
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
from pyegeria.
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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")
|