pyegeria 5.3.6.6__py3-none-any.whl → 5.3.7__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 CHANGED
@@ -61,7 +61,7 @@ from .collection_manager_omvs import CollectionManager
61
61
  from .core_omag_server_config import CoreServerConfig
62
62
  from .create_tech_guid_lists import build_global_guid_lists
63
63
  from .egeria_cat_client import EgeriaCat
64
- from .egeria_client import Egeria
64
+ # from .egeria_client import Egeria
65
65
  from .egeria_config_client import EgeriaConfig
66
66
  from .egeria_my_client import EgeriaMy
67
67
  from .egeria_tech_client import EgeriaTech
@@ -92,7 +92,7 @@ from .valid_metadata_omvs import ValidMetadataManager
92
92
  from .x_action_author_omvs import ActionAuthor
93
93
  from .md_processing_utils import (extract_command, process_glossary_upsert_command, process_term_upsert_command,
94
94
  process_categories_upsert_command,
95
- get_current_datetime_string, process_per_proj_upsert_command, commands,
95
+ get_current_datetime_string, process_per_proj_upsert_command, command_list,
96
96
  render_markdown, process_provenance_command)
97
97
 
98
98
  #
@@ -6,12 +6,13 @@ import nbformat
6
6
  import os
7
7
  from rich import print
8
8
  from rich.console import Console
9
+
10
+ from pyegeria.egeria_tech_client import EgeriaTech
9
11
  from pyegeria.md_processing_utils import (extract_command, process_glossary_upsert_command, process_term_upsert_command,
10
- get_current_datetime_string, process_per_proj_upsert_command, commands)
12
+ get_current_datetime_string, process_per_proj_upsert_command, command_list,
13
+ )
11
14
  import click
12
- from pyegeria import (extract_command, process_glossary_upsert_command, process_term_upsert_command,
13
- get_current_datetime_string, process_per_proj_upsert_command, commands,EgeriaTech
14
- )
15
+
15
16
  from pyegeria._exceptions import (
16
17
  print_exception_response,
17
18
  )
@@ -76,7 +77,7 @@ def process_jupyter_notebook(
76
77
  if cell.cell_type == 'markdown':
77
78
  if cell.source.strip().startswith('#'):
78
79
  potential_command = extract_command(cell.source)
79
- if potential_command in commands:
80
+ if potential_command in command_list:
80
81
  if potential_command in ["Create Glossary", "Update Glossary"]:
81
82
  result = process_glossary_upsert_command(client, element_dictionary,
82
83
  cell.source, directive)
@@ -6,17 +6,13 @@ import json
6
6
  import os
7
7
  from rich import print
8
8
  from rich.console import Console
9
- from rich.markdown import Markdown
10
9
  from rich.prompt import Prompt
11
10
 
12
- from pyegeria import (extract_command, process_glossary_upsert_command, process_term_upsert_command,
13
- get_current_datetime_string, process_per_proj_upsert_command, commands,
14
- process_provenance_command)
15
11
 
16
12
  import click
17
13
  from pyegeria import (extract_command, process_glossary_upsert_command, process_term_upsert_command,
18
- process_categories_upsert_command,
19
- get_current_datetime_string, process_per_proj_upsert_command, commands,EgeriaTech
14
+ process_categories_upsert_command, process_provenance_command,
15
+ get_current_datetime_string, process_per_proj_upsert_command, command_list,EgeriaTech,
20
16
  )
21
17
  from datetime import datetime
22
18
 
@@ -47,16 +43,17 @@ EGERIA_OUTBOX_PATH = os.environ.get("EGERIA_OUTBOX_PATH", "pyegeria/commands/cat
47
43
 
48
44
 
49
45
 
50
- # @click.command("process_markdown_file", help="Process a markdown file and return the output as a string.")
51
- # @click.option("--file-path", help="File path to markdown file",
52
- # default="glossary_exp.md")
53
- # @click.option("--directive", default="display-only", help="How to process the file")
54
- # @click.option("--server", default=EGERIA_VIEW_SERVER, help="Egeria view server to use.")
55
- # @click.option(
56
- # "--url", default=EGERIA_VIEW_SERVER_URL, help="URL of Egeria platform to connect to"
57
- # )
58
- # @click.option("--userid", default=EGERIA_USER, help="Egeria user")
59
- # @click.option("--user_pass", default=EGERIA_USER_PASSWORD, help="Egeria user password")
46
+ @click.command("process_markdown_file", help="Process a markdown file and return the output as a string.")
47
+ @click.option("--file-path", help="File path to markdown file",
48
+ default="glossary_exp.md", required=True, prompt=False)
49
+ @click.option("--directive", default="display", help="How to process the file",
50
+ type=click.Choice(["display","validate","process"],case_sensitive=False), prompt=False,)
51
+ @click.option("--server", default=EGERIA_VIEW_SERVER, help="Egeria view server to use.")
52
+ @click.option(
53
+ "--url", default=EGERIA_VIEW_SERVER_URL, help="URL of Egeria platform to connect to"
54
+ )
55
+ @click.option("--userid", default=EGERIA_USER, help="Egeria user")
56
+ @click.option("--user_pass", default=EGERIA_USER_PASSWORD, help="Egeria user password")
60
57
  def process_markdown_file(
61
58
  file_path: str,
62
59
  directive: str,
@@ -68,6 +65,7 @@ def process_markdown_file(
68
65
  """
69
66
  Process a markdown file by parsing and executing Dr. Egeria commands. Write output to a new file.
70
67
  """
68
+
71
69
  console = Console(width=int(EGERIA_WIDTH))
72
70
  client = EgeriaTech(server, url, user_id=userid)
73
71
  token = client.create_egeria_bearer_token(userid, user_pass)
@@ -82,67 +80,96 @@ def process_markdown_file(
82
80
  print(f"Error: File not found at path: {full_file_path}")
83
81
  return {} # Return empty dict if file not found
84
82
 
85
- final_output =""
83
+ final_output = []
86
84
  prov_found = False
87
- prov_output = (f"\n* Results from processing file {file_path} on "
85
+ prov_output = (f"\n# Provenance\n\n* Results from processing file {file_path} on "
88
86
  f"{datetime.now().strftime("%Y-%m-%d %H:%M")}\n")
89
87
  h1_blocks = []
90
88
  current_block = ""
91
89
  in_h1_block = False
92
90
  element_dictionary = {}
93
91
 
94
- # Read and process lines sequentially, preserving their order
92
+ # Helper function to process the current block
93
+ def process_current_block(current_block):
94
+ nonlocal updated, final_output, prov_found, prov_output, h1_blocks, in_h1_block, element_dictionary
95
+
96
+ if not current_block:
97
+ return # No block to process
98
+
99
+ potential_command = extract_command(current_block) # Extract command
100
+ if potential_command in command_list:
101
+ # Process the block based on the command
102
+ if potential_command == "Provenance":
103
+ result = process_provenance_command(file_path, current_block)
104
+ prov_found = True
105
+
106
+ elif potential_command in ["Create Glossary", "Update Glossary"]:
107
+ result = process_glossary_upsert_command(client, element_dictionary, current_block, directive)
108
+ elif potential_command in ["Create Category", "Update Category"]:
109
+ result = process_categories_upsert_command(client, element_dictionary, current_block, directive)
110
+ elif potential_command in ["Create Term", "Update Term"]:
111
+ result = process_term_upsert_command(client, element_dictionary, current_block, directive)
112
+ elif potential_command in ["Create Personal Project", "Update Personal Project"]:
113
+ result = process_per_proj_upsert_command(client, element_dictionary, current_block, directive)
114
+ else:
115
+ # If command is not recognized, keep the block as-is
116
+ result = None
117
+
118
+ if result:
119
+ if directive == "process":
120
+ updated = True
121
+ final_output.append(result)
122
+ # print(json.dumps(element_dictionary, indent=4))
123
+ # elif directive == "validate":
124
+ # print(json.dumps(element_dictionary, indent=4))
125
+ elif directive == "process":
126
+ # Handle errors (skip this block but notify the user)
127
+ print(f"\n==>\tErrors found while processing command: \'{potential_command}\'\n"
128
+ f"\tPlease correct and try again. \n")
129
+ final_output.append(current_block)
130
+ else:
131
+ # If there is no command, append the block as-is
132
+ final_output.append(current_block)
133
+
134
+ # Main parsing loop
95
135
  for line in lines:
96
136
  line = line.strip() # Remove leading/trailing whitespace
97
137
 
98
- if line.startswith("# "): # Start of a new H1 block
99
- current_block = line # Initialize the H1 block
138
+ # Handle a new H1 block (starting with `# `)
139
+ if line.startswith("# "):
140
+ if in_h1_block:
141
+ # Process the current block before starting a new one
142
+ process_current_block(current_block)
143
+
144
+ # Start a new H1 block
145
+ current_block = line
100
146
  in_h1_block = True
101
- elif line.startswith("---") and in_h1_block: # End of the current H1 block
102
- # Process the completed H1 block
103
- current_block += f"\n{line}" # Add the closing line
104
- potential_command = extract_command(current_block) # Extract command
105
-
106
- if potential_command in commands:
107
- # Process the block based on the command
108
- if potential_command == "Provenance":
109
- prov_found = True
110
- result = process_provenance_command(file_path, current_block)
111
- elif potential_command in ["Create Glossary", "Update Glossary"]:
112
- result = process_glossary_upsert_command(client, element_dictionary, current_block, directive)
113
- elif potential_command in ["Create Category", "Update Category"]:
114
- result = process_categories_upsert_command(client, element_dictionary, current_block, directive)
115
- elif potential_command in ["Create Term", "Update Term"]:
116
- result = process_term_upsert_command(client, element_dictionary, current_block, directive)
117
- elif potential_command in ["Create Personal Project", "Update Personal Project"]:
118
- result = process_per_proj_upsert_command(client, element_dictionary, current_block, directive)
119
- else:
120
- # If command is not recognized, keep the block as-is
121
- result = None
122
-
123
- if result:
124
- if directive == "process":
125
- updated = True
126
- final_output += f"\n---\n{result}\n"
127
- print(json.dumps(element_dictionary, indent=4))
128
- elif directive == "process":
129
- # Handle errors (skip this block but notify the user)
130
- print(f"\n==>\tErrors found while processing command: \'{potential_command}\'\n"
131
- f"\tPlease correct and try again. \n")
132
- final_output += f"\n---\n{current_block}\n"
133
- else:
134
- # If there is no command, append the block as-is
135
- final_output += f"\n---\n{current_block}\n"
136
147
 
137
- current_block = "" # Clear the block
138
- in_h1_block = False
139
- elif in_h1_block: # Add line to the current H1 block
148
+ # Handle the end of a block (line starts with `---`)
149
+ elif line.startswith("---"):
150
+ if in_h1_block:
151
+ # Process the current block when it ends with `---`
152
+ current_block += f"\n{line}"
153
+ process_current_block(current_block)
154
+ current_block = "" # Clear the block
155
+ in_h1_block = False
156
+
157
+ # Add lines to the current H1 block
158
+ elif in_h1_block:
140
159
  current_block += f"\n{line}"
160
+
161
+ # Append non-H1 content directly to the output
141
162
  else:
142
- # For non-H1 lines, add them directly to the output
143
- final_output += f"\n{line}"
163
+ final_output.append(line)
164
+
165
+ # Ensure the final H1 block is processed if the file doesn't end with `---`
166
+ if in_h1_block:
167
+ process_current_block(current_block)
168
+
169
+ # Join the final output list into a single string
170
+ final_output = "\n".join(final_output)
171
+
144
172
 
145
- # Write the final_output to a new file if updated
146
173
  try:
147
174
  if updated:
148
175
  path, filename = os.path.split(file_path) # Get both parts
@@ -152,11 +179,8 @@ def process_markdown_file(
152
179
 
153
180
  with open(new_file_path, 'w') as f2:
154
181
  f2.write(final_output)
155
- prov_output = process_provenance_command(file_path, prov_output)
156
- # if not prov_found:
157
- # prov_output += f"\n# Provenance:\n{prov_output}\n"
158
-
159
- f2.write(prov_output)
182
+ if not prov_found:
183
+ f2.write(prov_output)
160
184
  click.echo(f"\n==> Notebook written to {new_file_path}")
161
185
  else:
162
186
  click.echo("\nNo updates detected. New File not created.")
@@ -165,29 +189,29 @@ def process_markdown_file(
165
189
  console.print_exception(show_locals=True)
166
190
 
167
191
 
168
- def main():
169
- parser = argparse.ArgumentParser()
170
- parser.add_argument("--server", help="Name of the server to display status for")
171
- parser.add_argument("--url", help="URL Platform to connect to")
172
- parser.add_argument("--userid", help="User Id")
173
- parser.add_argument("--password", help="User Password")
174
- parser.add_argument("--time_out", help="Time Out")
175
-
176
- args = parser.parse_args()
177
-
178
- server = args.server if args.server is not None else EGERIA_VIEW_SERVER
179
- url = args.url if args.url is not None else EGERIA_PLATFORM_URL
180
- userid = args.userid if args.userid is not None else EGERIA_USER
181
- user_pass = args.password if args.password is not None else EGERIA_USER_PASSWORD
182
- time_out = args.time_out if args.time_out is not None else 60
183
- try:
184
- file_path = Prompt.ask("Markdown File name to process:", default="")
185
- directive = Prompt.ask("Processing Directive:", choices=[ "display", "validate", "process"], default="validate")
186
-
187
- process_markdown_file(file_path, directive, server, url, userid, user_pass)
188
- except KeyboardInterrupt:
189
- pass
190
-
191
-
192
- if __name__ == "__main__":
193
- main()
192
+ # def main():
193
+ # parser = argparse.ArgumentParser()
194
+ # parser.add_argument("--server", help="Name of the server to display status for")
195
+ # parser.add_argument("--url", help="URL Platform to connect to")
196
+ # parser.add_argument("--userid", help="User Id")
197
+ # parser.add_argument("--password", help="User Password")
198
+ # parser.add_argument("--time_out", help="Time Out")
199
+ #
200
+ # args = parser.parse_args()
201
+ #
202
+ # server = args.server if args.server is not None else EGERIA_VIEW_SERVER
203
+ # url = args.url if args.url is not None else EGERIA_PLATFORM_URL
204
+ # userid = args.userid if args.userid is not None else EGERIA_USER
205
+ # user_pass = args.password if args.password is not None else EGERIA_USER_PASSWORD
206
+ # time_out = args.time_out if args.time_out is not None else 60
207
+ # try:
208
+ # file_path = Prompt.ask("Markdown File name to process:", default="")
209
+ # directive = Prompt.ask("Processing Directive:", choices=[ "display", "validate", "process"], default="validate")
210
+ #
211
+ # process_markdown_file(file_path, directive, server, url, userid, user_pass)
212
+ # except KeyboardInterrupt:
213
+ # pass
214
+ #
215
+ #
216
+ # if __name__ == "__main__":
217
+ # main()
@@ -41,7 +41,7 @@ EGERIA_ADMIN_PASSWORD = os.environ.get("ADMIN_PASSWORD", "secret")
41
41
  EGERIA_USER = os.environ.get("EGERIA_USER", "erinoverview")
42
42
  EGERIA_USER_PASSWORD = os.environ.get("EGERIA_USER_PASSWORD", "secret")
43
43
  EGERIA_JUPYTER = bool(os.environ.get("EGERIA_JUPYTER", "False"))
44
- EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", "200"))
44
+ EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", "250"))
45
45
  EGERIA_GLOSSARY_PATH = os.environ.get("EGERIA_GLOSSARY_PATH", None)
46
46
  EGERIA_ROOT_PATH = os.environ.get("EGERIA_ROOT_PATH", "/Users/dwolfson/localGit/egeria-v5-3/egeria-python")
47
47
  EGERIA_INBOX_PATH = os.environ.get("EGERIA_INBOX_PATH", "pyegeria/commands/cat/dr_egeria_inbox")
@@ -148,16 +148,14 @@ def display_glossary_terms(
148
148
  caption=f"View Server '{view_server}' @ Platform - {view_url}",
149
149
  expand=True,
150
150
  )
151
- table.add_column("Term Name")
151
+ table.add_column("Term Name / Abbreviation / Version")
152
152
  table.add_column("Qualified Name / GUID", width=38, no_wrap=True)
153
- table.add_column("Abbreviation")
154
153
  table.add_column("Summary")
155
154
  table.add_column("Description")
156
- table.add_column("Version Id")
157
155
  table.add_column("Glossary")
158
156
  table.add_column("Status")
159
- table.add_column("Example")
160
157
  table.add_column("Categories")
158
+ table.add_column("Example/Usage", min_width=50)
161
159
 
162
160
  terms = g_client.find_glossary_terms(
163
161
  search_string,
@@ -183,7 +181,7 @@ def display_glossary_terms(
183
181
  if props == "None":
184
182
  return table
185
183
 
186
- display_name = Text(props.get("displayName","---"), style=style, justify="center")
184
+ display_name = props.get("displayName","---")
187
185
  qualified_name = props["qualifiedName"]
188
186
  term_guid = term["elementHeader"]["guid"]
189
187
  q_name = Text(
@@ -197,7 +195,9 @@ def display_glossary_terms(
197
195
  style=style,
198
196
  justify="center",
199
197
  )
200
- example = Text(props.get("example", " "), style=style)
198
+ example = props.get("example", " ")
199
+ usage = props.get("usage", " ")
200
+ ex_us_out = Markdown(f"Example:\n{example}\n---\nUsage: \n{usage}")
201
201
 
202
202
  classifications = term["elementHeader"]["classifications"]
203
203
  glossary_guid = None
@@ -221,20 +221,18 @@ def display_glossary_terms(
221
221
  for category in category_list:
222
222
  category_name = category["glossaryCategoryProperties"].get("displayName",'---')
223
223
  category_list_md += f"* {category_name}\n"
224
-
224
+ term_abb_ver_out = Markdown(f"{display_name}\n---\n{abbrev}\n---\n{version}")
225
225
  category_list_out = Markdown(category_list_md)
226
226
  term_status = term["elementHeader"].get("status","---")
227
227
  table.add_row(
228
- display_name,
228
+ term_abb_ver_out,
229
229
  q_name,
230
- abbrev,
231
230
  summary,
232
231
  description,
233
- version,
234
232
  glossary_name,
235
233
  term_status,
236
- example,
237
234
  category_list_out,
235
+ ex_us_out,
238
236
  style="bold white on black",
239
237
  )
240
238
 
@@ -674,17 +674,7 @@ def tell_dr_egeria(ctx):
674
674
  """Execute Dr.Egeria actions"""
675
675
  pass
676
676
 
677
- @tell_dr_egeria.command("process_markdown_file")
678
- @click.option("--file-path", help="File path to markdown file",
679
- default="glossary_exp.md")
680
- @click.option("--directive", type=click.Choice(['Display','Validate','Process'], case_sensitive=False),
681
- default="validate", help="How to process the file")
682
- @click.pass_context
683
- def process_markdown_file(ctx, file_path, directive):
684
- """Process a markdown file"""
685
- c = ctx.obj
686
- process_markdown_file(file_path, directive, c.view_server, c.view_server_url, c.userid, c.password)
687
-
677
+ tell_dr_egeria.add_command(process_markdown_file)
688
678
 
689
679
  @tell.group("glossary")
690
680
  @click.pass_context
pyegeria/egeria_client.py CHANGED
@@ -11,7 +11,7 @@ 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
- from pyegeria.x_action_author_omvs import ActionAuthor
14
+ # from pyegeria.x_action_author_omvs import ActionAuthor
15
15
  from pyegeria.asset_catalog_omvs import AssetCatalog
16
16
  from pyegeria.collection_manager_omvs import CollectionManager
17
17
  from pyegeria.glossary_manager_omvs import GlossaryManager
@@ -22,19 +22,21 @@ from pyegeria.template_manager_omvs import TemplateManager
22
22
  from pyegeria.runtime_manager_omvs import RuntimeManager
23
23
  from pyegeria.full_omag_server_config import FullServerConfig
24
24
  from pyegeria.metadata_explorer_omvs import MetadataExplorer
25
- from pyegeria.egeria_my_client import EgeriaMy
25
+ from pyegeria.my_profile_omvs import MyProfile
26
+ from pyegeria.feedback_manager_omvs import FeedbackManager
26
27
  from pyegeria.solution_architect_omvs import SolutionArchitect
27
28
  from pyegeria.server_operations import ServerOps
28
29
  from pyegeria.registered_info import RegisteredInfo
29
30
  from pyegeria.valid_metadata_omvs import ValidMetadataManager
30
31
  from pyegeria.egeria_config_client import EgeriaConfig
31
- from pyegeria.md_processing_utils import render_markdown
32
+ # from pyegeria.md_processing_utils import render_markdown
32
33
 
33
34
 
34
35
  class Egeria(
35
36
  AssetCatalog,
36
37
  CollectionManager,
37
- EgeriaMy,
38
+ MyProfile,
39
+ FeedbackManager,
38
40
  GlossaryManager,
39
41
  # GovernanceAuthor,
40
42
  # PeopleOrganizer,
@@ -42,15 +44,14 @@ class Egeria(
42
44
  RuntimeManager,
43
45
  ServerOps,
44
46
  FullServerConfig,
45
- ActionAuthor,
47
+ # ActionAuthor,
46
48
  AutomatedCuration,
47
49
  ClassificationManager,
48
50
  RegisteredInfo,
49
- # TemplateManager,
51
+ TemplateManager,
50
52
  ValidMetadataManager,
51
53
  MetadataExplorer,
52
54
  SolutionArchitect,
53
- EgeriaMy,
54
55
  EgeriaConfig,
55
56
  ):
56
57
  """
@@ -87,7 +88,10 @@ class Egeria(
87
88
  self, view_server, platform_url, user_id, user_pwd, token
88
89
  )
89
90
 
90
- EgeriaMy.__init__(self, view_server, platform_url, user_id, user_pwd, token)
91
+ MyProfile.__init__(self, view_server, platform_url, user_id, user_pwd, token)
92
+ FeedbackManager.__init__(
93
+ self, view_server, platform_url, user_id, user_pwd, token
94
+ )
91
95
 
92
96
  GlossaryManager.__init__(
93
97
  self, view_server, platform_url, user_id, user_pwd, token
@@ -104,7 +108,7 @@ class Egeria(
104
108
 
105
109
  EgeriaConfig.__init__(self, view_server, platform_url, user_id, user_pwd)
106
110
 
107
- ActionAuthor.__init__(self, view_server, platform_url, user_id, user_pwd, token)
111
+ # ActionAuthor.__init__(self, view_server, platform_url, user_id, user_pwd, token)
108
112
  AutomatedCuration.__init__(
109
113
  self, view_server, platform_url, user_id, user_pwd, token
110
114
  )
@@ -120,3 +124,4 @@ class Egeria(
120
124
  SolutionArchitect.__init__(
121
125
  self, view_server, platform_url, user_id, user_pwd, token
122
126
  )
127
+ print(Egeria.mro())
@@ -93,8 +93,8 @@ class GlossaryBrowser(Client):
93
93
 
94
94
  def make_md_attribute(self, attribute_name: str, attribute_value: str, output_type: str) -> str | None:
95
95
  output = ""
96
- attribute_value = attribute_value.strip() if attribute_value else None
97
- attribute_title = attribute_name.title() if attribute_name else None
96
+ attribute_value = attribute_value.strip() if attribute_value else ""
97
+ attribute_title = attribute_name.title() if attribute_name else ""
98
98
  if output_type in ["FORM", "MD"]:
99
99
  output = f"## {attribute_title}\n{attribute_value}\n\n"
100
100
  elif output_type == "REPORT":
@@ -149,7 +149,7 @@ class GlossaryBrowser(Client):
149
149
  description = element_properties.get("description", None)
150
150
  examples = element_properties.get("examples", None)
151
151
  usage = element_properties.get("usage", None)
152
- pub_version = element_properties.get("publishedVersionIdentifier", None)
152
+ pub_version = element_properties.get("publishVersionIdentifier", None)
153
153
  qualified_name = element_properties.get("qualifiedName", None)
154
154
  status = element['elementHeader'].get('status', None)
155
155
 
@@ -161,9 +161,14 @@ class GlossaryBrowser(Client):
161
161
  if type(category_list) is str and category_list == NO_CATEGORIES_FOUND:
162
162
  category_list_md = ['---']
163
163
  elif isinstance(category_list, list) and len(category_list) > 0:
164
+ first_cat = True
164
165
  for category in category_list:
165
166
  category_name = category["glossaryCategoryProperties"].get("qualifiedName", '---')
166
- category_list_md += f" {category_name}\n"
167
+ if first_cat:
168
+ category_list_md += f" {category_name}\n"
169
+ first_cat = False
170
+ else:
171
+ category_list_md += f", {category_name}\n"
167
172
 
168
173
  if output_format in ['FORM', 'MD']:
169
174
  elements_md += f"# {elements_action}\n\n"
@@ -180,7 +185,7 @@ class GlossaryBrowser(Client):
180
185
  elements_md += self.make_md_attribute( "description", description, output_format)
181
186
  elements_md += self.make_md_attribute( "examples", examples, output_format)
182
187
  elements_md += self.make_md_attribute("usage", usage, output_format)
183
- elements_md += self.make_md_attribute("published version", pub_version, output_format)
188
+ elements_md += self.make_md_attribute("version", pub_version, output_format)
184
189
  elements_md += self.make_md_attribute("qualified name", qualified_name, output_format)
185
190
  elements_md += self.make_md_attribute("GUID", guid, output_format)
186
191
  elements_md += MD_SEPERATOR
@@ -12,26 +12,28 @@ from typing import List, Optional
12
12
 
13
13
  import os
14
14
  import re
15
- from pyegeria import EgeriaTech, NO_CATEGORIES_FOUND
15
+
16
16
  from rich import box, print
17
17
  from rich.console import Console
18
18
  from rich.markdown import Markdown
19
- from rich.prompt import Prompt
20
- from rich.table import Table
21
- import click
22
- from pyegeria import EgeriaTech, body_slimmer, NO_GLOSSARIES_FOUND, NO_TERMS_FOUND, NO_ELEMENTS_FOUND, NO_PROJECTS_FOUND
23
- from pyegeria._exceptions import (InvalidParameterException, PropertyServerException, print_exception_response, )
19
+
20
+ from pyegeria import body_slimmer
21
+ from pyegeria._globals import NO_TERMS_FOUND, NO_GLOSSARIES_FOUND, NO_TERMS_FOUND, NO_ELEMENTS_FOUND, NO_PROJECTS_FOUND, NO_CATEGORIES_FOUND
22
+
23
+ from pyegeria.project_manager_omvs import ProjectManager
24
+ from pyegeria.glossary_manager_omvs import GlossaryManager
25
+
24
26
  from datetime import datetime
25
27
  EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", "200"))
26
28
  console = Console(width=EGERIA_WIDTH)
27
29
 
28
- commands = ["Provenance", "Create Glossary", "Update Glossary", "Create Term", "Update Term", "Create Personal Project",
30
+ command_list = ["Provenance", "Create Glossary", "Update Glossary", "Create Term", "Update Term", "Create Personal Project",
29
31
  "Update Personal Project", "Create Category", "Update Category"]
30
32
  ERROR = "ERROR-> "
31
33
  INFO = "INFO- "
32
34
  WARNING = "WARNING-> "
33
35
  pre_command = "\n---\n==> Processing command:"
34
- EGERIA_LOCAL_QUALIFIER = os.environ.get("EGERIA_LOCAL_QUALIFIER", "PDR")
36
+
35
37
  element_dictionary = {}
36
38
 
37
39
  def render_markdown(markdown_text: str) -> None:
@@ -42,7 +44,7 @@ def render_markdown(markdown_text: str) -> None:
42
44
  def is_valid_iso_date(date_text) -> bool:
43
45
  """Checks if the given string is a valid ISO date."""
44
46
  try:
45
- datetime.datetime.strptime(date_text, '%Y-%m-%d')
47
+ datetime.strptime(date_text, '%Y-%m-%d')
46
48
  return True
47
49
  except ValueError:
48
50
  return False
@@ -54,7 +56,7 @@ def get_current_datetime_string():
54
56
  return now
55
57
 
56
58
 
57
- def add_term_to_categories(egeria_client: EgeriaTech, term_guid: str, categories_exist: bool,
59
+ def add_term_to_categories(egeria_client: GlossaryManager, term_guid: str, categories_exist: bool,
58
60
  categories_list: List[str], element_dictionary: dict) -> None:
59
61
  if categories_exist is True and categories_list is not None:
60
62
  for category in categories_list:
@@ -97,7 +99,6 @@ def extract_attribute(text: str, labels: List[str]) -> Optional[str]:
97
99
  if not extracted_text.isspace() and extracted_text:
98
100
  return extracted_text # Return the cleaned text
99
101
 
100
- return None
101
102
 
102
103
 
103
104
  def update_a_command(txt: str, command: str, obj_type: str, q_name: str, u_guid: str) -> str:
@@ -126,17 +127,26 @@ def update_a_command(txt: str, command: str, obj_type: str, q_name: str, u_guid:
126
127
  txt = re.sub(pattern, replacement, txt)
127
128
  return txt
128
129
 
129
- def process_provenance_command(file_path: str, txt: str) -> str:
130
+ def process_provenance_command(file_path: str, txt: [str]) -> str:
130
131
  """This commands processes a provenence command by pre-pending the current file name and time to the provenance
131
132
  output"""
132
133
  output = (f"* Derived from processing file {file_path} on "
133
134
  f"{get_current_datetime_string()}\n")
134
- existing_prov = extract_attribute(txt,'Provenance')
135
+ pattern = rf"# {re.escape('Provenance')}\n(.*?)(?:#|---|$)"
136
+ match = re.search(pattern, txt, re.DOTALL)
137
+ if match:
138
+ # Extract matched text and replace consecutive \n with a single \n
139
+ extracted_text = re.sub(r'\n+', '\n', match.group(1).strip())
140
+ if not extracted_text.isspace() and extracted_text:
141
+ existing_prov = extracted_text # Return the cleaned text
142
+ else:
143
+ existing_prov = None
144
+ print(f"txt is: {txt}, existing_prov: {existing_prov}")
135
145
  existing_prov = existing_prov if existing_prov else " "
136
146
  return f"\n# Provenance:\n{existing_prov}\n{output}\n"
137
147
 
138
148
 
139
- def process_glossary_upsert_command(egeria_client: EgeriaTech, element_dictionary: dict, txt: str,
149
+ def process_glossary_upsert_command(egeria_client: GlossaryManager, element_dictionary: dict, txt: str,
140
150
  directive: str = "display") -> Optional[str]:
141
151
  """
142
152
  Processes a glossary create or update command by extracting key attributes such as
@@ -199,12 +209,7 @@ def process_glossary_upsert_command(egeria_client: EgeriaTech, element_dictionar
199
209
  if not glossary_exists:
200
210
  msg += f"* {ERROR}Glossary {glossary_name} does not exist\n"
201
211
  valid = False
202
- # if len(glossary_details) > 1 and glossary_exists:
203
- # msg += f"* {ERROR}More than one glossary with name {glossary_name} found\n"
204
- # valid = False
205
- # if len(glossary_details) == 1:
206
- # known_glossary_guid = glossary_details[0]['elementHeader'].get('guid', None)
207
- # known_q_name = glossary_details[0]['glossaryProperties'].get('qualifiedName',None)
212
+
208
213
  if q_name is None:
209
214
  msg += f"* {INFO}Qualified Name is missing => can use known qualified name of {known_q_name}\n"
210
215
  valid = True
@@ -215,6 +220,7 @@ def process_glossary_upsert_command(egeria_client: EgeriaTech, element_dictionar
215
220
  if valid:
216
221
  msg += glossary_display
217
222
  msg += f"* -->Glossary `{glossary_name}` exists and can be updated\n"
223
+ element_dictionary[known_q_name] = {'display_name': glossary_name, 'guid': known_glossary_guid}
218
224
  else:
219
225
  msg += f"* --> validation failed\n"
220
226
 
@@ -228,6 +234,8 @@ def process_glossary_upsert_command(egeria_client: EgeriaTech, element_dictionar
228
234
  elif valid:
229
235
  msg += f"-->It is valid to create Glossary \'{glossary_name}\' with:\n"
230
236
  msg += glossary_display
237
+ expected_q_name = egeria_client.__create_qualified_name__('Glossary', glossary_name)
238
+ element_dictionary[expected_q_name] = {'display_name': glossary_name}
231
239
 
232
240
  print(Markdown(msg))
233
241
  return valid, glossary_exists, known_glossary_guid, known_q_name
@@ -284,7 +292,7 @@ def process_glossary_upsert_command(egeria_client: EgeriaTech, element_dictionar
284
292
  return egeria_client.get_glossary_by_guid(glossary_guid, output_format = 'MD')
285
293
 
286
294
 
287
- def process_categories_upsert_command(egeria_client: EgeriaTech, element_dictionary: dict, txt: str,
295
+ def process_categories_upsert_command(egeria_client: GlossaryManager, element_dictionary: dict, txt: str,
288
296
  directive: str = "display") -> Optional[str]:
289
297
  """
290
298
  Processes a glossary category create or update command by extracting key attributes such as
@@ -383,6 +391,7 @@ def process_categories_upsert_command(egeria_client: EgeriaTech, element_diction
383
391
  if valid:
384
392
  msg += category_display
385
393
  msg += f"* -->category `{category_name}` exists and can be updated\n"
394
+ element_dictionary[known_q_name] = {'display_name': glossary_name, 'guid': known_category_guid}
386
395
  else:
387
396
  msg += f"* --> validation failed\n"
388
397
 
@@ -396,6 +405,8 @@ def process_categories_upsert_command(egeria_client: EgeriaTech, element_diction
396
405
  elif valid:
397
406
  msg += f"-->It is valid to create category `{category_name}` with:\n"
398
407
  msg += category_display
408
+ expected_q_name = egeria_client.__create_qualified_name__('Category', category_name)
409
+ element_dictionary[expected_q_name] = {'display_name': category_name}
399
410
 
400
411
  print(Markdown(msg))
401
412
  return valid, category_exists, known_category_guid, known_q_name, glossary_guid
@@ -452,7 +463,7 @@ def process_categories_upsert_command(egeria_client: EgeriaTech, element_diction
452
463
  return egeria_client.get_categories_by_guid(category_guid, output_format='MD')
453
464
 
454
465
 
455
- def process_term_upsert_command(egeria_client: EgeriaTech, element_dictionary: dict, txt: str,
466
+ def process_term_upsert_command(egeria_client: GlossaryManager, element_dictionary: dict, txt: str,
456
467
  directive: str = "display") -> Optional[str]:
457
468
  """
458
469
  Processes a term create or update command by extracting key attributes such as
@@ -475,7 +486,7 @@ def process_term_upsert_command(egeria_client: EgeriaTech, element_dictionary: d
475
486
  examples = extract_attribute(txt, ['Examples'])
476
487
  usage = extract_attribute(txt, ['Usage'])
477
488
  status = extract_attribute(txt, ['Status'])
478
- version = extract_attribute(txt, ['Version', "Version Identifier"])
489
+ version = extract_attribute(txt, ['Version', "Version Identifier", "Published Version"])
479
490
  categories = extract_attribute(txt, ['Categories'])
480
491
  q_name = extract_attribute(txt, ['Qualified Name'])
481
492
  # q_name = q_name if q_name else " "
@@ -598,6 +609,7 @@ def process_term_upsert_command(egeria_client: EgeriaTech, element_dictionary: d
598
609
  else:
599
610
  msg += f"\n--> * Term {term_name} exists and can be updated\n"
600
611
  msg += term_display
612
+ element_dictionary[known_q_name] = {'display_name': term_name, 'guid': known_term_guid}
601
613
 
602
614
  print(Markdown(msg))
603
615
  return valid, term_exists, known_term_guid, known_q_name
@@ -609,6 +621,8 @@ def process_term_upsert_command(egeria_client: EgeriaTech, element_dictionary: d
609
621
  msg += f"\n-->Validation checks failed in creating Term \'{term_name}\' with: {term_display}\n"
610
622
  else:
611
623
  msg += f"\n-->It is valid to create Term \'{term_name}\' with: {term_display}\n"
624
+ expected_q_name = egeria_client.__create_qualified_name__('Term', term_name)
625
+ element_dictionary[expected_q_name] = {'display_name': term_name}
612
626
 
613
627
  print(Markdown(msg))
614
628
  return valid, term_exists, known_term_guid, known_q_name
@@ -667,7 +681,7 @@ def process_term_upsert_command(egeria_client: EgeriaTech, element_dictionary: d
667
681
  },
668
682
  "updateDescription": update_description
669
683
  }
670
- egeria_client.update_term(known_guid, body)
684
+ egeria_client.update_term(known_guid, body_slimmer(body))
671
685
  # if cats_exist is True and categories_list is not None:
672
686
  # for category in categories_list:
673
687
  # cat_guid = element_dictionary.get(f"category.{category}", None)
@@ -686,7 +700,7 @@ def process_term_upsert_command(egeria_client: EgeriaTech, element_dictionary: d
686
700
  elif object_action == "Create":
687
701
  guid = None
688
702
 
689
- q_name = egeria_client.__create_qualified_name__("Term",term_name, EGERIA_LOCAL_QUALIFIER)
703
+ q_name = egeria_client.__create_qualified_name__("Term",term_name)
690
704
  if exists:
691
705
  print(f"\n{WARNING}Term {term_name} exists and result document updated")
692
706
  return update_a_command(txt, command, object_type, q_name, known_guid)
@@ -706,9 +720,15 @@ def process_term_upsert_command(egeria_client: EgeriaTech, element_dictionary: d
706
720
  return None
707
721
  term_body = {
708
722
  "class": "ReferenceableRequestBody", "elementProperties": {
709
- "class": "GlossaryTermProperties", "qualifiedName": q_name, "displayName": term_name,
710
- "summary": summary, "description": description, "abbreviation": abbreviation,
711
- "examples": examples, "usage": usage, "publishVersionIdentifier": version
723
+ "class": "GlossaryTermProperties",
724
+ "qualifiedName": q_name,
725
+ "displayName": term_name,
726
+ "summary": summary,
727
+ "description": description,
728
+ "abbreviation": abbreviation,
729
+ "examples": examples,
730
+ "usage": usage,
731
+ "publishVersionIdentifier": version
712
732
  # "additionalProperties":
713
733
  # {
714
734
  # "propertyName1": "xxxx",
@@ -733,7 +753,7 @@ def process_term_upsert_command(egeria_client: EgeriaTech, element_dictionary: d
733
753
  console.print_exception(show_locals=True)
734
754
  return None
735
755
 
736
- def process_per_proj_upsert_command(egeria_client: EgeriaTech, element_dictionary: dict, txt: str,
756
+ def process_per_proj_upsert_command(egeria_client: ProjectManager, element_dictionary: dict, txt: str,
737
757
  directive: str = "display") -> str | None:
738
758
  """
739
759
  Processes a personal project create or update command by extracting key attributes such as
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pyegeria
3
- Version: 5.3.6.6
3
+ Version: 5.3.7
4
4
  Summary: A python client for Egeria
5
5
  License: Apache 2.0
6
6
  Keywords: egeria,metadata,governance
@@ -1,5 +1,5 @@
1
1
  pyegeria/README.md,sha256=PwX5OC7-YSZUCIsoyHh1O-WBM2hE84sm3Bd4O353NOk,1464
2
- pyegeria/__init__.py,sha256=koaCNp-uWubVVhrdGCcd4auWV7qeVKZGAVG1zY0rPgs,30266
2
+ pyegeria/__init__.py,sha256=4ANzq4fFT3vpvPX0Khav7S0mkPZXFRpSJifE0ujSK3o,30272
3
3
  pyegeria/_client.py,sha256=nhUPmeQFHqbobM6_3EGmUy-STYURxb15BEXf6erY2oI,31733
4
4
  pyegeria/_deprecated_gov_engine.py,sha256=dWNcwVsE5__dF2u4QiIyQrssozzzOjBbLld8MdpmVCQ,17264
5
5
  pyegeria/_exceptions.py,sha256=1SrnV194V4_YJNnNAU0myTHQ3dhLn4GF2B2gZcj1u90,18153
@@ -16,8 +16,8 @@ pyegeria/commands/cat/README.md,sha256=-aaAnIT2fcfU63vajgB-RzQk4l4yFdhkyVfSaTPiq
16
16
  pyegeria/commands/cat/__init__.py,sha256=5OCy4m_yZsnSxdy_gvkCyP_OkjvuWKimqUGHYCJc_qA,450
17
17
  pyegeria/commands/cat/dr_egeria_inbox/glossary_creation_experiment.ipynb,sha256=dbzNu90fCKNohOWVSRBOB1GLyd95x8Qw51I5AkaPtso,11552
18
18
  pyegeria/commands/cat/dr_egeria_inbox/glossary_exp.md,sha256=KsUeTzDe5QkrTmIfIAXR74qZ29oSfRW-NAEn0RYIRqM,2534
19
- pyegeria/commands/cat/dr_egeria_jupyter.py,sha256=4LcmD5CrtazLgUK_LCjgOnwtxZqTBB6lrMR8tsugl94,6036
20
- pyegeria/commands/cat/dr_egeria_md.py,sha256=HlCgBRrECsi5UL1L_f_d5RMcuHMzK0W26nLWK5nqitc,9052
19
+ pyegeria/commands/cat/dr_egeria_jupyter.py,sha256=U-3m9BMoCXj2fvuawr3PTc2HQWAXThqQ3sIXjyCWv6s,5912
20
+ pyegeria/commands/cat/dr_egeria_md.py,sha256=CcqRdO5lIPmbMuHu59DDD5731sPu1Q_A08cQ0L7E_f4,9523
21
21
  pyegeria/commands/cat/exp_list_glossaries.py,sha256=dC6Bnfm3YSMTKPP146qeslIFRiZnGu5b7iDYE07p4iU,5817
22
22
  pyegeria/commands/cat/get_asset_graph.py,sha256=xnXJfpDTVH1TJ2TwE3dtjaXU36Di6-N6JAyhothzz2o,12461
23
23
  pyegeria/commands/cat/get_collection.py,sha256=kXPcP8u-SMWfrVyyBhNoxG8mcgB7EV_5i9N9w_IBU7o,5379
@@ -37,12 +37,12 @@ pyegeria/commands/cat/list_glossaries.py,sha256=jlhe840GxadFVM2qIcVm7-YwZ-8EBN-a
37
37
  pyegeria/commands/cat/list_projects.py,sha256=NzWTuepTGUEyxK-eWvuUxtBgCtNWubVwmz2eqm2UN1c,7997
38
38
  pyegeria/commands/cat/list_tech_type_elements.py,sha256=-9omj5en9dSP1xMSljYVHyfXsuhuE1bO2IFj_bZPhAs,6873
39
39
  pyegeria/commands/cat/list_tech_types.py,sha256=uqZcXHCzAznhEG6WWeM5j-spwUh8ycygFqpVDeXOG-0,4653
40
- pyegeria/commands/cat/list_terms.py,sha256=D0tCD2f8j-UgnV4Bgisj9a11CCEOneNsRT7_3cyDnH4,12098
40
+ pyegeria/commands/cat/list_terms.py,sha256=GwhbQeesYMCXOx3o4Hsom21wtC2nzmbpjhpwRLZ7iVE,12177
41
41
  pyegeria/commands/cat/list_todos.py,sha256=NitCw0uyVVjmN1hxb1W-I4FbOsa8wQxW2ICyOElHyc8,6556
42
42
  pyegeria/commands/cat/list_user_ids.py,sha256=X5Q-YNEp38saPYDuy9VwdQC5Qpa4HyC3WvAdbyp_P6M,5108
43
43
  pyegeria/commands/cli/__init__.py,sha256=hpTVSMP2gnPRhcAZPdeUEsQ-eaDySlXlk239dNWYmng,292
44
44
  pyegeria/commands/cli/egeria.py,sha256=_Z__gugx11bpwyWU6Uiacw_0r0q5o4mbAZ-ipDozFwc,52884
45
- pyegeria/commands/cli/egeria_cat.py,sha256=uYI_KD_9iAOgx5zsSWPpvK8MK3ymJcMmsTRONfbQDkM,18848
45
+ pyegeria/commands/cli/egeria_cat.py,sha256=C57P0qltiwNZKF9WrsetqbVB5ezKQgZwj3mo_gZ3AzA,18345
46
46
  pyegeria/commands/cli/egeria_login_tui.py,sha256=W5ouG3nlN7z2Waa-wzYFS7yyoGfOrK-lNB0FMt2JdOk,9492
47
47
  pyegeria/commands/cli/egeria_my.py,sha256=0KTH7OIeKyp16ZeN7zK5uhadbPfAQsq38GMzJNWYG8g,6386
48
48
  pyegeria/commands/cli/egeria_ops.py,sha256=8W4t2jFGn22OOOtyUAapQH8yyOl1wo09CVNTojRQKvo,12817
@@ -219,16 +219,16 @@ pyegeria/commands/tech/x_list_related_elements.py,sha256=ynaw792VnbMZ9IXBi5mmG7x
219
219
  pyegeria/core_omag_server_config.py,sha256=pNQpocICkZx8sRsTw5DPUe-TFyxlIo1U88qqgci_f7I,97764
220
220
  pyegeria/create_tech_guid_lists.py,sha256=hf5q8Xrdsz-bqeIW3yTORZ1XB6_BrKzLDWWwC_bNG2g,4811
221
221
  pyegeria/egeria_cat_client.py,sha256=d8dQNPLzL4efi99OJfH1T-Rt1N0k9Rf9LX8LpuhiFls,2179
222
- pyegeria/egeria_client.py,sha256=HAM7pwH2ooegnpeaBr6Q0Km3zrzH1Mpgm0wgC82Y-DQ,4278
222
+ pyegeria/egeria_client.py,sha256=UjvwDkTO3iYaPEGuPZJTiK_k_i4ZuVeB8QMTVNUHwxg,4490
223
223
  pyegeria/egeria_config_client.py,sha256=3TZUeXSl1f7SQ2WWYTbgOu1Cu1YqApilErAgjZLzbWY,1391
224
224
  pyegeria/egeria_my_client.py,sha256=eOKLk2zdI6FHZnhAimfR_0yNdBjpUgD41dJZcJODcqE,1607
225
225
  pyegeria/egeria_tech_client.py,sha256=uycgYfCpb4jzFfaQ7I5JxbZ5PKsWdaWxLOJjbw6C2Zk,3817
226
226
  pyegeria/feedback_manager_omvs.py,sha256=0xBs0p54vmdfVYYgQ8pOanLC4fxfgTk1Z61Y6D1U7_I,152978
227
227
  pyegeria/full_omag_server_config.py,sha256=CQqLCy_3DZFvJZEOcGf50HWdFaWpiAIs6z-kKyjvpDA,47464
228
- pyegeria/glossary_browser_omvs.py,sha256=kJPfVd46w7HdV2KKoq7jRxVYdvvqEl0RAIMRsfXrtME,109389
228
+ pyegeria/glossary_browser_omvs.py,sha256=NHcLStpzejiT3BinIpm4FmYKPiVcBKSvp2ihZfNwTik,109579
229
229
  pyegeria/glossary_manager_omvs.py,sha256=QSOVqbwEASueCQzpvYNEOaUIAhOvwqLWWhfzwT8hrrs,70275
230
230
  pyegeria/m_test.py,sha256=M5-M2ZczsAJLXWfSeqTTADHdx6Ku-y4PbQ4M21JthAE,7778
231
- pyegeria/md_processing_utils.py,sha256=8ucemhlOniobCn8ZSWN3D9-JaeZkgHJAwy2K2xWx3Bo,41759
231
+ pyegeria/md_processing_utils.py,sha256=oELxTiJBB3ilViMjNtjxAicG2awEPmhjipd8rvXKPr4,42704
232
232
  pyegeria/mermaid_utilities.py,sha256=sQqdFUWdNpHu9d3Tk9UVe80M-5bOzses0XcFYX5FF-E,54254
233
233
  pyegeria/metadata_explorer_omvs.py,sha256=xHnZTQKbd6XwOhYia-RiIisrvZcqHi0SL1l6OCf04Gk,86911
234
234
  pyegeria/my_profile_omvs.py,sha256=d0oJYCJG7pS9BINPuGciVa00ac0jwPHNANXDCLginEc,34720
@@ -242,8 +242,8 @@ pyegeria/template_manager_omvs.py,sha256=PfJ9dOfmBvf59DgRdZ9Dl1Kl_UYqjF-JncXVnbC
242
242
  pyegeria/utils.py,sha256=GCt1C0bp0Xng1ahzbZhzV9qQwH7Dj93IaCt2dvWb-sg,5417
243
243
  pyegeria/valid_metadata_omvs.py,sha256=Xq9DqBQvBFFJzaFIRKcVZ2k4gJvSh9yeXs_j-O3vn1w,65050
244
244
  pyegeria/x_action_author_omvs.py,sha256=RcqSzahUKCtvb_3u_wyintAlc9WFkC_2v0E12TZs8lQ,6433
245
- pyegeria-5.3.6.6.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
246
- pyegeria-5.3.6.6.dist-info/METADATA,sha256=ialvs-DxLCrQU-TTXD9UZDS6mv917IEsjChoV6urAYw,2743
247
- pyegeria-5.3.6.6.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
248
- pyegeria-5.3.6.6.dist-info/entry_points.txt,sha256=-25SObCenvad7XXzMewoEnHVqXNwHOwEVfXHE12vBmI,6774
249
- pyegeria-5.3.6.6.dist-info/RECORD,,
245
+ pyegeria-5.3.7.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
246
+ pyegeria-5.3.7.dist-info/METADATA,sha256=7rhI0QxgXZv4dtwa4poxMpzrup7d9Doljw1-YXqgQ58,2741
247
+ pyegeria-5.3.7.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
248
+ pyegeria-5.3.7.dist-info/entry_points.txt,sha256=eAvQ_vkejlF3JzMzEc5VD93ymLA_hSFV0HM8fntG-d8,6791
249
+ pyegeria-5.3.7.dist-info/RECORD,,
@@ -10,7 +10,7 @@ delete_glossary=pyegeria.commands.cat.glossary_actions:delete_glossary
10
10
  delete_term=pyegeria.commands.cat.glossary_actions:delete_term
11
11
  delete_todo=pyegeria.commands.my.todo_actions:delete_todo
12
12
  dr_egeria_jupyter=pyegeria.commands.cat.dr_egeria_jupyter:process_jupyter_notebook
13
- dr_egeria_md=pyegeria.commands.cat.dr_egeria_md:main
13
+ dr_egeria_md=pyegeria.commands.cat.dr_egeria_md:process_markdown_file
14
14
  egeria_login=pyegeria.commands.cli.egeria_login_tui:login
15
15
  export_terms_to_csv_file=pyegeria.commands.cat.glossary_actions:export_terms_csv
16
16
  get_asset_graph=pyegeria.commands.cat.get_asset_graph:main