mpt-extension-sdk 4.4.0__tar.gz → 4.5.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 (52) hide show
  1. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/PKG-INFO +4 -2
  2. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/mpt_http/mpt.py +63 -9
  3. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/pyproject.toml +1 -1
  4. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/LICENSE +0 -0
  5. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/README.md +0 -0
  6. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/__init__.py +0 -0
  7. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/airtable/__init__.py +0 -0
  8. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/airtable/wrap_http_error.py +0 -0
  9. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/constants.py +0 -0
  10. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/core/__init__.py +0 -0
  11. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/core/events/__init__.py +0 -0
  12. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/core/events/dataclasses.py +0 -0
  13. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/core/events/registry.py +0 -0
  14. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/core/extension.py +0 -0
  15. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/core/security.py +0 -0
  16. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/core/utils.py +0 -0
  17. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/flows/__init__.py +0 -0
  18. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/flows/context.py +0 -0
  19. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/flows/pipeline.py +0 -0
  20. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/key_vault/__init__.py +0 -0
  21. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/key_vault/base.py +0 -0
  22. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/mpt_http/__init__.py +0 -0
  23. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/mpt_http/base.py +0 -0
  24. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/mpt_http/utils.py +0 -0
  25. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/mpt_http/wrap_http_error.py +0 -0
  26. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/__init__.py +0 -0
  27. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/commands/__init__.py +0 -0
  28. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/commands/django.py +0 -0
  29. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/commands/run.py +0 -0
  30. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/djapp/__init__.py +0 -0
  31. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/djapp/apps.py +0 -0
  32. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/djapp/conf/__init__.py +0 -0
  33. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/djapp/conf/default.py +0 -0
  34. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/djapp/conf/urls.py +0 -0
  35. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/djapp/management/__init__.py +0 -0
  36. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/djapp/management/commands/__init__.py +0 -0
  37. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/djapp/management/commands/consume_events.py +0 -0
  38. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/djapp/middleware.py +0 -0
  39. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/events/__init__.py +0 -0
  40. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/events/dispatcher.py +0 -0
  41. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/events/producers.py +0 -0
  42. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/events/utils.py +0 -0
  43. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/initializer.py +0 -0
  44. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/logging.py +0 -0
  45. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/master.py +0 -0
  46. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/swoext.py +0 -0
  47. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/tracer.py +0 -0
  48. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/utils.py +0 -0
  49. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/runtime/workers.py +0 -0
  50. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/swo_rql/__init__.py +0 -0
  51. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/swo_rql/constants.py +0 -0
  52. {mpt_extension_sdk-4.4.0 → mpt_extension_sdk-4.5.0}/mpt_extension_sdk/swo_rql/query_builder.py +0 -0
@@ -1,14 +1,16 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: mpt-extension-sdk
3
- Version: 4.4.0
3
+ Version: 4.5.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, order_id, asset):
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, order_id, asset_id, **kwargs):
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(
@@ -277,21 +329,23 @@ def get_product_items_by_period(
277
329
 
278
330
 
279
331
  def get_agreements_by_ids(mpt_client, ids):
332
+ """Retrieve agreements by their IDs."""
333
+ ids_str = ",".join(ids)
280
334
  rql_query = (
281
- f"and(in(id,({','.join(ids)})),eq(status,Active))"
282
- "&select=lines,parameters,subscriptions,product,listing"
335
+ f"and(in(id,({ids_str})),eq(status,Active))"
336
+ "&select=assets,lines,parameters,subscriptions,product,listing"
283
337
  )
284
338
  return get_agreements_by_query(mpt_client, rql_query)
285
339
 
286
340
 
287
- def get_all_agreements(
288
- mpt_client,
289
- ):
290
- product_condition = f"in(product.id,({','.join(settings.MPT_PRODUCTS_IDS)}))"
341
+ def get_all_agreements(mpt_client):
342
+ """Retrieve all active agreements for specific products."""
343
+ product_ids_str = ",".join(settings.MPT_PRODUCTS_IDS)
344
+ product_condition = f"in(product.id,({product_ids_str}))"
291
345
 
292
346
  return get_agreements_by_query(
293
347
  mpt_client,
294
- f"and(eq(status,Active),{product_condition})&select=lines,parameters,subscriptions,product,listing",
348
+ f"and(eq(status,Active),{product_condition})&select=assets,lines,parameters,subscriptions,product,listing",
295
349
  )
296
350
 
297
351
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "mpt-extension-sdk"
3
- version = "4.4.0"
3
+ version = "4.5.0"
4
4
  description = "Extensions SDK for SoftwareONE Marketplace Platform"
5
5
  authors = ["SoftwareOne AG"]
6
6
  readme = "README.md"