dsw-tdk 4.25.1__py2.py3-none-any.whl → 4.26.0rc1__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/api_client.py CHANGED
@@ -361,9 +361,19 @@ class WizardAPIClient:
361
361
  return await self._delete(f'/document-template-drafts/{remote_id}/assets/{asset_id}')
362
362
 
363
363
  @handle_client_errors
364
- async def get_api_version(self) -> str:
364
+ async def get_api_version(self) -> tuple[str, str | None]:
365
365
  body = await self._get_json('/')
366
- return body['version']
366
+ version = body.get('version', None)
367
+ metamodel_version = None
368
+ for item in body.get('metamodelVersions', []):
369
+ if item.get('name', '') == 'Document Template':
370
+ metamodel_version = item.get('version', None)
371
+ if version is None:
372
+ raise WizardCommunicationError(
373
+ reason='Invalid response',
374
+ message='Server did not return valid API version information (incompatible TDK?)'
375
+ )
376
+ return version, metamodel_version
367
377
 
368
378
  @handle_client_errors
369
379
  async def get_organization_id(self) -> str:
dsw/tdk/build_info.py CHANGED
@@ -9,9 +9,9 @@ BuildInfo = namedtuple(
9
9
  )
10
10
 
11
11
  BUILD_INFO = BuildInfo(
12
- version='v4.25.1~31a01b8',
13
- built_at='2025-12-19 12:48:15Z',
14
- sha='31a01b81b38254d1f771f4b109b60550a1debfa2',
12
+ version='v4.26.0~919c0b6',
13
+ built_at='2026-01-06 08:15:13Z',
14
+ sha='919c0b6cbc66f7fc93f03d3bd2f14e345a438367',
15
15
  branch='HEAD',
16
- tag='v4.25.1',
16
+ tag='v4.26.0',
17
17
  )
dsw/tdk/consts.py CHANGED
@@ -4,9 +4,9 @@ import re
4
4
  import pathspec
5
5
 
6
6
  APP = 'dsw-tdk'
7
- VERSION = '4.25.1'
7
+ VERSION = '4.26.0rc1'
8
8
  METAMODEL_VERSION_MAJOR = 17
9
- METAMODEL_VERSION_MINOR = 0
9
+ METAMODEL_VERSION_MINOR = 1
10
10
  METAMODEL_VERSION = f'{METAMODEL_VERSION_MAJOR}.{METAMODEL_VERSION_MINOR}'
11
11
 
12
12
  REGEX_SEMVER = re.compile(r'^[0-9]+\.[0-9]+\.[0-9]+$')
dsw/tdk/core.py CHANGED
@@ -4,7 +4,6 @@ import io
4
4
  import json
5
5
  import logging
6
6
  import pathlib
7
- import re
8
7
  import shutil
9
8
  import tempfile
10
9
  import zipfile
@@ -12,7 +11,7 @@ import zipfile
12
11
  import watchfiles
13
12
 
14
13
  from .api_client import WizardAPIClient, WizardCommunicationError
15
- from .consts import DEFAULT_ENCODING, REGEX_SEMVER
14
+ from .consts import DEFAULT_ENCODING
16
15
  from .model import TemplateProject, Template, TemplateFile, TemplateFileType
17
16
  from .utils import UUIDGen
18
17
  from .validation import ValidationError, TemplateValidator
@@ -32,33 +31,16 @@ class TDKProcessingError(RuntimeError):
32
31
  self.hint = hint
33
32
 
34
33
 
35
- METAMODEL_VERSION_SUPPORT = {
36
- '1.0': (2, 5, 0),
37
- '2.0': (2, 6, 0),
38
- '3.0': (2, 12, 0),
39
- '4.0': (3, 2, 0),
40
- '5.0': (3, 5, 0),
41
- '6.0': (3, 6, 0),
42
- '7.0': (3, 7, 0),
43
- '8.0': (3, 8, 0),
44
- '9.0': (3, 10, 0),
45
- '10.0': (3, 12, 0),
46
- '11.0': (3, 20, 0),
47
- '12.0': (4, 1, 0),
48
- '13.0': (4, 3, 0),
49
- '14.0': (4, 10, 0),
50
- '15.0': (4, 12, 0),
51
- '16.0': (4, 13, 0),
52
- '17.0': (4, 22, 0),
53
- }
54
-
55
-
56
34
  # pylint: disable-next=too-many-public-methods
57
35
  class TDKCore:
58
36
 
59
37
  # pylint: disable-next=too-many-locals
60
38
  def _check_metamodel_version(self):
61
39
  hint = 'Fix your metamodelVersion in template.json and/or visit docs'
40
+ if self.remote_metamodel_version is None:
41
+ self.logger.warning('Remote metamodel version is unknown, you should use '
42
+ 'a matching version of TDK to avoid issues')
43
+ return
62
44
  mm_ver = str(self.safe_template.metamodel_version)
63
45
  try:
64
46
  if '.' not in mm_ver:
@@ -66,34 +48,24 @@ class TDKCore:
66
48
  mm_major, mm_minor = map(int, mm_ver.split('.'))
67
49
  except ValueError as e:
68
50
  raise TDKProcessingError(f'Invalid metamodel version format: {mm_ver}', hint) from e
69
- api_version = self.remote_version.split('~', maxsplit=1)[0]
70
- if '-' in api_version:
71
- api_version = api_version.split('-', maxsplit=1)[0]
72
- if 'v' == api_version[0]:
73
- api_version = api_version[1:]
74
- if not re.match(REGEX_SEMVER, api_version):
75
- self.logger.warning('Using non-stable release of API: %s',
76
- self.remote_version)
77
- return
78
- parts = api_version.split('.')
79
- ver = (int(parts[0]), int(parts[1]), int(parts[2]))
80
- vtag = f'v{ver[0]}.{ver[1]}.{ver[2]}'
81
- if mm_ver not in METAMODEL_VERSION_SUPPORT:
82
- raise TDKProcessingError(f'Unknown metamodel version: {mm_ver}', hint)
83
- map_reverse = {v: k for k, v in METAMODEL_VERSION_SUPPORT.items()}
84
- nearest_leq = unknown_version = (0, 0, 0)
85
- for known_version in map_reverse.keys():
86
- if known_version <= ver:
87
- nearest_leq = known_version
88
- else:
89
- break
90
- if nearest_leq == unknown_version:
91
- raise TDKProcessingError(f'Unsupported API version: {vtag}', hint)
92
- api_mm_major, api_mm_minor = map(int, map_reverse[nearest_leq].split('.'))
93
- if mm_major != api_mm_major or mm_minor < api_mm_minor:
51
+ mmr_ver = self.remote_metamodel_version
52
+ try:
53
+ if '.' not in mmr_ver:
54
+ mmr_ver = f'{mmr_ver}.0'
55
+ mmr_major, mmr_minor = map(int, mmr_ver.split('.'))
56
+ except ValueError as e:
57
+ raise TDKProcessingError(f'Invalid remote metamodel version format: {mmr_ver}',
58
+ 'Check if connecting to correct API with matching version '
59
+ 'as you have in TDK.') from e
60
+ if (mm_major, mm_minor) == (mmr_major, mmr_minor):
61
+ self.logger.debug('Metamodel version %s matches remote version %s',
62
+ mmr_ver, mmr_ver)
63
+ elif mm_major == mmr_major and mm_minor < mmr_minor:
64
+ self.logger.warning('Local metamodel version %s is older than remote version %s, '
65
+ 'but still compatible', mm_ver, mmr_ver)
66
+ else:
94
67
  raise TDKProcessingError(
95
- f'Unsupported metamodel version {mm_ver} for API version {api_version}',
96
- hint,
68
+ f'Unsupported metamodel version: local {mm_ver}, remote {mmr_ver}', hint
97
69
  )
98
70
 
99
71
  def __init__(self, template: Template | None = None, project: TemplateProject | None = None,
@@ -101,7 +73,8 @@ class TDKCore:
101
73
  self.template = template
102
74
  self.project = project
103
75
  self.client = client
104
- self.remote_version = 'unknown~??????'
76
+ self.remote_version: str = 'unknown~??????'
77
+ self.remote_metamodel_version: str | None = 'unknown'
105
78
  self.logger = logger or logging.getLogger()
106
79
  self.loop = asyncio.get_event_loop()
107
80
  self.changes_processor = ChangesProcessor(self)
@@ -131,7 +104,7 @@ class TDKCore:
131
104
  async def init_client(self, api_url: str, api_key: str):
132
105
  self.logger.info('Connecting to %s', api_url)
133
106
  self.client = WizardAPIClient(api_url=api_url, api_key=api_key)
134
- self.remote_version = await self.client.get_api_version()
107
+ self.remote_version, self.remote_metamodel_version = await self.client.get_api_version()
135
108
  user = await self.client.get_current_user()
136
109
  self.logger.info('Successfully authenticated as %s %s (%s)',
137
110
  user['firstName'], user['lastName'], user['email'])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dsw-tdk
3
- Version: 4.25.1
3
+ Version: 4.26.0rc1
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
@@ -1,11 +1,11 @@
1
1
  dsw/tdk/__init__.py,sha256=zJeTybb0SqiNdGLkANjRa36hku4axi17mZL2dM3tHto,288
2
2
  dsw/tdk/__main__.py,sha256=cCzxo6f7raF50kQE-nM_segNjCNe723ZrxOBB6f3qwc,84
3
- dsw/tdk/api_client.py,sha256=04obYHBIVO-HYQn2-tBIMMgtvOGb1_p6dxrM-orGMco,14925
4
- dsw/tdk/build_info.py,sha256=tGprxsqrINBtV_KjxMqofgwmw68_gYoV3GgBY3FUj4Y,381
3
+ dsw/tdk/api_client.py,sha256=YBr_7CV2EMpyXKoGHYTDQSwoeIE1F5Uje_DFEIKEfxE,15436
4
+ dsw/tdk/build_info.py,sha256=ureIUUESM8ZemjCvErMSsn9HZTHGh40c-weckrTKOAE,381
5
5
  dsw/tdk/cli.py,sha256=VEpzf1_JIhPqeDcDLfR76oqoYVS9nvbIujBZ-2syL2M,28128
6
6
  dsw/tdk/config.py,sha256=ZZlpMqJ5QGsiywwleXtFS2DO1bhnp3ttGOsNq4VoPYc,4888
7
- dsw/tdk/consts.py,sha256=lBsp_OL7L3fmIJTZ00HW1jiFoiN0jOhBlZXaRyLSHlo,713
8
- dsw/tdk/core.py,sha256=yVZHsmptEXQBrddAGsKlw6zpgbMeaknqeSYbFA_7HF0,27691
7
+ dsw/tdk/consts.py,sha256=58kIQkOSIOBa5tpuLcBkTtiAARNLEG9pEP0JGslYCVk,716
8
+ dsw/tdk/core.py,sha256=RYV_AQNbcpAHxxq_Tg7LavyNs1JcbPat2Hy5DHbGBlY,27193
9
9
  dsw/tdk/model.py,sha256=e7wAraebj66AMRSKc1Lkmvrsj7m9ep2UcAxMdwd_x0c,17340
10
10
  dsw/tdk/utils.py,sha256=9XBc_2c9IDw0FqAXZYFRVxYFVPuYULWvs2Y9SjNQJT4,5681
11
11
  dsw/tdk/validation.py,sha256=PxgthiZJIk7al64n7Nj7Bp5Vvg_ltxRm3ocp74UO8Y8,10173
@@ -13,9 +13,9 @@ dsw/tdk/templates/LICENSE.j2,sha256=6WzK06169rxZ4V_boYgejcZkw-1Up_WoU18iI3Gbkfs,
13
13
  dsw/tdk/templates/README.md.j2,sha256=FzUABeMM8To0oT48Kytoox64uAZ8F7FSAAXgpyKzqdU,247
14
14
  dsw/tdk/templates/env.j2,sha256=yUaY7ZLbjdG45-_q6KWi-YnX9bjP7_lfXrowhJF1he0,98
15
15
  dsw/tdk/templates/starter.j2,sha256=JKJIkiXsmBO4P6pKXM4IvSz3JgJhqCnaZI1NVfPPnXg,246
16
- dsw_tdk-4.25.1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
17
- dsw_tdk-4.25.1.dist-info/METADATA,sha256=GOBZA39xuAvF43sk2NhLVADc6S9CJ3qTB7h2Yp6gH0g,6095
18
- dsw_tdk-4.25.1.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
19
- dsw_tdk-4.25.1.dist-info/entry_points.txt,sha256=lwD5ZzRCbTFSjP1-SkhYsaJe8sEXOWWgMAMUhw0v2Hk,41
20
- dsw_tdk-4.25.1.dist-info/top_level.txt,sha256=7SfbsHFoJ_vlAgG6C-xzETETwYO71dBrGnod8uMFnjw,4
21
- dsw_tdk-4.25.1.dist-info/RECORD,,
16
+ dsw_tdk-4.26.0rc1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
17
+ dsw_tdk-4.26.0rc1.dist-info/METADATA,sha256=xJ4SW-FtGDW3UlUw4nxgr-P6nBEugP1futKHZEepD9s,6098
18
+ dsw_tdk-4.26.0rc1.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
19
+ dsw_tdk-4.26.0rc1.dist-info/entry_points.txt,sha256=lwD5ZzRCbTFSjP1-SkhYsaJe8sEXOWWgMAMUhw0v2Hk,41
20
+ dsw_tdk-4.26.0rc1.dist-info/top_level.txt,sha256=7SfbsHFoJ_vlAgG6C-xzETETwYO71dBrGnod8uMFnjw,4
21
+ dsw_tdk-4.26.0rc1.dist-info/RECORD,,