cmem-cmemc 25.3.0__py3-none-any.whl → 25.4.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/commands/query.py +51 -16
- cmem_cmemc/commands/store.py +6 -2
- cmem_cmemc/completion.py +6 -3
- cmem_cmemc/context.py +2 -2
- cmem_cmemc/manual_helper/multi_page.py +2 -0
- {cmem_cmemc-25.3.0.dist-info → cmem_cmemc-25.4.0.dist-info}/METADATA +2 -2
- {cmem_cmemc-25.3.0.dist-info → cmem_cmemc-25.4.0.dist-info}/RECORD +10 -10
- {cmem_cmemc-25.3.0.dist-info → cmem_cmemc-25.4.0.dist-info}/LICENSE +0 -0
- {cmem_cmemc-25.3.0.dist-info → cmem_cmemc-25.4.0.dist-info}/WHEEL +0 -0
- {cmem_cmemc-25.3.0.dist-info → cmem_cmemc-25.4.0.dist-info}/entry_points.txt +0 -0
cmem_cmemc/commands/query.py
CHANGED
|
@@ -10,8 +10,8 @@ from time import sleep, time
|
|
|
10
10
|
from uuid import uuid4
|
|
11
11
|
|
|
12
12
|
import click
|
|
13
|
-
from click import ClickException, UsageError
|
|
14
13
|
from click.shell_completion import CompletionItem
|
|
14
|
+
from cmem.cmempy.config import get_cmem_base_uri
|
|
15
15
|
from cmem.cmempy.queries import (
|
|
16
16
|
QueryCatalog,
|
|
17
17
|
SparqlQuery,
|
|
@@ -91,12 +91,12 @@ class ReplayStatistics:
|
|
|
91
91
|
iri = query_["iri"]
|
|
92
92
|
catalog_entry = self.catalog.get_query(iri)
|
|
93
93
|
if catalog_entry is None:
|
|
94
|
-
raise ClickException(f"measure_query - query {iri} is not in catalog.")
|
|
94
|
+
raise click.ClickException(f"measure_query - query {iri} is not in catalog.")
|
|
95
95
|
return catalog_entry
|
|
96
96
|
query_string = query_["queryString"]
|
|
97
97
|
return SparqlQuery(text=query_string)
|
|
98
98
|
except KeyError as error:
|
|
99
|
-
raise ClickException(
|
|
99
|
+
raise click.ClickException(
|
|
100
100
|
"measure_query - given input dict has no queryString key."
|
|
101
101
|
) from error
|
|
102
102
|
|
|
@@ -330,6 +330,13 @@ def _output_query_status_details(app: ApplicationContext, status_dict: dict) ->
|
|
|
330
330
|
|
|
331
331
|
|
|
332
332
|
@click.command(cls=CmemcCommand, name="list")
|
|
333
|
+
@click.option(
|
|
334
|
+
"--catalog-graph",
|
|
335
|
+
default="https://ns.eccenca.com/data/queries/",
|
|
336
|
+
show_default=True,
|
|
337
|
+
shell_complete=completion.graph_uris,
|
|
338
|
+
help="The used query catalog graph.",
|
|
339
|
+
)
|
|
333
340
|
@click.option(
|
|
334
341
|
"--id-only",
|
|
335
342
|
is_flag=True,
|
|
@@ -337,13 +344,13 @@ def _output_query_status_details(app: ApplicationContext, status_dict: dict) ->
|
|
|
337
344
|
"This is useful for piping the ids into other cmemc commands.",
|
|
338
345
|
)
|
|
339
346
|
@click.pass_obj
|
|
340
|
-
def list_command(app: ApplicationContext, id_only: bool) -> None:
|
|
347
|
+
def list_command(app: ApplicationContext, catalog_graph: str, id_only: bool) -> None:
|
|
341
348
|
"""List available queries from the catalog.
|
|
342
349
|
|
|
343
350
|
Outputs a list of query URIs which can be used as reference for
|
|
344
351
|
the query execute command.
|
|
345
352
|
"""
|
|
346
|
-
queries = QueryCatalog().get_queries().items()
|
|
353
|
+
queries = QueryCatalog(graph=catalog_graph).get_queries().items()
|
|
347
354
|
if id_only:
|
|
348
355
|
# sort dict by short_url - https://docs.python.org/3/howto/sorting.html
|
|
349
356
|
for _, sparql_query in sorted(queries, key=lambda k: k[1].short_url.lower()):
|
|
@@ -359,7 +366,12 @@ def list_command(app: ApplicationContext, id_only: bool) -> None:
|
|
|
359
366
|
]
|
|
360
367
|
table.append(row)
|
|
361
368
|
app.echo_info_table(
|
|
362
|
-
table,
|
|
369
|
+
table,
|
|
370
|
+
headers=["Query URI", "Type", "Placeholder", "Label"],
|
|
371
|
+
sort_column=3,
|
|
372
|
+
empty_table_message="There are no query available in the "
|
|
373
|
+
f"selected catalog ({catalog_graph}).",
|
|
374
|
+
caption=f"Queries from {catalog_graph} ({get_cmem_base_uri()})",
|
|
363
375
|
)
|
|
364
376
|
|
|
365
377
|
|
|
@@ -367,6 +379,13 @@ def list_command(app: ApplicationContext, id_only: bool) -> None:
|
|
|
367
379
|
@click.argument(
|
|
368
380
|
"QUERIES", nargs=-1, required=True, shell_complete=completion.remote_queries_and_sparql_files
|
|
369
381
|
)
|
|
382
|
+
@click.option(
|
|
383
|
+
"--catalog-graph",
|
|
384
|
+
default="https://ns.eccenca.com/data/queries/",
|
|
385
|
+
show_default=True,
|
|
386
|
+
shell_complete=completion.graph_uris,
|
|
387
|
+
help="The used query catalog graph.",
|
|
388
|
+
)
|
|
370
389
|
@click.option(
|
|
371
390
|
"--accept",
|
|
372
391
|
default="default",
|
|
@@ -420,6 +439,7 @@ def list_command(app: ApplicationContext, id_only: bool) -> None:
|
|
|
420
439
|
def execute_command( # noqa: PLR0913
|
|
421
440
|
app: ApplicationContext,
|
|
422
441
|
queries: tuple[str, ...],
|
|
442
|
+
catalog_graph: str,
|
|
423
443
|
accept: str,
|
|
424
444
|
no_imports: bool,
|
|
425
445
|
base64: bool,
|
|
@@ -453,9 +473,14 @@ def execute_command( # noqa: PLR0913
|
|
|
453
473
|
app.echo_debug("Parameter: " + str(placeholder))
|
|
454
474
|
for file_or_uri in queries:
|
|
455
475
|
app.echo_debug(f"Start of execution: {file_or_uri} with " f"placeholder {placeholder}")
|
|
456
|
-
executed_query: SparqlQuery = QueryCatalog().get_query(
|
|
476
|
+
executed_query: SparqlQuery = QueryCatalog(graph=catalog_graph).get_query(
|
|
477
|
+
file_or_uri, placeholder=placeholder
|
|
478
|
+
)
|
|
457
479
|
if executed_query is None:
|
|
458
|
-
raise
|
|
480
|
+
raise click.UsageError(
|
|
481
|
+
f"{file_or_uri} is neither a (readable) file nor "
|
|
482
|
+
f"a query URI in the catalog graph {catalog_graph}"
|
|
483
|
+
)
|
|
459
484
|
app.echo_debug(
|
|
460
485
|
f"Execute ({executed_query.query_type}): "
|
|
461
486
|
f"{executed_query.label} < {executed_query.url}"
|
|
@@ -499,8 +524,15 @@ def execute_command( # noqa: PLR0913
|
|
|
499
524
|
@click.argument(
|
|
500
525
|
"QUERIES", nargs=-1, required=True, shell_complete=completion.remote_queries_and_sparql_files
|
|
501
526
|
)
|
|
527
|
+
@click.option(
|
|
528
|
+
"--catalog-graph",
|
|
529
|
+
default="https://ns.eccenca.com/data/queries/",
|
|
530
|
+
show_default=True,
|
|
531
|
+
shell_complete=completion.graph_uris,
|
|
532
|
+
help="The used query catalog graph.",
|
|
533
|
+
)
|
|
502
534
|
@click.pass_obj
|
|
503
|
-
def open_command(app: ApplicationContext, queries: tuple[str, ...]) -> None:
|
|
535
|
+
def open_command(app: ApplicationContext, queries: tuple[str, ...], catalog_graph: str) -> None:
|
|
504
536
|
"""Open queries in the editor of the query catalog in your browser.
|
|
505
537
|
|
|
506
538
|
With this command, you can open (remote) queries from the query catalog in
|
|
@@ -512,10 +544,13 @@ def open_command(app: ApplicationContext, queries: tuple[str, ...]) -> None:
|
|
|
512
544
|
opening multiple browser tabs.
|
|
513
545
|
"""
|
|
514
546
|
for file_or_uri in queries:
|
|
515
|
-
opened_query = QueryCatalog().get_query(file_or_uri)
|
|
547
|
+
opened_query = QueryCatalog(graph=catalog_graph).get_query(file_or_uri)
|
|
516
548
|
if opened_query is None:
|
|
517
|
-
raise
|
|
518
|
-
|
|
549
|
+
raise click.UsageError(
|
|
550
|
+
f"{file_or_uri} is neither a (readable) file nor "
|
|
551
|
+
f"a query URI in the catalog graph {catalog_graph}"
|
|
552
|
+
)
|
|
553
|
+
open_query_uri = opened_query.get_editor_url(graph=catalog_graph)
|
|
519
554
|
app.echo_debug(f"Open {file_or_uri}: {open_query_uri}")
|
|
520
555
|
click.launch(open_query_uri)
|
|
521
556
|
|
|
@@ -571,7 +606,7 @@ def status_command(
|
|
|
571
606
|
queries = query_status_list.apply_filters(ctx=ctx, filter_=filter_)
|
|
572
607
|
|
|
573
608
|
if query_id and len(queries) == 0:
|
|
574
|
-
raise UsageError(f"Query with ID '{query_id}' does not exist (anymore).")
|
|
609
|
+
raise click.UsageError(f"Query with ID '{query_id}' does not exist (anymore).")
|
|
575
610
|
|
|
576
611
|
if raw:
|
|
577
612
|
app.echo_info_json(queries)
|
|
@@ -666,14 +701,14 @@ def replay_command( # noqa: PLR0913
|
|
|
666
701
|
other data.
|
|
667
702
|
"""
|
|
668
703
|
if loops <= 0:
|
|
669
|
-
raise UsageError("Please set a positive loops integer value (>=1).")
|
|
704
|
+
raise click.UsageError("Please set a positive loops integer value (>=1).")
|
|
670
705
|
try:
|
|
671
706
|
with Path(replay_file).open(encoding="utf8") as _:
|
|
672
707
|
input_queries = load(_)
|
|
673
708
|
except JSONDecodeError as error:
|
|
674
|
-
raise ClickException(f"File {replay_file} is not a valid JSON document.") from error
|
|
709
|
+
raise click.ClickException(f"File {replay_file} is not a valid JSON document.") from error
|
|
675
710
|
if len(input_queries) == 0:
|
|
676
|
-
raise ClickException(f"File {replay_file} contains no queries.")
|
|
711
|
+
raise click.ClickException(f"File {replay_file} contains no queries.")
|
|
677
712
|
app.echo_debug(f"File {replay_file} contains {len(input_queries)} queries.")
|
|
678
713
|
|
|
679
714
|
statistic = ReplayStatistics(app=app, label=run_label)
|
cmem_cmemc/commands/store.py
CHANGED
|
@@ -10,6 +10,7 @@ from cmem.cmempy.dp.admin import create_showcase_data, delete_bootstrap_data, im
|
|
|
10
10
|
from cmem.cmempy.dp.admin.backup import get_zip, post_zip
|
|
11
11
|
from cmem.cmempy.dp.workspace import migrate_workspaces
|
|
12
12
|
from cmem.cmempy.health import get_dp_info
|
|
13
|
+
from cmem.cmempy.workspace import reload_workspace
|
|
13
14
|
from jinja2 import Template
|
|
14
15
|
|
|
15
16
|
from cmem_cmemc.command import CmemcCommand
|
|
@@ -53,7 +54,7 @@ def bootstrap_command(app: ApplicationContext, import_: bool, remove: bool) -> N
|
|
|
53
54
|
|
|
54
55
|
Note: The import part of this command is equivalent to the 'bootstrap-data' migration recipe
|
|
55
56
|
"""
|
|
56
|
-
if import_ and remove or not import_ and not remove:
|
|
57
|
+
if (import_ and remove) or (not import_ and not remove):
|
|
57
58
|
raise UsageError("Either use the --import or the --remove option.")
|
|
58
59
|
if import_:
|
|
59
60
|
app.echo_info("Update or import bootstrap data ... ", nl=False)
|
|
@@ -99,12 +100,15 @@ def showcase_command(app: ApplicationContext, scale: int, create: bool, delete:
|
|
|
99
100
|
raise UsageError("Either use the --create or the --delete flag.")
|
|
100
101
|
if delete:
|
|
101
102
|
raise NotImplementedError(
|
|
102
|
-
"This feature is not implemented yet.
|
|
103
|
+
"This feature is not implemented yet. Please delete the graphs manually."
|
|
103
104
|
)
|
|
104
105
|
if create:
|
|
105
106
|
app.echo_info(f"Create showcase data with scale factor {scale} ... ", nl=False)
|
|
106
107
|
create_showcase_data(scale_factor=scale)
|
|
107
108
|
app.echo_success("done")
|
|
109
|
+
app.echo_info("Reload workspace ... ", nl=False)
|
|
110
|
+
reload_workspace()
|
|
111
|
+
app.echo_success("done")
|
|
108
112
|
|
|
109
113
|
|
|
110
114
|
@click.command(cls=CmemcCommand, name="export")
|
cmem_cmemc/completion.py
CHANGED
|
@@ -643,10 +643,11 @@ def placeholder(ctx: Context, param: Argument, incomplete: str) -> list[Completi
|
|
|
643
643
|
args = get_completion_args(incomplete)
|
|
644
644
|
# setup configuration
|
|
645
645
|
ApplicationContext.set_connection_from_params(ctx.find_root().params)
|
|
646
|
+
catalog_graph = ctx.params.get("catalog_graph")
|
|
646
647
|
# extract placeholder from given queries in the command line
|
|
647
648
|
options = []
|
|
648
649
|
placeholders: dict[str, QueryPlaceholder] = {}
|
|
649
|
-
catalog = QueryCatalog()
|
|
650
|
+
catalog = QueryCatalog(graph=catalog_graph) if catalog_graph else QueryCatalog()
|
|
650
651
|
for _, arg in enumerate(args):
|
|
651
652
|
query = catalog.get_query(arg)
|
|
652
653
|
if query is not None:
|
|
@@ -654,7 +655,7 @@ def placeholder(ctx: Context, param: Argument, incomplete: str) -> list[Completi
|
|
|
654
655
|
placeholders = placeholders | get_placeholders_for_query(iri=query.url)
|
|
655
656
|
# collect all placeholder keys
|
|
656
657
|
options.extend(list(query.get_placeholder_keys()))
|
|
657
|
-
# look if cursor is in value position of the -p option and
|
|
658
|
+
# look if the cursor is in value position of the -p option and
|
|
658
659
|
# use placeholder value completion, in case it is
|
|
659
660
|
if args[len(args) - 2] in ("-p", "--parameter"):
|
|
660
661
|
key = args[len(args) - 1]
|
|
@@ -676,8 +677,10 @@ def placeholder(ctx: Context, param: Argument, incomplete: str) -> list[Completi
|
|
|
676
677
|
def remote_queries(ctx: Context, param: Argument, incomplete: str) -> list[CompletionItem]:
|
|
677
678
|
"""Prepare a list of query URIs."""
|
|
678
679
|
ApplicationContext.set_connection_from_params(ctx.find_root().params)
|
|
680
|
+
catalog_graph = ctx.params.get("catalog_graph")
|
|
681
|
+
catalog = QueryCatalog(graph=catalog_graph) if catalog_graph else QueryCatalog()
|
|
679
682
|
options = []
|
|
680
|
-
for query in
|
|
683
|
+
for query in catalog.get_queries().values():
|
|
681
684
|
url = query.short_url
|
|
682
685
|
label = query.label
|
|
683
686
|
options.append((url, label))
|
cmem_cmemc/context.py
CHANGED
|
@@ -29,9 +29,9 @@ from cmem_cmemc.exceptions import InvalidConfigurationError
|
|
|
29
29
|
from cmem_cmemc.string_processor import StringProcessor, process_row
|
|
30
30
|
from cmem_cmemc.utils import is_enabled, str_to_bool
|
|
31
31
|
|
|
32
|
-
DI_TARGET_VERSION = "v25.
|
|
32
|
+
DI_TARGET_VERSION = "v25.2.0"
|
|
33
33
|
|
|
34
|
-
EXPLORE_TARGET_VERSION = "v25.
|
|
34
|
+
EXPLORE_TARGET_VERSION = "v25.2.0"
|
|
35
35
|
|
|
36
36
|
KNOWN_CONFIG_KEYS = {
|
|
37
37
|
"CMEM_BASE_URI": cmempy_config.get_cmem_base_uri,
|
|
@@ -31,6 +31,7 @@ def get_icon_for_command_group(full_name: str) -> str:
|
|
|
31
31
|
"project variable": "material/variable-box",
|
|
32
32
|
"query": "eccenca/application-queries",
|
|
33
33
|
"graph": "eccenca/artefact-dataset-eccencadataplatform",
|
|
34
|
+
"graph imports": "material/family-tree",
|
|
34
35
|
"graph validation": "octicons/verified-16",
|
|
35
36
|
"vocabulary": "eccenca/application-vocabularies",
|
|
36
37
|
"vocabulary cache": "eccenca/application-vocabularies",
|
|
@@ -58,6 +59,7 @@ def get_tags_for_command_group(full_name: str) -> str:
|
|
|
58
59
|
"project variable": ["Variables", "cmemc"],
|
|
59
60
|
"query": ["SPARQL", "cmemc"],
|
|
60
61
|
"graph": ["KnowledgeGraph", "cmemc"],
|
|
62
|
+
"graph imports": ["KnowledgeGraph", "cmemc"],
|
|
61
63
|
"graph validation": ["KnowledgeGraph", "Validation", "cmemc"],
|
|
62
64
|
"vocabulary": ["Vocabulary", "cmemc"],
|
|
63
65
|
"vocabulary cache": ["Vocabulary", "cmemc"],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: cmem-cmemc
|
|
3
|
-
Version: 25.
|
|
3
|
+
Version: 25.4.0
|
|
4
4
|
Summary: Command line client for eccenca Corporate Memory
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Author: eccenca
|
|
@@ -30,7 +30,7 @@ Requires-Dist: certifi (>=2024.2.2)
|
|
|
30
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.3.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)
|
|
@@ -16,24 +16,24 @@ cmem_cmemc/commands/metrics.py,sha256=pIBRTq90f7MEI99HLdFLN3D1xQ2Z2u6VKUeTIz0X7D
|
|
|
16
16
|
cmem_cmemc/commands/migration.py,sha256=y9v4Be7WELGjDGDBZrfLBeqU_G_JH1fnP5UVG9qjB3g,9638
|
|
17
17
|
cmem_cmemc/commands/project.py,sha256=zHqs7XBsRjzTO6EGxaN_TgZ_rsqyIPF59aObuMhsfmA,20593
|
|
18
18
|
cmem_cmemc/commands/python.py,sha256=7ExdKr7nTED5ZZGjeBk5UngNI3F_KNcavwUgwaxApV0,11965
|
|
19
|
-
cmem_cmemc/commands/query.py,sha256=
|
|
19
|
+
cmem_cmemc/commands/query.py,sha256=etDC1Vg9W1eu5qYuWABozzRZFBW4i0N0Gmiu_rNPgWo,28801
|
|
20
20
|
cmem_cmemc/commands/resource.py,sha256=74cn_yqMv3a6xOQAPpNCuluTWEH-_2PGENJnl7y8qz4,7778
|
|
21
21
|
cmem_cmemc/commands/scheduler.py,sha256=zYeO1-Hlxh9D-I9JIweQ-SEA0la0wv0EicY_UY7rNCg,8751
|
|
22
|
-
cmem_cmemc/commands/store.py,sha256=
|
|
22
|
+
cmem_cmemc/commands/store.py,sha256=W_6LXq98If50-X-XYZUQsYodVwUjOSm3_jyMp62pFuA,10599
|
|
23
23
|
cmem_cmemc/commands/user.py,sha256=ANZpeOBA46xiqOcNPrueComsCV0gEBbav-vOL9VgyX4,12535
|
|
24
24
|
cmem_cmemc/commands/validation.py,sha256=Fv5yBIXzqy8FyjIzo-wJkv_7H5bhtcQhMxFIlJEVoBw,29495
|
|
25
25
|
cmem_cmemc/commands/variable.py,sha256=aLRH_rFe0h7JBpKIqzcevbk26vczgUGokIDY8g6LPxA,11576
|
|
26
26
|
cmem_cmemc/commands/vocabulary.py,sha256=fdXsG7gspA6HeOasXis1ky9UIZG-qRYP-NiFcvzCTKM,17840
|
|
27
27
|
cmem_cmemc/commands/workflow.py,sha256=HSgEMbK_anYZpme4yiQ4-pxGfQcL4YWa29lrm0aT8Nk,25777
|
|
28
28
|
cmem_cmemc/commands/workspace.py,sha256=IcZgBsvtulLRFofS70qpln6oKQIZunrVLfSAUeiFhCA,4579
|
|
29
|
-
cmem_cmemc/completion.py,sha256=
|
|
29
|
+
cmem_cmemc/completion.py,sha256=W43pH-WbHmj2-vMcu1kNkJbFhcPXr4OFIHZyHdw6PSM,45313
|
|
30
30
|
cmem_cmemc/config_parser.py,sha256=NduwOT-BB_uAk3pz1Y-ex18RQJW-jjHzkQKCEUUK6Hc,1276
|
|
31
31
|
cmem_cmemc/constants.py,sha256=pzZYbSaTDUiWmE-VOAHB20oivHew5_FP9UTejySsVK4,550
|
|
32
|
-
cmem_cmemc/context.py,sha256=
|
|
32
|
+
cmem_cmemc/context.py,sha256=giSw-5BYQtf_Tw0x33JlpzoZY5wP4IMaaoSJMvYzMSc,22247
|
|
33
33
|
cmem_cmemc/exceptions.py,sha256=0lsGOfXhciNGJloJGERMbbPuBbs5IwIIJ_5YnY9qQ-8,546
|
|
34
34
|
cmem_cmemc/manual_helper/__init__.py,sha256=G3Lqw2aPxo8x63Tg7L0aa5VD9BMaRzZDmhrog7IuEPg,43
|
|
35
35
|
cmem_cmemc/manual_helper/graph.py,sha256=HU04NYWeJ6LmW4UC7qHr1v1qsm2Md61pJ-pgWUHFmHY,3647
|
|
36
|
-
cmem_cmemc/manual_helper/multi_page.py,sha256=
|
|
36
|
+
cmem_cmemc/manual_helper/multi_page.py,sha256=_nw5yFVo7K1e9n5qETJcbkq12ru_Fq9TH0u8EzyyRz4,12338
|
|
37
37
|
cmem_cmemc/manual_helper/single_page.py,sha256=0mMn_IJwFCe-WPKAmxGEStb8IINLpQRxAx_F1pIxg1E,1526
|
|
38
38
|
cmem_cmemc/migrations/__init__.py,sha256=i6Ri7qN58ou_MwOzm2KibPkXOD7u-1ELky-nUE5LjAA,24
|
|
39
39
|
cmem_cmemc/migrations/abc.py,sha256=UGJzrvMzUFdp2-sosp49ObRI-SrUSzLJqLEhvB4QTzg,3564
|
|
@@ -53,8 +53,8 @@ cmem_cmemc/smart_path/clients/http.py,sha256=3clZu2v4uuOvPY4MY_8SVSy7hIXJDNooahF
|
|
|
53
53
|
cmem_cmemc/string_processor.py,sha256=kSVePdgFmf2ekurKj6TbDJn6ur82VGLwCsTJ9ODfBEU,2879
|
|
54
54
|
cmem_cmemc/title_helper.py,sha256=7frjAR54_Xc1gszOWXfzSmKFTawNJQ7kkXhZcHmQLyw,1250
|
|
55
55
|
cmem_cmemc/utils.py,sha256=PkDFDISz7uemJCmyIWmtCcjfR_gRnRBL8ao76Ex-py8,14669
|
|
56
|
-
cmem_cmemc-25.
|
|
57
|
-
cmem_cmemc-25.
|
|
58
|
-
cmem_cmemc-25.
|
|
59
|
-
cmem_cmemc-25.
|
|
60
|
-
cmem_cmemc-25.
|
|
56
|
+
cmem_cmemc-25.4.0.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
57
|
+
cmem_cmemc-25.4.0.dist-info/METADATA,sha256=SXMr4rUBE2nGtL-eKPcpwPtWTI-FJafD8EcDJwdi6l8,5642
|
|
58
|
+
cmem_cmemc-25.4.0.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
|
|
59
|
+
cmem_cmemc-25.4.0.dist-info/entry_points.txt,sha256=2G0AWAyz501EHpFTjIxccdlCTsHt80NT0pdUGP1QkPA,45
|
|
60
|
+
cmem_cmemc-25.4.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|