pyegeria 5.3.6.4__py3-none-any.whl → 5.3.6.6__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 +2 -1
- pyegeria/commands/cat/Dr-Egeria_md-orig.py +167 -0
- pyegeria/commands/cat/dr_egeria_md.py +94 -68
- pyegeria/commands/cat/get_collection.py +2 -2
- pyegeria/commands/cli/egeria.py +15 -0
- pyegeria/commands/cli/egeria_cat.py +27 -8
- pyegeria/egeria_client.py +4 -1
- pyegeria/glossary_browser_omvs.py +1 -1
- pyegeria/md_processing_utils.py +65 -35
- {pyegeria-5.3.6.4.dist-info → pyegeria-5.3.6.6.dist-info}/METADATA +1 -1
- {pyegeria-5.3.6.4.dist-info → pyegeria-5.3.6.6.dist-info}/RECORD +14 -13
- {pyegeria-5.3.6.4.dist-info → pyegeria-5.3.6.6.dist-info}/entry_points.txt +1 -1
- {pyegeria-5.3.6.4.dist-info → pyegeria-5.3.6.6.dist-info}/LICENSE +0 -0
- {pyegeria-5.3.6.4.dist-info → pyegeria-5.3.6.6.dist-info}/WHEEL +0 -0
pyegeria/__init__.py
CHANGED
@@ -92,7 +92,8 @@ 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, commands,
|
96
|
+
render_markdown, process_provenance_command)
|
96
97
|
|
97
98
|
#
|
98
99
|
# The following assignments were generated by the `create_tech_guid_lists.py` utility that uses the pyegeria functions
|
@@ -0,0 +1,167 @@
|
|
1
|
+
"""
|
2
|
+
This is an ongoing experiment in parsing and playing with Freddie docs
|
3
|
+
"""
|
4
|
+
import json
|
5
|
+
import os
|
6
|
+
from rich import print
|
7
|
+
from rich.console import Console
|
8
|
+
from rich.markdown import Markdown
|
9
|
+
|
10
|
+
from pyegeria.md_processing_utils import (extract_command, process_glossary_upsert_command, process_term_upsert_command,
|
11
|
+
get_current_datetime_string, process_per_proj_upsert_command, commands,
|
12
|
+
process_provenance_command)
|
13
|
+
|
14
|
+
import click
|
15
|
+
from pyegeria import (extract_command, process_glossary_upsert_command, process_term_upsert_command,
|
16
|
+
process_categories_upsert_command,
|
17
|
+
get_current_datetime_string, process_per_proj_upsert_command, commands,EgeriaTech
|
18
|
+
)
|
19
|
+
from datetime import datetime
|
20
|
+
|
21
|
+
EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
|
22
|
+
EGERIA_KAFKA_ENDPOINT = os.environ.get("KAFKA_ENDPOINT", "localhost:9092")
|
23
|
+
EGERIA_PLATFORM_URL = os.environ.get("EGERIA_PLATFORM_URL", "https://localhost:9443")
|
24
|
+
EGERIA_VIEW_SERVER = os.environ.get("EGERIA_VIEW_SERVER", "view-server")
|
25
|
+
EGERIA_VIEW_SERVER_URL = os.environ.get(
|
26
|
+
"EGERIA_VIEW_SERVER_URL", "https://localhost:9443"
|
27
|
+
)
|
28
|
+
EGERIA_INTEGRATION_DAEMON = os.environ.get("EGERIA_INTEGRATION_DAEMON", "integration-daemon")
|
29
|
+
EGERIA_INTEGRATION_DAEMON_URL = os.environ.get(
|
30
|
+
"EGERIA_INTEGRATION_DAEMON_URL", "https://localhost:9443"
|
31
|
+
)
|
32
|
+
EGERIA_ADMIN_USER = os.environ.get("ADMIN_USER", "garygeeke")
|
33
|
+
EGERIA_ADMIN_PASSWORD = os.environ.get("ADMIN_PASSWORD", "secret")
|
34
|
+
EGERIA_USER = os.environ.get("EGERIA_USER", "erinoverview")
|
35
|
+
EGERIA_USER_PASSWORD = os.environ.get("EGERIA_USER_PASSWORD", "secret")
|
36
|
+
EGERIA_WIDTH = os.environ.get("EGERIA_WIDTH", 220)
|
37
|
+
EGERIA_JUPYTER = os.environ.get("EGERIA_JUPYTER", False)
|
38
|
+
EGERIA_HOME_GLOSSARY_GUID = os.environ.get("EGERIA_HOME_GLOSSARY_GUID", None)
|
39
|
+
EGERIA_GLOSSARY_PATH = os.environ.get("EGERIA_GLOSSARY_PATH", None)
|
40
|
+
EGERIA_ROOT_PATH = os.environ.get("EGERIA_ROOT_PATH", "/Users/dwolfson/localGit/egeria-v5-3/egeria-python")
|
41
|
+
EGERIA_INBOX_PATH = os.environ.get("EGERIA_INBOX_PATH", "pyegeria/commands/cat/dr_egeria_inbox")
|
42
|
+
EGERIA_OUTBOX_PATH = os.environ.get("EGERIA_OUTBOX_PATH", "pyegeria/commands/cat/dr_egeria_outbox")
|
43
|
+
|
44
|
+
console = Console(width=int(EGERIA_WIDTH))
|
45
|
+
|
46
|
+
|
47
|
+
|
48
|
+
@click.command("process-markdown-file", help="Process a markdown file and return the output as a string.")
|
49
|
+
@click.option("--file-path", help="File path to markdown file",
|
50
|
+
default="glossary_exp.md")
|
51
|
+
@click.option("--directive", default="display-only", help="How to process the file")
|
52
|
+
@click.option("--server", default=EGERIA_VIEW_SERVER, help="Egeria view server to use.")
|
53
|
+
@click.option(
|
54
|
+
"--url", default=EGERIA_VIEW_SERVER_URL, help="URL of Egeria platform to connect to"
|
55
|
+
)
|
56
|
+
@click.option("--userid", default=EGERIA_USER, help="Egeria user")
|
57
|
+
@click.option("--user_pass", default=EGERIA_USER_PASSWORD, help="Egeria user password")
|
58
|
+
def process_markdown_file(
|
59
|
+
file_path: str,
|
60
|
+
directive: str,
|
61
|
+
server: str,
|
62
|
+
url: str,
|
63
|
+
userid: str,
|
64
|
+
user_pass: str,
|
65
|
+
):
|
66
|
+
|
67
|
+
client = EgeriaTech(server, url, user_id=userid)
|
68
|
+
token = client.create_egeria_bearer_token(userid, user_pass)
|
69
|
+
|
70
|
+
updated = False
|
71
|
+
full_file_path = os.path.join(EGERIA_ROOT_PATH, EGERIA_INBOX_PATH, file_path)
|
72
|
+
print(f"Processing Markdown File: {full_file_path}")
|
73
|
+
try:
|
74
|
+
with open(full_file_path, 'r') as f:
|
75
|
+
lines = f.readlines()
|
76
|
+
except FileNotFoundError:
|
77
|
+
print(f"Error: File not found at path: {full_file_path}")
|
78
|
+
return {} # Return empty dict if file not found
|
79
|
+
|
80
|
+
final_output =""
|
81
|
+
prov_output = (f"\n* Results from processing file {file_path} on "
|
82
|
+
f"{datetime.now().strftime("%Y-%m-%d %H:%M")}\n")
|
83
|
+
h1_blocks = []
|
84
|
+
current_block = ""
|
85
|
+
in_h1_block = False
|
86
|
+
element_dictionary = {}
|
87
|
+
|
88
|
+
for line in lines:
|
89
|
+
line = line.strip() # Remove leading/trailing whitespace
|
90
|
+
|
91
|
+
if line.startswith("# ") and not in_h1_block: # Start of a new H1 block
|
92
|
+
if current_block:
|
93
|
+
h1_blocks.append(current_block)
|
94
|
+
current_block = line
|
95
|
+
in_h1_block = True
|
96
|
+
elif line.startswith("---") and in_h1_block: # End of the current H1 block
|
97
|
+
h1_blocks.append(current_block)
|
98
|
+
current_block = ""
|
99
|
+
in_h1_block = False
|
100
|
+
elif in_h1_block: # Add line to the current H1 block
|
101
|
+
current_block += "\n" + line
|
102
|
+
else:
|
103
|
+
# Add non-H1 blocks directly to the final output
|
104
|
+
final_output += line
|
105
|
+
|
106
|
+
if current_block: # Add the last H1 block
|
107
|
+
h1_blocks.append(current_block)
|
108
|
+
prov_found = False
|
109
|
+
# Process each identified H1 block
|
110
|
+
for block in h1_blocks:
|
111
|
+
potential_command = extract_command(block) # Extract potential command
|
112
|
+
|
113
|
+
if potential_command in commands:
|
114
|
+
# Process the block based on the command
|
115
|
+
if potential_command == "Provenance":
|
116
|
+
prov_found = True
|
117
|
+
result = process_provenance_command(file_path, block)
|
118
|
+
elif potential_command in ["Create Glossary", "Update Glossary"]:
|
119
|
+
result = process_glossary_upsert_command(client, element_dictionary, block, directive)
|
120
|
+
elif potential_command in ["Create Category", "Update Category"]:
|
121
|
+
result = process_categories_upsert_command(client, element_dictionary, block, directive)
|
122
|
+
elif potential_command in ["Create Term", "Update Term"]:
|
123
|
+
result = process_term_upsert_command(client, element_dictionary, block, directive)
|
124
|
+
elif potential_command in ["Create Personal Project", "Update Personal Project"]:
|
125
|
+
result = process_per_proj_upsert_command(client, element_dictionary, block, directive)
|
126
|
+
else:
|
127
|
+
# If command is not recognized, copy the block as-is
|
128
|
+
result = None
|
129
|
+
|
130
|
+
if result:
|
131
|
+
if directive == "process":
|
132
|
+
updated = True
|
133
|
+
final_output += f"\n---\n{result}\n"
|
134
|
+
print(json.dumps(element_dictionary, indent=4))
|
135
|
+
elif directive == "process":
|
136
|
+
# Handle case with errors (skip this block but notify the user)
|
137
|
+
print(f"\n==>\tErrors found while processing command: \'{potential_command}\'\n"
|
138
|
+
f"\tPlease correct and try again. \n")
|
139
|
+
final_output += f"\n---\n{block}\n"
|
140
|
+
else:
|
141
|
+
# If no command is detected, add the block to the final output as-is
|
142
|
+
final_output += f"\n---\n{block}\n"
|
143
|
+
|
144
|
+
|
145
|
+
# Write the final_output to a new file if updated
|
146
|
+
try:
|
147
|
+
if updated:
|
148
|
+
path, filename = os.path.split(file_path) # Get both parts
|
149
|
+
new_filename = f"processed-{get_current_datetime_string()}-{filename}" # Create the new filename
|
150
|
+
new_file_path = os.path.join(EGERIA_ROOT_PATH, EGERIA_OUTBOX_PATH, new_filename) # Construct the new path
|
151
|
+
os.makedirs(os.path.dirname(new_file_path), exist_ok=True)
|
152
|
+
|
153
|
+
with open(new_file_path, 'w') as f2:
|
154
|
+
f2.write(final_output)
|
155
|
+
if not prov_found:
|
156
|
+
prov_output += f"\n# Provenance:\n{prov_output}\n"
|
157
|
+
f2.write(prov_output)
|
158
|
+
click.echo(f"\n==> Notebook written to {new_file_path}")
|
159
|
+
else:
|
160
|
+
click.echo("\nNo updates detected. New File not created.")
|
161
|
+
|
162
|
+
except (Exception):
|
163
|
+
console.print_exception(show_locals=True)
|
164
|
+
|
165
|
+
|
166
|
+
if __name__ == "__main__":
|
167
|
+
process_markdown_file()
|
@@ -1,15 +1,17 @@
|
|
1
1
|
"""
|
2
2
|
This is an ongoing experiment in parsing and playing with Freddie docs
|
3
3
|
"""
|
4
|
+
import argparse
|
4
5
|
import json
|
5
6
|
import os
|
6
7
|
from rich import print
|
7
8
|
from rich.console import Console
|
8
9
|
from rich.markdown import Markdown
|
10
|
+
from rich.prompt import Prompt
|
9
11
|
|
10
|
-
from pyegeria
|
11
|
-
|
12
|
-
|
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)
|
13
15
|
|
14
16
|
import click
|
15
17
|
from pyegeria import (extract_command, process_glossary_upsert_command, process_term_upsert_command,
|
@@ -41,20 +43,20 @@ EGERIA_ROOT_PATH = os.environ.get("EGERIA_ROOT_PATH", "/Users/dwolfson/localGit/
|
|
41
43
|
EGERIA_INBOX_PATH = os.environ.get("EGERIA_INBOX_PATH", "pyegeria/commands/cat/dr_egeria_inbox")
|
42
44
|
EGERIA_OUTBOX_PATH = os.environ.get("EGERIA_OUTBOX_PATH", "pyegeria/commands/cat/dr_egeria_outbox")
|
43
45
|
|
44
|
-
console = Console(width=int(EGERIA_WIDTH))
|
45
46
|
|
46
47
|
|
47
48
|
|
48
|
-
|
49
|
-
@click.
|
50
|
-
|
51
|
-
|
52
|
-
@click.option("--
|
53
|
-
@click.option(
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
@click.option("--
|
49
|
+
|
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")
|
58
60
|
def process_markdown_file(
|
59
61
|
file_path: str,
|
60
62
|
directive: str,
|
@@ -62,8 +64,11 @@ def process_markdown_file(
|
|
62
64
|
url: str,
|
63
65
|
userid: str,
|
64
66
|
user_pass: str,
|
65
|
-
):
|
66
|
-
|
67
|
+
)-> None:
|
68
|
+
"""
|
69
|
+
Process a markdown file by parsing and executing Dr. Egeria commands. Write output to a new file.
|
70
|
+
"""
|
71
|
+
console = Console(width=int(EGERIA_WIDTH))
|
67
72
|
client = EgeriaTech(server, url, user_id=userid)
|
68
73
|
token = client.create_egeria_bearer_token(userid, user_pass)
|
69
74
|
|
@@ -78,6 +83,7 @@ def process_markdown_file(
|
|
78
83
|
return {} # Return empty dict if file not found
|
79
84
|
|
80
85
|
final_output =""
|
86
|
+
prov_found = False
|
81
87
|
prov_output = (f"\n* Results from processing file {file_path} on "
|
82
88
|
f"{datetime.now().strftime("%Y-%m-%d %H:%M")}\n")
|
83
89
|
h1_blocks = []
|
@@ -85,62 +91,56 @@ def process_markdown_file(
|
|
85
91
|
in_h1_block = False
|
86
92
|
element_dictionary = {}
|
87
93
|
|
94
|
+
# Read and process lines sequentially, preserving their order
|
88
95
|
for line in lines:
|
89
96
|
line = line.strip() # Remove leading/trailing whitespace
|
90
97
|
|
91
|
-
if line.startswith("# ")
|
92
|
-
|
93
|
-
h1_blocks.append(current_block)
|
94
|
-
current_block = line
|
98
|
+
if line.startswith("# "): # Start of a new H1 block
|
99
|
+
current_block = line # Initialize the H1 block
|
95
100
|
in_h1_block = True
|
96
|
-
elif line
|
97
|
-
|
98
|
-
current_block
|
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
|
+
|
137
|
+
current_block = "" # Clear the block
|
99
138
|
in_h1_block = False
|
100
139
|
elif in_h1_block: # Add line to the current H1 block
|
101
|
-
current_block += "\n"
|
140
|
+
current_block += f"\n{line}"
|
102
141
|
else:
|
103
|
-
#
|
104
|
-
final_output += line
|
105
|
-
|
106
|
-
if current_block: # Add the last H1 block
|
107
|
-
h1_blocks.append(current_block)
|
108
|
-
prov_found = False
|
109
|
-
# Process each identified H1 block
|
110
|
-
for block in h1_blocks:
|
111
|
-
potential_command = extract_command(block) # Extract potential command
|
112
|
-
|
113
|
-
if potential_command in commands:
|
114
|
-
# Process the block based on the command
|
115
|
-
if potential_command == "Provenance":
|
116
|
-
prov_found = True
|
117
|
-
result = process_provenance_command(file_path, block)
|
118
|
-
if potential_command in ["Create Glossary", "Update Glossary"]:
|
119
|
-
result = process_glossary_upsert_command(client, element_dictionary, block, directive)
|
120
|
-
elif potential_command in ["Create Category", "Update Category"]:
|
121
|
-
result = process_categories_upsert_command(client, element_dictionary, block, directive)
|
122
|
-
elif potential_command in ["Create Term", "Update Term"]:
|
123
|
-
result = process_term_upsert_command(client, element_dictionary, block, directive)
|
124
|
-
elif potential_command in ["Create Personal Project", "Update Personal Project"]:
|
125
|
-
result = process_per_proj_upsert_command(client, element_dictionary, block, directive)
|
126
|
-
else:
|
127
|
-
# If command is not recognized, copy the block as-is
|
128
|
-
result = None
|
129
|
-
|
130
|
-
if result:
|
131
|
-
if directive == "process":
|
132
|
-
updated = True
|
133
|
-
final_output += f"\n---\n{result}\n---\n\n"
|
134
|
-
print(json.dumps(element_dictionary, indent=4))
|
135
|
-
elif directive == "process":
|
136
|
-
# Handle case with errors (skip this block but notify the user)
|
137
|
-
print(f"\n==>\tErrors found while processing command: \'{potential_command}\'\n"
|
138
|
-
f"\tPlease correct and try again. \n")
|
139
|
-
final_output += f"\n---\n{block}\n---\n\n"
|
140
|
-
else:
|
141
|
-
# If no command is detected, add the block to the final output as-is
|
142
|
-
final_output += f"\n---\n{block}\n---\n\n"
|
143
|
-
|
142
|
+
# For non-H1 lines, add them directly to the output
|
143
|
+
final_output += f"\n{line}"
|
144
144
|
|
145
145
|
# Write the final_output to a new file if updated
|
146
146
|
try:
|
@@ -152,8 +152,10 @@ def process_markdown_file(
|
|
152
152
|
|
153
153
|
with open(new_file_path, 'w') as f2:
|
154
154
|
f2.write(final_output)
|
155
|
-
|
156
|
-
|
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
|
+
|
157
159
|
f2.write(prov_output)
|
158
160
|
click.echo(f"\n==> Notebook written to {new_file_path}")
|
159
161
|
else:
|
@@ -163,5 +165,29 @@ def process_markdown_file(
|
|
163
165
|
console.print_exception(show_locals=True)
|
164
166
|
|
165
167
|
|
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
|
+
|
166
192
|
if __name__ == "__main__":
|
167
|
-
|
193
|
+
main()
|
@@ -20,8 +20,8 @@ from pyegeria import (
|
|
20
20
|
CollectionManager,
|
21
21
|
InvalidParameterException,
|
22
22
|
PropertyServerException,
|
23
|
-
UserNotAuthorizedException,
|
24
|
-
)
|
23
|
+
UserNotAuthorizedException, NO_ELEMENTS_FOUND,
|
24
|
+
)
|
25
25
|
from pyegeria._exceptions import print_exception_response
|
26
26
|
|
27
27
|
disable_ssl_warnings = True
|
pyegeria/commands/cli/egeria.py
CHANGED
@@ -54,6 +54,8 @@ from pyegeria.commands.cat.list_terms import display_glossary_terms
|
|
54
54
|
from pyegeria.commands.cat.list_todos import display_to_dos as list_todos
|
55
55
|
from pyegeria.commands.cat.list_user_ids import list_user_ids
|
56
56
|
|
57
|
+
from pyegeria.commands.cat.dr_egeria_md import process_markdown_file
|
58
|
+
|
57
59
|
from pyegeria.commands.cli.egeria_login_tui import login
|
58
60
|
from pyegeria.commands.cli.egeria_ops import show_server
|
59
61
|
from pyegeria.commands.cli.ops_config import Config
|
@@ -374,6 +376,7 @@ my_tell.add_command(mark_todo_complete)
|
|
374
376
|
my_tell.add_command(reassign_todo)
|
375
377
|
|
376
378
|
|
379
|
+
|
377
380
|
#
|
378
381
|
# tech User: Show
|
379
382
|
#
|
@@ -1457,6 +1460,18 @@ def tell_cat(ctx):
|
|
1457
1460
|
"""Perform actions an Egeria Objects"""
|
1458
1461
|
pass
|
1459
1462
|
|
1463
|
+
#
|
1464
|
+
# dr.egeria
|
1465
|
+
#
|
1466
|
+
@tell_cat.group("dr_egeria")
|
1467
|
+
@click.pass_context
|
1468
|
+
def dr_egeria(ctx):
|
1469
|
+
"""Execute Dr.Egeria actions"""
|
1470
|
+
pass
|
1471
|
+
|
1472
|
+
dr_egeria.add_command(process_markdown_file)
|
1473
|
+
|
1474
|
+
|
1460
1475
|
|
1461
1476
|
@tell_cat.group("glossary")
|
1462
1477
|
@click.pass_context
|
@@ -14,6 +14,7 @@ import os
|
|
14
14
|
import click
|
15
15
|
from trogon import tui
|
16
16
|
|
17
|
+
from pyegeria.commands.cat.dr_egeria_md import process_markdown_file
|
17
18
|
from pyegeria.commands.cat.get_asset_graph import asset_viewer
|
18
19
|
from pyegeria.commands.cat.get_collection import collection_viewer
|
19
20
|
from pyegeria.commands.cat.get_project_dependencies import project_dependency_viewer
|
@@ -31,22 +32,18 @@ from pyegeria.commands.cat.glossary_actions import (
|
|
31
32
|
delete_category,
|
32
33
|
add_term_to_category,
|
33
34
|
remove_term_from_category)
|
34
|
-
|
35
|
-
from pyegeria.commands.cat.dr_egeria_jupyter import process_jupyter_notebook
|
36
|
-
from pyegeria.commands.cat.dr_egeria_md_file import process_markdown_file
|
37
|
-
|
38
|
-
from pyegeria.commands.cat.list_categories import display_categories
|
39
35
|
from pyegeria.commands.cat.list_assets import display_assets
|
36
|
+
from pyegeria.commands.cat.list_categories import display_categories
|
40
37
|
from pyegeria.commands.cat.list_cert_types import display_certifications
|
41
38
|
from pyegeria.commands.cat.list_collections import display_collections
|
42
39
|
from pyegeria.commands.cat.list_deployed_catalogs import list_deployed_catalogs
|
43
40
|
from pyegeria.commands.cat.list_deployed_database_schemas import (
|
44
41
|
list_deployed_database_schemas,
|
45
|
-
)
|
42
|
+
)
|
46
43
|
from pyegeria.commands.cat.list_deployed_databases import list_deployed_databases
|
44
|
+
from pyegeria.commands.cat.list_deployed_servers import display_servers_by_dep_imp
|
47
45
|
from pyegeria.commands.cat.list_glossaries import display_glossaries
|
48
46
|
from pyegeria.commands.cat.list_projects import display_project_list
|
49
|
-
from pyegeria.commands.cat.list_deployed_servers import display_servers_by_dep_imp
|
50
47
|
from pyegeria.commands.cat.list_tech_type_elements import list_tech_elements
|
51
48
|
from pyegeria.commands.cat.list_tech_types import display_tech_types
|
52
49
|
from pyegeria.commands.cat.list_terms import display_glossary_terms
|
@@ -58,7 +55,7 @@ from pyegeria.commands.my.todo_actions import (
|
|
58
55
|
delete_todo,
|
59
56
|
mark_todo_complete,
|
60
57
|
reassign_todo,
|
61
|
-
)
|
58
|
+
)
|
62
59
|
from pyegeria.commands.tech.list_asset_types import display_asset_types
|
63
60
|
|
64
61
|
|
@@ -668,6 +665,26 @@ def tell(ctx):
|
|
668
665
|
"""Perform actions an Egeria Objects"""
|
669
666
|
pass
|
670
667
|
|
668
|
+
#
|
669
|
+
# dr.egeria
|
670
|
+
#
|
671
|
+
@tell.group("dr_egeria")
|
672
|
+
@click.pass_context
|
673
|
+
def tell_dr_egeria(ctx):
|
674
|
+
"""Execute Dr.Egeria actions"""
|
675
|
+
pass
|
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
|
+
|
671
688
|
|
672
689
|
@tell.group("glossary")
|
673
690
|
@click.pass_context
|
@@ -676,6 +693,8 @@ def tell_glossary(ctx):
|
|
676
693
|
pass
|
677
694
|
|
678
695
|
|
696
|
+
|
697
|
+
|
679
698
|
tell_glossary.add_command(create_glossary)
|
680
699
|
tell_glossary.add_command(delete_glossary)
|
681
700
|
tell_glossary.add_command(create_term)
|
pyegeria/egeria_client.py
CHANGED
@@ -27,7 +27,8 @@ from pyegeria.solution_architect_omvs import SolutionArchitect
|
|
27
27
|
from pyegeria.server_operations import ServerOps
|
28
28
|
from pyegeria.registered_info import RegisteredInfo
|
29
29
|
from pyegeria.valid_metadata_omvs import ValidMetadataManager
|
30
|
-
|
30
|
+
from pyegeria.egeria_config_client import EgeriaConfig
|
31
|
+
from pyegeria.md_processing_utils import render_markdown
|
31
32
|
|
32
33
|
|
33
34
|
class Egeria(
|
@@ -49,6 +50,8 @@ class Egeria(
|
|
49
50
|
ValidMetadataManager,
|
50
51
|
MetadataExplorer,
|
51
52
|
SolutionArchitect,
|
53
|
+
EgeriaMy,
|
54
|
+
EgeriaConfig,
|
52
55
|
):
|
53
56
|
"""
|
54
57
|
Client to issue Runtime status requests.
|
@@ -183,7 +183,7 @@ class GlossaryBrowser(Client):
|
|
183
183
|
elements_md += self.make_md_attribute("published version", pub_version, output_format)
|
184
184
|
elements_md += self.make_md_attribute("qualified name", qualified_name, output_format)
|
185
185
|
elements_md += self.make_md_attribute("GUID", guid, output_format)
|
186
|
-
|
186
|
+
elements_md += MD_SEPERATOR
|
187
187
|
|
188
188
|
return elements_md
|
189
189
|
|
pyegeria/md_processing_utils.py
CHANGED
@@ -21,9 +21,9 @@ from rich.table import Table
|
|
21
21
|
import click
|
22
22
|
from pyegeria import EgeriaTech, body_slimmer, NO_GLOSSARIES_FOUND, NO_TERMS_FOUND, NO_ELEMENTS_FOUND, NO_PROJECTS_FOUND
|
23
23
|
from pyegeria._exceptions import (InvalidParameterException, PropertyServerException, print_exception_response, )
|
24
|
-
import datetime
|
25
|
-
|
26
|
-
console = Console(width=
|
24
|
+
from datetime import datetime
|
25
|
+
EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", "200"))
|
26
|
+
console = Console(width=EGERIA_WIDTH)
|
27
27
|
|
28
28
|
commands = ["Provenance", "Create Glossary", "Update Glossary", "Create Term", "Update Term", "Create Personal Project",
|
29
29
|
"Update Personal Project", "Create Category", "Update Category"]
|
@@ -34,6 +34,10 @@ pre_command = "\n---\n==> Processing command:"
|
|
34
34
|
EGERIA_LOCAL_QUALIFIER = os.environ.get("EGERIA_LOCAL_QUALIFIER", "PDR")
|
35
35
|
element_dictionary = {}
|
36
36
|
|
37
|
+
def render_markdown(markdown_text: str) -> None:
|
38
|
+
"""Renders the given markdown text in the console."""
|
39
|
+
console.print(Markdown(markdown_text))
|
40
|
+
|
37
41
|
|
38
42
|
def is_valid_iso_date(date_text) -> bool:
|
39
43
|
"""Checks if the given string is a valid ISO date."""
|
@@ -46,10 +50,12 @@ def is_valid_iso_date(date_text) -> bool:
|
|
46
50
|
|
47
51
|
def get_current_datetime_string():
|
48
52
|
"""Returns the current date and time as a human-readable string."""
|
49
|
-
now = datetime.
|
50
|
-
return now
|
53
|
+
now = datetime.now().strftime('%Y-%m-%d %H:%M')
|
54
|
+
return now
|
55
|
+
|
51
56
|
|
52
|
-
def add_term_to_categories(egeria_client: EgeriaTech, term_guid: str, categories_exist: bool,
|
57
|
+
def add_term_to_categories(egeria_client: EgeriaTech, term_guid: str, categories_exist: bool,
|
58
|
+
categories_list: List[str], element_dictionary: dict) -> None:
|
53
59
|
if categories_exist is True and categories_list is not None:
|
54
60
|
for category in categories_list:
|
55
61
|
cat_guid = None
|
@@ -58,19 +64,18 @@ def add_term_to_categories(egeria_client: EgeriaTech, term_guid: str, categories
|
|
58
64
|
cat= element_dictionary.get(cat_el, None)
|
59
65
|
cat_guid = cat.get('guid', None) if cat else None
|
60
66
|
if cat_guid is None:
|
61
|
-
cat_guid = egeria_client.__get_guid__(qualified_name=
|
67
|
+
cat_guid = egeria_client.__get_guid__(qualified_name=cat_el)
|
62
68
|
egeria_client.add_term_to_category(term_guid, cat_guid)
|
63
69
|
|
64
70
|
|
65
|
-
|
66
|
-
def extract_command(block: str) -> str | None:
|
71
|
+
def extract_command(block: str) -> Optional[str]:
|
67
72
|
match = re.search(r"#(.*?)(?:##|\n|$)", block) # Using a non capturing group
|
68
73
|
if match:
|
69
74
|
return match.group(1).strip()
|
70
75
|
return None
|
71
76
|
|
72
77
|
|
73
|
-
def extract_attribute(text: str, labels: List[str]) -> str
|
78
|
+
def extract_attribute(text: str, labels: List[str]) -> Optional[str]:
|
74
79
|
"""
|
75
80
|
Extracts the glossary name from a string.
|
76
81
|
|
@@ -84,12 +89,15 @@ def extract_attribute(text: str, labels: List[str]) -> str | None:
|
|
84
89
|
# Iterate over the list of labels
|
85
90
|
for label in labels:
|
86
91
|
# Construct pattern for the current label
|
87
|
-
pattern = rf"## {re.escape(label)}\n(.*?)(
|
92
|
+
pattern = rf"## {re.escape(label)}\n(.*?)(?:#|---|$)"
|
88
93
|
match = re.search(pattern, text, re.DOTALL)
|
89
|
-
if match
|
90
|
-
|
94
|
+
if match:
|
95
|
+
# Extract matched text and replace consecutive \n with a single \n
|
96
|
+
extracted_text = re.sub(r'\n+', '\n', match.group(1).strip())
|
97
|
+
if not extracted_text.isspace() and extracted_text:
|
98
|
+
return extracted_text # Return the cleaned text
|
91
99
|
|
92
|
-
return None
|
100
|
+
return None
|
93
101
|
|
94
102
|
|
95
103
|
def update_a_command(txt: str, command: str, obj_type: str, q_name: str, u_guid: str) -> str:
|
@@ -119,16 +127,17 @@ def update_a_command(txt: str, command: str, obj_type: str, q_name: str, u_guid:
|
|
119
127
|
return txt
|
120
128
|
|
121
129
|
def process_provenance_command(file_path: str, txt: str) -> str:
|
122
|
-
"""This commands processes a provenence command by pre-pending the current file name and time to the provenance
|
130
|
+
"""This commands processes a provenence command by pre-pending the current file name and time to the provenance
|
131
|
+
output"""
|
123
132
|
output = (f"* Derived from processing file {file_path} on "
|
124
|
-
|
133
|
+
f"{get_current_datetime_string()}\n")
|
125
134
|
existing_prov = extract_attribute(txt,'Provenance')
|
126
|
-
|
127
|
-
|
135
|
+
existing_prov = existing_prov if existing_prov else " "
|
136
|
+
return f"\n# Provenance:\n{existing_prov}\n{output}\n"
|
128
137
|
|
129
138
|
|
130
139
|
def process_glossary_upsert_command(egeria_client: EgeriaTech, element_dictionary: dict, txt: str,
|
131
|
-
directive: str = "display") -> str
|
140
|
+
directive: str = "display") -> Optional[str]:
|
132
141
|
"""
|
133
142
|
Processes a glossary create or update command by extracting key attributes such as
|
134
143
|
glossary name, language, description, and usage from the given text.
|
@@ -157,7 +166,7 @@ def process_glossary_upsert_command(egeria_client: EgeriaTech, element_dictionar
|
|
157
166
|
guid = extract_attribute(txt, ['GUID', 'guid', 'Guid'])
|
158
167
|
glossary_display += f"* Qualified Name: {q_name}\n\t* GUID: {guid}\n\n"
|
159
168
|
|
160
|
-
def validate_glossary(obj_action: str) -> tuple[bool, bool, str
|
169
|
+
def validate_glossary(obj_action: str) -> tuple[bool, bool, Optional[str], Optional[str]]:
|
161
170
|
valid = True
|
162
171
|
msg = ""
|
163
172
|
known_glossary_guid = None
|
@@ -183,7 +192,7 @@ def process_glossary_upsert_command(egeria_client: EgeriaTech, element_dictionar
|
|
183
192
|
valid = False
|
184
193
|
if len(glossary_details) == 1:
|
185
194
|
known_glossary_guid = glossary_details[0]['elementHeader'].get('guid', None)
|
186
|
-
known_q_name = glossary_details[0]['glossaryProperties'].get('qualifiedName', None)
|
195
|
+
known_q_name = glossary_details[0]['glossaryProperties'].get('qualifiedName', None).strip()
|
187
196
|
|
188
197
|
if obj_action == "Update":
|
189
198
|
|
@@ -276,7 +285,7 @@ def process_glossary_upsert_command(egeria_client: EgeriaTech, element_dictionar
|
|
276
285
|
|
277
286
|
|
278
287
|
def process_categories_upsert_command(egeria_client: EgeriaTech, element_dictionary: dict, txt: str,
|
279
|
-
directive: str = "display") -> str
|
288
|
+
directive: str = "display") -> Optional[str]:
|
280
289
|
"""
|
281
290
|
Processes a glossary category create or update command by extracting key attributes such as
|
282
291
|
category name, qualified, description, and anchor glossary from the given txt..
|
@@ -306,7 +315,7 @@ def process_categories_upsert_command(egeria_client: EgeriaTech, element_diction
|
|
306
315
|
category_display += (f"* GUID: {guid}\n\n"
|
307
316
|
f"* Update Description: \n {update_description}\n\t")
|
308
317
|
|
309
|
-
def validate_category(obj_action: str) -> tuple[bool, bool, str
|
318
|
+
def validate_category(obj_action: str) -> tuple[bool, bool, Optional[str], Optional[str], Optional[str]]:
|
310
319
|
valid = True
|
311
320
|
msg = ""
|
312
321
|
known_category_guid = None
|
@@ -442,8 +451,9 @@ def process_categories_upsert_command(egeria_client: EgeriaTech, element_diction
|
|
442
451
|
# return update_a_command(txt, command, object_type, qualified_name, category_guid)
|
443
452
|
return egeria_client.get_categories_by_guid(category_guid, output_format='MD')
|
444
453
|
|
454
|
+
|
445
455
|
def process_term_upsert_command(egeria_client: EgeriaTech, element_dictionary: dict, txt: str,
|
446
|
-
directive: str = "display") -> str
|
456
|
+
directive: str = "display") -> Optional[str]:
|
447
457
|
"""
|
448
458
|
Processes a term create or update command by extracting key attributes such as
|
449
459
|
term name, summary, description, abbreviation, examples, usage, version, and status from the given cell.
|
@@ -477,7 +487,7 @@ def process_term_upsert_command(egeria_client: EgeriaTech, element_dictionary: d
|
|
477
487
|
|
478
488
|
print(Markdown(f"{pre_command} `{command}` for term: `\'{term_name}\'` with directive: `{directive}`"))
|
479
489
|
|
480
|
-
def validate_term(obj_action: str) -> tuple[bool, bool, str
|
490
|
+
def validate_term(obj_action: str) -> tuple[bool, bool, Optional[str], Optional[str]]:
|
481
491
|
nonlocal version, status, categories, categories_list, cats_exist, q_name
|
482
492
|
valid = True
|
483
493
|
msg = ""
|
@@ -525,17 +535,30 @@ def process_term_upsert_command(egeria_client: EgeriaTech, element_dictionary: d
|
|
525
535
|
else:
|
526
536
|
categories_list = re.split(r'[,\n]+', categories)
|
527
537
|
categories = ""
|
538
|
+
new_cat_list = []
|
528
539
|
for category in categories_list:
|
529
540
|
category_el = category.strip()
|
530
541
|
if category_el not in element_dictionary:
|
531
|
-
cat = egeria_client.get_categories_by_name(
|
542
|
+
cat = egeria_client.get_categories_by_name(category_el) # assuming qualified name?
|
532
543
|
if isinstance(cat,str):
|
533
|
-
msg += (f"* {WARNING}Category `{
|
544
|
+
msg += (f"* {WARNING}Category `{category_el}` not found -> "
|
534
545
|
f"categories for this term won't be processed!\n")
|
535
546
|
cats_exist = False
|
547
|
+
break
|
548
|
+
cat_qname = cat[0]['glossaryCategoryProperties'].get('qualifiedName', None)
|
549
|
+
category = cat_qname # use the qualified name if found
|
550
|
+
if cat_qname not in element_dictionary:
|
551
|
+
cat_guid = cat[0]['elementHeader']['guid']
|
552
|
+
cat_display_name = cat[0]['glossaryCategoryProperties'].get('displayName', None)
|
553
|
+
element_dictionary[cat_qname] = {
|
554
|
+
'guid' : cat_guid,
|
555
|
+
'displayName': cat_display_name
|
556
|
+
}
|
536
557
|
categories = f"{category}, {categories}"
|
558
|
+
new_cat_list.append(category)
|
537
559
|
if cats_exist:
|
538
560
|
categories +='\n'
|
561
|
+
categories_list = new_cat_list
|
539
562
|
else:
|
540
563
|
categories = None
|
541
564
|
|
@@ -557,7 +580,6 @@ def process_term_upsert_command(egeria_client: EgeriaTech, element_dictionary: d
|
|
557
580
|
# version = "0.0.1"
|
558
581
|
|
559
582
|
|
560
|
-
|
561
583
|
if obj_action == "Update": # check to see if provided information exists and is consistent with existing info
|
562
584
|
if not term_exists:
|
563
585
|
msg += f"* {ERROR}Term {term_name} does not exist\n"
|
@@ -591,10 +613,10 @@ def process_term_upsert_command(egeria_client: EgeriaTech, element_dictionary: d
|
|
591
613
|
print(Markdown(msg))
|
592
614
|
return valid, term_exists, known_term_guid, known_q_name
|
593
615
|
|
594
|
-
|
616
|
+
# Continue processing the upsert
|
595
617
|
if object_action == "Update":
|
596
618
|
term_guid = extract_attribute(txt, 'GUID')
|
597
|
-
term_guid = term_guid if term_guid else
|
619
|
+
term_guid = term_guid if term_guid else None
|
598
620
|
|
599
621
|
|
600
622
|
update_description = extract_attribute(txt, 'Update Description')
|
@@ -631,11 +653,19 @@ def process_term_upsert_command(egeria_client: EgeriaTech, element_dictionary: d
|
|
631
653
|
print(f"\n-->Term {term_name} does not exist")
|
632
654
|
return None
|
633
655
|
body = {
|
634
|
-
"class": "ReferenceableRequestBody",
|
635
|
-
|
636
|
-
"
|
637
|
-
"
|
638
|
-
|
656
|
+
"class": "ReferenceableRequestBody",
|
657
|
+
"elementProperties": {
|
658
|
+
"class": "GlossaryTermProperties",
|
659
|
+
"qualifiedName": known_q_name,
|
660
|
+
"summary": summary,
|
661
|
+
"description": description,
|
662
|
+
"abbreviation": abbreviation,
|
663
|
+
"examples": examples,
|
664
|
+
"usage": usage,
|
665
|
+
"publishVersionIdentifier": version,
|
666
|
+
"status": status
|
667
|
+
},
|
668
|
+
"updateDescription": update_description
|
639
669
|
}
|
640
670
|
egeria_client.update_term(known_guid, body)
|
641
671
|
# if cats_exist is True and categories_list is not None:
|
@@ -1,5 +1,5 @@
|
|
1
1
|
pyegeria/README.md,sha256=PwX5OC7-YSZUCIsoyHh1O-WBM2hE84sm3Bd4O353NOk,1464
|
2
|
-
pyegeria/__init__.py,sha256=
|
2
|
+
pyegeria/__init__.py,sha256=koaCNp-uWubVVhrdGCcd4auWV7qeVKZGAVG1zY0rPgs,30266
|
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
|
@@ -11,15 +11,16 @@ pyegeria/classification_manager_omvs.py,sha256=n55-62Mby-_5pxPGaz3nkjM9NWlY4PzSl
|
|
11
11
|
pyegeria/collection_manager_omvs.py,sha256=xNuF3Ki6Rg-TehdbFGS8exSOUXpkQ3X63__OdXuCkc8,101746
|
12
12
|
pyegeria/commands/README.md,sha256=hJdOWhZ5eCfwTkY4Tx6De6Y1XVo7cbaddQEvjqppvls,2036
|
13
13
|
pyegeria/commands/__init__.py,sha256=R2o66ctVicTZ8B5VSPtc7EDRKNiNclzFbYX0o2Zg2dQ,1120
|
14
|
+
pyegeria/commands/cat/Dr-Egeria_md-orig.py,sha256=3SCibPi_wq-znp8qeWRJLDYEh4SkAmQaWO5biWeXK2E,7665
|
14
15
|
pyegeria/commands/cat/README.md,sha256=-aaAnIT2fcfU63vajgB-RzQk4l4yFdhkyVfSaTPiqRY,967
|
15
16
|
pyegeria/commands/cat/__init__.py,sha256=5OCy4m_yZsnSxdy_gvkCyP_OkjvuWKimqUGHYCJc_qA,450
|
16
17
|
pyegeria/commands/cat/dr_egeria_inbox/glossary_creation_experiment.ipynb,sha256=dbzNu90fCKNohOWVSRBOB1GLyd95x8Qw51I5AkaPtso,11552
|
17
18
|
pyegeria/commands/cat/dr_egeria_inbox/glossary_exp.md,sha256=KsUeTzDe5QkrTmIfIAXR74qZ29oSfRW-NAEn0RYIRqM,2534
|
18
19
|
pyegeria/commands/cat/dr_egeria_jupyter.py,sha256=4LcmD5CrtazLgUK_LCjgOnwtxZqTBB6lrMR8tsugl94,6036
|
19
|
-
pyegeria/commands/cat/dr_egeria_md.py,sha256=
|
20
|
+
pyegeria/commands/cat/dr_egeria_md.py,sha256=HlCgBRrECsi5UL1L_f_d5RMcuHMzK0W26nLWK5nqitc,9052
|
20
21
|
pyegeria/commands/cat/exp_list_glossaries.py,sha256=dC6Bnfm3YSMTKPP146qeslIFRiZnGu5b7iDYE07p4iU,5817
|
21
22
|
pyegeria/commands/cat/get_asset_graph.py,sha256=xnXJfpDTVH1TJ2TwE3dtjaXU36Di6-N6JAyhothzz2o,12461
|
22
|
-
pyegeria/commands/cat/get_collection.py,sha256=
|
23
|
+
pyegeria/commands/cat/get_collection.py,sha256=kXPcP8u-SMWfrVyyBhNoxG8mcgB7EV_5i9N9w_IBU7o,5379
|
23
24
|
pyegeria/commands/cat/get_project_dependencies.py,sha256=wDK_lAfR6p4VxYRV6MZE9XgU3OfIRcWKKYn0Xf64w6o,5986
|
24
25
|
pyegeria/commands/cat/get_project_structure.py,sha256=4Jo3F9f7auTnTt_xElsrQ4eA8k8xMge0C5xE-Rjkjcw,5974
|
25
26
|
pyegeria/commands/cat/get_tech_type_elements.py,sha256=IznytHXwDOFriGM6mypV9wuEeM-vT2s66cUzf-IROog,6147
|
@@ -40,8 +41,8 @@ pyegeria/commands/cat/list_terms.py,sha256=D0tCD2f8j-UgnV4Bgisj9a11CCEOneNsRT7_3
|
|
40
41
|
pyegeria/commands/cat/list_todos.py,sha256=NitCw0uyVVjmN1hxb1W-I4FbOsa8wQxW2ICyOElHyc8,6556
|
41
42
|
pyegeria/commands/cat/list_user_ids.py,sha256=X5Q-YNEp38saPYDuy9VwdQC5Qpa4HyC3WvAdbyp_P6M,5108
|
42
43
|
pyegeria/commands/cli/__init__.py,sha256=hpTVSMP2gnPRhcAZPdeUEsQ-eaDySlXlk239dNWYmng,292
|
43
|
-
pyegeria/commands/cli/egeria.py,sha256=
|
44
|
-
pyegeria/commands/cli/egeria_cat.py,sha256=
|
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
46
|
pyegeria/commands/cli/egeria_login_tui.py,sha256=W5ouG3nlN7z2Waa-wzYFS7yyoGfOrK-lNB0FMt2JdOk,9492
|
46
47
|
pyegeria/commands/cli/egeria_my.py,sha256=0KTH7OIeKyp16ZeN7zK5uhadbPfAQsq38GMzJNWYG8g,6386
|
47
48
|
pyegeria/commands/cli/egeria_ops.py,sha256=8W4t2jFGn22OOOtyUAapQH8yyOl1wo09CVNTojRQKvo,12817
|
@@ -218,16 +219,16 @@ pyegeria/commands/tech/x_list_related_elements.py,sha256=ynaw792VnbMZ9IXBi5mmG7x
|
|
218
219
|
pyegeria/core_omag_server_config.py,sha256=pNQpocICkZx8sRsTw5DPUe-TFyxlIo1U88qqgci_f7I,97764
|
219
220
|
pyegeria/create_tech_guid_lists.py,sha256=hf5q8Xrdsz-bqeIW3yTORZ1XB6_BrKzLDWWwC_bNG2g,4811
|
220
221
|
pyegeria/egeria_cat_client.py,sha256=d8dQNPLzL4efi99OJfH1T-Rt1N0k9Rf9LX8LpuhiFls,2179
|
221
|
-
pyegeria/egeria_client.py,sha256=
|
222
|
+
pyegeria/egeria_client.py,sha256=HAM7pwH2ooegnpeaBr6Q0Km3zrzH1Mpgm0wgC82Y-DQ,4278
|
222
223
|
pyegeria/egeria_config_client.py,sha256=3TZUeXSl1f7SQ2WWYTbgOu1Cu1YqApilErAgjZLzbWY,1391
|
223
224
|
pyegeria/egeria_my_client.py,sha256=eOKLk2zdI6FHZnhAimfR_0yNdBjpUgD41dJZcJODcqE,1607
|
224
225
|
pyegeria/egeria_tech_client.py,sha256=uycgYfCpb4jzFfaQ7I5JxbZ5PKsWdaWxLOJjbw6C2Zk,3817
|
225
226
|
pyegeria/feedback_manager_omvs.py,sha256=0xBs0p54vmdfVYYgQ8pOanLC4fxfgTk1Z61Y6D1U7_I,152978
|
226
227
|
pyegeria/full_omag_server_config.py,sha256=CQqLCy_3DZFvJZEOcGf50HWdFaWpiAIs6z-kKyjvpDA,47464
|
227
|
-
pyegeria/glossary_browser_omvs.py,sha256=
|
228
|
+
pyegeria/glossary_browser_omvs.py,sha256=kJPfVd46w7HdV2KKoq7jRxVYdvvqEl0RAIMRsfXrtME,109389
|
228
229
|
pyegeria/glossary_manager_omvs.py,sha256=QSOVqbwEASueCQzpvYNEOaUIAhOvwqLWWhfzwT8hrrs,70275
|
229
230
|
pyegeria/m_test.py,sha256=M5-M2ZczsAJLXWfSeqTTADHdx6Ku-y4PbQ4M21JthAE,7778
|
230
|
-
pyegeria/md_processing_utils.py,sha256=
|
231
|
+
pyegeria/md_processing_utils.py,sha256=8ucemhlOniobCn8ZSWN3D9-JaeZkgHJAwy2K2xWx3Bo,41759
|
231
232
|
pyegeria/mermaid_utilities.py,sha256=sQqdFUWdNpHu9d3Tk9UVe80M-5bOzses0XcFYX5FF-E,54254
|
232
233
|
pyegeria/metadata_explorer_omvs.py,sha256=xHnZTQKbd6XwOhYia-RiIisrvZcqHi0SL1l6OCf04Gk,86911
|
233
234
|
pyegeria/my_profile_omvs.py,sha256=d0oJYCJG7pS9BINPuGciVa00ac0jwPHNANXDCLginEc,34720
|
@@ -241,8 +242,8 @@ pyegeria/template_manager_omvs.py,sha256=PfJ9dOfmBvf59DgRdZ9Dl1Kl_UYqjF-JncXVnbC
|
|
241
242
|
pyegeria/utils.py,sha256=GCt1C0bp0Xng1ahzbZhzV9qQwH7Dj93IaCt2dvWb-sg,5417
|
242
243
|
pyegeria/valid_metadata_omvs.py,sha256=Xq9DqBQvBFFJzaFIRKcVZ2k4gJvSh9yeXs_j-O3vn1w,65050
|
243
244
|
pyegeria/x_action_author_omvs.py,sha256=RcqSzahUKCtvb_3u_wyintAlc9WFkC_2v0E12TZs8lQ,6433
|
244
|
-
pyegeria-5.3.6.
|
245
|
-
pyegeria-5.3.6.
|
246
|
-
pyegeria-5.3.6.
|
247
|
-
pyegeria-5.3.6.
|
248
|
-
pyegeria-5.3.6.
|
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,,
|
@@ -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:
|
13
|
+
dr_egeria_md=pyegeria.commands.cat.dr_egeria_md:main
|
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
|
File without changes
|
File without changes
|