mpt-extension-sdk 4.4.0__tar.gz → 4.6.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.
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/PKG-INFO +4 -2
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/mpt_http/base.py +7 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/mpt_http/mpt.py +75 -9
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/mpt_http/wrap_http_error.py +7 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/pyproject.toml +1 -1
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/LICENSE +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/README.md +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/__init__.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/airtable/__init__.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/airtable/wrap_http_error.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/constants.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/core/__init__.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/core/events/__init__.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/core/events/dataclasses.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/core/events/registry.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/core/extension.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/core/security.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/core/utils.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/flows/__init__.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/flows/context.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/flows/pipeline.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/key_vault/__init__.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/key_vault/base.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/mpt_http/__init__.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/mpt_http/utils.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/__init__.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/commands/__init__.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/commands/django.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/commands/run.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/djapp/__init__.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/djapp/apps.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/djapp/conf/__init__.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/djapp/conf/default.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/djapp/conf/urls.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/djapp/management/__init__.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/djapp/management/commands/__init__.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/djapp/management/commands/consume_events.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/djapp/middleware.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/events/__init__.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/events/dispatcher.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/events/producers.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/events/utils.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/initializer.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/logging.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/master.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/swoext.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/tracer.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/utils.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/workers.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/swo_rql/__init__.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/swo_rql/constants.py +0 -0
- {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/swo_rql/query_builder.py +0 -0
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: mpt-extension-sdk
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.6.0
|
|
4
4
|
Summary: Extensions SDK for SoftwareONE Marketplace Platform
|
|
5
5
|
License: Apache-2.0
|
|
6
|
+
License-File: LICENSE
|
|
6
7
|
Author: SoftwareOne AG
|
|
7
8
|
Requires-Python: >=3.12,<4
|
|
8
9
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
9
10
|
Classifier: Programming Language :: Python :: 3
|
|
10
11
|
Classifier: Programming Language :: Python :: 3.12
|
|
11
12
|
Classifier: Programming Language :: Python :: 3.13
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
12
14
|
Requires-Dist: azure-identity (>=1.21.0,<2.0.0)
|
|
13
15
|
Requires-Dist: azure-keyvault-secrets (>=4.9.0,<5.0.0)
|
|
14
16
|
Requires-Dist: azure-monitor-opentelemetry-exporter (==1.0.0b25)
|
|
@@ -102,7 +102,15 @@ def set_processing_template(mpt_client, order_id, template):
|
|
|
102
102
|
|
|
103
103
|
|
|
104
104
|
@wrap_mpt_http_error
|
|
105
|
-
def create_asset(mpt_client,
|
|
105
|
+
def create_asset(mpt_client, asset):
|
|
106
|
+
"""Create a new asset."""
|
|
107
|
+
response = mpt_client.post("/commerce/assets", json=asset)
|
|
108
|
+
response.raise_for_status()
|
|
109
|
+
return response.json()
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
@wrap_mpt_http_error
|
|
113
|
+
def create_order_asset(mpt_client, order_id, asset):
|
|
106
114
|
"""Create a new asset for an order."""
|
|
107
115
|
response = mpt_client.post(f"/commerce/orders/{order_id}/assets", json=asset)
|
|
108
116
|
response.raise_for_status()
|
|
@@ -110,13 +118,57 @@ def create_asset(mpt_client, order_id, asset):
|
|
|
110
118
|
|
|
111
119
|
|
|
112
120
|
@wrap_mpt_http_error
|
|
113
|
-
def update_asset(mpt_client,
|
|
121
|
+
def update_asset(mpt_client, asset_id, **kwargs):
|
|
122
|
+
"""Update an asset."""
|
|
123
|
+
response = mpt_client.put(f"/commerce/assets/{asset_id}", json=kwargs)
|
|
124
|
+
response.raise_for_status()
|
|
125
|
+
return response.json()
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
@wrap_mpt_http_error
|
|
129
|
+
def update_order_asset(mpt_client, order_id, asset_id, **kwargs):
|
|
114
130
|
"""Update an order asset."""
|
|
115
131
|
response = mpt_client.put(f"/commerce/orders/{order_id}/assets/{asset_id}", json=kwargs)
|
|
116
132
|
response.raise_for_status()
|
|
117
133
|
return response.json()
|
|
118
134
|
|
|
119
135
|
|
|
136
|
+
@wrap_mpt_http_error
|
|
137
|
+
def get_agreement_asset_by_external_id(mpt_client, agreement_id, asset_external_id):
|
|
138
|
+
"""Retrieve an agreement asset by external ID."""
|
|
139
|
+
response = mpt_client.get(
|
|
140
|
+
f"/commerce/assets?eq(externalIds.vendor,{asset_external_id})"
|
|
141
|
+
f"&eq(agreement.id,{agreement_id})"
|
|
142
|
+
f"&eq(status,Active)"
|
|
143
|
+
f"&select=agreement.id&limit=1"
|
|
144
|
+
)
|
|
145
|
+
response.raise_for_status()
|
|
146
|
+
assets = response.json()
|
|
147
|
+
return assets["data"][0] if assets["data"] else None
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
@wrap_mpt_http_error
|
|
151
|
+
def get_asset_by_id(mpt_client, asset_id):
|
|
152
|
+
"""Get an asset by ID."""
|
|
153
|
+
response = mpt_client.get(f"/commerce/assets/{asset_id}")
|
|
154
|
+
response.raise_for_status()
|
|
155
|
+
return response.json()
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
@wrap_mpt_http_error
|
|
159
|
+
def get_order_asset_by_external_id(mpt_client, order_id, asset_external_id):
|
|
160
|
+
"""Retrieve an order asset by its external ID."""
|
|
161
|
+
response = mpt_client.get(
|
|
162
|
+
f"/commerce/orders/{order_id}/assets?eq(externalIds.vendor,{asset_external_id})&limit=1",
|
|
163
|
+
)
|
|
164
|
+
response.raise_for_status()
|
|
165
|
+
assets = response.json()
|
|
166
|
+
if assets["$meta"]["pagination"]["total"] == 1:
|
|
167
|
+
return assets["data"][0]
|
|
168
|
+
|
|
169
|
+
return None
|
|
170
|
+
|
|
171
|
+
|
|
120
172
|
@wrap_mpt_http_error
|
|
121
173
|
def create_subscription(mpt_client, order_id, subscription):
|
|
122
174
|
response = mpt_client.post(
|
|
@@ -188,6 +240,18 @@ def get_template_by_name(mpt_client, product_id, template_name):
|
|
|
188
240
|
return templates["data"][0]
|
|
189
241
|
|
|
190
242
|
|
|
243
|
+
@wrap_mpt_http_error
|
|
244
|
+
def get_asset_template_by_name(mpt_client, product_id, template_name):
|
|
245
|
+
"""Retrieve an asset template by name."""
|
|
246
|
+
rql_filter = f"and(eq(type,Asset),eq(name,{template_name}))"
|
|
247
|
+
url = f"/catalog/products/{product_id}/templates?{rql_filter}&limit=1"
|
|
248
|
+
response = mpt_client.get(url)
|
|
249
|
+
response.raise_for_status()
|
|
250
|
+
|
|
251
|
+
templates = response.json()
|
|
252
|
+
return templates["data"][0] if templates["data"] else None
|
|
253
|
+
|
|
254
|
+
|
|
191
255
|
@wrap_mpt_http_error
|
|
192
256
|
def update_agreement(mpt_client, agreement_id, **kwargs):
|
|
193
257
|
response = mpt_client.put(
|
|
@@ -277,21 +341,23 @@ def get_product_items_by_period(
|
|
|
277
341
|
|
|
278
342
|
|
|
279
343
|
def get_agreements_by_ids(mpt_client, ids):
|
|
344
|
+
"""Retrieve agreements by their IDs."""
|
|
345
|
+
ids_str = ",".join(ids)
|
|
280
346
|
rql_query = (
|
|
281
|
-
f"and(in(id,({
|
|
282
|
-
"&select=lines,parameters,subscriptions,product,listing"
|
|
347
|
+
f"and(in(id,({ids_str})),eq(status,Active))"
|
|
348
|
+
"&select=assets,lines,parameters,subscriptions,product,listing"
|
|
283
349
|
)
|
|
284
350
|
return get_agreements_by_query(mpt_client, rql_query)
|
|
285
351
|
|
|
286
352
|
|
|
287
|
-
def get_all_agreements(
|
|
288
|
-
|
|
289
|
-
)
|
|
290
|
-
product_condition = f"in(product.id,({
|
|
353
|
+
def get_all_agreements(mpt_client):
|
|
354
|
+
"""Retrieve all active agreements for specific products."""
|
|
355
|
+
product_ids_str = ",".join(settings.MPT_PRODUCTS_IDS)
|
|
356
|
+
product_condition = f"in(product.id,({product_ids_str}))"
|
|
291
357
|
|
|
292
358
|
return get_agreements_by_query(
|
|
293
359
|
mpt_client,
|
|
294
|
-
f"and(eq(status,Active),{product_condition})&select=lines,parameters,subscriptions,product,listing",
|
|
360
|
+
f"and(eq(status,Active),{product_condition})&select=assets,lines,parameters,subscriptions,product,listing",
|
|
295
361
|
)
|
|
296
362
|
|
|
297
363
|
|
{mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/mpt_http/wrap_http_error.py
RENAMED
|
@@ -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
|
pass
|
|
9
10
|
|
|
10
11
|
|
|
12
|
+
class MPTMaxRetryError(MPTError):
|
|
13
|
+
pass
|
|
14
|
+
|
|
15
|
+
|
|
11
16
|
class MPTHttpError(MPTError):
|
|
12
17
|
def __init__(self, status_code: int, content: str):
|
|
13
18
|
self.status_code = status_code
|
|
@@ -46,6 +51,8 @@ def wrap_mpt_http_error(func):
|
|
|
46
51
|
raise MPTAPIError(e.response.status_code, e.response.json())
|
|
47
52
|
except JSONDecodeError:
|
|
48
53
|
raise MPTHttpError(e.response.status_code, e.response.content.decode())
|
|
54
|
+
except RetryError as e:
|
|
55
|
+
raise MPTMaxRetryError(str(e))
|
|
49
56
|
|
|
50
57
|
return _wrapper
|
|
51
58
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/airtable/wrap_http_error.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/core/events/__init__.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/core/events/dataclasses.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/core/events/registry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/commands/__init__.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/commands/django.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/commands/run.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/djapp/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/djapp/conf/__init__.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/djapp/conf/default.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/djapp/conf/urls.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/djapp/middleware.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/events/__init__.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/events/dispatcher.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/events/producers.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/events/utils.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/runtime/initializer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.6.0}/mpt_extension_sdk/swo_rql/query_builder.py
RENAMED
|
File without changes
|