nmk-python 1.10.3__py3-none-any.whl → 1.12.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.
- nmk_python/_buildenv/template.py +8 -20
- nmk_python/backends/uv_build_backend.py +0 -5
- nmk_python/build.py +90 -5
- nmk_python/build.yml +18 -0
- nmk_python/templates/build.toml.jinja +13 -4
- nmk_python/version.py +10 -26
- nmk_python/version.yml +33 -23
- {nmk_python-1.10.3.dist-info → nmk_python-1.12.0.dist-info}/METADATA +2 -1
- {nmk_python-1.10.3.dist-info → nmk_python-1.12.0.dist-info}/RECORD +13 -13
- {nmk_python-1.10.3.dist-info → nmk_python-1.12.0.dist-info}/WHEEL +0 -0
- {nmk_python-1.10.3.dist-info → nmk_python-1.12.0.dist-info}/entry_points.txt +0 -0
- {nmk_python-1.10.3.dist-info → nmk_python-1.12.0.dist-info}/licenses/LICENSE +0 -0
- {nmk_python-1.10.3.dist-info → nmk_python-1.12.0.dist-info}/top_level.txt +0 -0
nmk_python/_buildenv/template.py
CHANGED
|
@@ -67,35 +67,23 @@ class NmkPythonProjectTemplate(NmkBaseProjectTemplate):
|
|
|
67
67
|
|
|
68
68
|
def handle_dependencies(self, packages: list[str]) -> dict[str, NmkConfigType]:
|
|
69
69
|
# Iterate on packages
|
|
70
|
-
|
|
71
|
-
simple_refs: list[str] = []
|
|
72
|
-
file_refs: list[str] = []
|
|
70
|
+
other_refs: list[str] = []
|
|
73
71
|
dep_refs: list[str] = []
|
|
72
|
+
|
|
73
|
+
# Pre-filter non-dev dependencies
|
|
74
74
|
for package in packages:
|
|
75
75
|
# Check for dependency groups (no group means it's a regular dependency, otherwise it's a dev dependency)
|
|
76
76
|
if ":" not in package:
|
|
77
77
|
dep_refs.append(package)
|
|
78
|
-
# Dev dependencies
|
|
79
78
|
else:
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
file_refs.append(package)
|
|
85
|
-
elif (Path.cwd() / package).is_file():
|
|
86
|
-
file_refs.append(f"${{PROJECTDIR}}/{package}")
|
|
87
|
-
else:
|
|
88
|
-
simple_refs.append(package)
|
|
89
|
-
else:
|
|
90
|
-
simple_refs.append(package)
|
|
79
|
+
other_refs.append(package)
|
|
80
|
+
|
|
81
|
+
# Delegate to normal processing
|
|
82
|
+
config_items: dict[str, NmkConfigType] = super().handle_dependencies(other_refs)
|
|
91
83
|
|
|
92
84
|
# Build settings
|
|
93
|
-
if dep_refs:
|
|
85
|
+
if dep_refs: # pragma: no branch
|
|
94
86
|
config_items["pythonPackageRequirements"] = dep_refs
|
|
95
|
-
if simple_refs:
|
|
96
|
-
config_items["venvPkgDeps"] = simple_refs
|
|
97
|
-
if file_refs:
|
|
98
|
-
config_items["venvArchiveDeps"] = file_refs
|
|
99
87
|
|
|
100
88
|
return config_items
|
|
101
89
|
|
|
@@ -39,11 +39,6 @@ class UvBuildBackend(PythonBuildBackend):
|
|
|
39
39
|
# Name for wheel sub-directory
|
|
40
40
|
wheel_sub_dir = "wheel_dist"
|
|
41
41
|
|
|
42
|
-
# Check for (experimental) uv-build backend
|
|
43
|
-
if self._model.config["pythonUseUvBuildBackend"].value:
|
|
44
|
-
# Prepare project version (without updating the venv)
|
|
45
|
-
self._env_backend.subprocess(["version", "--active", "--no-sync", wheel_version], cwd=build_dir)
|
|
46
|
-
|
|
47
42
|
# Delegate to uv
|
|
48
43
|
build_args = ["build", "--wheel", "--out-dir", wheel_sub_dir]
|
|
49
44
|
self._env_backend.subprocess(build_args, cwd=build_dir)
|
nmk_python/build.py
CHANGED
|
@@ -4,6 +4,7 @@ Python package build module
|
|
|
4
4
|
|
|
5
5
|
import importlib.metadata
|
|
6
6
|
import json
|
|
7
|
+
import os
|
|
7
8
|
import shutil
|
|
8
9
|
from fnmatch import fnmatch
|
|
9
10
|
from itertools import product
|
|
@@ -11,12 +12,15 @@ from pathlib import Path
|
|
|
11
12
|
from typing import cast
|
|
12
13
|
|
|
13
14
|
from nmk.envbackend import EnvBackend
|
|
14
|
-
from nmk.logs import NmkLogWrapper
|
|
15
|
+
from nmk.logs import NmkLogger, NmkLogWrapper
|
|
15
16
|
from nmk.model.builder import NmkTaskBuilder
|
|
16
17
|
from nmk.model.model import NmkModel
|
|
17
18
|
from nmk.model.resolver import NmkDictConfigResolver, NmkListConfigResolver, NmkStrConfigResolver
|
|
18
19
|
from nmk.utils import is_windows
|
|
19
20
|
from packaging.requirements import Requirement
|
|
21
|
+
from packaging.version import Version
|
|
22
|
+
from tomlkit import loads
|
|
23
|
+
from tomlkit.toml_file import TOMLFile
|
|
20
24
|
|
|
21
25
|
from nmk_python.backends.factory import BuildBackendFactory
|
|
22
26
|
|
|
@@ -65,11 +69,21 @@ class PackageBuilder(NmkTaskBuilder):
|
|
|
65
69
|
project_root = project_path.parent
|
|
66
70
|
for source_dir in map(Path, source_dirs):
|
|
67
71
|
shutil.copytree(source_dir, build_path / source_dir.relative_to(project_root))
|
|
68
|
-
for candidate in filter(lambda p: p.is_file(), map(Path, [project_path,
|
|
72
|
+
for candidate in filter(lambda p: p.is_file(), map(Path, [project_path, project_root / "README.md", project_root / "LICENSE"])):
|
|
69
73
|
dest = build_path / candidate.relative_to(project_root)
|
|
70
74
|
dest.parent.mkdir(parents=True, exist_ok=True)
|
|
71
75
|
shutil.copyfile(candidate, dest)
|
|
72
76
|
|
|
77
|
+
# Update project file scm root
|
|
78
|
+
build_project = build_path / project_path.name
|
|
79
|
+
with build_project.open() as f:
|
|
80
|
+
project_doc = loads(f.read())
|
|
81
|
+
scm_config = cast(dict[str, dict[str, str]], project_doc.get("tool")).get("setuptools_scm") # type: ignore
|
|
82
|
+
assert scm_config is not None, "Can't find setuptools_scm config in project file"
|
|
83
|
+
scm_config["root"] = "/".join([".."] * len(build_path.relative_to(project_root).parts))
|
|
84
|
+
project_output = TOMLFile(build_project)
|
|
85
|
+
project_output.write(project_doc)
|
|
86
|
+
|
|
73
87
|
# Handle extra resources
|
|
74
88
|
for src, dst in extra_resources.items():
|
|
75
89
|
src_path, dst_path = Path(src), Path(dst)
|
|
@@ -254,12 +268,14 @@ class DepsMetadataBuilder(NmkTaskBuilder):
|
|
|
254
268
|
Generate python dependencies metadata file
|
|
255
269
|
"""
|
|
256
270
|
|
|
257
|
-
def build(self, root_name: str, local_deps: list[str]): # pyright: ignore[reportIncompatibleMethodOverride]
|
|
271
|
+
def build(self, root_name: str, local_deps: list[str], constraints: list[str], fail_on_error: bool): # pyright: ignore[reportIncompatibleMethodOverride]
|
|
258
272
|
"""
|
|
259
273
|
Generate python dependencies metadata file
|
|
260
274
|
|
|
261
275
|
:param root_name: name of the root package
|
|
262
276
|
:param local_deps: list of workspace local dependencies patterns
|
|
277
|
+
:param constraints: list of package constraints (may contain comments) to be checked against found dependencies
|
|
278
|
+
:param fail_on_error: if there are mismatches between actual dependencies and constraints, and if true, and the build in error
|
|
263
279
|
"""
|
|
264
280
|
|
|
265
281
|
# Normalization implementation
|
|
@@ -313,6 +329,40 @@ class DepsMetadataBuilder(NmkTaskBuilder):
|
|
|
313
329
|
)
|
|
314
330
|
)
|
|
315
331
|
|
|
332
|
+
# Check constraints vs external deps if any
|
|
333
|
+
filtered_constraints = [line for line in constraints if not line.startswith("# ")]
|
|
334
|
+
if filtered_constraints and output_data[_EXTERNAL_DEPS_KEY]: # pragma: no branch
|
|
335
|
+
try:
|
|
336
|
+
self._check_constraints(filtered_constraints, output_data[_EXTERNAL_DEPS_KEY], fail_on_error)
|
|
337
|
+
except Exception as e:
|
|
338
|
+
# Touch output file to force task to be retriggered on next build
|
|
339
|
+
input_state = self.main_input.stat()
|
|
340
|
+
os.utime(self.main_output, (input_state.st_atime, input_state.st_mtime))
|
|
341
|
+
raise e
|
|
342
|
+
|
|
343
|
+
def _check_constraints(self, constraints: list[str], deps: dict[str, str], fail_on_error: bool):
|
|
344
|
+
# Build all requirements
|
|
345
|
+
all_reqs = {r[0].name: r for r in [(Requirement(line), line) for line in constraints]}
|
|
346
|
+
|
|
347
|
+
# Count errors
|
|
348
|
+
errors = 0
|
|
349
|
+
|
|
350
|
+
# Browse dependencies
|
|
351
|
+
for name, version in deps.items():
|
|
352
|
+
# Check missing constraint on actual dependency
|
|
353
|
+
if name not in all_reqs:
|
|
354
|
+
self.logger.warning(f"Found dependency with missing constraint: {name}")
|
|
355
|
+
errors += 1
|
|
356
|
+
continue
|
|
357
|
+
|
|
358
|
+
# Check mismatch version
|
|
359
|
+
req, req_line = all_reqs[name]
|
|
360
|
+
if Version(version) not in req.specifier:
|
|
361
|
+
self.logger.warning(f"Found dependency with constraint mismatch: {name} ({version}) vs '{req_line}'")
|
|
362
|
+
errors += 1
|
|
363
|
+
|
|
364
|
+
assert (errors == 0) or not fail_on_error, f"{errors} error(s) found while checking dependencies vs constraints"
|
|
365
|
+
|
|
316
366
|
|
|
317
367
|
class PythonIgnoredLockfileResolver(NmkListConfigResolver):
|
|
318
368
|
"""
|
|
@@ -326,5 +376,40 @@ class PythonIgnoredLockfileResolver(NmkListConfigResolver):
|
|
|
326
376
|
|
|
327
377
|
# Ignore uv.lock file if using uv env backend and project is not locked
|
|
328
378
|
if not self.model.env_backend.is_locked and self.model.env_backend.name == "uv":
|
|
329
|
-
return ["uv.lock"]
|
|
330
|
-
return []
|
|
379
|
+
return ["uv.lock"]
|
|
380
|
+
return [] # pragma: no cover
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
class PythonMergedConstraintsResolver(NmkListConfigResolver):
|
|
384
|
+
"""
|
|
385
|
+
Python merged constraints resolver
|
|
386
|
+
"""
|
|
387
|
+
|
|
388
|
+
def get_value(self, name: str, constraints: list[str], constraints_files: list[str]) -> list[str]: # pyright: ignore[reportIncompatibleMethodOverride]
|
|
389
|
+
"""
|
|
390
|
+
Return the merged list of constraints, coming from raw items and files
|
|
391
|
+
"""
|
|
392
|
+
|
|
393
|
+
all_constraints: list[str] = []
|
|
394
|
+
|
|
395
|
+
# Step 1: read files
|
|
396
|
+
for constraints_file in map(Path, constraints_files):
|
|
397
|
+
# Check file existence
|
|
398
|
+
if not constraints_file.is_file():
|
|
399
|
+
NmkLogger.warning(f"Constraints file not found: {constraints_file}")
|
|
400
|
+
continue
|
|
401
|
+
|
|
402
|
+
def clean_line(line: str) -> str | None:
|
|
403
|
+
line = line.strip()
|
|
404
|
+
if not line.startswith("#"):
|
|
405
|
+
# Remove end of line comments (keep full line ones)
|
|
406
|
+
line = line.split("#", 1)[0].strip()
|
|
407
|
+
return line
|
|
408
|
+
|
|
409
|
+
# Get lines
|
|
410
|
+
all_constraints.extend(filter(None, map(clean_line, constraints_file.read_text().splitlines())))
|
|
411
|
+
|
|
412
|
+
# Step 2: add items
|
|
413
|
+
all_constraints.extend(constraints)
|
|
414
|
+
|
|
415
|
+
return all_constraints
|
nmk_python/build.yml
CHANGED
|
@@ -108,6 +108,22 @@ config:
|
|
|
108
108
|
# Generated python dependencies metadata file
|
|
109
109
|
pythonDepsMetadata: ${outputDir}/python_deps.json
|
|
110
110
|
|
|
111
|
+
# Python constraints, raw listed in nmk.yml files
|
|
112
|
+
pythonConstraints: []
|
|
113
|
+
|
|
114
|
+
# Python constraints files
|
|
115
|
+
pythonConstraintsFiles: []
|
|
116
|
+
|
|
117
|
+
# Merged constraints (from items + files)
|
|
118
|
+
pythonMergedConstraints:
|
|
119
|
+
__resolver__: nmk_python.build.PythonMergedConstraintsResolver
|
|
120
|
+
params:
|
|
121
|
+
constraints: ${pythonConstraints}
|
|
122
|
+
constraints_files: ${pythonConstraintsFiles}
|
|
123
|
+
|
|
124
|
+
# Constraints check mode (strict or not)
|
|
125
|
+
pythonConstraintsStrictCheck: false
|
|
126
|
+
|
|
111
127
|
tasks:
|
|
112
128
|
# Python editable install
|
|
113
129
|
py.editable:
|
|
@@ -141,6 +157,8 @@ tasks:
|
|
|
141
157
|
params:
|
|
142
158
|
root_name: ${pythonPackage}
|
|
143
159
|
local_deps: ${pythonLocalDepsPatterns}
|
|
160
|
+
constraints: ${pythonMergedConstraints}
|
|
161
|
+
fail_on_error: ${pythonConstraintsStrictCheck}
|
|
144
162
|
|
|
145
163
|
# Python wheel build
|
|
146
164
|
py.build:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
[build-system]
|
|
2
|
-
requires = ["{% if pythonUseUvBuildBackend %}uv_build>=0.9.18,<0.10.0{% else %}setuptools{% endif %}"]
|
|
2
|
+
requires = ["{% if pythonUseUvBuildBackend %}uv_build>=0.9.18,<0.10.0{% else %}setuptools", "setuptools_scm", "wheel{% endif %}"]
|
|
3
3
|
build-backend = "{% if pythonUseUvBuildBackend %}uv_build{% else %}setuptools.build_meta{% endif %}"
|
|
4
4
|
|
|
5
5
|
[project]
|
|
@@ -38,8 +38,10 @@ namespaces = false
|
|
|
38
38
|
[tool.setuptools.package-data]
|
|
39
39
|
"*" = ["*"]
|
|
40
40
|
|
|
41
|
-
[tool.
|
|
42
|
-
|
|
41
|
+
[tool.setuptools_scm]
|
|
42
|
+
version_scheme = "{{ pythonVersionScheme }}"
|
|
43
|
+
local_scheme = "{{ pythonVersionLocalScheme }}"
|
|
44
|
+
fallback_version = "{{ pythonVersionFallback }}"
|
|
43
45
|
|
|
44
46
|
{% endif %}[tool.distutils.bdist_wheel]
|
|
45
47
|
plat-name = "{{ pythonPackagePlatform }}"
|
|
@@ -47,4 +49,11 @@ plat-name = "{{ pythonPackagePlatform }}"
|
|
|
47
49
|
[tool.pyright]
|
|
48
50
|
include = {{ pythonSrcFolders }}
|
|
49
51
|
typeCheckingMode = "{{ pythonTypeCheckingMode }}"
|
|
50
|
-
reportMissingTypeStubs = false
|
|
52
|
+
reportMissingTypeStubs = false{% if not backendUseRequirements %}
|
|
53
|
+
|
|
54
|
+
[tool.uv]
|
|
55
|
+
cache-keys = [{ file = "pyproject.toml" }, { git = { commit = true, tags = true } }]
|
|
56
|
+
{% if pythonMergedConstraints %}
|
|
57
|
+
constraint-dependencies = {{ pythonMergedConstraints }}
|
|
58
|
+
{% endif %}
|
|
59
|
+
{% endif %}
|
nmk_python/version.py
CHANGED
|
@@ -3,13 +3,11 @@ Python version handling
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
import platform
|
|
6
|
-
import
|
|
6
|
+
from typing import cast
|
|
7
7
|
|
|
8
8
|
from nmk.model.builder import NmkTaskBuilder
|
|
9
9
|
from nmk.model.resolver import NmkListConfigResolver, NmkStrConfigResolver
|
|
10
|
-
|
|
11
|
-
# Git version pattern
|
|
12
|
-
_GIT_VERSION_PATTERN = re.compile("([^-]+)(?:-([0-9]+))?(?:-(.+))?")
|
|
10
|
+
from setuptools_scm import get_version
|
|
13
11
|
|
|
14
12
|
|
|
15
13
|
class PythonVersionResolver(NmkStrConfigResolver):
|
|
@@ -17,26 +15,12 @@ class PythonVersionResolver(NmkStrConfigResolver):
|
|
|
17
15
|
Python version resolver
|
|
18
16
|
"""
|
|
19
17
|
|
|
20
|
-
def get_value(self, name: str) -> str:
|
|
18
|
+
def get_value(self, name: str, root: str, version_scheme: str, local_scheme: str, fallback_version: str) -> str: # type: ignore
|
|
21
19
|
"""
|
|
22
|
-
|
|
20
|
+
Delegates to setuptools_scm to get the version from git
|
|
23
21
|
"""
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if m is not None:
|
|
27
|
-
# Build python version from git version segments
|
|
28
|
-
out = m.group(1)
|
|
29
|
-
if m.group(2) is not None:
|
|
30
|
-
# Add commits count
|
|
31
|
-
out += f".post{m.group(2)}"
|
|
32
|
-
if m.group(3) is not None:
|
|
33
|
-
# Add hash/dirty
|
|
34
|
-
out += f"+{m.group(3)}".replace("-", ".")
|
|
35
|
-
return out
|
|
36
|
-
|
|
37
|
-
# Probably a simpler version (without segments)
|
|
38
|
-
# Assume it is already compliant...
|
|
39
|
-
return git_version
|
|
22
|
+
|
|
23
|
+
return get_version(root=root, version_scheme=version_scheme, local_scheme=local_scheme, fallback_version=fallback_version)
|
|
40
24
|
|
|
41
25
|
|
|
42
26
|
class PythonVersionRefresh(NmkTaskBuilder):
|
|
@@ -44,11 +28,11 @@ class PythonVersionRefresh(NmkTaskBuilder):
|
|
|
44
28
|
Python version builder
|
|
45
29
|
"""
|
|
46
30
|
|
|
47
|
-
def build(self, version: str):
|
|
31
|
+
def build(self, version: str): # type: ignore
|
|
48
32
|
"""
|
|
49
33
|
Simple python version dump
|
|
50
34
|
"""
|
|
51
|
-
self.logger.info(self.task.emoji, self.task.description)
|
|
35
|
+
self.logger.info(self.task.emoji, self.task.description) # type: ignore
|
|
52
36
|
with self.main_output.open("w") as f:
|
|
53
37
|
f.write(version)
|
|
54
38
|
|
|
@@ -69,13 +53,13 @@ class PythonSupportedVersionsResolver(NmkListConfigResolver):
|
|
|
69
53
|
return list(map(int, v.split(".")))
|
|
70
54
|
|
|
71
55
|
# Get min/max values, and verify consistency
|
|
72
|
-
min_ver, max_ver = self.model.config["pythonMinVersion"].value, self.model.config["pythonMaxVersion"].value
|
|
56
|
+
min_ver, max_ver = cast(tuple[str, str], (self.model.config["pythonMinVersion"].value, self.model.config["pythonMaxVersion"].value))
|
|
73
57
|
min_split, max_split = _split_version(min_ver), _split_version(max_ver)
|
|
74
58
|
prefix = "Inconsistency in python min/max supported versions: "
|
|
75
59
|
assert len(min_split) == len(max_split), prefix + "not the same segments count"
|
|
76
60
|
assert len(min_split) == 2, prefix + "can only deal with X.Y versions (2 segments expected)"
|
|
77
61
|
assert min_split[0] == max_split[0], prefix + "can't deal with different major versions"
|
|
78
|
-
assert max_split[1]
|
|
62
|
+
assert max_split[1] >= min_split[1], prefix + "max isn't greater than min"
|
|
79
63
|
|
|
80
64
|
# Also verifies current runtime is in range
|
|
81
65
|
p_ver = platform.python_version()
|
nmk_python/version.yml
CHANGED
|
@@ -1,28 +1,38 @@
|
|
|
1
1
|
config:
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
# Automated version computing from git tags -- see https://setuptools-scm.readthedocs.io/en/latest/config/
|
|
3
|
+
pythonVersionScheme: no-guess-dev
|
|
4
|
+
pythonVersionLocalScheme: node-and-date
|
|
5
|
+
pythonVersionFallback: "0.0.0"
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
# The python version itself
|
|
8
|
+
pythonVersion:
|
|
9
|
+
__resolver__: nmk_python.version.PythonVersionResolver
|
|
10
|
+
params:
|
|
11
|
+
root: ${PROJECTDIR}
|
|
12
|
+
version_scheme: ${pythonVersionScheme}
|
|
13
|
+
local_scheme: ${pythonVersionLocalScheme}
|
|
14
|
+
fallback_version: ${pythonVersionFallback}
|
|
8
15
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
16
|
+
# Python version stamp file
|
|
17
|
+
pythonVersionStamp: ${outputDir}/.pythonversion
|
|
18
|
+
|
|
19
|
+
# Python supported versions range (min-max)
|
|
20
|
+
pythonMinVersion: "3.10"
|
|
21
|
+
pythonMaxVersion: "3.14"
|
|
22
|
+
pythonSupportedVersions:
|
|
23
|
+
__resolver__: nmk_python.version.PythonSupportedVersionsResolver
|
|
14
24
|
|
|
15
25
|
tasks:
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
# To refresh python version stamp file
|
|
27
|
+
py.version:
|
|
28
|
+
description: Refresh python version
|
|
29
|
+
emoji: ":snake:.:label: "
|
|
30
|
+
input: ${gitVersionStamp}
|
|
31
|
+
output: ${pythonVersionStamp}
|
|
32
|
+
params:
|
|
33
|
+
version: ${pythonVersion}
|
|
34
|
+
silent: true
|
|
35
|
+
builder: nmk_python.version.PythonVersionRefresh
|
|
36
|
+
deps:
|
|
37
|
+
- git.version
|
|
38
|
+
appendToDeps: setup
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nmk-python
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.12.0
|
|
4
4
|
Summary: Python plugin for nmk build system
|
|
5
5
|
Author: The dynod project
|
|
6
6
|
Maintainer: The dynod project
|
|
@@ -22,6 +22,7 @@ Requires-Dist: Jinja2
|
|
|
22
22
|
Requires-Dist: tomlkit
|
|
23
23
|
Requires-Dist: setuptools
|
|
24
24
|
Requires-Dist: wheel
|
|
25
|
+
Requires-Dist: setuptools-scm
|
|
25
26
|
Requires-Dist: build
|
|
26
27
|
Requires-Dist: ruff
|
|
27
28
|
Requires-Dist: pytest-xdist
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
nmk_python/__init__.py,sha256=EouCWXbAeObby1vOCx0Vx_WaGC2fEEFDMCen3JZt4TU,446
|
|
2
2
|
nmk_python/badges.yml,sha256=LzElZecCXKxdF-oPkvIwfnbQlOcAM_zUj6MelClmAug,749
|
|
3
|
-
nmk_python/build.py,sha256=
|
|
4
|
-
nmk_python/build.yml,sha256=
|
|
3
|
+
nmk_python/build.py,sha256=V2CiDI-srmFriYR7XuKJWZPuuBAv7LYX8drMz06jmug,16828
|
|
4
|
+
nmk_python/build.yml,sha256=vMVlI6KndmtgeMBzQlkCIunpq7ukqTdYLBvS5-vSdZc,6517
|
|
5
5
|
nmk_python/doc.yml,sha256=12amAlYylH7JAHaqBIOoEZ_LrXY_bPNKuHrrwUkIj8w,932
|
|
6
6
|
nmk_python/files.py,sha256=K6Y-XKXuf8jh4x333Qgj6G1MyB-BgZ5Kd2-XCZhsfR4,2000
|
|
7
7
|
nmk_python/files.yml,sha256=jlp87gW9rTASUnsy7id7VWanaMUMN_py82bMa2adniM,813
|
|
@@ -11,17 +11,17 @@ nmk_python/ruff.py,sha256=TBmn5nFflcFRvjj36JtJGJ-GYHOK6XfhK9Jp-2dO5_E,1557
|
|
|
11
11
|
nmk_python/ruff.yml,sha256=L3vSTLGI3ZP46D64VxenhF9Gz3lo5-J9cRwgKBrVl48,2732
|
|
12
12
|
nmk_python/tests.py,sha256=p2dl41eZW8cpUMOa2DXi3CN3iVQEnElC88Ke89PRyy8,1597
|
|
13
13
|
nmk_python/tests.yml,sha256=by_Ml1JXjgt1-J96AMp-6gwhISVFVylRZowUvaMkfpk,1636
|
|
14
|
-
nmk_python/version.py,sha256=
|
|
15
|
-
nmk_python/version.yml,sha256=
|
|
14
|
+
nmk_python/version.py,sha256=ivSff_1l-u-rSACF91s58zX_EUzl0ate_JcX_l7dSQk,2739
|
|
15
|
+
nmk_python/version.yml,sha256=D_rUnEzjEtCmCgUhfaDPSsANaRkcDW7aZgPX6GZOUIk,1159
|
|
16
16
|
nmk_python/_buildenv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
-
nmk_python/_buildenv/template.py,sha256
|
|
17
|
+
nmk_python/_buildenv/template.py,sha256=-yugMcl93gcKfPKrLYTmIMOEIoNvVWGVnqkY3-z4JF8,3922
|
|
18
18
|
nmk_python/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
19
19
|
nmk_python/backends/build_backend.py,sha256=WO0wZaxGdPna4K2yK7pNLtZX3cKf6atLLa00931N43Y,1400
|
|
20
20
|
nmk_python/backends/factory.py,sha256=NMYByORffwSSIjeNMLkOnwh6x1xhJQVhoV-0rSooq6Q,953
|
|
21
21
|
nmk_python/backends/pip_build_backend.py,sha256=4MGYghBeMjZhUlKTwE0svSHArYwOAaK1I6_gmeNnwaI,1698
|
|
22
|
-
nmk_python/backends/uv_build_backend.py,sha256=
|
|
22
|
+
nmk_python/backends/uv_build_backend.py,sha256=gpM1L5FuJ5CF-OkRORnAbZHACPNhjkoO1sKZtdAhpf0,1671
|
|
23
23
|
nmk_python/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
|
-
nmk_python/templates/build.toml.jinja,sha256=
|
|
24
|
+
nmk_python/templates/build.toml.jinja,sha256=D-RYPUGiqkYUKyQt_dP_tNFU-83eer7bnv57k4pMmIw,2137
|
|
25
25
|
nmk_python/templates/pytest.toml.jinja,sha256=zQ3SRWnF23Omxm7zInE54j0l3OyjXSOn5pQ5Pak8Boo,641
|
|
26
26
|
nmk_python/templates/python-settings.json.jinja,sha256=v-GlXJSGdtfaEZIinSC_aT54rlKArFe1RZ-BgPdbANM,666
|
|
27
27
|
nmk_python/templates/python-test-debug-launch.json.jinja,sha256=J_xju2EpHNXvgvqBxlf99p7g-ZMh3xE-_2r7o_57gpU,364
|
|
@@ -30,9 +30,9 @@ nmk_python/templates/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
|
|
|
30
30
|
nmk_python/templates/src/__init__.py.jinja,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
31
31
|
nmk_python/templates/src/sample.py.jinja,sha256=OOTps7EjviwYFCIb5GpMHcidxhBY5NLQVlcFLqxuxNU,227
|
|
32
32
|
nmk_python/templates/src/test_sample.py.jinja,sha256=u-ShBoKDF3se9KvgQ1SzO4NwymjqNowwURF4Q1oR3wo,221
|
|
33
|
-
nmk_python-1.
|
|
34
|
-
nmk_python-1.
|
|
35
|
-
nmk_python-1.
|
|
36
|
-
nmk_python-1.
|
|
37
|
-
nmk_python-1.
|
|
38
|
-
nmk_python-1.
|
|
33
|
+
nmk_python-1.12.0.dist-info/licenses/LICENSE,sha256=PROo9EW7wP6jmSr_90OluItAsIB411b_CAqEBioMKpI,1074
|
|
34
|
+
nmk_python-1.12.0.dist-info/METADATA,sha256=N0TnAaHGx4s9cOE5QAn1s341QtZQkSVv62IGU4nm97U,3205
|
|
35
|
+
nmk_python-1.12.0.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
|
|
36
|
+
nmk_python-1.12.0.dist-info/entry_points.txt,sha256=QLXIIXl6wODHDnVkh7KuiLv_XzfFtNfdWwpxyB675ak,88
|
|
37
|
+
nmk_python-1.12.0.dist-info/top_level.txt,sha256=MCb5w_hoOZ0kk3Dajxrd9Pz6lZ3pyuS6TQCRA3vddTo,11
|
|
38
|
+
nmk_python-1.12.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|