pyegeria 0.2.4__py3-none-any.whl → 0.3.0__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.
- pyegeria/__init__.py +13 -8
- pyegeria/_client.py +164 -105
- pyegeria/_exceptions.py +2 -1
- pyegeria/_validators.py +2 -2
- pyegeria/automated_curation_omvs.py +2188 -0
- pyegeria/core_omag_server_config.py +38 -7
- pyegeria/full_omag_server_config.py +1075 -0
- pyegeria/glossary_omvs.py +204 -66
- pyegeria/gov_engine.py +92 -201
- pyegeria/governance_author.py +184 -0
- pyegeria/my_profile_omvs.py +976 -0
- pyegeria/platform_services.py +67 -35
- pyegeria/server_operations.py +92 -25
- pyegeria/utils.py +5 -17
- {pyegeria-0.2.4.dist-info → pyegeria-0.3.0.dist-info}/METADATA +21 -17
- pyegeria-0.3.0.dist-info/RECORD +21 -0
- {pyegeria-0.2.4.dist-info → pyegeria-0.3.0.dist-info}/WHEEL +2 -1
- pyegeria-0.3.0.dist-info/top_level.txt +1 -0
- pyegeria/config.toml +0 -11
- pyegeria/curation_omvs.py +0 -458
- pyegeria/exceptions.py +0 -382
- pyegeria-0.2.4.dist-info/RECORD +0 -19
- {pyegeria-0.2.4.dist-info/licenses → pyegeria-0.3.0.dist-info}/LICENSE +0 -0
pyegeria/platform_services.py
CHANGED
@@ -6,20 +6,23 @@ Copyright Contributors to the ODPi Egeria project.
|
|
6
6
|
|
7
7
|
"""
|
8
8
|
|
9
|
+
import asyncio
|
9
10
|
import inspect
|
10
11
|
import json
|
12
|
+
|
11
13
|
import httpx
|
12
|
-
# import requests
|
13
14
|
|
14
|
-
from pyegeria import
|
15
|
+
from pyegeria import Client
|
15
16
|
from pyegeria._validators import validate_user_id
|
16
|
-
from pyegeria.
|
17
|
+
from pyegeria._exceptions import (
|
17
18
|
OMAGCommonErrorCode,
|
18
19
|
InvalidParameterException,
|
19
20
|
UserNotAuthorizedException,
|
20
21
|
PropertyServerException, print_exception_response,
|
21
22
|
)
|
22
|
-
|
23
|
+
|
24
|
+
|
25
|
+
# import requests
|
23
26
|
|
24
27
|
|
25
28
|
class Platform(Client):
|
@@ -88,9 +91,9 @@ class Platform(Client):
|
|
88
91
|
user_id: str,
|
89
92
|
user_pwd: str = None,
|
90
93
|
verify_flag: bool = False,
|
91
|
-
|
94
|
+
|
92
95
|
):
|
93
|
-
validate_user_id(user_id)
|
96
|
+
validate_user_id(user_id) # add this check since we aren't using bearer tokens in this class
|
94
97
|
|
95
98
|
Client.__init__(self, server_name, platform_url, user_id, user_pwd, verify_flag)
|
96
99
|
self.admin_command_root = (self.platform_url +
|
@@ -122,12 +125,15 @@ class Platform(Client):
|
|
122
125
|
The principle specified by the user_id does not have authorization for the requested action
|
123
126
|
"""
|
124
127
|
|
128
|
+
global response
|
125
129
|
calling_frame = inspect.currentframe().f_back
|
126
130
|
caller_method = inspect.getframeinfo(calling_frame).function
|
127
131
|
class_name = __class__.__name__
|
128
132
|
|
129
133
|
url = self.admin_command_root + "/origin"
|
134
|
+
|
130
135
|
local_session = httpx.Client(verify=self.ssl_verify)
|
136
|
+
response = " "
|
131
137
|
try:
|
132
138
|
response = local_session.get(url)
|
133
139
|
if response.status_code != 200:
|
@@ -171,7 +177,7 @@ class Platform(Client):
|
|
171
177
|
raise InvalidParameterException(exc_msg)
|
172
178
|
else:
|
173
179
|
return response.text
|
174
|
-
except
|
180
|
+
except InvalidParameterException:
|
175
181
|
raise
|
176
182
|
|
177
183
|
except (
|
@@ -246,12 +252,13 @@ class Platform(Client):
|
|
246
252
|
|
247
253
|
await self._async_make_request("POST", url, time_out=timeout)
|
248
254
|
|
249
|
-
def activate_server_stored_config(self, server: str = None, timeout: int =
|
255
|
+
def activate_server_stored_config(self, server: str = None, timeout: int = 90) -> None:
|
250
256
|
""" Activate a server on the associated platform with the stored configuration.
|
251
257
|
|
252
258
|
Parameters
|
253
259
|
----------
|
254
260
|
server : Use the server if specified. If None, use the default server associated with the Platform object.
|
261
|
+
timeout: number of seconds to wait for a response before raising an exception
|
255
262
|
|
256
263
|
Returns
|
257
264
|
-------
|
@@ -267,10 +274,11 @@ class Platform(Client):
|
|
267
274
|
The principle specified by the user_id does not have authorization for the requested action
|
268
275
|
"""
|
269
276
|
loop = asyncio.get_event_loop()
|
270
|
-
response = loop.run_until_complete(self._async_activate_server_stored_config(server,timeout))
|
277
|
+
response = loop.run_until_complete(self._async_activate_server_stored_config(server, timeout))
|
271
278
|
return response
|
272
279
|
|
273
|
-
async def _async_activate_server_supplied_config(self, config_body:
|
280
|
+
async def _async_activate_server_supplied_config(self, config_body: dict, server: str = None, timeout: int = 60)\
|
281
|
+
-> None:
|
274
282
|
""" Activate a server on the associated platform with the stored configuration. Async version.
|
275
283
|
|
276
284
|
Parameters
|
@@ -301,7 +309,31 @@ class Platform(Client):
|
|
301
309
|
url = self.admin_command_root + "/servers/" + server + "/instance/configuration"
|
302
310
|
await self._async_make_request("POST", url, config_body, time_out=timeout)
|
303
311
|
|
304
|
-
def activate_server_supplied_config(self, config_body:
|
312
|
+
def activate_server_supplied_config(self, config_body: dict, server: str = None, timeout: int = 60) -> None:
|
313
|
+
""" Activate a server on the associated platform with the stored configuration.
|
314
|
+
|
315
|
+
Parameters
|
316
|
+
----------
|
317
|
+
config_body: str
|
318
|
+
Server configuration to use for activation.
|
319
|
+
server : str, optional
|
320
|
+
Use the server if specified. If None, use the default server associated with the Platform object.
|
321
|
+
timeout: int, optional
|
322
|
+
A request timeout in seconds
|
323
|
+
|
324
|
+
Returns
|
325
|
+
-------
|
326
|
+
None
|
327
|
+
|
328
|
+
Raises
|
329
|
+
------
|
330
|
+
InvalidParameterException
|
331
|
+
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
332
|
+
PropertyServerException
|
333
|
+
Raised by the server when an issue arises in processing a valid request
|
334
|
+
NotAuthorizedException
|
335
|
+
The principle specified by the user_id does not have authorization for the requested action
|
336
|
+
"""
|
305
337
|
loop = asyncio.get_event_loop()
|
306
338
|
loop.run_until_complete(self._async_activate_server_supplied_config(config_body, server, timeout))
|
307
339
|
|
@@ -460,7 +492,8 @@ class Platform(Client):
|
|
460
492
|
Parameters
|
461
493
|
----------
|
462
494
|
server : str, optional
|
463
|
-
The name of the server to check if configured. If not specified, the server name stored in
|
495
|
+
The name of the server to check if configured. If not specified, the server name stored in
|
496
|
+
`self.server_name` will be used.
|
464
497
|
|
465
498
|
Returns
|
466
499
|
-------
|
@@ -471,15 +504,11 @@ class Platform(Client):
|
|
471
504
|
server = self.server_name
|
472
505
|
url = f"{self.platform_url}/open-metadata/admin-services/users/{self.user_id}/servers/{server}/configuration"
|
473
506
|
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
return True
|
480
|
-
else: return False
|
481
|
-
|
482
|
-
except InvalidParameterException as e:
|
507
|
+
response = await self._async_make_request("GET", url)
|
508
|
+
config = response.json().get("omagserverConfig", "No configuration found")
|
509
|
+
if 'auditTrail' in config:
|
510
|
+
return True
|
511
|
+
else:
|
483
512
|
return False
|
484
513
|
|
485
514
|
def is_server_configured(self, server: str = None) -> bool:
|
@@ -487,7 +516,8 @@ class Platform(Client):
|
|
487
516
|
Parameters
|
488
517
|
----------
|
489
518
|
server : str, optional
|
490
|
-
The name of the server to check if configured. If not specified,
|
519
|
+
The name of the server to check if configured. If not specified,
|
520
|
+
the server name stored in `self.server_name` will be used.
|
491
521
|
|
492
522
|
Returns
|
493
523
|
-------
|
@@ -499,8 +529,8 @@ class Platform(Client):
|
|
499
529
|
return response
|
500
530
|
|
501
531
|
async def _async_get_active_configuration(self, server: str = None) -> dict | str:
|
502
|
-
"""
|
503
|
-
|
532
|
+
""" Return the configuration of the server if it is running. Return invalidParameter Exception if not running.
|
533
|
+
Async version.
|
504
534
|
|
505
535
|
Parameters
|
506
536
|
----------
|
@@ -524,8 +554,7 @@ class Platform(Client):
|
|
524
554
|
return response.json().get("omagserverConfig", "No active configuration found")
|
525
555
|
|
526
556
|
def get_active_configuration(self, server: str = None) -> dict | str:
|
527
|
-
"""
|
528
|
-
Return the configuration of the server if it is running. Return invalidParameter Exception if not running.
|
557
|
+
""" Return the configuration of the server if it is running. Return invalidParameter Exception if not running.
|
529
558
|
|
530
559
|
Parameters
|
531
560
|
----------
|
@@ -599,7 +628,7 @@ class Platform(Client):
|
|
599
628
|
url = self.admin_command_root + "/servers/active"
|
600
629
|
|
601
630
|
response = await self._async_make_request("GET", url)
|
602
|
-
return response.json().get('serverList',"No servers active")
|
631
|
+
return response.json().get('serverList', "No servers active")
|
603
632
|
|
604
633
|
def get_active_server_list(self) -> list:
|
605
634
|
"""
|
@@ -877,7 +906,7 @@ class Platform(Client):
|
|
877
906
|
except (InvalidParameterException, PropertyServerException, UserNotAuthorizedException) as e:
|
878
907
|
if verbose:
|
879
908
|
print_exception_response(e)
|
880
|
-
raise
|
909
|
+
raise e
|
881
910
|
|
882
911
|
def activate_server_if_down(self, server: str, verbose: bool = True, timeout: int = 60) -> bool:
|
883
912
|
""" Activate server if it is down.
|
@@ -992,7 +1021,8 @@ class Platform(Client):
|
|
992
1021
|
is successfully activated, otherwise it returns False.
|
993
1022
|
"""
|
994
1023
|
loop = asyncio.get_event_loop()
|
995
|
-
response = loop.run_until_complete(self._async_activate_servers_on_platform(server_list,
|
1024
|
+
response = loop.run_until_complete(self._async_activate_servers_on_platform(server_list,
|
1025
|
+
verbose, timeout=timeout))
|
996
1026
|
return response
|
997
1027
|
|
998
1028
|
async def _async_activate_platform(self, platform_name: str, hosted_server_names: [str], timeout: int = 60) -> None:
|
@@ -1019,9 +1049,10 @@ class Platform(Client):
|
|
1019
1049
|
|
1020
1050
|
Notes
|
1021
1051
|
-----
|
1022
|
-
This method attempts to activate a platform by checking its status. If the platform is already active and
|
1023
|
-
|
1024
|
-
|
1052
|
+
This method attempts to activate a platform by checking its status. If the platform is already active and
|
1053
|
+
running, it prints a message indicating so and activates any hosted servers
|
1054
|
+
that are down. If the platform is not active, it prints a message indicating so. If there is any exception
|
1055
|
+
while activating the platform or starting the servers, it prints an error message and the exception response.
|
1025
1056
|
"""
|
1026
1057
|
try:
|
1027
1058
|
status = self.get_platform_origin()
|
@@ -1067,9 +1098,10 @@ class Platform(Client):
|
|
1067
1098
|
|
1068
1099
|
Notes
|
1069
1100
|
-----
|
1070
|
-
This method attempts to activate a platform by checking its status. If the platform is already active and
|
1071
|
-
|
1072
|
-
|
1101
|
+
This method attempts to activate a platform by checking its status. If the platform is already active and
|
1102
|
+
running, it prints a message indicating so and activates any hosted servers
|
1103
|
+
that are down. If the platform is not active, it prints a message indicating so. If there is any exception
|
1104
|
+
while activating the platform or starting the servers, it prints an error message and the exception response.
|
1073
1105
|
"""
|
1074
1106
|
loop = asyncio.get_event_loop()
|
1075
1107
|
loop.run_until_complete(self._async_activate_platform(platform_name, hosted_server_names, timeout))
|
pyegeria/server_operations.py
CHANGED
@@ -6,13 +6,13 @@ Copyright Contributors to the ODPi Egeria project.
|
|
6
6
|
|
7
7
|
"""
|
8
8
|
|
9
|
+
import asyncio
|
10
|
+
|
9
11
|
from requests import Response
|
10
12
|
|
11
|
-
from pyegeria.exceptions import (
|
12
|
-
InvalidParameterException,
|
13
|
-
)
|
14
13
|
from pyegeria import Platform
|
15
|
-
import
|
14
|
+
from pyegeria._validators import validate_name
|
15
|
+
|
16
16
|
|
17
17
|
class ServerOps(Platform):
|
18
18
|
"""
|
@@ -32,15 +32,8 @@ class ServerOps(Platform):
|
|
32
32
|
Defaults to False.
|
33
33
|
|
34
34
|
Methods:
|
35
|
-
__init__(self,
|
36
|
-
platform_url: str,
|
37
|
-
end_user_id: str,
|
38
|
-
)
|
39
|
-
Initializes the connection - throwing an exception if there is a problem
|
40
35
|
|
41
36
|
"""
|
42
|
-
|
43
|
-
|
44
37
|
def __init__(
|
45
38
|
self,
|
46
39
|
server_name: str,
|
@@ -50,10 +43,7 @@ class ServerOps(Platform):
|
|
50
43
|
verify_flag: bool = False,
|
51
44
|
):
|
52
45
|
Platform.__init__(self, server_name, platform_url, user_id, user_pwd, verify_flag)
|
53
|
-
self.ops_command_root =
|
54
|
-
"/open-metadata/server-operations/users/" +
|
55
|
-
user_id)
|
56
|
-
|
46
|
+
self.ops_command_root = f"{self.platform_url}/open-metadata/server-operations/users/{user_id}"
|
57
47
|
|
58
48
|
async def _async_get_active_configuration(self, server: str = None) -> dict | str:
|
59
49
|
"""
|
@@ -97,9 +87,9 @@ class ServerOps(Platform):
|
|
97
87
|
response = loop.run_until_complete(self._async_get_active_configuration(server))
|
98
88
|
return response
|
99
89
|
|
100
|
-
|
101
|
-
|
102
|
-
|
90
|
+
#
|
91
|
+
# Archive Files
|
92
|
+
#
|
103
93
|
async def _async_add_archive_file(self, archive_file: str, server: str = None) -> None:
|
104
94
|
"""
|
105
95
|
Load the server with the contents of the indicated archive file.
|
@@ -172,7 +162,6 @@ class ServerOps(Platform):
|
|
172
162
|
)
|
173
163
|
await self._async_make_request("POST-DATA", url, archive_connection)
|
174
164
|
|
175
|
-
|
176
165
|
def add_archive(self, archive_connection: str, server: str = None) -> None:
|
177
166
|
"""
|
178
167
|
Load the server with the contents of the indicated archive file.
|
@@ -192,9 +181,12 @@ class ServerOps(Platform):
|
|
192
181
|
|
193
182
|
"""
|
194
183
|
loop = asyncio.get_event_loop()
|
195
|
-
loop.run_until_complete(self._async_add_archive_file(archive_connection,server))
|
184
|
+
loop.run_until_complete(self._async_add_archive_file(archive_connection, server))
|
185
|
+
#
|
186
|
+
# Server Ops
|
187
|
+
#
|
196
188
|
|
197
|
-
async def _async_get_active_server_status(self, server:str = None) -> dict:
|
189
|
+
async def _async_get_active_server_status(self, server: str = None) -> dict:
|
198
190
|
""" Get the status for the specified server.
|
199
191
|
|
200
192
|
Parameters
|
@@ -289,12 +281,16 @@ class ServerOps(Platform):
|
|
289
281
|
response = loop.run_until_complete(self._async_get_active_service_list_for_server(server))
|
290
282
|
return response
|
291
283
|
|
284
|
+
#
|
285
|
+
# Governance Engine Ops
|
286
|
+
#
|
292
287
|
async def _async_get_governance_engine_summaries(self, server: str = None) -> dict:
|
293
288
|
""" Get Governance Engine Summaries. Async version.
|
294
289
|
Parameters
|
295
290
|
----------
|
296
291
|
server : str, optional
|
297
|
-
The name of the server to get governance engine summaries from. If not provided,
|
292
|
+
The name of the server to get governance engine summaries from. If not provided,
|
293
|
+
the default server name will be used.
|
298
294
|
|
299
295
|
Returns
|
300
296
|
-------
|
@@ -315,7 +311,8 @@ class ServerOps(Platform):
|
|
315
311
|
Parameters
|
316
312
|
----------
|
317
313
|
server : str, optional
|
318
|
-
The name of the server to get governance engine summaries from. If not provided,
|
314
|
+
The name of the server to get governance engine summaries from. If not provided,
|
315
|
+
the default server name will be used.
|
319
316
|
|
320
317
|
Returns
|
321
318
|
-------
|
@@ -326,8 +323,9 @@ class ServerOps(Platform):
|
|
326
323
|
loop = asyncio.get_event_loop()
|
327
324
|
response = loop.run_until_complete(self._async_get_governance_engine_summaries(server))
|
328
325
|
return response
|
326
|
+
|
329
327
|
#
|
330
|
-
# Integration Daemon
|
328
|
+
# Integration Daemon Ops
|
331
329
|
#
|
332
330
|
async def _async_get_integration_daemon_status(self, server: str = None) -> dict | str:
|
333
331
|
""" Get the current status of the integration daemon. Async version.
|
@@ -349,10 +347,79 @@ class ServerOps(Platform):
|
|
349
347
|
response = loop.run_until_complete(self._async_get_integration_daemon_status(server))
|
350
348
|
return response
|
351
349
|
|
352
|
-
def
|
350
|
+
async def _async_get_connector_config(self, connector_name: str, server: str = None) -> dict | str:
|
351
|
+
""" Retrieve the configuration properties of the named integration connector running in the integration daemon
|
352
|
+
- async version"""
|
353
|
+
if server is None:
|
354
|
+
server = self.server_name
|
355
|
+
validate_name(connector_name)
|
356
|
+
|
357
|
+
url = (f"{self.platform_url}/servers/{server}/open-metadata/integration-daemon/users/{self.user_id}/"
|
358
|
+
f"integration-connectors/{connector_name}/configuration-properties")
|
359
|
+
|
360
|
+
response = await self._async_make_request("GET", url)
|
361
|
+
return response.json()
|
362
|
+
|
363
|
+
def get_connector_config(self, connector_name: str, server: str = None) -> dict | str:
|
364
|
+
""" Retrieve the configuration properties of the named integration connector running in the integration
|
365
|
+
daemon"""
|
366
|
+
|
367
|
+
loop = asyncio.get_event_loop()
|
368
|
+
response = loop.run_until_complete(self._async_get_connector_config(connector_name, server))
|
369
|
+
return response
|
370
|
+
|
371
|
+
def get_integration_connector_status(self, server: str = None) -> None:
|
372
|
+
""" Get the current status of the integration connector. Async version."""
|
353
373
|
response = self.get_integration_daemon_status(server)
|
374
|
+
# todo - finish this? (and do async)
|
354
375
|
pass
|
355
376
|
|
377
|
+
async def _async_restart_integration_connector(self, connector_name: str, server: str = None) -> str:
|
378
|
+
""" Restart the integration Connector specified by connector_name or all if not specified - async"""
|
379
|
+
|
380
|
+
if server is None:
|
381
|
+
server = self.server_name
|
382
|
+
|
383
|
+
url = (f"{self.platform_url}/servers/{server}/open-metadata/integration-daemon/users/"
|
384
|
+
f"{self.user_id}/integration-connectors/restart")
|
385
|
+
body = {
|
386
|
+
"class": "NameRequestBody",
|
387
|
+
"name": connector_name
|
388
|
+
}
|
389
|
+
response = await self._async_make_request("POST", url, body)
|
390
|
+
return response
|
391
|
+
|
392
|
+
def restart_integration_connector(self, connector_name: str, server: str = None) -> str:
|
393
|
+
""" Restart the integration Connector specified by connector_name or all if not specified"""
|
394
|
+
loop = asyncio.get_event_loop()
|
395
|
+
response = loop.run_until_complete(self._async_restart_integration_connector(connector_name,
|
396
|
+
server))
|
397
|
+
return response
|
398
|
+
|
399
|
+
async def _async_refresh_integration_connectors(self, connector_name: str = None, server: str = None) -> None:
|
400
|
+
""" Issue a refresh request to all connectors running in the integration daemon, or a specific connector
|
401
|
+
if one is specified - async version"""
|
402
|
+
if server is None:
|
403
|
+
server = self.server_name
|
404
|
+
|
405
|
+
url = (f"{self.platform_url}/servers/{server}/open-metadata/integration-daemon/users/"
|
406
|
+
f"{self.user_id}/integration-connectors/refresh")
|
407
|
+
if connector_name:
|
408
|
+
body = {
|
409
|
+
"class": "NameRequestBody",
|
410
|
+
"name": connector_name
|
411
|
+
}
|
412
|
+
await self._async_make_request("POST", url, body)
|
413
|
+
else:
|
414
|
+
await self._async_make_request("POST", url)
|
415
|
+
|
416
|
+
return
|
417
|
+
|
418
|
+
def refresh_integration_connectors(self, connector_name: str, server: str = None) -> None:
|
419
|
+
""" Restart the integration Connector specified by connector_name"""
|
420
|
+
loop = asyncio.get_event_loop()
|
421
|
+
loop.run_until_complete(self._async_refresh_integration_connectors(connector_name, server))
|
422
|
+
|
356
423
|
|
357
424
|
if __name__ == "__main__":
|
358
425
|
p = ServerOps("meow", "https://127.0.0.1:9443", "garygeeke", verify_flag=False)
|
pyegeria/utils.py
CHANGED
@@ -7,7 +7,7 @@ General utility functions in support of the Egeria Python Client package.
|
|
7
7
|
"""
|
8
8
|
import json
|
9
9
|
import textwrap
|
10
|
-
|
10
|
+
from rich import print, print_json
|
11
11
|
import pandas as pd
|
12
12
|
from tabulate import tabulate
|
13
13
|
|
@@ -73,16 +73,6 @@ def print_json_list_as_table(input_json, wrap_len: int = 30, tablefmt: str = "gr
|
|
73
73
|
print(tabulate(wrap_text(df, wrap_len), headers="keys", tablefmt=tablefmt))
|
74
74
|
|
75
75
|
|
76
|
-
def print_rest_request(url):
|
77
|
-
"""
|
78
|
-
|
79
|
-
Args:
|
80
|
-
url:
|
81
|
-
"""
|
82
|
-
print(" ")
|
83
|
-
print(url)
|
84
|
-
|
85
|
-
|
86
76
|
def print_rest_request_body(body):
|
87
77
|
"""
|
88
78
|
|
@@ -90,8 +80,7 @@ def print_rest_request_body(body):
|
|
90
80
|
body:
|
91
81
|
"""
|
92
82
|
pretty_body = json.dumps(body, indent=4)
|
93
|
-
|
94
|
-
print(" ")
|
83
|
+
print_json(pretty_body, indent=4, sort_keys=True)
|
95
84
|
|
96
85
|
|
97
86
|
def print_rest_response(response):
|
@@ -101,9 +90,8 @@ def print_rest_response(response):
|
|
101
90
|
response:
|
102
91
|
"""
|
103
92
|
print("Returns:")
|
104
|
-
|
105
|
-
|
106
|
-
print(" ")
|
93
|
+
pretty_body = json.dumps(response, indent=4)
|
94
|
+
print_json(pretty_body, indent=4, sort_keys=True)
|
107
95
|
|
108
96
|
|
109
97
|
def print_guid_list(guids):
|
@@ -112,7 +100,7 @@ def print_guid_list(guids):
|
|
112
100
|
print("No assets created")
|
113
101
|
else:
|
114
102
|
pretty_guids = json.dumps(guids, indent=4)
|
115
|
-
|
103
|
+
print_json(pretty_guids, indent=4, sort_keys=True)
|
116
104
|
|
117
105
|
|
118
106
|
#
|
@@ -1,25 +1,29 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: pyegeria
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.3.0
|
4
4
|
Summary: A python client for Egeria
|
5
|
+
Home-page: https://egeria-project.org/egeria-python
|
6
|
+
Author: Dan Wolfson
|
7
|
+
Author-email: Dan Wolfson <dan.wolfson@pdr-associates.com>
|
5
8
|
Project-URL: Homepage, https://github.com/odpi/egeria-python
|
6
9
|
Project-URL: Issues, https://github.com/odpi/egeria-python/issues
|
7
|
-
|
8
|
-
License-File: LICENSE
|
9
|
-
Keywords: egeria,governance,metadata
|
10
|
+
Keywords: egeria,metadata,governance
|
10
11
|
Classifier: License :: OSI Approved :: Apache Software License
|
11
12
|
Classifier: Programming Language :: Python
|
12
13
|
Classifier: Programming Language :: Python :: 3
|
13
14
|
Requires-Python: >=3.10
|
14
|
-
Requires-Dist: httpx~=0.26.0
|
15
|
-
Requires-Dist: pandas~=2.2.0
|
16
|
-
Requires-Dist: pytest~=7.4.2
|
17
|
-
Requires-Dist: requests~=2.31.0
|
18
|
-
Requires-Dist: rich~=13.7.1
|
19
|
-
Requires-Dist: tabulate~=0.9.0
|
20
|
-
Requires-Dist: urllib3~=1.26.15
|
21
|
-
Requires-Dist: validators~=0.22.0
|
22
15
|
Description-Content-Type: text/markdown
|
16
|
+
License-File: LICENSE
|
17
|
+
Requires-Dist: requests ~=2.31.0
|
18
|
+
Requires-Dist: validators ~=0.22.0
|
19
|
+
Requires-Dist: pytest ~=7.4.2
|
20
|
+
Requires-Dist: urllib3 ~=1.26.15
|
21
|
+
Requires-Dist: tabulate ~=0.9.0
|
22
|
+
Requires-Dist: pandas ~=2.2.0
|
23
|
+
Requires-Dist: rich ~=13.7.1
|
24
|
+
Requires-Dist: httpx ~=0.26.0
|
25
|
+
Provides-Extra: tests
|
26
|
+
Requires-Dist: pytest ; extra == 'tests'
|
23
27
|
|
24
28
|
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
25
29
|
<!-- Copyright Contributors to the ODPi Egeria project. -->
|
@@ -36,13 +40,13 @@ open metadata environment from python. Details about the
|
|
36
40
|
open source Egeria project can be found at [Egeria Project](https://egeria-project.org).
|
37
41
|
|
38
42
|
This package is in active development. There is initial
|
39
|
-
support for Egeria's
|
40
|
-
|
41
|
-
Next will be additional support to configure and operate servers, followed
|
42
|
-
by glossary support.
|
43
|
+
support for many of Egeria's services including configuraiton, operation, and use. This client depends on
|
44
|
+
Egeria 4.4 Snapshot and above - although most of the functions may work on earlier versions of Egeria as well.
|
43
45
|
|
44
46
|
The code is organized to mimic the existing Egeria Java Client structure.
|
45
47
|
|
48
|
+
A new examples folder holds some useful text widgets that help to visualize the status of an Egeria deployment.
|
49
|
+
|
46
50
|
All feedback is welcome. Please engage via our [community](http://egeria-project.org/guides/community/),
|
47
51
|
team calls, or via github issues in this repo. If interested in contributing,
|
48
52
|
you can engage via the community or directly reach out to
|
@@ -54,4 +58,4 @@ This is a learning experience.
|
|
54
58
|
|
55
59
|
----
|
56
60
|
License: [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/),
|
57
|
-
Copyright Contributors to the ODPi Egeria project.
|
61
|
+
Copyright Contributors to the ODPi Egeria project.
|
@@ -0,0 +1,21 @@
|
|
1
|
+
pyegeria/__init__.py,sha256=8QttPtk6AHJb-yr47koLZNmSk1vPbjbEnbH3qRDMzj4,1601
|
2
|
+
pyegeria/_client.py,sha256=8-8r1-_fACDEGgmfJdkeODlPmftcdiKwb-bmrSA3ac4,23606
|
3
|
+
pyegeria/_exceptions.py,sha256=LImJPHy7MVgoH17LfqEL4ytLKcOhV7oCe66wZiDBzec,18399
|
4
|
+
pyegeria/_globals.py,sha256=WgJ6O7_ACiAG8CUUHT_AbGgahLhO0APU8Y4rCwv9DRw,558
|
5
|
+
pyegeria/_validators.py,sha256=DQuMsATRGxGSBtOrVtXlCgWXGhj6Nh-uqPtCsrUGLxk,12703
|
6
|
+
pyegeria/automated_curation_omvs.py,sha256=zloY-pZ5q7SN-UoUahK7P7WVCOIRcA7e3-e8kkylbPU,99125
|
7
|
+
pyegeria/core_omag_server_config.py,sha256=omXXox7JDYX6hlgPjNqfHBvm0nDnckXpdaIVKbOxUR8,94359
|
8
|
+
pyegeria/full_omag_server_config.py,sha256=5rOJne_qhtqaN-4Cr9vEqVAID9RUw4hG-05uKQrPBp0,42704
|
9
|
+
pyegeria/glossary_omvs.py,sha256=pfU-AKzVJDDu4brRZyayWXNP-SacgHXkAThblntm-eg,35897
|
10
|
+
pyegeria/gov_engine.py,sha256=97M0qtLrJjF91nelOsRhQINw9bePRgLn1d_xe_OO_xY,19930
|
11
|
+
pyegeria/governance_author.py,sha256=Pzg5OkxTTav9BDc56uYwD6QMlLu1lVnawZ5wWbE5c-Y,6272
|
12
|
+
pyegeria/my_profile_omvs.py,sha256=S5gX5HUy-XIqWWFqiGxqUpzw8HCG7GP5QwSq3FhqHwo,42436
|
13
|
+
pyegeria/platform_services.py,sha256=rsFPJfspWQZuHDi425YQck2fM8Qn-pTS_MpE8F-kpkg,43011
|
14
|
+
pyegeria/registered_info.py,sha256=vffGbrb4nD3_mp6MfAan8pC82vRJTRHKGTbF0Giy1PM,7502
|
15
|
+
pyegeria/server_operations.py,sha256=C37Go_EWqaBTJ8WOwNpAjiRC-1xCBdwEfrqH46CB8no,16273
|
16
|
+
pyegeria/utils.py,sha256=H0mew9IRcbsEi-pZfaT9HGuPO9CMOwnhOgIltyNvqTY,5240
|
17
|
+
pyegeria-0.3.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
18
|
+
pyegeria-0.3.0.dist-info/METADATA,sha256=3TwG8gfh3ARLJFKYbfe8ZoTbG_35EFsvGhatqoaL5Js,2429
|
19
|
+
pyegeria-0.3.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
20
|
+
pyegeria-0.3.0.dist-info/top_level.txt,sha256=tHowU8jow7WJGmbr4QdIk7gJWdslRgbWBiF2lMeduLQ,9
|
21
|
+
pyegeria-0.3.0.dist-info/RECORD,,
|
@@ -0,0 +1 @@
|
|
1
|
+
pyegeria
|
pyegeria/config.toml
DELETED