dsw-tdk 4.15.0__py2.py3-none-any.whl → 4.17.0__py2.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.
- dsw/tdk/build_info.py +4 -4
- dsw/tdk/consts.py +5 -4
- dsw/tdk/core.py +15 -3
- dsw/tdk/model.py +4 -1
- dsw/tdk/validation.py +9 -5
- {dsw_tdk-4.15.0.dist-info → dsw_tdk-4.17.0.dist-info}/METADATA +3 -2
- dsw_tdk-4.17.0.dist-info/RECORD +20 -0
- {dsw_tdk-4.15.0.dist-info → dsw_tdk-4.17.0.dist-info}/WHEEL +1 -1
- dsw_tdk-4.15.0.dist-info/RECORD +0 -20
- {dsw_tdk-4.15.0.dist-info → dsw_tdk-4.17.0.dist-info}/entry_points.txt +0 -0
- {dsw_tdk-4.15.0.dist-info → dsw_tdk-4.17.0.dist-info/licenses}/LICENSE +0 -0
- {dsw_tdk-4.15.0.dist-info → dsw_tdk-4.17.0.dist-info}/top_level.txt +0 -0
dsw/tdk/build_info.py
CHANGED
|
@@ -9,9 +9,9 @@ BuildInfo = namedtuple(
|
|
|
9
9
|
)
|
|
10
10
|
|
|
11
11
|
BUILD_INFO = BuildInfo(
|
|
12
|
-
version='v4.
|
|
13
|
-
built_at='2025-
|
|
14
|
-
sha='
|
|
12
|
+
version='v4.17.0~ac8947f',
|
|
13
|
+
built_at='2025-04-01 06:47:55Z',
|
|
14
|
+
sha='ac8947fd0b7824e803d28f8d15215263a810aee8',
|
|
15
15
|
branch='HEAD',
|
|
16
|
-
tag='v4.
|
|
16
|
+
tag='v4.17.0',
|
|
17
17
|
)
|
dsw/tdk/consts.py
CHANGED
|
@@ -4,13 +4,14 @@ import re
|
|
|
4
4
|
import pathspec
|
|
5
5
|
|
|
6
6
|
APP = 'dsw-tdk'
|
|
7
|
-
VERSION = '4.
|
|
7
|
+
VERSION = '4.17.0'
|
|
8
8
|
METAMODEL_VERSION = 16
|
|
9
9
|
|
|
10
10
|
REGEX_SEMVER = re.compile(r'^[0-9]+\.[0-9]+\.[0-9]+$')
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
REGEX_WIZARD_ID = re.compile(r'^[a-zA-Z0-9-_.]+$')
|
|
12
|
+
REGEX_ORGANIZATION_ID = REGEX_WIZARD_ID
|
|
13
|
+
REGEX_TEMPLATE_ID = REGEX_WIZARD_ID
|
|
14
|
+
REGEX_KM_ID = REGEX_WIZARD_ID
|
|
14
15
|
REGEX_MIME_TYPE = re.compile(r'^(?![-])(?!.*[-]$)[-\w.]+/[-\w.]+$')
|
|
15
16
|
|
|
16
17
|
DEFAULT_LIST_FORMAT = '{template.id:<50} {template.name:<30}'
|
dsw/tdk/core.py
CHANGED
|
@@ -165,6 +165,10 @@ class TDKCore:
|
|
|
165
165
|
if self.project is None:
|
|
166
166
|
raise RuntimeError('No template project is initialized')
|
|
167
167
|
self.project.template = self.safe_template
|
|
168
|
+
if len(self.project.template.tdk_config.files) == 0:
|
|
169
|
+
self.project.template.tdk_config.use_default_files()
|
|
170
|
+
self.logger.warning('Using default _tdk.files in template.json, you may want '
|
|
171
|
+
'to change it to include relevant files')
|
|
168
172
|
self.logger.debug('Initiating storing local template project (force=%s)', force)
|
|
169
173
|
self.project.store(force=force)
|
|
170
174
|
|
|
@@ -301,6 +305,9 @@ class TDKCore:
|
|
|
301
305
|
tfile.remote_type.value, tfile.filename.as_posix(), e)
|
|
302
306
|
|
|
303
307
|
async def store_remote_files(self):
|
|
308
|
+
if len(self.safe_project.safe_template.files) == 0:
|
|
309
|
+
self.logger.warning('No files to store, maybe you forgot to '
|
|
310
|
+
'update _tdk.files patterns in template.json?')
|
|
304
311
|
for tfile in self.safe_project.safe_template.files.values():
|
|
305
312
|
tfile.remote_id = None
|
|
306
313
|
tfile.remote_type = TemplateFileType.FILE if tfile.is_text else TemplateFileType.ASSET
|
|
@@ -333,6 +340,9 @@ class TDKCore:
|
|
|
333
340
|
pkg.writestr(f'template/assets/{tfile.filename.as_posix()}', tfile.content)
|
|
334
341
|
descriptor['files'] = files
|
|
335
342
|
descriptor['assets'] = assets
|
|
343
|
+
if len(files) == 0 and len(assets) == 0:
|
|
344
|
+
self.logger.warning('No files or assets found in the template, maybe you forgot '
|
|
345
|
+
'to update _tdk.files patterns in template.json?')
|
|
336
346
|
timestamp = datetime.datetime.now(tz=datetime.UTC).strftime('%Y-%m-%dT%H:%M:%S.%fZ')
|
|
337
347
|
descriptor['createdAt'] = timestamp
|
|
338
348
|
descriptor['updatedAt'] = timestamp
|
|
@@ -355,7 +365,9 @@ class TDKCore:
|
|
|
355
365
|
raise RuntimeError('Malformed package: missing template.json file')
|
|
356
366
|
data = json.loads(template_file.read_text(encoding=DEFAULT_ENCODING))
|
|
357
367
|
template = Template.load_local(data)
|
|
358
|
-
template.tdk_config.
|
|
368
|
+
template.tdk_config.use_default_files()
|
|
369
|
+
self.logger.warning('Using default _tdk.files in template.json, you may want '
|
|
370
|
+
'to change it to include relevant files')
|
|
359
371
|
self.logger.debug('Preparing template dir')
|
|
360
372
|
if template_dir is None:
|
|
361
373
|
template_dir = pathlib.Path.cwd() / template.id.replace(':', '_')
|
|
@@ -372,8 +384,8 @@ class TDKCore:
|
|
|
372
384
|
encoding=DEFAULT_ENCODING,
|
|
373
385
|
)
|
|
374
386
|
self.logger.debug('Extracting README.md from package')
|
|
375
|
-
|
|
376
|
-
|
|
387
|
+
local_readme = template_dir / 'README.md'
|
|
388
|
+
local_readme.write_text(
|
|
377
389
|
data=data['readme'].replace('\r\n', '\n'),
|
|
378
390
|
encoding=DEFAULT_ENCODING,
|
|
379
391
|
)
|
dsw/tdk/model.py
CHANGED
|
@@ -101,7 +101,7 @@ class Format:
|
|
|
101
101
|
class TDKConfig:
|
|
102
102
|
|
|
103
103
|
DEFAULT_README = 'README.md'
|
|
104
|
-
DEFAULT_FILES = ['*']
|
|
104
|
+
DEFAULT_FILES = ['*', '!.git/', '!.env']
|
|
105
105
|
|
|
106
106
|
def __init__(self, *, version: str | None = None, readme_file: str | None = None,
|
|
107
107
|
files: list[str] | None = None):
|
|
@@ -118,6 +118,9 @@ class TDKConfig:
|
|
|
118
118
|
files=data.get('files', cls.DEFAULT_FILES),
|
|
119
119
|
)
|
|
120
120
|
|
|
121
|
+
def use_default_files(self):
|
|
122
|
+
self.files = self.DEFAULT_FILES
|
|
123
|
+
|
|
121
124
|
def serialize(self):
|
|
122
125
|
return {
|
|
123
126
|
'version': self.version,
|
dsw/tdk/validation.py
CHANGED
|
@@ -44,7 +44,8 @@ def _validate_extension(field_name: str, value) -> List[ValidationError]:
|
|
|
44
44
|
if value is not None and re.match(REGEX_ORGANIZATION_ID, value) is None:
|
|
45
45
|
return [ValidationError(
|
|
46
46
|
field_name=field_name,
|
|
47
|
-
message='File extension should contain only letters, numbers
|
|
47
|
+
message='File extension should contain only letters, numbers, '
|
|
48
|
+
'and periods (inside-only)',
|
|
48
49
|
)]
|
|
49
50
|
return []
|
|
50
51
|
|
|
@@ -53,7 +54,8 @@ def _validate_organization_id(field_name: str, value) -> List[ValidationError]:
|
|
|
53
54
|
if value is not None and re.match(REGEX_ORGANIZATION_ID, value) is None:
|
|
54
55
|
return [ValidationError(
|
|
55
56
|
field_name=field_name,
|
|
56
|
-
message='Organization ID may contain only letters, numbers,
|
|
57
|
+
message='Organization ID may contain only letters, numbers, '
|
|
58
|
+
'periods, dashes, and underscores',
|
|
57
59
|
)]
|
|
58
60
|
return []
|
|
59
61
|
|
|
@@ -62,7 +64,8 @@ def _validate_template_id(field_name: str, value) -> List[ValidationError]:
|
|
|
62
64
|
if value is not None and re.match(REGEX_TEMPLATE_ID, value) is None:
|
|
63
65
|
return [ValidationError(
|
|
64
66
|
field_name=field_name,
|
|
65
|
-
message='Template ID may contain only letters, numbers,
|
|
67
|
+
message='Template ID may contain only letters, numbers, '
|
|
68
|
+
'periods, dashes, and underscores',
|
|
66
69
|
)]
|
|
67
70
|
return []
|
|
68
71
|
|
|
@@ -71,7 +74,8 @@ def _validate_km_id(field_name: str, value) -> List[ValidationError]:
|
|
|
71
74
|
if value is not None and re.match(REGEX_KM_ID, value) is None:
|
|
72
75
|
return [ValidationError(
|
|
73
76
|
field_name=field_name,
|
|
74
|
-
message='KM ID may contain only letters, numbers,
|
|
77
|
+
message='KM ID may contain only letters, numbers, '
|
|
78
|
+
'periods, dashes, and underscores',
|
|
75
79
|
)]
|
|
76
80
|
return []
|
|
77
81
|
|
|
@@ -107,7 +111,7 @@ def _validate_package_id(field_name: str, value: str) -> List[ValidationError]:
|
|
|
107
111
|
if len(parts) != 3:
|
|
108
112
|
res.append(ValidationError(
|
|
109
113
|
field_name=field_name,
|
|
110
|
-
message='Package ID is not valid (only {len(parts)} parts)',
|
|
114
|
+
message=f'Package ID is not valid (only {len(parts)} parts)',
|
|
111
115
|
))
|
|
112
116
|
if re.match(REGEX_ORGANIZATION_ID, parts[0]) is None:
|
|
113
117
|
res.append(ValidationError(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: dsw-tdk
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.17.0
|
|
4
4
|
Summary: Data Stewardship Wizard Template Development Toolkit
|
|
5
5
|
Author-email: Marek Suchánek <marek.suchanek@ds-wizard.org>
|
|
6
6
|
License: Apache License 2.0
|
|
@@ -32,6 +32,7 @@ Requires-Dist: python-slugify
|
|
|
32
32
|
Requires-Dist: watchfiles
|
|
33
33
|
Provides-Extra: test
|
|
34
34
|
Requires-Dist: pytest; extra == "test"
|
|
35
|
+
Dynamic: license-file
|
|
35
36
|
|
|
36
37
|
# dsw-tdk
|
|
37
38
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
dsw/tdk/__init__.py,sha256=zJeTybb0SqiNdGLkANjRa36hku4axi17mZL2dM3tHto,288
|
|
2
|
+
dsw/tdk/__main__.py,sha256=cCzxo6f7raF50kQE-nM_segNjCNe723ZrxOBB6f3qwc,84
|
|
3
|
+
dsw/tdk/api_client.py,sha256=1WpUSgi8BfNrq3rUHWSfcZnmNGydID1mzkWBp5TnNmc,14727
|
|
4
|
+
dsw/tdk/build_info.py,sha256=hb0WH8zENkjb3QDyVICWsQ1PD6LbBpCx1TqSPxCI1xI,381
|
|
5
|
+
dsw/tdk/cli.py,sha256=uz3nLv8gUZQqKvarc_STMlpgkGylhAprBFRMcJphc2Q,21965
|
|
6
|
+
dsw/tdk/consts.py,sha256=vb4XJkVqQ1S_HO5QjuXFXDra3JBShWlEcn-VE9ynKyI,604
|
|
7
|
+
dsw/tdk/core.py,sha256=qnYSMaoN2j4Jt16yywfG-Z_SE27eGLzTCvf-SzMdB8A,27329
|
|
8
|
+
dsw/tdk/model.py,sha256=MKTFmfSYc41GZc-XgyVQR8gzWGAfE1afjNQP8eVY7DM,17244
|
|
9
|
+
dsw/tdk/utils.py,sha256=ICZpgxkDRWg9lq1gnHyQCEISFMtmGtu8Hl5yEclwn14,5685
|
|
10
|
+
dsw/tdk/validation.py,sha256=EINgQAk-fAATIjwwpzds1YCzuetVkefGDvYVxTzjV-o,8972
|
|
11
|
+
dsw/tdk/templates/LICENSE.j2,sha256=6WzK06169rxZ4V_boYgejcZkw-1Up_WoU18iI3Gbkfs,60
|
|
12
|
+
dsw/tdk/templates/README.md.j2,sha256=FzUABeMM8To0oT48Kytoox64uAZ8F7FSAAXgpyKzqdU,247
|
|
13
|
+
dsw/tdk/templates/env.j2,sha256=7IJ6HAIY1bXKLake4c72DSEUcQtAquO5wlSgH8vg_8s,97
|
|
14
|
+
dsw/tdk/templates/starter.j2,sha256=JKJIkiXsmBO4P6pKXM4IvSz3JgJhqCnaZI1NVfPPnXg,246
|
|
15
|
+
dsw_tdk-4.17.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
16
|
+
dsw_tdk-4.17.0.dist-info/METADATA,sha256=AvMpi_tsRwIS1F4w03tOBSU6Y8FQhb4ZuEO1k_4-uCA,6044
|
|
17
|
+
dsw_tdk-4.17.0.dist-info/WHEEL,sha256=MAQBAzGbXNI3bUmkDsiV_duv8i-gcdnLzw7cfUFwqhU,109
|
|
18
|
+
dsw_tdk-4.17.0.dist-info/entry_points.txt,sha256=lwD5ZzRCbTFSjP1-SkhYsaJe8sEXOWWgMAMUhw0v2Hk,41
|
|
19
|
+
dsw_tdk-4.17.0.dist-info/top_level.txt,sha256=7SfbsHFoJ_vlAgG6C-xzETETwYO71dBrGnod8uMFnjw,4
|
|
20
|
+
dsw_tdk-4.17.0.dist-info/RECORD,,
|
dsw_tdk-4.15.0.dist-info/RECORD
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
dsw/tdk/__init__.py,sha256=zJeTybb0SqiNdGLkANjRa36hku4axi17mZL2dM3tHto,288
|
|
2
|
-
dsw/tdk/__main__.py,sha256=cCzxo6f7raF50kQE-nM_segNjCNe723ZrxOBB6f3qwc,84
|
|
3
|
-
dsw/tdk/api_client.py,sha256=1WpUSgi8BfNrq3rUHWSfcZnmNGydID1mzkWBp5TnNmc,14727
|
|
4
|
-
dsw/tdk/build_info.py,sha256=Uz_Zl-aH87_YaxkQeyvFutdptWRLvXPqDQ2yhNHy-2o,381
|
|
5
|
-
dsw/tdk/cli.py,sha256=uz3nLv8gUZQqKvarc_STMlpgkGylhAprBFRMcJphc2Q,21965
|
|
6
|
-
dsw/tdk/consts.py,sha256=o49G-0BmNoYvy7ok6Jl3iPUGKqG0GMLGEiPqVMB0n9I,619
|
|
7
|
-
dsw/tdk/core.py,sha256=LvpB8J_AmAe-ljEIYjO3oP45EDAgjzKGEnZkkDqNiho,26448
|
|
8
|
-
dsw/tdk/model.py,sha256=5_qSOEdEeikskvoThClPQU2szS3pDw8-R2kDQVdBf7U,17151
|
|
9
|
-
dsw/tdk/utils.py,sha256=ICZpgxkDRWg9lq1gnHyQCEISFMtmGtu8Hl5yEclwn14,5685
|
|
10
|
-
dsw/tdk/validation.py,sha256=6GTyBpSvrvj73A2RkFJ-NL7SCjXFI4JnPneAEumR-ww,8847
|
|
11
|
-
dsw/tdk/templates/LICENSE.j2,sha256=6WzK06169rxZ4V_boYgejcZkw-1Up_WoU18iI3Gbkfs,60
|
|
12
|
-
dsw/tdk/templates/README.md.j2,sha256=FzUABeMM8To0oT48Kytoox64uAZ8F7FSAAXgpyKzqdU,247
|
|
13
|
-
dsw/tdk/templates/env.j2,sha256=7IJ6HAIY1bXKLake4c72DSEUcQtAquO5wlSgH8vg_8s,97
|
|
14
|
-
dsw/tdk/templates/starter.j2,sha256=JKJIkiXsmBO4P6pKXM4IvSz3JgJhqCnaZI1NVfPPnXg,246
|
|
15
|
-
dsw_tdk-4.15.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
16
|
-
dsw_tdk-4.15.0.dist-info/METADATA,sha256=xnWSq8Q_emrSBIwjgGAU4LSFnBo7gdV7Go-zuB0IYRA,6022
|
|
17
|
-
dsw_tdk-4.15.0.dist-info/WHEEL,sha256=9Hm2OB-j1QcCUq9Jguht7ayGIIZBRTdOXD1qg9cCgPM,109
|
|
18
|
-
dsw_tdk-4.15.0.dist-info/entry_points.txt,sha256=lwD5ZzRCbTFSjP1-SkhYsaJe8sEXOWWgMAMUhw0v2Hk,41
|
|
19
|
-
dsw_tdk-4.15.0.dist-info/top_level.txt,sha256=7SfbsHFoJ_vlAgG6C-xzETETwYO71dBrGnod8uMFnjw,4
|
|
20
|
-
dsw_tdk-4.15.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|