nmk-python 1.7.0__py3-none-any.whl → 1.8.1__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/backends/build_backend.py +6 -4
- nmk_python/backends/pip_build_backend.py +2 -2
- nmk_python/backends/uv_build_backend.py +1 -1
- nmk_python/build.py +95 -8
- nmk_python/build.yml +189 -168
- {nmk_python-1.7.0.dist-info → nmk_python-1.8.1.dist-info}/METADATA +1 -1
- {nmk_python-1.7.0.dist-info → nmk_python-1.8.1.dist-info}/RECORD +10 -10
- {nmk_python-1.7.0.dist-info → nmk_python-1.8.1.dist-info}/WHEEL +1 -1
- {nmk_python-1.7.0.dist-info → nmk_python-1.8.1.dist-info}/licenses/LICENSE +0 -0
- {nmk_python-1.7.0.dist-info → nmk_python-1.8.1.dist-info}/top_level.txt +0 -0
|
@@ -4,7 +4,9 @@ Python build backend definition module
|
|
|
4
4
|
|
|
5
5
|
from abc import ABC, abstractmethod
|
|
6
6
|
from pathlib import Path
|
|
7
|
+
from typing import cast
|
|
7
8
|
|
|
9
|
+
from nmk._internal.envbackend_legacy import EnvBackend # For type hinting
|
|
8
10
|
from nmk.model.model import NmkModel
|
|
9
11
|
|
|
10
12
|
|
|
@@ -17,7 +19,7 @@ class PythonBuildBackend(ABC):
|
|
|
17
19
|
|
|
18
20
|
def __init__(self, model: NmkModel):
|
|
19
21
|
self._model = model
|
|
20
|
-
self._env_backend = model.env_backend
|
|
22
|
+
self._env_backend = cast(EnvBackend, model.env_backend) # type: ignore
|
|
21
23
|
|
|
22
24
|
@abstractmethod
|
|
23
25
|
def install_editable(self): # pragma: no cover
|
|
@@ -45,10 +47,10 @@ class PythonBuildBackend(ABC):
|
|
|
45
47
|
pass
|
|
46
48
|
|
|
47
49
|
@abstractmethod
|
|
48
|
-
def
|
|
50
|
+
def uninstall_wheels(self, wheel_names: list[str]): # pragma: no cover
|
|
49
51
|
"""
|
|
50
|
-
Uninstall specified
|
|
52
|
+
Uninstall specified wheels
|
|
51
53
|
|
|
52
|
-
:param
|
|
54
|
+
:param wheel_names: names of the wheels to uninstall
|
|
53
55
|
"""
|
|
54
56
|
pass
|
|
@@ -45,9 +45,9 @@ class PipBuildBackend(PythonBuildBackend):
|
|
|
45
45
|
# Return built wheel path
|
|
46
46
|
return build_dir / "dist" / built_wheel_name
|
|
47
47
|
|
|
48
|
-
def
|
|
48
|
+
def uninstall_wheels(self, wheel_names: list[str]):
|
|
49
49
|
# Prepare uninstall args
|
|
50
|
-
uninstall_args = ["uninstall", "--yes"
|
|
50
|
+
uninstall_args = ["uninstall", "--yes"] + wheel_names
|
|
51
51
|
|
|
52
52
|
# Delegate to subprocess
|
|
53
53
|
self._env_backend.subprocess(uninstall_args, cwd=self._env_backend.project_path)
|
|
@@ -51,6 +51,6 @@ class UvBuildBackend(PythonBuildBackend):
|
|
|
51
51
|
# Return built wheel path
|
|
52
52
|
return build_dir / wheel_sub_dir / built_wheel_name
|
|
53
53
|
|
|
54
|
-
def
|
|
54
|
+
def uninstall_wheels(self, wheel_names: list[str]):
|
|
55
55
|
# Same as setup
|
|
56
56
|
self._env_backend.upgrade(full=False, only_deps=True)
|
nmk_python/build.py
CHANGED
|
@@ -2,14 +2,21 @@
|
|
|
2
2
|
Python package build module
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
+
import importlib.metadata
|
|
6
|
+
import json
|
|
5
7
|
import shutil
|
|
8
|
+
from fnmatch import fnmatch
|
|
9
|
+
from itertools import product
|
|
6
10
|
from pathlib import Path
|
|
11
|
+
from typing import cast
|
|
7
12
|
|
|
13
|
+
from nmk._internal.envbackend_legacy import EnvBackend # For type hinting
|
|
8
14
|
from nmk.logs import NmkLogWrapper
|
|
9
15
|
from nmk.model.builder import NmkTaskBuilder
|
|
10
16
|
from nmk.model.model import NmkModel
|
|
11
17
|
from nmk.model.resolver import NmkDictConfigResolver, NmkListConfigResolver, NmkStrConfigResolver
|
|
12
18
|
from nmk.utils import is_windows
|
|
19
|
+
from packaging.requirements import Requirement
|
|
13
20
|
|
|
14
21
|
from nmk_python.backends.factory import BuildBackendFactory
|
|
15
22
|
|
|
@@ -131,9 +138,10 @@ class Installer(NmkTaskBuilder):
|
|
|
131
138
|
# Check if wheel can be installed
|
|
132
139
|
if _can_install(name, self.logger):
|
|
133
140
|
# Delegate to build backend
|
|
134
|
-
|
|
141
|
+
eb = cast(EnvBackend, self.model.env_backend) # type: ignore
|
|
142
|
+
old_packages = eb.installed_packages
|
|
135
143
|
BuildBackendFactory.create(self.model).install_wheel(wheel_path=Path(wheel))
|
|
136
|
-
|
|
144
|
+
eb.print_updates(old_packages)
|
|
137
145
|
|
|
138
146
|
# Remove stamp file
|
|
139
147
|
Path(to_remove).unlink(missing_ok=True)
|
|
@@ -144,19 +152,28 @@ class Uninstaller(NmkTaskBuilder):
|
|
|
144
152
|
Uninstall current project wheel from venv
|
|
145
153
|
"""
|
|
146
154
|
|
|
147
|
-
def build(self, name: str): # pyright: ignore[reportIncompatibleMethodOverride]
|
|
155
|
+
def build(self, name: str, local_deps: list[str] | None = None): # pyright: ignore[reportIncompatibleMethodOverride]
|
|
148
156
|
"""
|
|
149
157
|
Uninstall wheel from venv
|
|
150
158
|
|
|
151
159
|
Note that task won't fail if the wheel is not installed
|
|
152
160
|
|
|
153
161
|
:param name: wheel name to be uninstalled
|
|
162
|
+
:param local_deps: list of workspace local dependencies patterns, used to find additional wheels to uninstall
|
|
154
163
|
"""
|
|
155
164
|
|
|
165
|
+
# Find local deps to uninstall, from provided packages
|
|
166
|
+
wheel_names = set([name])
|
|
167
|
+
eb = cast(EnvBackend, self.model.env_backend) # type: ignore
|
|
168
|
+
old_packages = eb.installed_packages
|
|
169
|
+
for pattern, dep_name in product(local_deps if local_deps else [], old_packages.keys()):
|
|
170
|
+
if fnmatch(dep_name, pattern):
|
|
171
|
+
self.logger.debug(f"wheel name '{dep_name}' matches local dependency pattern '{pattern}', will be uninstalled")
|
|
172
|
+
wheel_names.add(dep_name)
|
|
173
|
+
|
|
156
174
|
# Delegate to build backend
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
self.model.env_backend.print_updates(old_packages)
|
|
175
|
+
BuildBackendFactory.create(self.model).uninstall_wheels(wheel_names=sorted(list(wheel_names)))
|
|
176
|
+
eb.print_updates(old_packages)
|
|
160
177
|
|
|
161
178
|
|
|
162
179
|
class EditableBuilder(NmkTaskBuilder):
|
|
@@ -174,9 +191,10 @@ class EditableBuilder(NmkTaskBuilder):
|
|
|
174
191
|
# Check if project can be installed in editable mode
|
|
175
192
|
if _can_install(_python_package(self.model), self.logger):
|
|
176
193
|
# Delegate to build backend
|
|
177
|
-
|
|
194
|
+
eb = cast(EnvBackend, self.model.env_backend) # type: ignore
|
|
195
|
+
old_packages = eb.installed_packages
|
|
178
196
|
BuildBackendFactory.create(self.model).install_editable()
|
|
179
|
-
|
|
197
|
+
eb.print_updates(old_packages)
|
|
180
198
|
|
|
181
199
|
# Touch stamp file
|
|
182
200
|
self.main_output.touch()
|
|
@@ -223,3 +241,72 @@ class PythonArchiveDepsResolver(NmkDictConfigResolver):
|
|
|
223
241
|
dep_name = dep.name.split("-")[0].replace("_", "-")
|
|
224
242
|
out[dep_name] = str(dep.resolve()).replace("\\", "\\\\") # Escape backslashes for Windows paths
|
|
225
243
|
return out
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
# Internal/external dependencies keys
|
|
247
|
+
_INTERNAL_DEPS_KEY = "internal"
|
|
248
|
+
_EXTERNAL_DEPS_KEY = "external"
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
class DepsMetadataBuilder(NmkTaskBuilder):
|
|
252
|
+
"""
|
|
253
|
+
Generate python dependencies metadata file
|
|
254
|
+
"""
|
|
255
|
+
|
|
256
|
+
def build(self, root_name: str, local_deps: list[str]): # pyright: ignore[reportIncompatibleMethodOverride]
|
|
257
|
+
"""
|
|
258
|
+
Generate python dependencies metadata file
|
|
259
|
+
|
|
260
|
+
:param root_name: name of the root package
|
|
261
|
+
:param local_deps: list of workspace local dependencies patterns
|
|
262
|
+
"""
|
|
263
|
+
|
|
264
|
+
# Normalization implementation
|
|
265
|
+
def normalize(name: str) -> str:
|
|
266
|
+
return name.lower().replace("_", "-")
|
|
267
|
+
|
|
268
|
+
# Prepare distributions map
|
|
269
|
+
distributions = {normalize(d.name): d for d in importlib.metadata.distributions()}
|
|
270
|
+
assert root_name in distributions, f"Root package '{root_name}' not found in installed distributions"
|
|
271
|
+
output_data: dict[str, dict[str, str]] = {_INTERNAL_DEPS_KEY: {}, _EXTERNAL_DEPS_KEY: {}}
|
|
272
|
+
|
|
273
|
+
# Visitor implementation
|
|
274
|
+
def visit(name: str):
|
|
275
|
+
# Already visited or unknown?
|
|
276
|
+
if (name in output_data[_INTERNAL_DEPS_KEY]) or (name in output_data[_EXTERNAL_DEPS_KEY]) or (name not in distributions):
|
|
277
|
+
return
|
|
278
|
+
|
|
279
|
+
# Check for internal/external dependency
|
|
280
|
+
if name != root_name:
|
|
281
|
+
if any(fnmatch(name, pattern) for pattern in local_deps):
|
|
282
|
+
# Internal dependency
|
|
283
|
+
output_data[_INTERNAL_DEPS_KEY][name] = distributions[name].version
|
|
284
|
+
else:
|
|
285
|
+
# External dependency
|
|
286
|
+
output_data[_EXTERNAL_DEPS_KEY][name] = distributions[name].version
|
|
287
|
+
|
|
288
|
+
# Visit dependencies
|
|
289
|
+
for dep in distributions[name].requires or []:
|
|
290
|
+
# Get requirement
|
|
291
|
+
req = Requirement(dep)
|
|
292
|
+
|
|
293
|
+
# Check marker, if any
|
|
294
|
+
if req.marker is not None and not req.marker.evaluate():
|
|
295
|
+
continue
|
|
296
|
+
|
|
297
|
+
# Visit dependency if installed
|
|
298
|
+
visit(normalize(req.name))
|
|
299
|
+
|
|
300
|
+
# Visit from root
|
|
301
|
+
visit(root_name)
|
|
302
|
+
|
|
303
|
+
# Write output metadata file
|
|
304
|
+
self.main_output.write_text(
|
|
305
|
+
json.dumps(
|
|
306
|
+
{
|
|
307
|
+
_EXTERNAL_DEPS_KEY: {k: output_data[_EXTERNAL_DEPS_KEY][k] for k in sorted(output_data[_EXTERNAL_DEPS_KEY])},
|
|
308
|
+
_INTERNAL_DEPS_KEY: {k: output_data[_INTERNAL_DEPS_KEY][k] for k in sorted(output_data[_INTERNAL_DEPS_KEY])},
|
|
309
|
+
},
|
|
310
|
+
indent=4,
|
|
311
|
+
)
|
|
312
|
+
)
|
nmk_python/build.yml
CHANGED
|
@@ -1,171 +1,192 @@
|
|
|
1
1
|
config:
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
2
|
+
# Python package name (to be configured at project level)
|
|
3
|
+
pythonPackage: ${projectName}
|
|
4
|
+
pythonModule:
|
|
5
|
+
__resolver__: nmk_python.build.PythonModuleResolver
|
|
6
|
+
|
|
7
|
+
# Python artifacts directory
|
|
8
|
+
pythonArtifacts: ${outputDir}/artifacts
|
|
9
|
+
|
|
10
|
+
# Python build directory
|
|
11
|
+
pythonBuildDir: ${outputDir}/python
|
|
12
|
+
|
|
13
|
+
# Target platform for python project
|
|
14
|
+
pythonPackagePlatform: any
|
|
15
|
+
|
|
16
|
+
# Python source distribution + wheel artifacts
|
|
17
|
+
pythonWheel: ${pythonArtifacts}/${pythonModule}-${pythonVersion}-py3-none-${pythonPackagePlatform}.whl
|
|
18
|
+
|
|
19
|
+
# Add project file fragment for build config
|
|
20
|
+
pythonProjectFileFragments:
|
|
21
|
+
- ${BASEDIR}/templates/build.toml.jinja
|
|
22
|
+
|
|
23
|
+
# Python optional deps (named groups of python package optional dependencies)
|
|
24
|
+
pythonPackageOptionalRequirements: {}
|
|
25
|
+
|
|
26
|
+
# Derived list of python dependencies from the dependency groups
|
|
27
|
+
pythonPackageOptionalRequirementsList:
|
|
28
|
+
__resolver__: nmk_python.build.PythonOptionalDepsResolver
|
|
29
|
+
params:
|
|
30
|
+
groups: ${pythonPackageOptionalRequirements}
|
|
31
|
+
pythonProjectFileItems:
|
|
32
|
+
project:
|
|
33
|
+
optional-dependencies: ${pythonPackageOptionalRequirements}
|
|
34
|
+
|
|
35
|
+
# Python package dependencies
|
|
36
|
+
pythonPackageRequirements: []
|
|
37
|
+
|
|
38
|
+
# Python development dependencies
|
|
39
|
+
pythonDevRequirements:
|
|
40
|
+
__resolver__: nmk_python.build.PythonDevDepsResolver
|
|
41
|
+
params:
|
|
42
|
+
package_deps: ${pythonPackageRequirements}
|
|
43
|
+
all_deps: ${venvPkgDeps}
|
|
44
|
+
|
|
45
|
+
# Archive related requirements
|
|
46
|
+
pythonArchiveRequirements:
|
|
47
|
+
__resolver__: nmk_python.build.PythonArchiveDepsResolver
|
|
48
|
+
params:
|
|
49
|
+
archives: ${venvArchiveDeps}
|
|
50
|
+
|
|
51
|
+
# Also install in venv all dependencies
|
|
52
|
+
venvPkgDeps:
|
|
53
|
+
- ${pythonPackageRequirements}
|
|
54
|
+
- ${pythonPackageOptionalRequirementsList}
|
|
55
|
+
|
|
56
|
+
# Extra (external) resources to be bundled in built python wheel
|
|
57
|
+
pythonExtraResources: {}
|
|
58
|
+
|
|
59
|
+
# Python editable install stamp
|
|
60
|
+
pythonEditableStamp: ${outputDir}/.pyeditable
|
|
61
|
+
|
|
62
|
+
# Python files to be ignored
|
|
63
|
+
gitIgnoredFiles:
|
|
64
|
+
- .eggs/
|
|
65
|
+
- "*.egg-info/"
|
|
66
|
+
- "*.pyc"
|
|
67
|
+
- __pycache__
|
|
68
|
+
|
|
69
|
+
# Additional github publish step: publish on pypi.org
|
|
70
|
+
githubPublishSteps:
|
|
71
|
+
- name: Publish package on pypi.org
|
|
72
|
+
uses: pypa/gh-action-pypi-publish@v1.13.0
|
|
73
|
+
with:
|
|
74
|
+
user: __token__
|
|
75
|
+
password: ${{ secrets.pypi_password }}
|
|
76
|
+
packages_dir: ${r!pythonArtifacts}
|
|
77
|
+
|
|
78
|
+
# Wheel install arguments (for pip backend)
|
|
79
|
+
pythonWheelPipInstallArgs:
|
|
80
|
+
- --force-reinstall # force reinstall because otherwise install will be skipped if version didn't changed
|
|
81
|
+
- --no-deps # but skip dependencies to avoid reinstalling everything (deps are already installed by py.venv task)
|
|
82
|
+
|
|
83
|
+
# Editable install arguments (for pip backend)
|
|
84
|
+
pythonEditablePipInstallArgs:
|
|
85
|
+
- --no-deps # skip dependencies to avoid reinstalling everything
|
|
86
|
+
- --no-build-isolation # disable dependencies install when building for "editable" mode
|
|
87
|
+
|
|
88
|
+
# Wheel install arguments (for uv backend)
|
|
89
|
+
pythonWheelUvInstallArgs: []
|
|
90
|
+
|
|
91
|
+
# Editable install arguments (for uv backend)
|
|
92
|
+
pythonEditableUvInstallArgs: []
|
|
93
|
+
|
|
94
|
+
# Type checking mode for Pyright; may be off, basic, standard, strict
|
|
95
|
+
pythonTypeCheckingMode: strict
|
|
96
|
+
|
|
97
|
+
# Excluded modules for wheel build
|
|
98
|
+
pythonBuildExcludedModules: []
|
|
99
|
+
|
|
100
|
+
# Workspace local dependencies patterns
|
|
101
|
+
pythonLocalDepsPatterns: []
|
|
102
|
+
|
|
103
|
+
# Generated python dependencies metadata file
|
|
104
|
+
pythonDepsMetadata: ${outputDir}/python_deps.json
|
|
100
105
|
|
|
101
106
|
tasks:
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
#
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
107
|
+
# Python editable install
|
|
108
|
+
py.editable:
|
|
109
|
+
description: Install python editable package
|
|
110
|
+
emoji: ":snake:.:house:"
|
|
111
|
+
deps:
|
|
112
|
+
- py.project
|
|
113
|
+
- py.format
|
|
114
|
+
- py.analyze
|
|
115
|
+
appendToDeps: build
|
|
116
|
+
if: ${pythonSrcFiles} # Only if python source files are found
|
|
117
|
+
output:
|
|
118
|
+
- ${pythonEditableStamp}
|
|
119
|
+
input:
|
|
120
|
+
- ${pythonProjectFile}
|
|
121
|
+
builder: nmk_python.build.EditableBuilder
|
|
122
|
+
|
|
123
|
+
# Python dependencies metadata
|
|
124
|
+
py.deps:
|
|
125
|
+
description: Gather python dependencies metadata
|
|
126
|
+
emoji: ":snake:.:link:"
|
|
127
|
+
deps:
|
|
128
|
+
- py.editable
|
|
129
|
+
appendToDeps: build
|
|
130
|
+
if: ${pythonSrcFiles} # Only if python source files are found
|
|
131
|
+
output:
|
|
132
|
+
- ${pythonDepsMetadata}
|
|
133
|
+
input:
|
|
134
|
+
- ${pythonProjectFile}
|
|
135
|
+
builder: nmk_python.build.DepsMetadataBuilder
|
|
136
|
+
params:
|
|
137
|
+
root_name: ${pythonPackage}
|
|
138
|
+
local_deps: ${pythonLocalDepsPatterns}
|
|
139
|
+
|
|
140
|
+
# Python wheel build
|
|
141
|
+
py.build:
|
|
142
|
+
description: Build python wheel
|
|
143
|
+
emoji: ":snake:.:hammer:"
|
|
144
|
+
deps:
|
|
145
|
+
- py.project
|
|
146
|
+
- py.format
|
|
147
|
+
- py.analyze
|
|
148
|
+
appendToDeps: package
|
|
149
|
+
if: ${pythonSrcFiles} # Only if python source files are found
|
|
150
|
+
output:
|
|
151
|
+
- ${pythonWheel}
|
|
152
|
+
input:
|
|
153
|
+
- ${pythonSrcFiles}
|
|
154
|
+
- ${pythonProjectFile}
|
|
155
|
+
builder: nmk_python.build.PackageBuilder
|
|
156
|
+
params:
|
|
157
|
+
project_file: ${pythonProjectFile}
|
|
158
|
+
version_file: ${pythonVersionStamp}
|
|
159
|
+
source_dirs: ${pythonSrcFolders}
|
|
160
|
+
artifacts_dir: ${pythonArtifacts}
|
|
161
|
+
build_dir: ${pythonBuildDir}
|
|
162
|
+
extra_resources: ${pythonExtraResources}
|
|
163
|
+
|
|
164
|
+
# Python wheel install
|
|
165
|
+
py.install:
|
|
166
|
+
description: Install python wheel
|
|
167
|
+
emoji: ":snake:.:inbox_tray:"
|
|
168
|
+
deps:
|
|
169
|
+
- py.build
|
|
170
|
+
appendToDeps: install
|
|
171
|
+
if: ${pythonSrcFiles} # Only if python source files are found
|
|
172
|
+
input: ${pythonWheel}
|
|
173
|
+
output:
|
|
174
|
+
- ${ROOTDIR}/${venvName}
|
|
175
|
+
- ${venvState}
|
|
176
|
+
builder: nmk_python.build.Installer
|
|
177
|
+
params:
|
|
178
|
+
name: ${pythonPackage}
|
|
179
|
+
wheel: ${pythonWheel}
|
|
180
|
+
to_remove: ${pythonEditableStamp}
|
|
181
|
+
|
|
182
|
+
# Python module clean
|
|
183
|
+
py.uninstall:
|
|
184
|
+
description: Uninstall python package and local dependencies
|
|
185
|
+
emoji: ":broom:.:snake:"
|
|
186
|
+
appendToDeps:
|
|
187
|
+
- clean
|
|
188
|
+
builder: nmk_python.build.Uninstaller
|
|
189
|
+
params:
|
|
190
|
+
name: ${pythonPackage}
|
|
191
|
+
local_deps: ${pythonLocalDepsPatterns}
|
|
192
|
+
if: ${pythonSrcFiles} # Only if python source files are found
|
|
@@ -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=KlAeOvwcmbF-PEC-baWQQXa2Vp2-PK_pNTazWNeTs9A,12082
|
|
4
|
+
nmk_python/build.yml,sha256=8CWVacVv3r3pbvuRkaLQbH1aTO-oK4U0hAO9SgDTfFA,5726
|
|
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
|
|
@@ -14,18 +14,18 @@ nmk_python/tests.yml,sha256=Sg6ZezkBVuvOzh-4QbJmZQymCOzXfenc0EpMdMZsEBc,1687
|
|
|
14
14
|
nmk_python/version.py,sha256=fLpOWdujYwlJB7XhWaOGCTeg3gQaClk2YHoRkkW64dE,3109
|
|
15
15
|
nmk_python/version.yml,sha256=WpZyQ2mChmvA_6eVb_Yp6ZaFIkX6oINxWBhKgb8h4GE,833
|
|
16
16
|
nmk_python/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
-
nmk_python/backends/build_backend.py,sha256=
|
|
17
|
+
nmk_python/backends/build_backend.py,sha256=NOAXMa6jmAIfUvA690ht-x_DwsGtvBvttPZLfFcX_b0,1437
|
|
18
18
|
nmk_python/backends/factory.py,sha256=NMYByORffwSSIjeNMLkOnwh6x1xhJQVhoV-0rSooq6Q,953
|
|
19
|
-
nmk_python/backends/pip_build_backend.py,sha256=
|
|
20
|
-
nmk_python/backends/uv_build_backend.py,sha256=
|
|
19
|
+
nmk_python/backends/pip_build_backend.py,sha256=4MGYghBeMjZhUlKTwE0svSHArYwOAaK1I6_gmeNnwaI,1698
|
|
20
|
+
nmk_python/backends/uv_build_backend.py,sha256=QpN5nMm_QhnKzoHQcX4769OOQG6NqOD2ctYXyH2MI7A,1880
|
|
21
21
|
nmk_python/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
22
|
nmk_python/templates/build.toml.jinja,sha256=6F1Kdb32JVBWEitxLC7AsUdhx2VTyQEyWhhSb7n3oBs,1770
|
|
23
23
|
nmk_python/templates/pytest.toml.jinja,sha256=zQ3SRWnF23Omxm7zInE54j0l3OyjXSOn5pQ5Pak8Boo,641
|
|
24
24
|
nmk_python/templates/python-settings.json.jinja,sha256=jYXSy96cX9X9GIHoF7XiZDzd4P2GOlMisAVWW626WF4,749
|
|
25
25
|
nmk_python/templates/python-test-debug-launch.json.jinja,sha256=J_xju2EpHNXvgvqBxlf99p7g-ZMh3xE-_2r7o_57gpU,364
|
|
26
26
|
nmk_python/templates/ruff.toml.jinja,sha256=DTHe1ixK1SBY8d2xBCfkGz89HzjAoMO7Ogs12AY1i4Y,346
|
|
27
|
-
nmk_python-1.
|
|
28
|
-
nmk_python-1.
|
|
29
|
-
nmk_python-1.
|
|
30
|
-
nmk_python-1.
|
|
31
|
-
nmk_python-1.
|
|
27
|
+
nmk_python-1.8.1.dist-info/licenses/LICENSE,sha256=PROo9EW7wP6jmSr_90OluItAsIB411b_CAqEBioMKpI,1074
|
|
28
|
+
nmk_python-1.8.1.dist-info/METADATA,sha256=6xJNrj-T99MzcQFkpf_iR8rwsQL1c5-j7gDmwKb4-GE,3148
|
|
29
|
+
nmk_python-1.8.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
30
|
+
nmk_python-1.8.1.dist-info/top_level.txt,sha256=MCb5w_hoOZ0kk3Dajxrd9Pz6lZ3pyuS6TQCRA3vddTo,11
|
|
31
|
+
nmk_python-1.8.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|