cmem-cmemc 26.1.0rc1__tar.gz → 26.1.0rc2__tar.gz
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-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/PKG-INFO +2 -2
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/package.py +20 -71
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/manual_helper/multi_page.py +2 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/pyproject.toml +3 -3
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/LICENSE +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/README-public.md +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/__init__.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/_cmemc.zsh +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/cli.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/command.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/command_group.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/__init__.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/acl.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/admin.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/client.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/config.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/dataset.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/file.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/graph.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/graph_imports.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/graph_insights.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/manual.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/metrics.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/migration.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/project.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/python.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/query.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/scheduler.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/store.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/user.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/validation.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/variable.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/vocabulary.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/workflow.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/commands/workspace.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/completion.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/config_parser.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/constants.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/context.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/exceptions.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/manual_helper/__init__.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/manual_helper/graph.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/manual_helper/single_page.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/migrations/__init__.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/migrations/abc.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/migrations/access_conditions_243.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/migrations/bootstrap_data.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/migrations/remove_noop_triple_251.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/migrations/shapes_widget_integrations_243.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/migrations/sparql_query_texts_242.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/migrations/workspace_configurations.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/object_list.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/parameter_types/__init__.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/parameter_types/path.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/placeholder.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/smart_path/__init__.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/smart_path/clients/__init__.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/smart_path/clients/http.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/string_processor.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/title_helper.py +0 -0
- {cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cmem-cmemc
|
|
3
|
-
Version: 26.1.
|
|
3
|
+
Version: 26.1.0rc2
|
|
4
4
|
Summary: Command line client for eccenca Corporate Memory
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
License-File: LICENSE
|
|
@@ -32,7 +32,7 @@ Requires-Dist: certifi (>=2024.2.2)
|
|
|
32
32
|
Requires-Dist: click (>=8.3.0,<9.0.0)
|
|
33
33
|
Requires-Dist: click-didyoumean (>=0.3.1,<0.4.0)
|
|
34
34
|
Requires-Dist: click-help-colors (>=0.9.4,<0.10.0)
|
|
35
|
-
Requires-Dist: cmem-client (
|
|
35
|
+
Requires-Dist: cmem-client (==0.6.0)
|
|
36
36
|
Requires-Dist: cmem-cmempy (==25.4.0)
|
|
37
37
|
Requires-Dist: configparser (>=7.2.0,<8.0.0)
|
|
38
38
|
Requires-Dist: humanize (>=4.14.0,<5.0.0)
|
|
@@ -13,7 +13,6 @@ from cmem_client.repositories.marketplace_packages import (
|
|
|
13
13
|
MarketplacePackagesImportConfig,
|
|
14
14
|
MarketplacePackagesRepository,
|
|
15
15
|
)
|
|
16
|
-
from eccenca_marketplace_client.manifests import AbstractPackageManifest, ManifestMetadata
|
|
17
16
|
from eccenca_marketplace_client.package_version import PackageVersion
|
|
18
17
|
from pydantic_extra_types.semantic_version import SemanticVersion
|
|
19
18
|
|
|
@@ -93,55 +92,6 @@ def _complete_installed_package_ids(
|
|
|
93
92
|
return completion.finalize_completion(candidates=candidates, incomplete=incomplete)
|
|
94
93
|
|
|
95
94
|
|
|
96
|
-
@click.command(cls=CmemcCommand, name="create")
|
|
97
|
-
@click.argument("package_id", required=True)
|
|
98
|
-
@click.option(
|
|
99
|
-
"--name",
|
|
100
|
-
type=click.STRING,
|
|
101
|
-
help=ManifestMetadata.model_fields.get("name").description + " Defaults to package ID.",
|
|
102
|
-
)
|
|
103
|
-
@click.option(
|
|
104
|
-
"--version",
|
|
105
|
-
type=click.STRING,
|
|
106
|
-
default="0.0.1",
|
|
107
|
-
show_default=True,
|
|
108
|
-
help=AbstractPackageManifest.model_fields.get("package_version").description,
|
|
109
|
-
)
|
|
110
|
-
@click.option(
|
|
111
|
-
"--description",
|
|
112
|
-
type=click.STRING,
|
|
113
|
-
help=ManifestMetadata.model_fields.get("description").description,
|
|
114
|
-
default="This is the first version of a wonderful eccenca Corporate Memory package 🤓",
|
|
115
|
-
show_default=True,
|
|
116
|
-
)
|
|
117
|
-
@click.pass_obj
|
|
118
|
-
def create_command(
|
|
119
|
-
app: ApplicationContext, package_id: str, version: str, name: str | None, description: str
|
|
120
|
-
) -> None:
|
|
121
|
-
"""Initialize an empty package directory with a minimal manifest."""
|
|
122
|
-
if Path(package_id).exists():
|
|
123
|
-
raise click.UsageError(f"Package directory '{package_id}' already exists.")
|
|
124
|
-
if name is None:
|
|
125
|
-
name = package_id
|
|
126
|
-
manifest_src = {
|
|
127
|
-
"package_id": package_id,
|
|
128
|
-
"package_type": "project",
|
|
129
|
-
"package_version": version,
|
|
130
|
-
"metadata": {
|
|
131
|
-
"name": name,
|
|
132
|
-
"description": description,
|
|
133
|
-
},
|
|
134
|
-
"files": [],
|
|
135
|
-
}
|
|
136
|
-
package_version = PackageVersion.from_json(json.dumps(manifest_src))
|
|
137
|
-
directory = Path(package_id)
|
|
138
|
-
app.echo_info(f"Initialize package directory '{directory}' ... ", nl=False)
|
|
139
|
-
directory.mkdir(parents=True, exist_ok=True)
|
|
140
|
-
manifest = directory / "manifest.json"
|
|
141
|
-
manifest.write_text(package_version.manifest.model_dump_json(indent=2))
|
|
142
|
-
app.echo_success("done")
|
|
143
|
-
|
|
144
|
-
|
|
145
95
|
@click.command(cls=CmemcCommand, name="inspect")
|
|
146
96
|
@click.argument(
|
|
147
97
|
"PACKAGE_PATH",
|
|
@@ -165,7 +115,9 @@ def inspect_command(app: ApplicationContext, package_path: Path, key: str, raw:
|
|
|
165
115
|
"""Inspect the manifest of a package."""
|
|
166
116
|
path = Path(package_path)
|
|
167
117
|
package_version = (
|
|
168
|
-
PackageVersion.from_directory(path
|
|
118
|
+
PackageVersion.from_directory(path, validate_files=False)
|
|
119
|
+
if path.is_dir()
|
|
120
|
+
else PackageVersion.from_archive(path)
|
|
169
121
|
)
|
|
170
122
|
manifest = package_version.manifest
|
|
171
123
|
manifest_data = json.loads(manifest.model_dump_json(indent=2))
|
|
@@ -281,7 +233,7 @@ def install_command(
|
|
|
281
233
|
if input_path:
|
|
282
234
|
package_path = Path(input_path)
|
|
283
235
|
package_version = (
|
|
284
|
-
PackageVersion.from_directory(package_path)
|
|
236
|
+
PackageVersion.from_directory(package_path, validate_files=False)
|
|
285
237
|
if package_path.is_dir()
|
|
286
238
|
else PackageVersion.from_archive(package_path)
|
|
287
239
|
)
|
|
@@ -447,7 +399,7 @@ def build_command(
|
|
|
447
399
|
Package archives can be published to the marketplace using the `package publish` command.
|
|
448
400
|
"""
|
|
449
401
|
package_path = Path(package_directory)
|
|
450
|
-
package_version = PackageVersion.from_directory(package_path)
|
|
402
|
+
package_version = PackageVersion.from_directory(package_path, validate_files=False)
|
|
451
403
|
if version:
|
|
452
404
|
if version.startswith("v"):
|
|
453
405
|
version = version[1:]
|
|
@@ -466,25 +418,32 @@ def build_command(
|
|
|
466
418
|
|
|
467
419
|
if version_str.endswith("dirty"):
|
|
468
420
|
app.echo_warning(
|
|
469
|
-
"Dirty Repository: Your version
|
|
421
|
+
"Dirty Repository: Your version string ends with 'dirty'."
|
|
470
422
|
"This indicates an unclean repository."
|
|
471
423
|
)
|
|
424
|
+
if version_str == "0.0.0":
|
|
425
|
+
raise CmemcError(
|
|
426
|
+
"Invalid Version 0.0.0: "
|
|
427
|
+
"Use the --version option to override this, or change the manifest."
|
|
428
|
+
)
|
|
472
429
|
if cpa_file.exists() and not replace:
|
|
473
430
|
raise CmemcError(
|
|
474
431
|
f"Package archive `{cpa_file}` already exists. Use `--replace` to overwrite."
|
|
475
432
|
)
|
|
476
433
|
app.echo_info(f"Building package archive `{cpa_file.name}` ... ", nl=False)
|
|
434
|
+
package_version.validate_text_files(package_version.manifest, package_path)
|
|
435
|
+
package_version.validate_image_files(package_version.manifest, package_path)
|
|
477
436
|
package_version.build_archive(archive=cpa_file)
|
|
478
437
|
app.echo_success("done")
|
|
479
438
|
|
|
480
439
|
|
|
481
440
|
@click.command(cls=CmemcCommand, name="publish")
|
|
482
441
|
@click.argument(
|
|
483
|
-
"
|
|
442
|
+
"PACKAGE_ARCHIVE",
|
|
484
443
|
required=True,
|
|
485
444
|
type=ClickSmartPath(
|
|
486
445
|
allow_dash=False,
|
|
487
|
-
dir_okay=
|
|
446
|
+
dir_okay=False,
|
|
488
447
|
readable=True,
|
|
489
448
|
exists=True,
|
|
490
449
|
remote_okay=True,
|
|
@@ -497,25 +456,16 @@ def build_command(
|
|
|
497
456
|
default="https://marketplace.eccenca.dev/",
|
|
498
457
|
)
|
|
499
458
|
@click.pass_obj
|
|
500
|
-
def publish_command(app: ApplicationContext,
|
|
459
|
+
def publish_command(app: ApplicationContext, package_archive: str, marketplace_url: str) -> None:
|
|
501
460
|
"""Publish a package archive to the marketplace server."""
|
|
502
|
-
package_path = Path(
|
|
461
|
+
package_path = Path(package_archive)
|
|
503
462
|
|
|
504
|
-
package_version = (
|
|
505
|
-
PackageVersion.from_directory(package_path)
|
|
506
|
-
if package_path.is_dir()
|
|
507
|
-
else PackageVersion.from_archive(package_path)
|
|
508
|
-
)
|
|
463
|
+
package_version = PackageVersion.from_archive(package_path)
|
|
509
464
|
package_id = package_version.manifest.package_id
|
|
510
465
|
|
|
511
466
|
app.echo_info(f"Publishing package `{package_id}` ... ", nl=False)
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
package_data = b"".join(PackageVersion.create_archive(package_path))
|
|
515
|
-
filename = f"{package_id}.cpa"
|
|
516
|
-
else:
|
|
517
|
-
package_data = package_path.read_bytes()
|
|
518
|
-
filename = package_path.name
|
|
467
|
+
package_data = package_path.read_bytes()
|
|
468
|
+
filename = package_path.name
|
|
519
469
|
|
|
520
470
|
if marketplace_url.endswith("/"):
|
|
521
471
|
marketplace_url = marketplace_url[:-1]
|
|
@@ -538,7 +488,6 @@ def package_group() -> CmemcGroup: # type: ignore[empty-body]
|
|
|
538
488
|
"""List, (un)install, export, create, or inspect packages."""
|
|
539
489
|
|
|
540
490
|
|
|
541
|
-
package_group.add_command(create_command)
|
|
542
491
|
package_group.add_command(inspect_command)
|
|
543
492
|
package_group.add_command(list_command)
|
|
544
493
|
package_group.add_command(install_command)
|
|
@@ -26,6 +26,7 @@ def get_icon_for_command_group(full_name: str) -> str:
|
|
|
26
26
|
"admin workspace python": "material/language-python",
|
|
27
27
|
"config": "material/cog-outline",
|
|
28
28
|
"dataset": "eccenca/artefact-dataset",
|
|
29
|
+
"package": "material/shopping",
|
|
29
30
|
"project": "eccenca/artefact-project",
|
|
30
31
|
"project file": "eccenca/artefact-file",
|
|
31
32
|
"project variable": "material/variable-box",
|
|
@@ -54,6 +55,7 @@ def get_tags_for_command_group(full_name: str) -> str:
|
|
|
54
55
|
"admin workspace python": ["Python", "cmemc"],
|
|
55
56
|
"config": ["Configuration", "cmemc"],
|
|
56
57
|
"dataset": ["cmemc"],
|
|
58
|
+
"package": ["cmemc", "Package"],
|
|
57
59
|
"project": ["Project", "cmemc"],
|
|
58
60
|
"project file": ["Files", "cmemc"],
|
|
59
61
|
"project variable": ["Variables", "cmemc"],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "cmem-cmemc"
|
|
3
|
-
version = "26.1.
|
|
3
|
+
version = "26.1.0rc2"
|
|
4
4
|
description = "Command line client for eccenca Corporate Memory"
|
|
5
5
|
license = "Apache-2.0"
|
|
6
6
|
classifiers = [
|
|
@@ -36,7 +36,7 @@ click-didyoumean = "^0.3.1"
|
|
|
36
36
|
click-help-colors = "^0.9.4"
|
|
37
37
|
cmem-cmempy = "==25.4.0"
|
|
38
38
|
# cmem-cmempy = { path = "cmempy", develop = true }
|
|
39
|
-
cmem-client = "
|
|
39
|
+
cmem-client = "=0.6.0"
|
|
40
40
|
# cmem-client = { path = "cmem-client", develop = true }
|
|
41
41
|
configparser = "^7.2.0"
|
|
42
42
|
jinja2 = "^3.1.6"
|
|
@@ -71,7 +71,7 @@ pytest-mock = "^3.14.1"
|
|
|
71
71
|
requests-mock = "^1.12.1"
|
|
72
72
|
ruff = "^0.7.4"
|
|
73
73
|
semver = "^3.0.4"
|
|
74
|
-
trivy-py-ecc = "^0.
|
|
74
|
+
trivy-py-ecc = "^0.68"
|
|
75
75
|
types-python-dateutil = "^2.9.0.20240316"
|
|
76
76
|
types-requests = "^2.32.0.20241016"
|
|
77
77
|
types-six = "^1.16.21.20240425"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/migrations/access_conditions_243.py
RENAMED
|
File without changes
|
|
File without changes
|
{cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/migrations/remove_noop_triple_251.py
RENAMED
|
File without changes
|
|
File without changes
|
{cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/migrations/sparql_query_texts_242.py
RENAMED
|
File without changes
|
{cmem_cmemc-26.1.0rc1 → cmem_cmemc-26.1.0rc2}/cmem_cmemc/migrations/workspace_configurations.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|