pyegeria 5.4.7__py3-none-any.whl → 5.4.7.1__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.
- md_processing/data/commands-working.json +34850 -0
- md_processing/data/commands.json +52199 -0
- md_processing/data/generated_format_sets.json +4137 -0
- md_processing/md_commands/product_manager_commands.py +102 -102
- pyegeria/__init__.py +2 -1
- pyegeria/format_set_executor.py +135 -0
- pyegeria/mcp_adapter.py +22 -8
- pyegeria/mcp_server.py +41 -14
- {pyegeria-5.4.7.dist-info → pyegeria-5.4.7.1.dist-info}/METADATA +1 -2
- {pyegeria-5.4.7.dist-info → pyegeria-5.4.7.1.dist-info}/RECORD +14 -11
- {pyegeria-5.4.7.dist-info → pyegeria-5.4.7.1.dist-info}/WHEEL +0 -0
- {pyegeria-5.4.7.dist-info → pyegeria-5.4.7.1.dist-info}/entry_points.txt +0 -0
- {pyegeria-5.4.7.dist-info → pyegeria-5.4.7.1.dist-info}/licenses/LICENSE +0 -0
- {pyegeria-5.4.7.dist-info → pyegeria-5.4.7.1.dist-info}/top_level.txt +0 -0
pyegeria/format_set_executor.py
CHANGED
@@ -13,7 +13,9 @@ Notes
|
|
13
13
|
"""
|
14
14
|
from __future__ import annotations
|
15
15
|
|
16
|
+
import asyncio
|
16
17
|
import json
|
18
|
+
import sys
|
17
19
|
from typing import Any, Dict, Optional
|
18
20
|
|
19
21
|
from loguru import logger
|
@@ -52,6 +54,139 @@ def _resolve_client_and_method(func_decl: str):
|
|
52
54
|
return (client_class, method_name)
|
53
55
|
|
54
56
|
|
57
|
+
|
58
|
+
async def safe_call_tool(func, **call_params):
|
59
|
+
"""
|
60
|
+
Safely calls a function, awaiting it only if it is an asynchronous coroutine.
|
61
|
+
"""
|
62
|
+
try:
|
63
|
+
if asyncio.iscoroutinefunction(func):
|
64
|
+
# If it's an async function, call it with await
|
65
|
+
print("DEBUG: Function is async, using await.", file=sys.stderr)
|
66
|
+
result = await func(**call_params)
|
67
|
+
else:
|
68
|
+
# If it's a synchronous function, call it directly
|
69
|
+
print("DEBUG: Function is sync, calling directly.", file=sys.stderr)
|
70
|
+
result = func(**call_params)
|
71
|
+
|
72
|
+
return result
|
73
|
+
|
74
|
+
except Exception as e:
|
75
|
+
print(f"ERROR calling function: {e}", file=sys.stderr)
|
76
|
+
raise
|
77
|
+
|
78
|
+
|
79
|
+
|
80
|
+
async def _async_run_report(
|
81
|
+
report_name: str,
|
82
|
+
egeria_client: EgeriaTech,
|
83
|
+
output_format: str = "DICT",
|
84
|
+
params: Optional[Dict[str, Any]] = None,
|
85
|
+
) -> Dict[str, Any]:
|
86
|
+
"""
|
87
|
+
Execute the action for a given format set and return a normalized result structure.
|
88
|
+
|
89
|
+
Returns shapes:
|
90
|
+
- {"kind":"empty"}
|
91
|
+
- {"kind":"json","data": <list|dict|any>}
|
92
|
+
- {"kind":"text","mime": "text/markdown"|"text/html","content": str}
|
93
|
+
- {"kind":"unknown","raw": any}
|
94
|
+
"""
|
95
|
+
params = dict(params or {})
|
96
|
+
|
97
|
+
# Resolve the format set and action
|
98
|
+
fmt = select_output_format_set(report_name, output_format)
|
99
|
+
if not fmt:
|
100
|
+
raise ValueError(
|
101
|
+
f"Output format set '{report_name}' does not have a compatible '{output_format}' format."
|
102
|
+
)
|
103
|
+
if "action" not in fmt:
|
104
|
+
raise ValueError(f"Output format set '{report_name}' does not have an action property.")
|
105
|
+
|
106
|
+
action = fmt["action"]
|
107
|
+
func_decl = action.get("function")
|
108
|
+
if isinstance(func_decl, str) and "." in func_decl:
|
109
|
+
class_name, method_name = func_decl.split(".")
|
110
|
+
|
111
|
+
if not method_name.startswith("_async_"):
|
112
|
+
method_name = "_async_" + method_name
|
113
|
+
func_decl = class_name + "." + method_name
|
114
|
+
|
115
|
+
required_params = action.get("required_params", action.get("user_params", [])) or []
|
116
|
+
optional_params = action.get("optional_params", []) or []
|
117
|
+
spec_params = action.get("spec_params", {}) or {}
|
118
|
+
print(f"func_decl={func_decl}", file=sys.stderr)
|
119
|
+
# Build call params: required/optional provided by caller + fixed spec_params
|
120
|
+
call_params: Dict[str, Any] = {}
|
121
|
+
|
122
|
+
# Populate required and optional params when provided
|
123
|
+
for p in required_params:
|
124
|
+
if p in params and params[p] is not None:
|
125
|
+
call_params[p] = params[p]
|
126
|
+
elif p not in spec_params:
|
127
|
+
# Missing required param
|
128
|
+
logger.warning(f"Required parameter '{p}' not provided for format set '{report_name}'.")
|
129
|
+
for p in optional_params:
|
130
|
+
if p in params and params[p] is not None:
|
131
|
+
call_params[p] = params[p]
|
132
|
+
|
133
|
+
# Include fixed specifics
|
134
|
+
call_params.update(spec_params)
|
135
|
+
|
136
|
+
# Always include output_format and output_format_set for downstream rendering
|
137
|
+
call_params["output_format"] = output_format
|
138
|
+
call_params["output_format_set"] = report_name
|
139
|
+
|
140
|
+
client_class, method_name = _resolve_client_and_method(func_decl)
|
141
|
+
|
142
|
+
|
143
|
+
try:
|
144
|
+
egeria_client.create_egeria_bearer_token()
|
145
|
+
func = getattr(egeria_client, method_name) if method_name and hasattr(egeria_client, method_name) else None
|
146
|
+
# Add logging to validate func
|
147
|
+
msg = f"DEBUG: func={func}, method_name={method_name}, client_class={client_class}"
|
148
|
+
logger.debug(msg)
|
149
|
+
print(msg, file=sys.stderr)
|
150
|
+
|
151
|
+
if func is None or not callable(func):
|
152
|
+
raise TypeError(
|
153
|
+
f"Resolved function '{method_name}' not found in client class '{client_class.__name__}' is not callable."
|
154
|
+
)
|
155
|
+
|
156
|
+
result = await func(**call_params)
|
157
|
+
|
158
|
+
if not result or result == NO_ELEMENTS_FOUND:
|
159
|
+
return {"kind": "empty"}
|
160
|
+
|
161
|
+
# Prepare optional preamble for narrative outputs
|
162
|
+
heading = get_output_format_set_heading(report_name)
|
163
|
+
desc = get_output_format_set_description(report_name)
|
164
|
+
preamble = f"# {heading}\n{desc}\n\n" if heading and desc else ""
|
165
|
+
|
166
|
+
if output_format in {"DICT", "JSON", "ALL"}:
|
167
|
+
# Return raw data (list/dict/any) — do not stringify here
|
168
|
+
return {"kind": "json", "data": result}
|
169
|
+
elif output_format in {"REPORT", "MERMAID"}:
|
170
|
+
content = result
|
171
|
+
if isinstance(result, (list, dict)):
|
172
|
+
# Make a simple JSON code block if the source returned structured data unexpectedly
|
173
|
+
content = preamble + "```json\n" + json.dumps(result, indent=2) + "\n```"
|
174
|
+
else:
|
175
|
+
content = preamble + str(result)
|
176
|
+
return {"kind": "text", "mime": "text/markdown", "content": content}
|
177
|
+
elif output_format == "HTML":
|
178
|
+
content = str(result)
|
179
|
+
return {"kind": "text", "mime": "text/html", "content": content}
|
180
|
+
else:
|
181
|
+
# Unknown or table-like formats which aren't appropriate for MCP by default
|
182
|
+
return {"kind": "unknown", "raw": result}
|
183
|
+
|
184
|
+
except PyegeriaException as e:
|
185
|
+
# Re-raise with a simpler message for upstream mapping
|
186
|
+
raise
|
187
|
+
|
188
|
+
|
189
|
+
|
55
190
|
def run_format_set_action_return(
|
56
191
|
format_set_name: str,
|
57
192
|
*,
|
pyegeria/mcp_adapter.py
CHANGED
@@ -11,9 +11,6 @@ from __future__ import annotations
|
|
11
11
|
|
12
12
|
import json
|
13
13
|
import sys
|
14
|
-
import asyncio
|
15
|
-
|
16
|
-
from loguru import logger
|
17
14
|
from typing import Any, Dict, Optional
|
18
15
|
|
19
16
|
from loguru import logger
|
@@ -21,9 +18,9 @@ from loguru import logger
|
|
21
18
|
from pyegeria._output_formats import (
|
22
19
|
list_mcp_format_sets,
|
23
20
|
select_output_format_set,
|
24
|
-
get_output_format_type_match,
|
25
21
|
)
|
26
|
-
from pyegeria.
|
22
|
+
from pyegeria.egeria_tech_client import EgeriaTech
|
23
|
+
from pyegeria.format_set_executor import run_format_set_action_return, _async_run_report
|
27
24
|
|
28
25
|
|
29
26
|
def list_reports() -> dict:
|
@@ -31,12 +28,12 @@ def list_reports() -> dict:
|
|
31
28
|
return list_mcp_format_sets()
|
32
29
|
|
33
30
|
|
34
|
-
def describe_report(name: str,
|
31
|
+
def describe_report(name: str, output_type: str = "DICT") -> Dict[str, Any]:
|
35
32
|
"""
|
36
33
|
Describe a format set for MCP discovery. If outputType != ANY, a concrete format
|
37
34
|
will be resolved; otherwise only metadata/action are returned.
|
38
35
|
"""
|
39
|
-
meta = select_output_format_set(name,
|
36
|
+
meta = select_output_format_set(name, output_type)
|
40
37
|
if not meta:
|
41
38
|
raise ValueError(f"Unknown or incompatible format set: {name}")
|
42
39
|
return meta
|
@@ -82,6 +79,7 @@ def _execute_egeria_call_blocking(
|
|
82
79
|
# }
|
83
80
|
|
84
81
|
|
82
|
+
|
85
83
|
def run_report(
|
86
84
|
*,
|
87
85
|
report: str,
|
@@ -98,7 +96,7 @@ def run_report(
|
|
98
96
|
print(f"Format set: {report}\nparams: {json.dumps(params)}\nview_server: {view_server}\nview_url: {view_url}\nuser: {user}\nuser_pass: {user_pass}", file=sys.stderr)
|
99
97
|
# Lazy import of settings to avoid circulars when optional args are None
|
100
98
|
from pyegeria.config import settings as _settings
|
101
|
-
logger.info(f"Format set: {
|
99
|
+
logger.info(f"Format set: {report}\nparams: {json.dumps(params)}\nview_server: {view_server}\nview_url: {view_url}\nuser: {user}\nuser_pass: {user_pass}")
|
102
100
|
return run_format_set_action_return(
|
103
101
|
format_set_name=report,
|
104
102
|
output_format="DICT",
|
@@ -108,3 +106,19 @@ def run_report(
|
|
108
106
|
user=user if user is not None else _settings.User_Profile.user_name,
|
109
107
|
user_pass=user_pass if user_pass is not None else _settings.User_Profile.user_pwd,
|
110
108
|
)
|
109
|
+
|
110
|
+
async def _async_run_report_tool(
|
111
|
+
*,
|
112
|
+
report: str,
|
113
|
+
egeria_client: EgeriaTech,
|
114
|
+
params: Optional[Dict[str, Any]] = None,
|
115
|
+
) -> Dict[str, Any]:
|
116
|
+
"""
|
117
|
+
Execute a format set action as an MCP-style tool. Enforces DICT/ALL by default.
|
118
|
+
Caller may pass credentials explicitly; otherwise defaults are used from config.
|
119
|
+
"""
|
120
|
+
# Lazy import of settings to avoid circulars when optional args are None
|
121
|
+
|
122
|
+
print(f"Report: {report}\n params: {json.dumps(params)}\n", file=sys.stderr)
|
123
|
+
result = await _async_run_report(report, egeria_client, output_format="DICT", params=params)
|
124
|
+
return result
|
pyegeria/mcp_server.py
CHANGED
@@ -3,26 +3,28 @@ Copyright Contributors to the ODPi Egeria project.
|
|
3
3
|
|
4
4
|
This module provides a basic MCP server for Egeria.
|
5
5
|
"""
|
6
|
-
import asyncio
|
7
6
|
import re
|
8
7
|
import sys
|
9
|
-
from typing import Any, Dict, Optional
|
8
|
+
from typing import Any, Dict, Optional
|
9
|
+
|
10
|
+
from pyegeria.egeria_tech_client import EgeriaTech
|
11
|
+
|
12
|
+
GLOBAL_EGERIA_CLIENT: Optional[EgeriaTech] = None
|
10
13
|
|
11
14
|
try:
|
12
15
|
# We use Optional[] and List[] types, so we import them.
|
13
16
|
from mcp.server.fastmcp import FastMCP
|
17
|
+
from pyegeria.mcp_adapter import (
|
18
|
+
list_reports,
|
19
|
+
describe_report,
|
20
|
+
run_report, _execute_egeria_call_blocking,
|
21
|
+
_async_run_report_tool
|
22
|
+
)
|
14
23
|
print("MCP import successful...", file=sys.stderr)
|
15
24
|
except ImportError:
|
16
25
|
print("MCP import failed.", file=sys.stderr)
|
17
26
|
raise
|
18
27
|
|
19
|
-
from pyegeria.mcp_adapter import (
|
20
|
-
list_reports,
|
21
|
-
describe_report,
|
22
|
-
run_report, _execute_egeria_call_blocking,
|
23
|
-
)
|
24
|
-
|
25
|
-
|
26
28
|
def _ok(result: Dict[str, Any] ) -> Dict[str, Any]:
|
27
29
|
# Pass-through helper in case you want to normalize or add metadata
|
28
30
|
print("OK: Operation completed successfully.", file=sys.stderr)
|
@@ -31,6 +33,29 @@ def _ok(result: Dict[str, Any] ) -> Dict[str, Any]:
|
|
31
33
|
|
32
34
|
def main() -> None:
|
33
35
|
# Initialize the server
|
36
|
+
|
37
|
+
global GLOBAL_EGERIA_CLIENT
|
38
|
+
|
39
|
+
try:
|
40
|
+
""" Runs ONCE when the server starts.
|
41
|
+
Initializes the Egeria client and stores it in the server's state.
|
42
|
+
"""
|
43
|
+
print("DEBUG: Initializing Egeria client...", file=sys.stderr)
|
44
|
+
from pyegeria.config import settings as _settings
|
45
|
+
|
46
|
+
GLOBAL_EGERIA_CLIENT = EgeriaTech(
|
47
|
+
_settings.Environment.egeria_view_server,
|
48
|
+
_settings.Environment.egeria_view_server_url,
|
49
|
+
_settings.User_Profile.user_name,
|
50
|
+
_settings.User_Profile.user_pwd
|
51
|
+
)
|
52
|
+
GLOBAL_EGERIA_CLIENT.create_egeria_bearer_token("erinoverview","secret")
|
53
|
+
print("DEBUG: Egeria Client connected", file=sys.stderr)
|
54
|
+
|
55
|
+
except Exception as e:
|
56
|
+
print(f"DEBUG: Exception occurred: {str(e)}", file=sys.stderr)
|
57
|
+
raise
|
58
|
+
|
34
59
|
srv = FastMCP(name="pyegeria-mcp")
|
35
60
|
print("Starting MCP server...", file=sys.stderr)
|
36
61
|
|
@@ -53,7 +78,6 @@ def main() -> None:
|
|
53
78
|
print(f"DEBUG: Exception during describe_report: {str(e)}", file=sys.stderr)
|
54
79
|
raise
|
55
80
|
|
56
|
-
# run_report tool (formerly run_format_set_action)
|
57
81
|
@srv.tool(name="run_report")
|
58
82
|
async def run_report_tool(
|
59
83
|
report_name: str,
|
@@ -92,10 +116,13 @@ def main() -> None:
|
|
92
116
|
|
93
117
|
try:
|
94
118
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
119
|
+
egeria_client: EgeriaTech = GLOBAL_EGERIA_CLIENT
|
120
|
+
print("DEBUG: Egeria Client connected", file=sys.stderr)
|
121
|
+
|
122
|
+
result = await _async_run_report_tool(
|
123
|
+
report=report_name,
|
124
|
+
egeria_client=egeria_client,
|
125
|
+
params=params
|
99
126
|
)
|
100
127
|
print("DEBUG: run_report completed successfully", file=sys.stderr)
|
101
128
|
return _ok(result)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: pyegeria
|
3
|
-
Version: 5.4.7
|
3
|
+
Version: 5.4.7.1
|
4
4
|
Summary: A python client for Egeria
|
5
5
|
Author-email: Dan Wolfson <dan.wolfson@pdr-associates.com>
|
6
6
|
License-Expression: Apache-2.0
|
@@ -18,7 +18,6 @@ Requires-Dist: requests
|
|
18
18
|
Requires-Dist: jupyter
|
19
19
|
Requires-Dist: click
|
20
20
|
Requires-Dist: trogon
|
21
|
-
Requires-Dist: textual
|
22
21
|
Requires-Dist: mermaid-py
|
23
22
|
Requires-Dist: psycopg2-binary
|
24
23
|
Requires-Dist: jupyter-notebook-parser
|
@@ -92,13 +92,16 @@ commands/tech/table_tech_templates.py,sha256=jI1c9YKa3KirArMNXeCRKeaiVdwQSN-ztPq
|
|
92
92
|
commands/tech/x_list_related_elements.py,sha256=ynaw792VnbMZ9IXBi5mmG7xBfC0kn0esKiFTsjvLGzc,5900
|
93
93
|
md_processing/__init__.py,sha256=B3hBAEI84SsAVFDCSHqoiVnBwSVbuxpeJuX3Jfe5B6U,7327
|
94
94
|
md_processing/dr_egeria.py,sha256=T1YRmGAAlamuYZB5dnBdEeyL9oODhYsxy-G4M_DtCak,20672
|
95
|
+
md_processing/data/commands-working.json,sha256=uCo_azcuuYqGm7QffJeCGj7PyZuZRGdu7kKf4XWmMoA,1162560
|
96
|
+
md_processing/data/commands.json,sha256=_J0WEfekVTBv994aV6rXdnyWy__WvoYdUJOPhSkPY4I,1759456
|
97
|
+
md_processing/data/generated_format_sets.json,sha256=TXvGK_Gm5ieq9i6u9M1j4CaNPzoV2m0hisKK2fWCtIM,98502
|
95
98
|
md_processing/data/generated_format_sets.py,sha256=2BfRzb5G5n8Cz6VwirQXlBq1fHBISIh4x7jquXg6QEw,36402
|
96
99
|
md_processing/md_commands/__init__.py,sha256=ssEojzFlSYtY2bHqqOoKo8PFaANZ_kq_gIbtlXnuc2s,93
|
97
100
|
md_processing/md_commands/data_designer_commands.py,sha256=WGCDlTPmGhcETdmus89w6Y8a3EhyQJ86SJURvphnM24,65516
|
98
101
|
md_processing/md_commands/ext_ref_commands.py,sha256=c-ZdYkWGMsrAyku9R_IReJzrLhNaNFY6vyyiFEjxNT4,23144
|
99
102
|
md_processing/md_commands/glossary_commands.py,sha256=slKnvs6ktdAOZI_EmpVWUB7hrdSngUnitucZu9dR9PE,33411
|
100
103
|
md_processing/md_commands/governance_officer_commands.py,sha256=c7SnJqQooPr3zCebDzeztAM8wZq9G7ZB4EpJ-uR5moI,26479
|
101
|
-
md_processing/md_commands/product_manager_commands.py,sha256=
|
104
|
+
md_processing/md_commands/product_manager_commands.py,sha256=4YKKdd_2tI5ekZlSJBiJJGqFISD7X6m0rfEd2wEL_PY,57790
|
102
105
|
md_processing/md_commands/project_commands.py,sha256=peAoemgzb8bEQghi8nFU6JrZ5Hro90Bl1JDHl7_nAtM,17127
|
103
106
|
md_processing/md_commands/solution_architect_commands.py,sha256=4Ghb8j2wlDdWtHoSCrx5jCJFEJfqII4mnFJ_tqduRKI,52569
|
104
107
|
md_processing/md_commands/view_commands.py,sha256=bIOSw0GVluOcpZMQNioeO1Srr4Y_84YNz-VHMKpPfVE,12092
|
@@ -113,7 +116,7 @@ md_processing/md_processing_utils/generate_md_cmd_templates.py,sha256=mFenxe9Jq8
|
|
113
116
|
md_processing/md_processing_utils/generate_md_templates.py,sha256=DMnMQ7_LbmQCS8aG-ppHGTu25obOSn4ZzSg7V21k9jo,3547
|
114
117
|
md_processing/md_processing_utils/md_processing_constants.py,sha256=_j8FSsB1mZ2SsmDaQWaPH8iWKy1ZHYYjzOgcdIoLZPE,21108
|
115
118
|
md_processing/md_processing_utils/message_constants.py,sha256=UBf18obM83umM6zplR7ychre4xLRbBnTzidHDZ2gNvM,548
|
116
|
-
pyegeria/__init__.py,sha256=
|
119
|
+
pyegeria/__init__.py,sha256=hgrGk4lBno1rgKRBKWAcljb2wGSHAKhmtu8vbESwUZM,11955
|
117
120
|
pyegeria/_client.py,sha256=hJHn5pD8sbelP_M9dK-M5Z2CYqpRXzXfg1UCgAdQ6dQ,33416
|
118
121
|
pyegeria/_client_new.py,sha256=9GQDOlmCxGPcAhKT_kkrLlS0x7nnVhha7VVR0rAlBnQ,69777
|
119
122
|
pyegeria/_deprecated_gov_engine.py,sha256=dWNcwVsE5__dF2u4QiIyQrssozzzOjBbLld8MdpmVCQ,17264
|
@@ -139,14 +142,14 @@ pyegeria/egeria_my_client.py,sha256=3dSBUlrivzih75hodNHe-2BM9pGB8AQVLru-_NbhYNE,
|
|
139
142
|
pyegeria/egeria_tech_client.py,sha256=8Apr5YEFL2qgn-QTv9YWTI-23rGI94NiUp4418EiZ4k,4707
|
140
143
|
pyegeria/external_references.py,sha256=7CNUlnD7MsWZqdLASYSxqfHAU1EqBzuv8_7INYMJI3A,74755
|
141
144
|
pyegeria/feedback_manager_omvs.py,sha256=0xBs0p54vmdfVYYgQ8pOanLC4fxfgTk1Z61Y6D1U7_I,152978
|
142
|
-
pyegeria/format_set_executor.py,sha256=
|
145
|
+
pyegeria/format_set_executor.py,sha256=9r1Ffd1ujvrEyoFQM4w4_wEi7YXeE-mwCanA-8g87ug,11331
|
143
146
|
pyegeria/full_omag_server_config.py,sha256=CQqLCy_3DZFvJZEOcGf50HWdFaWpiAIs6z-kKyjvpDA,47464
|
144
147
|
pyegeria/glossary_manager.py,sha256=EmCnIPG-W0bUD7MVn2Vopb-cb_TR1J8MMOOFzo38aWk,106786
|
145
148
|
pyegeria/governance_officer.py,sha256=OYEewhoe3HBcxTR6kGdKNkwLT4gkQDRGKfFIsVlD5oI,109203
|
146
149
|
pyegeria/load_config.py,sha256=XDwPAHB3MvGRuoP8kg1lJJAI4BgMWZ3TYxfxYROgJj4,1188
|
147
150
|
pyegeria/logging_configuration.py,sha256=BxTQRN-7OOdk5t1f1xSn8gKU8iT-MfWEgbn6cYWrRsY,7674
|
148
|
-
pyegeria/mcp_adapter.py,sha256=
|
149
|
-
pyegeria/mcp_server.py,sha256=
|
151
|
+
pyegeria/mcp_adapter.py,sha256=flkWmRRXOROV6dm6U52rziGZRiB9eZeehzvAC8EwkD4,5010
|
152
|
+
pyegeria/mcp_server.py,sha256=UsgpV8Nq09S2nzEGTIVvJizAPUeNdARZjIuLwrTlVOE,8179
|
150
153
|
pyegeria/md_processing_helpers.py,sha256=xlQuK5eP_PJqUdy4BScQ97NyBD95jMS3EUg0wK5CsZo,2137
|
151
154
|
pyegeria/md_processing_utils.py,sha256=KRESCqAYjCgHRAdhHH49lLDDhaq740CUlqTG0bN-6Oo,99119
|
152
155
|
pyegeria/md_processing_utils_orig.py,sha256=SToZtXQiysi2_vmIY4-T2NIELRirzQ1zjkho_2jFsNE,52603
|
@@ -166,9 +169,9 @@ pyegeria/template_manager_omvs.py,sha256=chBljs1vy5wr9DRAtbvIt4Cob_7HxGfxLkCNlDT
|
|
166
169
|
pyegeria/utils.py,sha256=xOTxk9PH8ZGZmgIwz_a6rczTVLADLEjucr10ZJTUnY4,9272
|
167
170
|
pyegeria/valid_metadata_omvs.py,sha256=Xq9DqBQvBFFJzaFIRKcVZ2k4gJvSh9yeXs_j-O3vn1w,65050
|
168
171
|
pyegeria/x_action_author_omvs.py,sha256=XyRsUgN-xnWR-cJayzo5RtY4Xv1uBDML4pwaKHrwC1w,6430
|
169
|
-
pyegeria-5.4.7.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
170
|
-
pyegeria-5.4.7.dist-info/METADATA,sha256=
|
171
|
-
pyegeria-5.4.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
172
|
-
pyegeria-5.4.7.dist-info/entry_points.txt,sha256=Ig9cZyl-nq_RohLvahgWXzZbcpHzLS3Zdc1A8qvdPG0,6595
|
173
|
-
pyegeria-5.4.7.dist-info/top_level.txt,sha256=48Mt-O3p8yO7jiEv6-Y9bUsryqJn9BQsiyV0BqSn8tk,32
|
174
|
-
pyegeria-5.4.7.dist-info/RECORD,,
|
172
|
+
pyegeria-5.4.7.1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
173
|
+
pyegeria-5.4.7.1.dist-info/METADATA,sha256=4dMoMfdoVgUW_tbqRx18ghTs7EZsTZK91TXBs733dho,5898
|
174
|
+
pyegeria-5.4.7.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
175
|
+
pyegeria-5.4.7.1.dist-info/entry_points.txt,sha256=Ig9cZyl-nq_RohLvahgWXzZbcpHzLS3Zdc1A8qvdPG0,6595
|
176
|
+
pyegeria-5.4.7.1.dist-info/top_level.txt,sha256=48Mt-O3p8yO7jiEv6-Y9bUsryqJn9BQsiyV0BqSn8tk,32
|
177
|
+
pyegeria-5.4.7.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|