cmem-cmemc 25.1.1__py3-none-any.whl → 25.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cmem_cmemc/command_group.py +1 -0
- cmem_cmemc/commands/admin.py +3 -3
- cmem_cmemc/commands/config.py +2 -2
- cmem_cmemc/commands/graph.py +149 -177
- cmem_cmemc/commands/graph_imports.py +420 -0
- cmem_cmemc/commands/migration.py +8 -8
- cmem_cmemc/commands/project.py +1 -1
- cmem_cmemc/commands/python.py +5 -4
- cmem_cmemc/commands/query.py +2 -1
- cmem_cmemc/commands/resource.py +1 -1
- cmem_cmemc/commands/scheduler.py +1 -1
- cmem_cmemc/commands/store.py +1 -1
- cmem_cmemc/commands/variable.py +1 -1
- cmem_cmemc/commands/workflow.py +9 -0
- cmem_cmemc/completion.py +47 -50
- cmem_cmemc/constants.py +2 -0
- cmem_cmemc/utils.py +52 -14
- {cmem_cmemc-25.1.1.dist-info → cmem_cmemc-25.3.0.dist-info}/METADATA +3 -3
- {cmem_cmemc-25.1.1.dist-info → cmem_cmemc-25.3.0.dist-info}/RECORD +22 -21
- {cmem_cmemc-25.1.1.dist-info → cmem_cmemc-25.3.0.dist-info}/LICENSE +0 -0
- {cmem_cmemc-25.1.1.dist-info → cmem_cmemc-25.3.0.dist-info}/WHEEL +0 -0
- {cmem_cmemc-25.1.1.dist-info → cmem_cmemc-25.3.0.dist-info}/entry_points.txt +0 -0
cmem_cmemc/completion.py
CHANGED
|
@@ -8,9 +8,8 @@ from contextlib import suppress
|
|
|
8
8
|
from typing import Any
|
|
9
9
|
|
|
10
10
|
import requests.exceptions
|
|
11
|
-
from click import ClickException, Context
|
|
12
|
-
from click.
|
|
13
|
-
from click.shell_completion import CompletionItem
|
|
11
|
+
from click import Argument, ClickException, Context
|
|
12
|
+
from click.shell_completion import CompletionItem, split_arg_string
|
|
14
13
|
from cmem.cmempy.dp.authorization.conditions import (
|
|
15
14
|
fetch_all_acls,
|
|
16
15
|
get_actions,
|
|
@@ -54,6 +53,11 @@ SORT_BY_KEY = 0
|
|
|
54
53
|
SORT_BY_DESC = 1
|
|
55
54
|
|
|
56
55
|
|
|
56
|
+
def escape_colon(value: str) -> str:
|
|
57
|
+
"""Escape colons in the input string by prefixing them with a backslash."""
|
|
58
|
+
return value.replace(":", r"\:")
|
|
59
|
+
|
|
60
|
+
|
|
57
61
|
def finalize_completion(
|
|
58
62
|
candidates: list,
|
|
59
63
|
incomplete: str = "",
|
|
@@ -127,7 +131,7 @@ def finalize_completion(
|
|
|
127
131
|
reverse=reverse,
|
|
128
132
|
)
|
|
129
133
|
return [
|
|
130
|
-
CompletionItem(value=element[0]
|
|
134
|
+
CompletionItem(value=escape_colon(element[0]), help=element[1])
|
|
131
135
|
for element in sorted_list
|
|
132
136
|
]
|
|
133
137
|
|
|
@@ -142,7 +146,7 @@ def get_completion_args(incomplete: str) -> list[str]:
|
|
|
142
146
|
This is a workaround to get partial tuple options in a completion function
|
|
143
147
|
see https://github.com/pallets/click/issues/2597
|
|
144
148
|
"""
|
|
145
|
-
args = split_arg_string(os.environ
|
|
149
|
+
args = split_arg_string(os.environ.get("COMP_WORDS", ""))
|
|
146
150
|
if incomplete and len(args) > 0 and args[len(args) - 1] == incomplete:
|
|
147
151
|
args.pop()
|
|
148
152
|
return args
|
|
@@ -172,7 +176,7 @@ def acl_ids(ctx: Context, param: Argument, incomplete: str) -> list[CompletionIt
|
|
|
172
176
|
for access_condition in acls:
|
|
173
177
|
iri = convert_iri_to_qname(access_condition.get("iri"), default_ns=NS_ACL)
|
|
174
178
|
label = access_condition.get("name")
|
|
175
|
-
if check_option_in_params(iri, ctx.params.get(param.name)):
|
|
179
|
+
if check_option_in_params(iri, ctx.params.get(str(param.name))):
|
|
176
180
|
continue
|
|
177
181
|
options.append((iri, label))
|
|
178
182
|
return finalize_completion(candidates=options, incomplete=incomplete, sort_by=SORT_BY_DESC)
|
|
@@ -190,9 +194,9 @@ def acl_actions(ctx: Context, param: Argument, incomplete: str) -> list[Completi
|
|
|
190
194
|
except (KeyError, TypeError):
|
|
191
195
|
return []
|
|
192
196
|
qname = convert_iri_to_qname(iri, default_ns=NS_ACTION)
|
|
193
|
-
if check_option_in_params(qname, ctx.params.get(param.name)):
|
|
197
|
+
if check_option_in_params(qname, ctx.params.get(str(param.name))):
|
|
194
198
|
continue
|
|
195
|
-
if check_option_in_params(iri, ctx.params.get(param.name)):
|
|
199
|
+
if check_option_in_params(iri, ctx.params.get(str(param.name))):
|
|
196
200
|
continue
|
|
197
201
|
options.append((qname, name))
|
|
198
202
|
options.append(("urn:elds-backend-all-actions", "All Actions (until 24.2.x, now deprecated)"))
|
|
@@ -205,7 +209,7 @@ def acl_users(ctx: Context, param: Argument, incomplete: str) -> list[Completion
|
|
|
205
209
|
options = []
|
|
206
210
|
try:
|
|
207
211
|
for _ in list_users():
|
|
208
|
-
if check_option_in_params(_["username"], ctx.params.get(param.name)):
|
|
212
|
+
if check_option_in_params(_["username"], ctx.params.get(str(param.name))):
|
|
209
213
|
continue
|
|
210
214
|
options.append(_["username"])
|
|
211
215
|
except requests.exceptions.HTTPError:
|
|
@@ -213,7 +217,7 @@ def acl_users(ctx: Context, param: Argument, incomplete: str) -> list[Completion
|
|
|
213
217
|
results = get_users().json()
|
|
214
218
|
for _ in results:
|
|
215
219
|
username = _.replace(NS_USER, "")
|
|
216
|
-
if check_option_in_params(username, ctx.params.get(param.name)) or username in options:
|
|
220
|
+
if check_option_in_params(username, ctx.params.get(str(param.name))) or username in options:
|
|
217
221
|
continue
|
|
218
222
|
options.append(username)
|
|
219
223
|
|
|
@@ -226,7 +230,7 @@ def acl_groups(ctx: Context, param: Argument, incomplete: str) -> list[Completio
|
|
|
226
230
|
options = []
|
|
227
231
|
try:
|
|
228
232
|
for _ in list_groups():
|
|
229
|
-
if check_option_in_params(_["name"], ctx.params.get(param.name)):
|
|
233
|
+
if check_option_in_params(_["name"], ctx.params.get(str(param.name))):
|
|
230
234
|
continue
|
|
231
235
|
options.append(_["name"])
|
|
232
236
|
except requests.exceptions.HTTPError:
|
|
@@ -234,7 +238,7 @@ def acl_groups(ctx: Context, param: Argument, incomplete: str) -> list[Completio
|
|
|
234
238
|
results = get_groups().json()
|
|
235
239
|
for _ in results:
|
|
236
240
|
_ = _.replace(NS_GROUP, "") if _.startswith(NS_GROUP) else _
|
|
237
|
-
if check_option_in_params(_, ctx.params.get(param.name)) or _ in options:
|
|
241
|
+
if check_option_in_params(_, ctx.params.get(str(param.name))) or _ in options:
|
|
238
242
|
continue
|
|
239
243
|
options.append(_)
|
|
240
244
|
return finalize_completion(candidates=options, incomplete=incomplete, sort_by=SORT_BY_DESC)
|
|
@@ -392,7 +396,7 @@ def scheduler_ids(ctx: Context, param: Argument, incomplete: str) -> list[Comple
|
|
|
392
396
|
facets=[{"facetId": "taskType", "keywordIds": ["Scheduler"], "type": "keyword"}],
|
|
393
397
|
)["results"]
|
|
394
398
|
for _ in schedulers:
|
|
395
|
-
if check_option_in_params(_["projectId"] + ":" + _["id"], ctx.params.get(param.name)):
|
|
399
|
+
if check_option_in_params(_["projectId"] + ":" + _["id"], ctx.params.get(str(param.name))):
|
|
396
400
|
continue
|
|
397
401
|
options.append((_["projectId"] + ":" + _["id"], _["label"]))
|
|
398
402
|
return finalize_completion(candidates=options, incomplete=incomplete, sort_by=SORT_BY_DESC)
|
|
@@ -407,7 +411,7 @@ def vocabularies(
|
|
|
407
411
|
options = []
|
|
408
412
|
for _ in vocabs:
|
|
409
413
|
url = _["iri"]
|
|
410
|
-
if check_option_in_params(url, ctx.params.get(param.name)):
|
|
414
|
+
if check_option_in_params(url, ctx.params.get(str(param.name))):
|
|
411
415
|
continue
|
|
412
416
|
url = _["iri"]
|
|
413
417
|
try:
|
|
@@ -491,32 +495,6 @@ def installable_packages(ctx: Context, param: Argument, incomplete: str) -> list
|
|
|
491
495
|
)
|
|
492
496
|
|
|
493
497
|
|
|
494
|
-
def workflow_io_input_files(ctx: Context, param: Argument, incomplete: str) -> list[CompletionItem]:
|
|
495
|
-
"""Prepare a list of acceptable workflow io input files."""
|
|
496
|
-
return (
|
|
497
|
-
file_list(incomplete=incomplete, suffix=".csv", description="CSV Dataset resource")
|
|
498
|
-
+ file_list(incomplete=incomplete, suffix=".xml", description="XML Dataset resource")
|
|
499
|
-
+ file_list(incomplete=incomplete, suffix=".json", description="JSON Dataset resource")
|
|
500
|
-
+ file_list(incomplete=incomplete, suffix=".xlsx", description="Excel Dataset resource")
|
|
501
|
-
+ file_list(incomplete=incomplete, suffix=".txt", description="Text Dataset resource")
|
|
502
|
-
+ file_list(incomplete=incomplete, suffix=".zip", description="Multi CSV Dataset resource")
|
|
503
|
-
)
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
def workflow_io_input_mimetypes(
|
|
507
|
-
ctx: Context, param: Argument, incomplete: str
|
|
508
|
-
) -> list[CompletionItem]:
|
|
509
|
-
"""Prepare a list of acceptable workflow io input mimetypes."""
|
|
510
|
-
return (
|
|
511
|
-
file_list(incomplete=incomplete, suffix=".csv", description="CSV Dataset resource")
|
|
512
|
-
+ file_list(incomplete=incomplete, suffix=".xml", description="XML Dataset resource")
|
|
513
|
-
+ file_list(incomplete=incomplete, suffix=".json", description="JSON Dataset resource")
|
|
514
|
-
+ file_list(incomplete=incomplete, suffix=".xlsx", description="Excel Dataset resource")
|
|
515
|
-
+ file_list(incomplete=incomplete, suffix=".txt", description="Text Dataset resource")
|
|
516
|
-
+ file_list(incomplete=incomplete, suffix=".zip", description="Multi CSV Dataset resource")
|
|
517
|
-
)
|
|
518
|
-
|
|
519
|
-
|
|
520
498
|
def workflow_io_output_files(
|
|
521
499
|
ctx: Context, param: Argument, incomplete: str
|
|
522
500
|
) -> list[CompletionItem]:
|
|
@@ -531,6 +509,18 @@ def workflow_io_output_files(
|
|
|
531
509
|
)
|
|
532
510
|
|
|
533
511
|
|
|
512
|
+
def workflow_io_input_files(ctx: Context, param: Argument, incomplete: str) -> list[CompletionItem]:
|
|
513
|
+
"""Prepare a list of acceptable workflow io input files."""
|
|
514
|
+
files = []
|
|
515
|
+
for extension, info in get_dataset_file_mapping().items():
|
|
516
|
+
# handle zip extension separately.
|
|
517
|
+
if extension != ".zip":
|
|
518
|
+
files += file_list(
|
|
519
|
+
incomplete=incomplete, suffix=extension, description=info["description"]
|
|
520
|
+
)
|
|
521
|
+
return files
|
|
522
|
+
|
|
523
|
+
|
|
534
524
|
def get_dataset_file_mapping() -> dict[str, dict[str, str]]:
|
|
535
525
|
"""Return file extension to type and description mapping"""
|
|
536
526
|
return {
|
|
@@ -543,15 +533,22 @@ def get_dataset_file_mapping() -> dict[str, dict[str, str]]:
|
|
|
543
533
|
".json.zip": {"description": "JSON Dataset resource (zipped)", "type": "json"},
|
|
544
534
|
".jsonl": {"description": "JSON Lines Dataset resource", "type": "json"},
|
|
545
535
|
".jsonl.zip": {"description": "JSON Lines Dataset resource (zipped)", "type": "json"},
|
|
546
|
-
".yaml": {"description": "YAML Document", "type": "text"},
|
|
547
|
-
".yaml.zip": {"description": "YAML Document (zipped)", "type": "text"},
|
|
548
|
-
".
|
|
549
|
-
".
|
|
536
|
+
".yaml": {"description": "YAML Text Document", "type": "text"},
|
|
537
|
+
".yaml.zip": {"description": "YAML Text Document (zipped)", "type": "text"},
|
|
538
|
+
".md": {"description": "Markdown Text Document", "type": "text"},
|
|
539
|
+
".md.zip": {"description": "Markdown Text Document (zipped)", "type": "text"},
|
|
540
|
+
".yml": {"description": "YAML Text Document", "type": "text"},
|
|
541
|
+
".yml.zip": {"description": "YAML Text Document (zipped)", "type": "text"},
|
|
550
542
|
".ttl": {"description": "RDF file Dataset resource", "type": "file"},
|
|
551
543
|
".orc": {"description": "Apache ORC Dataset resource", "type": "orc"},
|
|
552
544
|
".txt": {"description": "Text dataset resource", "type": "text"},
|
|
553
545
|
".txt.zip": {"description": "Text dataset resource (zipped)", "type": "text"},
|
|
554
|
-
".zip": {"description": "multiCsv Dataset resource", "type": "multiCsv"},
|
|
546
|
+
".zip": {"description": "Potential multiCsv Dataset resource", "type": "multiCsv"},
|
|
547
|
+
".pdf": {"description": "Potential Binary Dataset resource", "type": "binaryFile"},
|
|
548
|
+
".png": {"description": "Potential Binary Dataset resource", "type": "binaryFile"},
|
|
549
|
+
".jpg": {"description": "Potential Binary Dataset resource", "type": "binaryFile"},
|
|
550
|
+
".gif": {"description": "Potential Binary Dataset resource", "type": "binaryFile"},
|
|
551
|
+
".tiff": {"description": "Potential Binary Dataset resource", "type": "binaryFile"},
|
|
555
552
|
}
|
|
556
553
|
|
|
557
554
|
|
|
@@ -704,7 +701,7 @@ def workflow_ids(ctx: Context, param: Argument, incomplete: str) -> list[Complet
|
|
|
704
701
|
for _ in workflows:
|
|
705
702
|
workflow = _["projectId"] + ":" + _["id"]
|
|
706
703
|
label = _["label"]
|
|
707
|
-
if check_option_in_params(workflow, ctx.params.get(param.name)):
|
|
704
|
+
if check_option_in_params(workflow, ctx.params.get(str(param.name))):
|
|
708
705
|
continue
|
|
709
706
|
options.append((workflow, label))
|
|
710
707
|
return finalize_completion(candidates=options, incomplete=incomplete, sort_by=SORT_BY_DESC)
|
|
@@ -734,7 +731,7 @@ def project_ids(ctx: Context, param: Argument, incomplete: str) -> list[Completi
|
|
|
734
731
|
project_id = _["name"]
|
|
735
732
|
label = _["metaData"]["label"]
|
|
736
733
|
# do not add project if already in the command line
|
|
737
|
-
if check_option_in_params(project_id, ctx.params.get(param.name)):
|
|
734
|
+
if check_option_in_params(project_id, ctx.params.get(str(param.name))):
|
|
738
735
|
continue
|
|
739
736
|
options.append((project_id, label))
|
|
740
737
|
return finalize_completion(candidates=options, incomplete=incomplete, sort_by=SORT_BY_DESC)
|
|
@@ -755,7 +752,7 @@ def _prepare_graph_options(
|
|
|
755
752
|
iri = graph["iri"]
|
|
756
753
|
label = graph["label"]["title"]
|
|
757
754
|
# do not add graph if already in the command line
|
|
758
|
-
if skip_selected_iris & check_option_in_params(iri, ctx.params.get(param.name)):
|
|
755
|
+
if skip_selected_iris & check_option_in_params(iri, ctx.params.get(str(param.name))):
|
|
759
756
|
continue
|
|
760
757
|
options.append((iri, label))
|
|
761
758
|
return options
|
|
@@ -891,7 +888,7 @@ def variable_ids(ctx: Context, param: Argument, incomplete: str) -> list[Complet
|
|
|
891
888
|
if label == "":
|
|
892
889
|
label = f"Current value: {_['value']}"
|
|
893
890
|
# do not add project if already in the command line
|
|
894
|
-
if check_option_in_params(variable_id, ctx.params.get(param.name)):
|
|
891
|
+
if check_option_in_params(variable_id, ctx.params.get(str(param.name))):
|
|
895
892
|
continue
|
|
896
893
|
options.append((variable_id, label))
|
|
897
894
|
return finalize_completion(candidates=options, incomplete=incomplete, sort_by=SORT_BY_KEY)
|
|
@@ -1028,7 +1025,7 @@ def user_group_ids(ctx: Context, param: Argument, incomplete: str) -> list[Compl
|
|
|
1028
1025
|
if not users:
|
|
1029
1026
|
return []
|
|
1030
1027
|
|
|
1031
|
-
if param.name == "unassign_group":
|
|
1028
|
+
if param.name == "unassign_group":
|
|
1032
1029
|
groups = user_groups(user_id=users[0]["id"])
|
|
1033
1030
|
else:
|
|
1034
1031
|
user_group_names = [group["name"] for group in user_groups(user_id=users[0]["id"])]
|
cmem_cmemc/constants.py
CHANGED
cmem_cmemc/utils.py
CHANGED
|
@@ -12,7 +12,7 @@ from typing import TYPE_CHECKING
|
|
|
12
12
|
from zipfile import BadZipFile, ZipFile
|
|
13
13
|
|
|
14
14
|
import requests
|
|
15
|
-
from click import ClickException
|
|
15
|
+
from click import Argument, ClickException
|
|
16
16
|
from cmem.cmempy.dp.proxy.graph import get_graphs_list
|
|
17
17
|
from cmem.cmempy.queries import QueryCatalog
|
|
18
18
|
from cmem.cmempy.workspace.projects.project import get_projects
|
|
@@ -84,27 +84,57 @@ def iri_to_qname(iri: str) -> str:
|
|
|
84
84
|
return iri
|
|
85
85
|
|
|
86
86
|
|
|
87
|
-
|
|
88
|
-
|
|
87
|
+
@dataclass
|
|
88
|
+
class RdfGraphData:
|
|
89
|
+
"""Represents the data structure for RDF graph information.
|
|
90
|
+
|
|
91
|
+
Attributes:
|
|
92
|
+
file_path: The absolute path to the RDF data file.
|
|
93
|
+
graph_iri: The iri of the graph.
|
|
94
|
+
graph_imports: A list of graph imports.
|
|
89
95
|
|
|
90
|
-
The tuple format is (filepath, graph_name),
|
|
91
|
-
for example ("/tmp/rdf.nt", "http://example.com")
|
|
92
96
|
"""
|
|
93
|
-
|
|
97
|
+
|
|
98
|
+
file_path: str
|
|
99
|
+
graph_iri: str
|
|
100
|
+
graph_imports: list[str]
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def read_rdf_graph_files(directory_path: str) -> list[RdfGraphData]:
|
|
104
|
+
"""Read all files from directory_path and output as RdfGraphData."""
|
|
105
|
+
rdf_graphs: list[RdfGraphData] = []
|
|
94
106
|
for root, _, files in os.walk(directory_path):
|
|
95
107
|
for _file in files:
|
|
96
|
-
if _file.endswith(".graph"):
|
|
108
|
+
if _file.endswith((".graph", ".imports")):
|
|
97
109
|
continue
|
|
98
|
-
|
|
110
|
+
file_path = SmartPath(root) / _file
|
|
99
111
|
# Handle compressed files (like .gz)
|
|
100
112
|
if _file.endswith(".gz"):
|
|
101
|
-
|
|
113
|
+
_graph_file = _file.replace(".gz", ".graph")
|
|
114
|
+
_graph_imports_file = _file.replace(".gz", ".imports")
|
|
102
115
|
else:
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
116
|
+
_graph_file = f"{_file}.graph"
|
|
117
|
+
_graph_imports_file = f"{_file}.imports"
|
|
118
|
+
graph_file_path = SmartPath(root) / _graph_file
|
|
119
|
+
imports_file_path = SmartPath(root) / _graph_imports_file
|
|
120
|
+
graph_name = ""
|
|
121
|
+
graph_imports = []
|
|
122
|
+
if graph_file_path.exists():
|
|
123
|
+
graph_name = read_file_to_string(str(graph_file_path)).strip()
|
|
124
|
+
|
|
125
|
+
if imports_file_path.exists():
|
|
126
|
+
# Read the graph imports.
|
|
127
|
+
imports_content = read_file_to_string(str(imports_file_path)).strip()
|
|
128
|
+
graph_imports = imports_content.split("\n") if imports_content else []
|
|
129
|
+
|
|
130
|
+
if graph_name:
|
|
131
|
+
rdf_graphs.append(
|
|
132
|
+
RdfGraphData(
|
|
133
|
+
file_path=str(file_path.resolve()),
|
|
134
|
+
graph_iri=graph_name,
|
|
135
|
+
graph_imports=graph_imports,
|
|
136
|
+
)
|
|
137
|
+
)
|
|
108
138
|
return rdf_graphs
|
|
109
139
|
|
|
110
140
|
|
|
@@ -414,3 +444,11 @@ def is_enabled(params: dict[str, str], config: PureSectionConfigParser, key: str
|
|
|
414
444
|
return str_to_bool(config.defaults()[key])
|
|
415
445
|
|
|
416
446
|
return False
|
|
447
|
+
|
|
448
|
+
|
|
449
|
+
def tuple_to_list(ctx: type["ApplicationContext"], param: Argument, value: tuple) -> list: # noqa: ARG001
|
|
450
|
+
"""Get a list from a tuple
|
|
451
|
+
|
|
452
|
+
Used as callback to have mutable values
|
|
453
|
+
"""
|
|
454
|
+
return list(value)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: cmem-cmemc
|
|
3
|
-
Version: 25.
|
|
3
|
+
Version: 25.3.0
|
|
4
4
|
Summary: Command line client for eccenca Corporate Memory
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Author: eccenca
|
|
@@ -27,10 +27,10 @@ Classifier: Topic :: Software Development :: Testing
|
|
|
27
27
|
Classifier: Topic :: Utilities
|
|
28
28
|
Requires-Dist: beautifulsoup4 (>=4.13.3,<5.0.0)
|
|
29
29
|
Requires-Dist: certifi (>=2024.2.2)
|
|
30
|
-
Requires-Dist: click (>=8.1.8,<
|
|
30
|
+
Requires-Dist: click (>=8.1.8,<8.2.0)
|
|
31
31
|
Requires-Dist: click-didyoumean (>=0.3.1,<0.4.0)
|
|
32
32
|
Requires-Dist: click-help-colors (>=0.9.4,<0.10.0)
|
|
33
|
-
Requires-Dist: cmem-cmempy (==25.
|
|
33
|
+
Requires-Dist: cmem-cmempy (==25.2.0)
|
|
34
34
|
Requires-Dist: configparser (>=7.2.0,<8.0.0)
|
|
35
35
|
Requires-Dist: jinja2 (>=3.1.6,<4.0.0)
|
|
36
36
|
Requires-Dist: junit-xml (>=1.9,<2.0)
|
|
@@ -2,32 +2,33 @@ cmem_cmemc/__init__.py,sha256=-RPEVweA-fcmEAynszDDMKwArJgxZpGW61UBiV7O4Og,24
|
|
|
2
2
|
cmem_cmemc/_cmemc.zsh,sha256=fmkrBHIQxus8cp2AgO1tzZ5mNZdGL_83cYz3a9uAdsg,1326
|
|
3
3
|
cmem_cmemc/cli.py,sha256=vDdSHFmXUstC3T7OlbPSd0hXxyigJE4VVgRMcsNz5cc,4538
|
|
4
4
|
cmem_cmemc/command.py,sha256=nBtrwPKFJLRpD3IPk5hKyn2LOMl-1ae7SV9iRhgky8k,1958
|
|
5
|
-
cmem_cmemc/command_group.py,sha256=
|
|
5
|
+
cmem_cmemc/command_group.py,sha256=DCHQzt2JXRLZWXbnKd5-ZpIp5GTN0SKX90Me8R8naKQ,3429
|
|
6
6
|
cmem_cmemc/commands/__init__.py,sha256=NaGM5jOzf0S_-4UIAwlVDOf2AZ3mliGPoRLXQJfTyZs,22
|
|
7
7
|
cmem_cmemc/commands/acl.py,sha256=zy27D_GeEaYEn3P6EEHtQ55sbWkjgwTgspCeuBWPL14,16006
|
|
8
|
-
cmem_cmemc/commands/admin.py,sha256=
|
|
8
|
+
cmem_cmemc/commands/admin.py,sha256=wq9QE-5hfxUM1zQbzicjgQ-T_D9Sa2hlRNVyIHMbzNk,9234
|
|
9
9
|
cmem_cmemc/commands/client.py,sha256=nBs7MoF2wF45AteTCeIQrXcOwKmHHCd8_lG_SM2mQSA,5127
|
|
10
|
-
cmem_cmemc/commands/config.py,sha256=
|
|
10
|
+
cmem_cmemc/commands/config.py,sha256=VHiVkW6NFuz-tpKXRPl7dO1gIXQLOuEhlGVxb422qwA,5803
|
|
11
11
|
cmem_cmemc/commands/dataset.py,sha256=zylVsfBD92LzHgQ96edNKaQNsf0zKoPro0VQdX--Mu8,30488
|
|
12
|
-
cmem_cmemc/commands/graph.py,sha256=
|
|
12
|
+
cmem_cmemc/commands/graph.py,sha256=_VtNpCwZF-Cdrv_WAQ5x1pYUB-FnWOxq4-n5qIzu81E,32335
|
|
13
|
+
cmem_cmemc/commands/graph_imports.py,sha256=gUcBSBLk7TXyvMth1jdLTb1L20iWidzjXNgb9E1fZUg,14157
|
|
13
14
|
cmem_cmemc/commands/manual.py,sha256=-sZWeFL92Kj8gL3VYsbpKh2ZaVTyM3LgKaUcpNn9u3A,2179
|
|
14
15
|
cmem_cmemc/commands/metrics.py,sha256=pIBRTq90f7MEI99HLdFLN3D1xQ2Z2u6VKUeTIz0X7DY,12205
|
|
15
|
-
cmem_cmemc/commands/migration.py,sha256=
|
|
16
|
-
cmem_cmemc/commands/project.py,sha256=
|
|
17
|
-
cmem_cmemc/commands/python.py,sha256=
|
|
18
|
-
cmem_cmemc/commands/query.py,sha256=
|
|
19
|
-
cmem_cmemc/commands/resource.py,sha256=
|
|
20
|
-
cmem_cmemc/commands/scheduler.py,sha256=
|
|
21
|
-
cmem_cmemc/commands/store.py,sha256=
|
|
16
|
+
cmem_cmemc/commands/migration.py,sha256=y9v4Be7WELGjDGDBZrfLBeqU_G_JH1fnP5UVG9qjB3g,9638
|
|
17
|
+
cmem_cmemc/commands/project.py,sha256=zHqs7XBsRjzTO6EGxaN_TgZ_rsqyIPF59aObuMhsfmA,20593
|
|
18
|
+
cmem_cmemc/commands/python.py,sha256=7ExdKr7nTED5ZZGjeBk5UngNI3F_KNcavwUgwaxApV0,11965
|
|
19
|
+
cmem_cmemc/commands/query.py,sha256=XtWZHu7BhQfAHEh3gbFTeJwI88mUhHFvMCyrFRVVSVs,27601
|
|
20
|
+
cmem_cmemc/commands/resource.py,sha256=74cn_yqMv3a6xOQAPpNCuluTWEH-_2PGENJnl7y8qz4,7778
|
|
21
|
+
cmem_cmemc/commands/scheduler.py,sha256=zYeO1-Hlxh9D-I9JIweQ-SEA0la0wv0EicY_UY7rNCg,8751
|
|
22
|
+
cmem_cmemc/commands/store.py,sha256=19otpzsOv2F-mH2cuq4Oz2i2vAHYdfSIQm2ec81yIFg,10429
|
|
22
23
|
cmem_cmemc/commands/user.py,sha256=ANZpeOBA46xiqOcNPrueComsCV0gEBbav-vOL9VgyX4,12535
|
|
23
24
|
cmem_cmemc/commands/validation.py,sha256=Fv5yBIXzqy8FyjIzo-wJkv_7H5bhtcQhMxFIlJEVoBw,29495
|
|
24
|
-
cmem_cmemc/commands/variable.py,sha256=
|
|
25
|
+
cmem_cmemc/commands/variable.py,sha256=aLRH_rFe0h7JBpKIqzcevbk26vczgUGokIDY8g6LPxA,11576
|
|
25
26
|
cmem_cmemc/commands/vocabulary.py,sha256=fdXsG7gspA6HeOasXis1ky9UIZG-qRYP-NiFcvzCTKM,17840
|
|
26
|
-
cmem_cmemc/commands/workflow.py,sha256=
|
|
27
|
+
cmem_cmemc/commands/workflow.py,sha256=HSgEMbK_anYZpme4yiQ4-pxGfQcL4YWa29lrm0aT8Nk,25777
|
|
27
28
|
cmem_cmemc/commands/workspace.py,sha256=IcZgBsvtulLRFofS70qpln6oKQIZunrVLfSAUeiFhCA,4579
|
|
28
|
-
cmem_cmemc/completion.py,sha256=
|
|
29
|
+
cmem_cmemc/completion.py,sha256=NTNJWK5nllXVebACAC68NnKKru_VU4lhLA-shgzJH7Y,45092
|
|
29
30
|
cmem_cmemc/config_parser.py,sha256=NduwOT-BB_uAk3pz1Y-ex18RQJW-jjHzkQKCEUUK6Hc,1276
|
|
30
|
-
cmem_cmemc/constants.py,sha256=
|
|
31
|
+
cmem_cmemc/constants.py,sha256=pzZYbSaTDUiWmE-VOAHB20oivHew5_FP9UTejySsVK4,550
|
|
31
32
|
cmem_cmemc/context.py,sha256=jIta2wgQ3wHviLpzaHKlt-6_Ur7M04I6fBtIIF7s4Cs,22247
|
|
32
33
|
cmem_cmemc/exceptions.py,sha256=0lsGOfXhciNGJloJGERMbbPuBbs5IwIIJ_5YnY9qQ-8,546
|
|
33
34
|
cmem_cmemc/manual_helper/__init__.py,sha256=G3Lqw2aPxo8x63Tg7L0aa5VD9BMaRzZDmhrog7IuEPg,43
|
|
@@ -51,9 +52,9 @@ cmem_cmemc/smart_path/clients/__init__.py,sha256=YFOm69BfTCRvAcJjN_CoUmCv3kzEciy
|
|
|
51
52
|
cmem_cmemc/smart_path/clients/http.py,sha256=3clZu2v4uuOvPY4MY_8SVSy7hIXJDNooahFRBRpy0ok,2347
|
|
52
53
|
cmem_cmemc/string_processor.py,sha256=kSVePdgFmf2ekurKj6TbDJn6ur82VGLwCsTJ9ODfBEU,2879
|
|
53
54
|
cmem_cmemc/title_helper.py,sha256=7frjAR54_Xc1gszOWXfzSmKFTawNJQ7kkXhZcHmQLyw,1250
|
|
54
|
-
cmem_cmemc/utils.py,sha256=
|
|
55
|
-
cmem_cmemc-25.
|
|
56
|
-
cmem_cmemc-25.
|
|
57
|
-
cmem_cmemc-25.
|
|
58
|
-
cmem_cmemc-25.
|
|
59
|
-
cmem_cmemc-25.
|
|
55
|
+
cmem_cmemc/utils.py,sha256=PkDFDISz7uemJCmyIWmtCcjfR_gRnRBL8ao76Ex-py8,14669
|
|
56
|
+
cmem_cmemc-25.3.0.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
57
|
+
cmem_cmemc-25.3.0.dist-info/METADATA,sha256=aGWBNWxM2mPs_3OrXPVnGWUIiqBcexhEnIvTnl6sN_c,5642
|
|
58
|
+
cmem_cmemc-25.3.0.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
|
|
59
|
+
cmem_cmemc-25.3.0.dist-info/entry_points.txt,sha256=2G0AWAyz501EHpFTjIxccdlCTsHt80NT0pdUGP1QkPA,45
|
|
60
|
+
cmem_cmemc-25.3.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|