mpt-extension-sdk 5.14.1__tar.gz → 5.16.0__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.
Files changed (54) hide show
  1. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/PKG-INFO +1 -1
  2. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/mpt_http/base.py +7 -0
  3. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/mpt_http/mpt.py +14 -3
  4. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/mpt_http/wrap_http_error.py +17 -6
  5. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/pyproject.toml +2 -2
  6. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/.gitignore +0 -0
  7. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/LICENSE +0 -0
  8. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/README.md +0 -0
  9. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/__init__.py +0 -0
  10. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/airtable/__init__.py +0 -0
  11. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/airtable/wrap_http_error.py +0 -0
  12. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/constants.py +0 -0
  13. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/core/__init__.py +0 -0
  14. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/core/events/__init__.py +0 -0
  15. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/core/events/dataclasses.py +0 -0
  16. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/core/events/registry.py +0 -0
  17. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/core/extension.py +0 -0
  18. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/core/security.py +0 -0
  19. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/core/utils.py +0 -0
  20. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/flows/__init__.py +0 -0
  21. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/flows/context.py +0 -0
  22. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/flows/pipeline.py +0 -0
  23. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/key_vault/__init__.py +0 -0
  24. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/key_vault/base.py +0 -0
  25. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/mpt_http/__init__.py +0 -0
  26. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/mpt_http/utils.py +0 -0
  27. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/__init__.py +0 -0
  28. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/commands/__init__.py +0 -0
  29. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/commands/django.py +0 -0
  30. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/commands/run.py +0 -0
  31. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/djapp/__init__.py +0 -0
  32. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/djapp/apps.py +0 -0
  33. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/djapp/conf/__init__.py +0 -0
  34. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/djapp/conf/default.py +0 -0
  35. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/djapp/conf/urls.py +0 -0
  36. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/djapp/management/__init__.py +0 -0
  37. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/djapp/management/commands/__init__.py +0 -0
  38. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/djapp/management/commands/consume_events.py +0 -0
  39. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/djapp/middleware.py +0 -0
  40. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/errors.py +0 -0
  41. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/events/__init__.py +0 -0
  42. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/events/dispatcher.py +0 -0
  43. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/events/producers.py +0 -0
  44. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/events/utils.py +0 -0
  45. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/initializer.py +0 -0
  46. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/logging.py +0 -0
  47. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/master.py +0 -0
  48. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/swoext.py +0 -0
  49. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/tracer.py +0 -0
  50. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/utils.py +0 -0
  51. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/runtime/workers.py +0 -0
  52. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/swo_rql/__init__.py +0 -0
  53. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/swo_rql/constants.py +0 -0
  54. {mpt_extension_sdk-5.14.1 → mpt_extension_sdk-5.16.0}/mpt_extension_sdk/swo_rql/query_builder.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mpt-extension-sdk
3
- Version: 5.14.1
3
+ Version: 5.16.0
4
4
  Summary: Extensions SDK for SoftwareONE Marketplace Platform
5
5
  Author: SoftwareOne AG
6
6
  License: Apache-2.0 license
@@ -23,6 +23,13 @@ class MPTClient(Session):
23
23
  pool_maxsize=POOL_MAX_SIZE,
24
24
  ),
25
25
  )
26
+ self.mount(
27
+ "https://",
28
+ HTTPAdapter(
29
+ max_retries=retries,
30
+ pool_maxsize=POOL_MAX_SIZE,
31
+ ),
32
+ )
26
33
  self.headers.update(
27
34
  {
28
35
  "User-Agent": USER_AGENT,
@@ -35,9 +35,8 @@ def _paginated(mpt_client, url, limit=10):
35
35
  @wrap_mpt_http_error
36
36
  def get_agreement(mpt_client, agreement_id):
37
37
  """Retrieve an agreement by ID."""
38
- response = mpt_client.get(
39
- f"/commerce/agreements/{agreement_id}?select=seller,buyer,listing,product,subscriptions"
40
- )
38
+ query = "select=seller,buyer,listing,product,subscriptions,assets,lines,parameters"
39
+ response = mpt_client.get(f"/commerce/agreements/{agreement_id}?{query}")
41
40
  response.raise_for_status()
42
41
  return response.json()
43
42
 
@@ -254,6 +253,18 @@ def get_template_by_name(mpt_client, product_id, template_name):
254
253
  return templates["data"][0] if templates["data"] else None
255
254
 
256
255
 
256
+ @wrap_mpt_http_error
257
+ def get_asset_template_by_name(mpt_client, product_id, template_name):
258
+ """Retrieve an asset template by name."""
259
+ rql_filter = f"and(eq(type,Asset),eq(name,{template_name}))"
260
+ url = f"/catalog/products/{product_id}/templates?{rql_filter}&limit=1"
261
+ response = mpt_client.get(url)
262
+ response.raise_for_status()
263
+
264
+ templates = response.json()
265
+ return templates["data"][0] if templates["data"] else None
266
+
267
+
257
268
  @wrap_mpt_http_error
258
269
  def update_agreement(mpt_client, agreement_id, **kwargs):
259
270
  """Update an agreement."""
@@ -2,12 +2,17 @@ import json
2
2
  from functools import wraps
3
3
 
4
4
  from requests import HTTPError, JSONDecodeError
5
+ from requests.exceptions import RetryError
5
6
 
6
7
 
7
8
  class MPTError(Exception):
8
9
  """Represents a generic MPT error."""
9
10
 
10
11
 
12
+ class MPTMaxRetryError(MPTError):
13
+ """Represents a maximum request retry error."""
14
+
15
+
11
16
  class MPTHttpError(MPTError):
12
17
  """Represents an HTTP error."""
13
18
 
@@ -40,6 +45,15 @@ class MPTAPIError(MPTHttpError):
40
45
  return str(self.payload)
41
46
 
42
47
 
48
+ def transform_http_error(err):
49
+ """Transform an HTTP error to an MPT error."""
50
+ try:
51
+ payload = err.response.json()
52
+ except JSONDecodeError:
53
+ return MPTHttpError(err.response.status_code, err.response.content.decode())
54
+ return MPTAPIError(err.response.status_code, payload)
55
+
56
+
43
57
  def wrap_mpt_http_error(func):
44
58
  """Wrap a function to catch MPT HTTP errors."""
45
59
 
@@ -48,12 +62,9 @@ def wrap_mpt_http_error(func):
48
62
  try:
49
63
  return func(*args, **kwargs)
50
64
  except HTTPError as err:
51
- response = err.response
52
- try:
53
- payload = response.json()
54
- except JSONDecodeError:
55
- raise MPTHttpError(response.status_code, response.content.decode()) from err
56
- raise MPTAPIError(response.status_code, payload) from err
65
+ raise transform_http_error(err) from err
66
+ except RetryError as retry_error:
67
+ raise MPTMaxRetryError(str(retry_error))
57
68
 
58
69
  return _wrapper
59
70
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mpt-extension-sdk"
3
- version = "5.14.1"
3
+ version = "5.16.0"
4
4
  description = "Extensions SDK for SoftwareONE Marketplace Platform"
5
5
  authors = [{ name = "SoftwareOne AG" }]
6
6
  requires-python = ">=3.12,<4"
@@ -76,7 +76,7 @@ include = [
76
76
  [tool.pytest.ini_options]
77
77
  testpaths = "tests"
78
78
  pythonpath = "."
79
- addopts = "--cov=mpt_extension_sdk --cov-report=term-missing --cov-report=html --cov-report=xml"
79
+ addopts = "--cov=mpt_extension_sdk --cov-report=term-missing --cov-report=html --cov-report=xml --import-mode=importlib"
80
80
  DJANGO_SETTINGS_MODULE = "tests.django.settings"
81
81
  log_cli = false
82
82
  filterwarnings = [