pyegeria 0.5.5.13__py3-none-any.whl → 0.5.5.14__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.
@@ -14,13 +14,14 @@ from rich.panel import Panel
14
14
  from rich.prompt import Prompt
15
15
  from rich.text import Text
16
16
  from rich.tree import Tree
17
-
17
+ from rich.console import Console
18
18
  from pyegeria import (UserNotAuthorizedException, PropertyServerException,
19
19
  InvalidParameterException, AutomatedCuration)
20
20
  from pyegeria._exceptions import (
21
21
  print_exception_response,
22
22
  )
23
23
 
24
+ console = Console()
24
25
  disable_ssl_warnings = True
25
26
 
26
27
  platform = "https://127.0.0.1:9443"
@@ -33,26 +34,33 @@ def tech_viewer(tech: str, server_name:str, platform_url:str, user:str):
33
34
  def view_tech_details(a_client: AutomatedCuration, root_collection_name: str, tree: Tree) -> Tree:
34
35
  l2: Tree = None
35
36
  tech_details = a_client.get_technology_type_detail(tech)
36
- if type(tech_details) is dict:
37
+ if (type(tech_details) is dict) and (len(tech_details)>0):
38
+ name = tech_details.get('name','---')
39
+ qualified_name = tech_details.get('qualifiedName',"---")
40
+ category = tech_details.get('category','---')
41
+ description = tech_details.get('description','---')
42
+
37
43
  style = ""
38
- l2 = tree.add(Text(f"Name: {tech_details.get('name',' ')}", "bold red"))
39
- l2 = tree.add(Text(f"* QualifiedName: {tech_details['qualifiedName']}","bold white"))
40
- l2 = tree.add(Text(f"* Category: {tech_details['category']}", "bold white"))
41
- l2 = tree.add(Text(f"* Technology Description: {tech_details['description']}", "bold white"))
44
+ l2 = tree.add(Text(f"Name: {name}", "bold red"))
45
+ l2 = tree.add(Text(f"* QualifiedName: {qualified_name}","bold white"))
46
+ l2 = tree.add(Text(f"* Category: {category}", "bold white"))
47
+ l2 = tree.add(Text(f"* Technology Description: {description}", "bold white"))
42
48
  ext_ref = tech_details.get('externalReferences', None)
43
- if ext_ref is not None:
44
- l2 = tree.add(Text(f'* URI: {ext_ref[0]["properties"]["uri"]}', "bold white"))
45
49
 
50
+ if ext_ref is not None:
51
+ uri = ext_ref[0]["properties"].get("uri", "---")
52
+ # console.print(f" {type(ext_ref)}, {len(ext_ref)}")
53
+ l2 = tree.add(Text(f'* URI: {uri}', "bold white"))
46
54
 
47
55
  resource_list = tech_details.get('resourceList',None)
48
56
  if resource_list:
49
57
  t_r = tree.add("Resource List[bold red]")
50
58
  for resource in resource_list:
51
- resource_use = Text(f"[bold white]{resource['resourceUse']}", "")
52
- resource_use_description = Text(f"[bold white]{resource['resourceUseDescription']}", "")
53
- type_name = Text(f"[bold white]{resource['relatedElement']['type']['typeName']}", "")
54
- unique_name = Text(f"[bold white]{resource['relatedElement']['uniqueName']}", "")
55
- related_guid = Text(f"[bold white]{resource['relatedElement']['guid']}", "")
59
+ resource_use = Text(f"[bold white]{resource.get('resourceUse','---')}", "")
60
+ resource_use_description = Text(f"[bold white]{resource.get('resourceUseDescription','---')}", "")
61
+ type_name = Text(f"[bold white]{resource['relatedElement']['type'].get('typeName','---')}", "")
62
+ unique_name = Text(f"[bold white]{resource['relatedElement'].get('uniqueName','---')}", "")
63
+ related_guid = Text(f"[bold white]{resource['relatedElement'].get('guid','---')}", "")
56
64
  resource_text = (f"[bold red]Resource\n"
57
65
  f"[white]Resource use: {resource_use}[white]\nDescription: "
58
66
  f"{resource_use_description}\nType Name: {type_name}\n"
@@ -60,9 +68,10 @@ def tech_viewer(tech: str, server_name:str, platform_url:str, user:str):
60
68
  p = Panel.fit(resource_text)
61
69
  tt = t_r.add(p, style=style)
62
70
 
71
+ else:
72
+ tt = tree.add(f"Tech type {tech} was not found - please check the tech type name")
63
73
 
64
- return tt
65
-
74
+ return tt
66
75
 
67
76
  try:
68
77
  tree = Tree(f"[bold bright green]{tech}", guide_style="bold bright_blue")
@@ -62,51 +62,50 @@ def tech_viewer(tech_name: str, server_name:str, platform_url:str, user:str):
62
62
 
63
63
  token = a_client.create_egeria_bearer_token(user, "secret")
64
64
  tech_elements = a_client.get_technology_type_elements(tech_name, get_templates=True)
65
- if len(tech_elements) <= 1:
66
- console.print(f"No elements found for {tech_name}")
67
- sys.exit(1)
68
- tree = Tree(f"Deployed Technology Type: {tech_name}", style="bold bright_white", guide_style="bold bright_blue")
69
- note: str =" "
70
- for element in tech_elements:
71
- header = element['elementHeader']
72
- tech_type = header["type"]["typeName"]
73
- tech_collection = header["origin"]['homeMetadataCollectionName']
74
- tech_created_by = header['versions']['createdBy']
75
- tech_created_at = header['versions']['createTime']
76
- tech_guid = header['guid']
77
- tech_classifications = header['classifications']
78
- class_md = build_classifications(tech_classifications)
79
-
80
- referenceables = element['referenceableProperties']
81
- tech_qualified_name = referenceables['qualifiedName']
82
- extended = referenceables['extendedProperties']
83
- ex_md:str = ""
84
- for key, value in extended.items():
85
- ex_md += f"* {key}: {value}\n"
86
-
87
- note = (f"* Qualified Name: {tech_qualified_name}\n"
88
- f"* GUID: {tech_guid}\n"
89
- f"* Createdy by: {tech_created_by}\n"
90
- f"* Created at: {tech_created_at}\n"
91
- f"* Home Collection: {tech_collection}\n"
92
- f"{class_md}\n"
93
- f"{ex_md}\n"
94
- )
95
-
96
- interfaces = extended.get('connectorInterfaces', None)
97
- if interfaces is not None:
98
- interface_type_name = interfaces['typeName']
99
- interface_array_cnt = interfaces['arrayCount']
100
- note += f"* Interface Type: {interface_type_name}\n"
101
- for i in range(0, int(interface_array_cnt)):
102
- note += (f"\t* Type: {interfaces['arrayValues']['propertyValueMap'][str(i)]['typeName']}"
103
- f"\tName: {interfaces['arrayValues']['propertiesAsStrings'][str(i)]}\n"
104
- )
105
- note_md = Panel.fit(Markdown(note), style = 'bold bright_white')
106
- t = tree.add(note_md)
65
+ if (len(tech_elements) >= 1) and (type(tech_elements) is list):
66
+ tree = Tree(f"Deployed Technology Type: {tech_name}", style="bold bright_white", guide_style="bold bright_blue")
67
+ note: str =" "
68
+ for element in tech_elements:
69
+ header = element['elementHeader']
70
+ tech_type = header["type"]["typeName"]
71
+ tech_collection = header["origin"]['homeMetadataCollectionName']
72
+ tech_created_by = header['versions']['createdBy']
73
+ tech_created_at = header['versions']['createTime']
74
+ tech_guid = header['guid']
75
+ tech_classifications = header['classifications']
76
+ class_md = build_classifications(tech_classifications)
77
+
78
+ referenceables = element['referenceableProperties']
79
+ tech_qualified_name = referenceables['qualifiedName']
80
+ extended = referenceables['extendedProperties']
81
+ ex_md:str = ""
82
+ for key, value in extended.items():
83
+ ex_md += f"* {key}: {value}\n"
84
+
85
+ note = (f"* Qualified Name: {tech_qualified_name}\n"
86
+ f"* GUID: {tech_guid}\n"
87
+ f"* Createdy by: {tech_created_by}\n"
88
+ f"* Created at: {tech_created_at}\n"
89
+ f"* Home Collection: {tech_collection}\n"
90
+ f"{class_md}\n"
91
+ f"{ex_md}\n"
92
+ )
93
+
94
+ interfaces = extended.get('connectorInterfaces', None)
95
+ if interfaces is not None:
96
+ interface_type_name = interfaces['typeName']
97
+ interface_array_cnt = interfaces['arrayCount']
98
+ note += f"* Interface Type: {interface_type_name}\n"
99
+ for i in range(0, int(interface_array_cnt)):
100
+ note += (f"\t* Type: {interfaces['arrayValues']['propertyValueMap'][str(i)]['typeName']}"
101
+ f"\tName: {interfaces['arrayValues']['propertiesAsStrings'][str(i)]}\n"
102
+ )
103
+ note_md = Panel.fit(Markdown(note), style = 'bold bright_white')
104
+ t = tree.add(note_md)
107
105
 
106
+ else:
107
+ tree = Tree(f"No elements found for {tech_name}", style="red")
108
108
  print(tree)
109
-
110
109
  except (
111
110
  InvalidParameterException,
112
111
  PropertyServerException,
@@ -123,8 +123,8 @@ def main():
123
123
  parser = argparse.ArgumentParser()
124
124
  parser.add_argument("--integ_server", help="Name of the integration server to display status for")
125
125
  parser.add_argument("--integ_url", help="URL Platform to connect to")
126
- parser.add_argument("--view_server", help="Name of the integration server to display status for")
127
- parser.add_argument("--view_url", help="URL Platform to connect to")
126
+ parser.add_argument("--view_server", help="Name of the view server to use")
127
+ parser.add_argument("--view_url", help="view server URL Platform to connect to")
128
128
  parser.add_argument("--userid", help="User Id")
129
129
  args = parser.parse_args()
130
130
 
pyegeria/__init__.py CHANGED
@@ -11,7 +11,7 @@ the server platform and servers.
11
11
 
12
12
  """
13
13
 
14
- from ._globals import (is_debug, disable_ssl_warnings, max_paging_size,
14
+ from ._globals import (is_debug, disable_ssl_warnings, max_paging_size, template_guids, integration_guids
15
15
  )
16
16
  from .core_guids import *
17
17
 
@@ -48,4 +48,6 @@ from .runtime_manager_omvs import RuntimeManager
48
48
  from .action_author_omvs import GovernanceAuthor
49
49
  from .glossary_manager_omvs import GlossaryManager
50
50
 
51
- __version__ = "0.5.2"
51
+
52
+
53
+
pyegeria/_client.py CHANGED
@@ -10,7 +10,6 @@ import asyncio
10
10
  import inspect
11
11
  import json
12
12
  import os
13
-
14
13
  import httpx
15
14
  from httpx import AsyncClient, Response
16
15
 
@@ -18,8 +17,8 @@ from pyegeria._exceptions import (
18
17
  OMAGCommonErrorCode,
19
18
  InvalidParameterException,
20
19
  PropertyServerException,
21
- UserNotAuthorizedException, )
22
- from pyegeria._globals import max_paging_size
20
+ UserNotAuthorizedException )
21
+ from pyegeria._globals import max_paging_size, template_guids, integration_guids
23
22
  from pyegeria._validators import (
24
23
  validate_name,
25
24
  validate_server_name,
@@ -138,6 +137,10 @@ class Client:
138
137
  # else:
139
138
  # self.session = httpx.AsyncClient(verify=self.ssl_verify)
140
139
  self.session = AsyncClient(verify=self.ssl_verify)
140
+ # if (len(template_guids) == 0) or (len(integration_guids) == 0):
141
+ # self.build_global_guid_lists()
142
+ # self.template_guids = template_guids
143
+ # self.integration_guids = integration_guids
141
144
 
142
145
  def __enter__(self):
143
146
  return self
@@ -202,7 +205,7 @@ class Client:
202
205
  "userId": user_id,
203
206
  "password": password
204
207
  }
205
- async with httpx.AsyncClient(verify=self.ssl_verify) as client:
208
+ async with AsyncClient(verify=self.ssl_verify) as client:
206
209
  try:
207
210
  response = await client.post(url, json=data, headers=self.headers)
208
211
  token = response.text
@@ -565,6 +568,53 @@ class Client:
565
568
  )
566
569
  raise InvalidParameterException(exc_msg)
567
570
 
571
+ def build_global_guid_lists(self) -> None:
572
+ global template_guids, integration_guids
573
+
574
+ self.create_egeria_bearer_token(self.user_id, self.user_pwd)
575
+ # get all technology types
576
+ url = (f"{self.platform_url}/servers/{self.server_name}/api/open-metadata/automated-curation/technology-types/"
577
+ f"by-search-string?startFrom=0&pageSize=0&startsWith=false&"
578
+ f"endsWith=false&ignoreCase=true")
579
+ body = {"filter": ""}
580
+
581
+ response = self.make_request("POST", url, body)
582
+ tech_types = response.json().get("elements", "no tech found")
583
+ if type(tech_types) is list:
584
+ for tech_type in tech_types:
585
+ # get tech type details
586
+ display_name = tech_type["name"]
587
+
588
+ url = f"{self.platform_url}/servers/{self.server_name}/api/open-metadata/automated-curation/technology-types/by-name"
589
+ body = {"filter": display_name}
590
+ response = self.make_request("POST", url, body)
591
+ details = response.json().get("element","no type found")
592
+ if type(details) is str:
593
+ continue
594
+ # get templates and update the template_guids global
595
+ templates = details.get("catalogTemplates", "Not Found")
596
+ if type(templates) is str:
597
+ template_guids[display_name]= None
598
+ else:
599
+ for template in templates:
600
+ template_name = template.get("name", None)
601
+ template_guid = template["relatedElement"]["guid"]
602
+ template_guids[template_name] = template_guid
603
+ # print(f"Added {template_name} template with GUID {template_guids[template_name]}")
604
+
605
+ # Now find the integration connector guids
606
+ resource_list = details.get('resourceList', ' ')
607
+ if type(resource_list) is str:
608
+ integration_guids[display_name] = None
609
+ else:
610
+ for resource in resource_list:
611
+ resource_guid = resource['relatedElement']['guid']
612
+ resource_type = resource['relatedElement']['type']['typeName']
613
+ if resource_type == "IntegrationConnector":
614
+ integration_guids[display_name] = resource_guid
615
+ # print(f"Added {display_name} integration connector with GUID {integration_guids[display_name]}")
616
+
617
+
568
618
 
569
619
  if __name__ == "__main__":
570
620
  try:
pyegeria/_globals.py CHANGED
@@ -31,3 +31,5 @@ star_ratings = (
31
31
  "TWO_STARS",
32
32
  )
33
33
 
34
+ template_guids: dict = {}
35
+ integration_guids: dict = {}
pyegeria/utils.py CHANGED
@@ -70,6 +70,8 @@ from rich import print, print_json
70
70
  # df = pd.json_normalize(data)
71
71
  # print(tabulate(wrap_text(df, wrap_len), headers="keys", tablefmt=tablefmt))
72
72
 
73
+ template_guids: dict = None
74
+ integration_guids: dict = None
73
75
 
74
76
  def print_rest_request_body(body):
75
77
  """
@@ -189,3 +191,4 @@ def body_slimmer(body: dict) -> dict:
189
191
  """
190
192
  slimmed = {key: value for key, value in body.items() if value}
191
193
  return slimmed
194
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyegeria
3
- Version: 0.5.5.13
3
+ Version: 0.5.5.14
4
4
  Summary: A python client for Egeria
5
5
  Home-page: https://github.com/odpi/egeria-python
6
6
  License: Apache 2.0
@@ -9,7 +9,7 @@ examples/widgets/catalog_user/view_glossary.py,sha256=uDAZHJ1WPkkl9S1fzVKJOISjU8
9
9
  examples/widgets/developer/README.md,sha256=nxDnfr3BCiGgW5G1VxWxiwUWJXIe5wreNuUeRyIt_hY,1343
10
10
  examples/widgets/developer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  examples/widgets/developer/get_guid_info.py,sha256=-vOlZfC1lka_evpcwnnNmFU1A88x49kwKIJyYIJzQSg,2549
12
- examples/widgets/developer/get_tech_details.py,sha256=HltpixTlzEsD2-z94E-aQBmjcTJ3b1NCCF4wygxp4Dc,3961
12
+ examples/widgets/developer/get_tech_details.py,sha256=gNVqwY9pl1Icv_nQPKnb7EHkGY5bH3TNfREaIyLwQHg,4472
13
13
  examples/widgets/developer/list_asset_types.py,sha256=iIA0TX9C_W5u_Bh3RzRMX0x2CdEdH7RFCkUOOP2ZzQw,2847
14
14
  examples/widgets/developer/list_registered_services.py,sha256=oIrE3bSG92C107Q_gFoo7CWYy5LBliQWXElFyiVmRzg,5122
15
15
  examples/widgets/developer/list_relationship_types.py,sha256=ruXH_6vIcnCuJvLc-zokvjnbIit1WQ33uRGSpipRuPo,4216
@@ -19,12 +19,12 @@ examples/widgets/developer/list_valid_metadata_values.py,sha256=JMfkJe-hscrNJAqg
19
19
  examples/widgets/operational/README.md,sha256=PJsSDcvMv6E6og6y-cwvxFX5lhCII0UCwgKiM1T17MQ,1595
20
20
  examples/widgets/operational/__init__.py,sha256=8ebdyTD7i-XXyZr0vDx6jnXalE6QjhCvu7n6YXxwgL0,112
21
21
  examples/widgets/operational/get_tech_type_elements.py,sha256=ZxE6_-LqAEHffizKL_R3q3vGFM858VRsAqgQwt3Sbak,4985
22
- examples/widgets/operational/get_tech_type_template.py,sha256=tzF0BqnKMZ0rxRPm3BLz0lnw9zJHgSgDUB3k2aGWAr4,4835
22
+ examples/widgets/operational/get_tech_type_template.py,sha256=SXSQtOisz3qDqRVWiB8vIVbavBSGz1Dn-IXSnX8NJUE,5015
23
23
  examples/widgets/operational/view_asset_events.py,sha256=rQoti3barirB2hdKl9Sm2liUWaAtaB-sbYh0wkoO3vA,2634
24
24
  examples/widgets/operational/view_coco_status.py,sha256=QloMgVcXL2Fx2XHyk71PKCwmzRfc_Q_cAvpyomcYi_Y,3322
25
25
  examples/widgets/operational/view_eng_action_status.py,sha256=sCkQh5XRDq0u6ZObxmUA0-wUhUoVMdV6_ho_d4PAdqw,4973
26
26
  examples/widgets/operational/view_gov_eng_status.py,sha256=rcZv82l7q8jccUVIb-K2vazQorcKP86SAtES0--SQns,3998
27
- examples/widgets/operational/view_integ_daemon_status.py,sha256=AhI6bJ7u3JBYUMBSg-foRQPXuB9W3tp-3mc7QFfKtT4,5860
27
+ examples/widgets/operational/view_integ_daemon_status.py,sha256=9GEqKl_ZYmnEa4-WmBjoTefaxFhqt0ShcyxybqC7lmA,5850
28
28
  examples/widgets/operational/view_platform_status.py,sha256=lqZnObLgJ0qf8hdcRwETXTGd8A8FbFc-rg_ckg86GfE,4457
29
29
  examples/widgets/operational/view_server_list.py,sha256=j1V5RJ8kwGkyQO8nbygtD5W-85TVO4TsR3SbnKD2eDM,3125
30
30
  examples/widgets/operational/view_server_status.py,sha256=slooQbjhdbTdRXZcRCHbZGUBtlHCO61xHa1J1P-iRKE,2826
@@ -37,11 +37,11 @@ examples/widgets/personal_organizer/view_my_todos.py,sha256=7MGGoxWeoBOuUSsFgu0n
37
37
  examples/widgets/personal_organizer/view_open_todos.py,sha256=W_C1yT8usJV9E5BTQP7UeA1ISuDUanszqlWf75mtLZk,3995
38
38
  pyegeria/Xfeedback_manager_omvs.py,sha256=uNQMOPG08UyIuLzBfYt4uezDyLWdpBgJ2ZuvqumaWuY,9231
39
39
  pyegeria/Xloaded_resources_omvs.py,sha256=cseWZTIwNhkzhZ0fhujI66DslNAQcjuwsz_p1GRmSPQ,3392
40
- pyegeria/__init__.py,sha256=xKCym7qw9_KF32reDysCFxfWt0mIyhTZKNrLFazfCXs,2059
41
- pyegeria/_client.py,sha256=uQqfjf0JPacEWcDvbKpCvCypbDmAmGHaFQf_UTPK7VQ,23524
40
+ pyegeria/__init__.py,sha256=EI2XPKvlin9TOyELgzmVl8nToZukeZpmbaEbZkx1PX0,2074
41
+ pyegeria/_client.py,sha256=Nb2819DMiL085eJ3CMzbvW8RB2xrB8kLd-k5vjVprE8,26308
42
42
  pyegeria/_deprecated_gov_engine.py,sha256=_DAEHsksnTKGqL9-TaaMVrfnNOrvatNACfg7pJ-ZX4w,17600
43
43
  pyegeria/_exceptions.py,sha256=NJ7vAhmvusK1ENvY2MMrBB6A6TgpYjzS9QJxFH56b8c,18470
44
- pyegeria/_globals.py,sha256=IKk40ogVhdYRagyau2k9pJqcs17UZ43Cx4iOeYRojOk,560
44
+ pyegeria/_globals.py,sha256=PK7ulp85ZmtlfGNcffSuUbaJdCS6rvcZUcudM6-pjKc,614
45
45
  pyegeria/_validators.py,sha256=DQuMsATRGxGSBtOrVtXlCgWXGhj6Nh-uqPtCsrUGLxk,12703
46
46
  pyegeria/action_author_omvs.py,sha256=m0wsfmyO-VxRDaPpACeIDw8eVAFu3RVbo45RPCUel9M,6340
47
47
  pyegeria/asset_catalog_omvs.py,sha256=Y-Eh0k-zkJNOChVlLbC2bsTSBVLWhk-0-ewCV4YlyDY,25802
@@ -58,10 +58,10 @@ pyegeria/project_manager_omvs.py,sha256=_U6m2vquu4eEV7aY8X3hsvfm2zX0EBica1reGWX9
58
58
  pyegeria/registered_info.py,sha256=GfMcYz3IO0aNquf8qCrYQ9cA5KplhPx1kNt0_nMMpTM,6475
59
59
  pyegeria/runtime_manager_omvs.py,sha256=WekK7Yeyn6Qu9YmbSDo3m57MN0xOsIm9M8kGHfROZHI,37628
60
60
  pyegeria/server_operations.py,sha256=hEaU6YC0iNEQFvcXYvcE4J6BQKlqMJk33nViCNIEBE4,16349
61
- pyegeria/utils.py,sha256=R1_WwYa8sYJUYR0H8sKrlwEa5BJ32M8-tdfB-zq8Xs4,5282
61
+ pyegeria/utils.py,sha256=lWd0FrHh7DFR1UeOzk3Y1I_xR_zmlFYWL1Pci-ZuZmw,5342
62
62
  pyegeria/valid_metadata_omvs.py,sha256=aisdRodIwJSkyArAzfm_sEnBELh69xE8k4Nea-vHu8M,36745
63
- pyegeria-0.5.5.13.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
64
- pyegeria-0.5.5.13.dist-info/METADATA,sha256=6buVww5yH-b8tns44BzvhutAicdJfZWEtsxRBjbG3ZU,2612
65
- pyegeria-0.5.5.13.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
66
- pyegeria-0.5.5.13.dist-info/entry_points.txt,sha256=yR22RzRO974vzRMeo7_ysc-_5pxHmgnvyk8FHTZviOw,1950
67
- pyegeria-0.5.5.13.dist-info/RECORD,,
63
+ pyegeria-0.5.5.14.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
64
+ pyegeria-0.5.5.14.dist-info/METADATA,sha256=5p6x6AR5efv9X8zmmK1hNm-tH4Ub9ozOX-m8601efoU,2612
65
+ pyegeria-0.5.5.14.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
66
+ pyegeria-0.5.5.14.dist-info/entry_points.txt,sha256=yR22RzRO974vzRMeo7_ysc-_5pxHmgnvyk8FHTZviOw,1950
67
+ pyegeria-0.5.5.14.dist-info/RECORD,,