deriva-ml 1.14.34__tar.gz → 1.14.36__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.
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/PKG-INFO +1 -1
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/pyproject.toml +5 -2
- deriva_ml-1.14.36/src/deriva_ml/bump_version.py +142 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/execution/workflow.py +3 -5
- deriva_ml-1.14.36/src/deriva_ml/install_kernel.py +46 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml.egg-info/PKG-INFO +1 -1
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml.egg-info/SOURCES.txt +2 -1
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml.egg-info/entry_points.txt +2 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/uv.lock +311 -311
- deriva_ml-1.14.34/release.sh +0 -37
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/.github/release-drafter.yml +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/.github/workflows/publish-docs.yml +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/.github/workflows/release.yml +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/.gitignore +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/LICENSE +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/README.md +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/.DS_Store +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/Notebooks/DerivaML Create Notes.ipynb +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/Notebooks/DerivaML Dataset.ipynb +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/Notebooks/DerivaML Execution.ipynb +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/Notebooks/DerivaML Features.ipynb +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/Notebooks/DerivaML Ingest.ipynb +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/Notebooks/DerivaML Vocabulary.ipynb +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/assets/ERD.png +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/assets/Launcher.png +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/assets/copy_minid.png +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/assets/deriva-logo.png +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/assets/deriva-ml.pdf +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/assets/sharing-at-home.pdf +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/code-docs/dataset.md +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/code-docs/dataset_aux_classes.md +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/code-docs/dataset_bag.md +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/code-docs/deriva_definitions.md +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/code-docs/deriva_ml_base.md +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/code-docs/deriva_model.md +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/code-docs/execution.md +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/code-docs/execution_configuration.md +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/code-docs/feature.md +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/code-docs/upload.md +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/index.md +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/release-notes.md +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/user-guide/datasets.md +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/user-guide/deriva_ml_structure.md +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/user-guide/execution-configuration.md +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/user-guide/file-assets.md +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/user-guide/identifiers.md +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/user-guide/install.md +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/user-guide/notebooks.md +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/docs/user-guide/overview.md +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/mkdocs.yml +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/setup.cfg +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/__init__.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/core/__init__.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/core/base.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/core/constants.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/core/definitions.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/core/enums.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/core/ermrest.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/core/exceptions.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/core/filespec.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/dataset/__init__.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/dataset/aux_classes.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/dataset/dataset.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/dataset/dataset_bag.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/dataset/history.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/dataset/upload.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/demo_catalog.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/execution/__init__.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/execution/environment.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/execution/execution.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/execution/execution_configuration.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/feature.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/model/__init__.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/model/catalog.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/model/database.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/model/sql_mapper.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/run_notebook.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/schema/__init__.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/schema/annotations.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/schema/check_schema.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/schema/create_schema.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/schema/deriva-ml-reference.json +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/schema/policy.json +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml/schema/table_comments_utils.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml.egg-info/dependency_links.txt +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml.egg-info/requires.txt +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/src/deriva_ml.egg-info/top_level.txt +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/__init__.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/conftest.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/core/__init__.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/core/test_basic_tables.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/core/test_file.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/core/test_vocabulary.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/dataset/__init__.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/dataset/demo-catalog-schema.json +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/dataset/deriva-ml-reference.json +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/dataset/eye-ai-catalog-schema.json +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/dataset/test_dataset_export.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/dataset/test_dataset_version.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/dataset/test_datasets.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/dataset/test_download.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/execution/__init__.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/execution/test_execution.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/execution/workflow-test.ipynb +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/execution/workflow-test.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/feature/test_features.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/model/__init__.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/model/test_database.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/model/test_models.py +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/test-files/execution-parameters.json +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/test-files/notebook-parameters.json +0 -0
- {deriva_ml-1.14.34 → deriva_ml-1.14.36}/tests/test_utils.py +0 -0
|
@@ -27,6 +27,9 @@ deriva-ml-table-comments-utils = "deriva_ml.schema_setup.table_comments_utils:ma
|
|
|
27
27
|
deriva-ml-create-schema = "deriva_ml.schema_setup.create_schema:main"
|
|
28
28
|
deriva-ml-alter-annotation = "deriva_ml.schema_setup.alter_annotation:main"
|
|
29
29
|
deriva-ml-run-notebook = "deriva_ml.run_notebook:main"
|
|
30
|
+
deriva-ml-install-kernel = "deriva_ml.install_kernel:main"
|
|
31
|
+
bump-version = "deriva_ml.bump_version:main"
|
|
32
|
+
|
|
30
33
|
deriva-ml-check-catalog-schema = "deriva_ml.schema.check_schema:main"
|
|
31
34
|
|
|
32
35
|
[project.optional-dependencies]
|
|
@@ -77,8 +80,8 @@ addopts = "-v --import-mode=importlib"
|
|
|
77
80
|
[tool.ruff]
|
|
78
81
|
line-length = 120
|
|
79
82
|
target-version = "py310"
|
|
80
|
-
select = ["E", "F", "I", "PTH"]
|
|
81
|
-
ignore = []
|
|
83
|
+
lint.select = ["E", "F", "I", "PTH"]
|
|
84
|
+
lint.ignore = []
|
|
82
85
|
|
|
83
86
|
[tool.ruff.format]
|
|
84
87
|
# Like Black, use double quotes for strings.
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Release helper: seed initial semver tag if none exists, otherwise bump with bump-my-version.
|
|
4
|
+
|
|
5
|
+
Usage:
|
|
6
|
+
python release.py [patch|minor|major]
|
|
7
|
+
|
|
8
|
+
Env vars:
|
|
9
|
+
START - initial version if no tag exists (default: 0.1.0)
|
|
10
|
+
PREFIX - tag prefix (default: v)
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
import argparse
|
|
16
|
+
import os
|
|
17
|
+
import shutil
|
|
18
|
+
import subprocess
|
|
19
|
+
import sys
|
|
20
|
+
from typing import Sequence
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def run(
|
|
24
|
+
cmd: Sequence[str], check: bool = True, capture: bool = False, quiet: bool = False
|
|
25
|
+
) -> subprocess.CompletedProcess:
|
|
26
|
+
if not quiet:
|
|
27
|
+
print(f"$ {' '.join(cmd)}")
|
|
28
|
+
return subprocess.run(
|
|
29
|
+
cmd,
|
|
30
|
+
check=check,
|
|
31
|
+
capture_output=capture,
|
|
32
|
+
text=True,
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def in_git_repo() -> bool:
|
|
37
|
+
try:
|
|
38
|
+
run(["git", "rev-parse", "--is-inside-work-tree"], capture=True)
|
|
39
|
+
return True
|
|
40
|
+
except subprocess.CalledProcessError:
|
|
41
|
+
return False
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def has_commits() -> bool:
|
|
45
|
+
try:
|
|
46
|
+
run(["git", "log", "-1"], capture=True)
|
|
47
|
+
return True
|
|
48
|
+
except subprocess.CalledProcessError:
|
|
49
|
+
return False
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def latest_semver_tag(prefix: str) -> str | None:
|
|
53
|
+
# Use git's matcher to keep parity with Bash: prefix + x.y.z
|
|
54
|
+
pattern = f"{prefix}[0-9]*.[0-9]*.[0-9]*"
|
|
55
|
+
try:
|
|
56
|
+
cp = run(["git", "describe", "--tags", "--abbrev=0", "--match", pattern], capture=True, quiet=True)
|
|
57
|
+
tag = cp.stdout.strip()
|
|
58
|
+
return tag or None
|
|
59
|
+
except subprocess.CalledProcessError:
|
|
60
|
+
return None
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def seed_initial_tag(tag: str) -> None:
|
|
64
|
+
print(f"No existing semver tag found. Seeding initial tag: {tag}")
|
|
65
|
+
run(["git", "tag", tag, "-m", f"Initial release {tag}"])
|
|
66
|
+
# Push tags (ignore failure to keep parity with bash's simple flow)
|
|
67
|
+
run(["git", "push", "--tags"])
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def require_tool(name: str) -> None:
|
|
71
|
+
if shutil.which(name) is None:
|
|
72
|
+
print(f"Error: required tool '{name}' not found on PATH.", file=sys.stderr)
|
|
73
|
+
sys.exit(1)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def main() -> int:
|
|
77
|
+
parser = argparse.ArgumentParser(
|
|
78
|
+
description="Set a new version tag for the current repository, and push to remote."
|
|
79
|
+
)
|
|
80
|
+
parser.add_argument(
|
|
81
|
+
"bump", nargs="?", default="patch", choices=["patch", "minor", "major"], help="Which semver part to bump."
|
|
82
|
+
)
|
|
83
|
+
args = parser.parse_args()
|
|
84
|
+
|
|
85
|
+
start = os.environ.get("START", "0.1.0")
|
|
86
|
+
prefix = os.environ.get("PREFIX", "v")
|
|
87
|
+
|
|
88
|
+
# Sanity checks
|
|
89
|
+
require_tool("git")
|
|
90
|
+
require_tool("uv")
|
|
91
|
+
|
|
92
|
+
if not in_git_repo():
|
|
93
|
+
print("Not a git repo.", file=sys.stderr)
|
|
94
|
+
return 1
|
|
95
|
+
|
|
96
|
+
# Ensure tags visible in shallow clones
|
|
97
|
+
try:
|
|
98
|
+
run(["git", "fetch", "--tags", "--quiet"], check=False)
|
|
99
|
+
except Exception:
|
|
100
|
+
pass # non-fatal
|
|
101
|
+
|
|
102
|
+
if not has_commits():
|
|
103
|
+
print("No commits found. Commit something before tagging.", file=sys.stderr)
|
|
104
|
+
return 1
|
|
105
|
+
|
|
106
|
+
# Find latest semver tag with prefix
|
|
107
|
+
tag = latest_semver_tag(prefix)
|
|
108
|
+
|
|
109
|
+
if not tag:
|
|
110
|
+
seed_initial_tag(f"{prefix}{start}")
|
|
111
|
+
print(f"Seeded {prefix}{start}. Done.")
|
|
112
|
+
return 0
|
|
113
|
+
|
|
114
|
+
print(f"Bumping version: {args.bump}")
|
|
115
|
+
|
|
116
|
+
# Bump using bump-my-version via uv
|
|
117
|
+
# Mirrors: uv run bump-my-version bump $BUMP --verbose
|
|
118
|
+
try:
|
|
119
|
+
run(["uv", "run", "bump-my-version", "bump", args.bump, "--verbose"])
|
|
120
|
+
except subprocess.CalledProcessError as e:
|
|
121
|
+
print(e.stdout or "", end="")
|
|
122
|
+
print(e.stderr or "", end="", file=sys.stderr)
|
|
123
|
+
return e.returncode
|
|
124
|
+
|
|
125
|
+
# Push commits and tags
|
|
126
|
+
print("Pushing changes to remote repository...")
|
|
127
|
+
run(["git", "push", "--follow-tags"])
|
|
128
|
+
|
|
129
|
+
# Retrieve new version tag
|
|
130
|
+
try:
|
|
131
|
+
cp = run(["git", "describe", "--tags", "--abbrev=0"], capture=True)
|
|
132
|
+
new_tag = cp.stdout.strip()
|
|
133
|
+
print(f"New version tag: {new_tag}")
|
|
134
|
+
except subprocess.CalledProcessError:
|
|
135
|
+
print("Warning: unable to determine new tag via git describe.", file=sys.stderr)
|
|
136
|
+
|
|
137
|
+
print("Release process complete!")
|
|
138
|
+
return 0
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
if __name__ == "__main__":
|
|
142
|
+
sys.exit(main())
|
|
@@ -100,9 +100,6 @@ class Workflow(BaseModel):
|
|
|
100
100
|
- DERIVA_ML_WORKFLOW_CHECKSUM: Override the computed checksum
|
|
101
101
|
|
|
102
102
|
Args:
|
|
103
|
-
name: Human-readable name for the workflow.
|
|
104
|
-
workflow_type: Type of workflow (must be a vocabulary term).
|
|
105
|
-
description: Optional description of workflow purpose.
|
|
106
103
|
|
|
107
104
|
Returns:
|
|
108
105
|
Workflow: New workflow instance with detected Git information.
|
|
@@ -240,6 +237,7 @@ class Workflow(BaseModel):
|
|
|
240
237
|
"""
|
|
241
238
|
|
|
242
239
|
server, session = Workflow._get_notebook_session()
|
|
240
|
+
|
|
243
241
|
if server and session:
|
|
244
242
|
relative_path = session["notebook"]["path"]
|
|
245
243
|
# Join the notebook directory with the relative path
|
|
@@ -321,8 +319,8 @@ class Workflow(BaseModel):
|
|
|
321
319
|
# Being called from the command line interpreter.
|
|
322
320
|
filename = Path.cwd() / Path("REPL")
|
|
323
321
|
# Get the caller's filename, which is two up the stack from here.
|
|
324
|
-
|
|
325
|
-
|
|
322
|
+
else:
|
|
323
|
+
raise DerivaMLException("Looking for caller failed") # Stack is too shallow
|
|
326
324
|
return filename, is_notebook
|
|
327
325
|
|
|
328
326
|
@staticmethod
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# your_pkg/install_kernel.py
|
|
2
|
+
import sys
|
|
3
|
+
import re
|
|
4
|
+
from importlib import metadata
|
|
5
|
+
from ipykernel.kernelspec import install as install_kernel
|
|
6
|
+
|
|
7
|
+
def _dist_name_for_this_package() -> str:
|
|
8
|
+
"""
|
|
9
|
+
Try to resolve the distribution name that provides this package.
|
|
10
|
+
Works in editable installs and wheels.
|
|
11
|
+
"""
|
|
12
|
+
# Top-level package name of this module (your_pkg)
|
|
13
|
+
top_pkg = __name__.split(".")[0]
|
|
14
|
+
|
|
15
|
+
# Map top-level packages -> distributions
|
|
16
|
+
pkg_to_dists = metadata.packages_distributions()
|
|
17
|
+
dists = pkg_to_dists.get(top_pkg) or []
|
|
18
|
+
|
|
19
|
+
# Fall back to project name in METADATA when mapping isn't available
|
|
20
|
+
dist_name = dists[0] if dists else metadata.metadata(top_pkg).get("Name", top_pkg)
|
|
21
|
+
return dist_name
|
|
22
|
+
|
|
23
|
+
def _normalize_kernel_name(name: str) -> str:
|
|
24
|
+
"""
|
|
25
|
+
Jupyter kernel directory names should be simple: lowercase, [-a-z0-9_].
|
|
26
|
+
"""
|
|
27
|
+
name = name.strip().lower()
|
|
28
|
+
name = re.sub(r"[^a-z0-9._-]+", "-", name)
|
|
29
|
+
return name
|
|
30
|
+
|
|
31
|
+
def main() -> None:
|
|
32
|
+
dist_name = _dist_name_for_this_package() # e.g., "deriva-model-template"
|
|
33
|
+
kernel_name = _normalize_kernel_name(dist_name) # e.g., "deriva-model-template"
|
|
34
|
+
display_name = f"Python ({dist_name})"
|
|
35
|
+
|
|
36
|
+
# Install into the current environment's prefix (e.g., .venv/share/jupyter/kernels/..)
|
|
37
|
+
install_kernel(
|
|
38
|
+
user=False, # write under sys.prefix (the active env)
|
|
39
|
+
kernel_name=kernel_name,
|
|
40
|
+
display_name=display_name,
|
|
41
|
+
prefix=sys.prefix,
|
|
42
|
+
)
|
|
43
|
+
print(f"Installed Jupyter kernel '{kernel_name}' with display name '{display_name}' under {sys.prefix!s}")
|
|
44
|
+
|
|
45
|
+
if __name__ == "__main__":
|
|
46
|
+
main()
|
|
@@ -3,7 +3,6 @@ LICENSE
|
|
|
3
3
|
README.md
|
|
4
4
|
mkdocs.yml
|
|
5
5
|
pyproject.toml
|
|
6
|
-
release.sh
|
|
7
6
|
uv.lock
|
|
8
7
|
.github/release-drafter.yml
|
|
9
8
|
.github/workflows/publish-docs.yml
|
|
@@ -42,8 +41,10 @@ docs/user-guide/install.md
|
|
|
42
41
|
docs/user-guide/notebooks.md
|
|
43
42
|
docs/user-guide/overview.md
|
|
44
43
|
src/deriva_ml/__init__.py
|
|
44
|
+
src/deriva_ml/bump_version.py
|
|
45
45
|
src/deriva_ml/demo_catalog.py
|
|
46
46
|
src/deriva_ml/feature.py
|
|
47
|
+
src/deriva_ml/install_kernel.py
|
|
47
48
|
src/deriva_ml/run_notebook.py
|
|
48
49
|
src/deriva_ml.egg-info/PKG-INFO
|
|
49
50
|
src/deriva_ml.egg-info/SOURCES.txt
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
[console_scripts]
|
|
2
|
+
bump-version = deriva_ml.bump_version:main
|
|
2
3
|
deriva-ml-alter-annotation = deriva_ml.schema_setup.alter_annotation:main
|
|
3
4
|
deriva-ml-check-catalog-schema = deriva_ml.schema.check_schema:main
|
|
4
5
|
deriva-ml-create-schema = deriva_ml.schema_setup.create_schema:main
|
|
6
|
+
deriva-ml-install-kernel = deriva_ml.install_kernel:main
|
|
5
7
|
deriva-ml-run-notebook = deriva_ml.run_notebook:main
|
|
6
8
|
deriva-ml-table-comments-utils = deriva_ml.schema_setup.table_comments_utils:main
|