mpt-extension-sdk 5.9.2__tar.gz → 5.10.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.9.2 → mpt_extension_sdk-5.10.0}/PKG-INFO +1 -1
  2. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/djapp/conf/default.py +3 -9
  3. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/events/producers.py +14 -23
  4. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/pyproject.toml +1 -1
  5. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/.gitignore +0 -0
  6. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/LICENSE +0 -0
  7. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/README.md +0 -0
  8. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/__init__.py +0 -0
  9. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/airtable/__init__.py +0 -0
  10. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/airtable/wrap_http_error.py +0 -0
  11. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/constants.py +0 -0
  12. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/core/__init__.py +0 -0
  13. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/core/events/__init__.py +0 -0
  14. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/core/events/dataclasses.py +0 -0
  15. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/core/events/registry.py +0 -0
  16. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/core/extension.py +0 -0
  17. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/core/security.py +0 -0
  18. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/core/utils.py +0 -0
  19. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/flows/__init__.py +0 -0
  20. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/flows/context.py +0 -0
  21. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/flows/pipeline.py +0 -0
  22. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/key_vault/__init__.py +0 -0
  23. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/key_vault/base.py +0 -0
  24. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/mpt_http/__init__.py +0 -0
  25. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/mpt_http/base.py +0 -0
  26. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/mpt_http/mpt.py +0 -0
  27. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/mpt_http/utils.py +0 -0
  28. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/mpt_http/wrap_http_error.py +0 -0
  29. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/__init__.py +0 -0
  30. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/commands/__init__.py +0 -0
  31. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/commands/django.py +0 -0
  32. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/commands/run.py +0 -0
  33. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/djapp/__init__.py +0 -0
  34. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/djapp/apps.py +0 -0
  35. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/djapp/conf/__init__.py +0 -0
  36. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/djapp/conf/urls.py +0 -0
  37. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/djapp/management/__init__.py +0 -0
  38. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/djapp/management/commands/__init__.py +0 -0
  39. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/djapp/management/commands/consume_events.py +0 -0
  40. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/djapp/middleware.py +0 -0
  41. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/errors.py +0 -0
  42. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/events/__init__.py +0 -0
  43. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/events/dispatcher.py +0 -0
  44. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/events/utils.py +0 -0
  45. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/initializer.py +0 -0
  46. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/logging.py +0 -0
  47. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/master.py +0 -0
  48. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/swoext.py +0 -0
  49. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/tracer.py +0 -0
  50. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/utils.py +0 -0
  51. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/runtime/workers.py +0 -0
  52. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/swo_rql/__init__.py +0 -0
  53. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.0}/mpt_extension_sdk/swo_rql/constants.py +0 -0
  54. {mpt_extension_sdk-5.9.2 → mpt_extension_sdk-5.10.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.9.2
3
+ Version: 5.10.0
4
4
  Summary: Extensions SDK for SoftwareONE Marketplace Platform
5
5
  Author: SoftwareOne AG
6
6
  License: Apache-2.0 license
@@ -127,18 +127,14 @@ STATIC_URL = "static/"
127
127
  DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
128
128
 
129
129
  # OpenTelemetry configuration
130
- APPLICATIONINSIGHTS_CONNECTION_STRING = os.getenv(
131
- "APPLICATIONINSIGHTS_CONNECTION_STRING", ""
132
- )
130
+ APPLICATIONINSIGHTS_CONNECTION_STRING = os.getenv("APPLICATIONINSIGHTS_CONNECTION_STRING", "")
133
131
  USE_APPLICATIONINSIGHTS = bool(APPLICATIONINSIGHTS_CONNECTION_STRING)
134
132
 
135
133
 
136
134
  if USE_APPLICATIONINSIGHTS: # pragma: no cover
137
135
  logger_provider = LoggerProvider()
138
136
  set_logger_provider(logger_provider)
139
- exporter = AzureMonitorLogExporter(
140
- connection_string=APPLICATIONINSIGHTS_CONNECTION_STRING
141
- )
137
+ exporter = AzureMonitorLogExporter(connection_string=APPLICATIONINSIGHTS_CONNECTION_STRING)
142
138
  logger_provider.add_log_record_processor(BatchLogRecordProcessor(exporter))
143
139
 
144
140
  LOGGING = {
@@ -210,9 +206,7 @@ MPT_PRODUCTS_IDS = os.getenv("MPT_PRODUCTS_IDS", "PRD-1111-1111")
210
206
  MPT_PORTAL_BASE_URL = os.getenv("MPT_PORTAL_BASE_URL", "https://portal.s1.show")
211
207
  MPT_KEY_VAULT_NAME = os.getenv("MPT_KEY_VAULT_NAME", "mpt-key-vault")
212
208
 
213
- MPT_ORDERS_API_POLLING_INTERVAL_SECS = int(
214
- os.getenv("MPT_ORDERS_API_POLLING_INTERVAL_SECS", "120")
215
- )
209
+ MPT_ORDERS_API_POLLING_INTERVAL_SECS = int(os.getenv("MPT_ORDERS_API_POLLING_INTERVAL_SECS", "120"))
216
210
 
217
211
  EXTENSION_CONFIG = {
218
212
  "DUE_DATE_DAYS": "30",
@@ -7,6 +7,7 @@ from http import HTTPStatus
7
7
 
8
8
  import requests
9
9
  from django.conf import settings
10
+ from django.utils.module_loading import import_string
10
11
 
11
12
  from mpt_extension_sdk.core.events.dataclasses import Event
12
13
  from mpt_extension_sdk.core.utils import setup_client
@@ -17,6 +18,7 @@ logger = logging.getLogger(__name__)
17
18
 
18
19
  class EventProducer(ABC):
19
20
  """Abstract base class for event producers."""
21
+
20
22
  def __init__(self, dispatcher):
21
23
  self.dispatcher = dispatcher
22
24
  self.running_event = threading.Event()
@@ -50,16 +52,14 @@ class EventProducer(ABC):
50
52
  def produce_events(self):
51
53
  """Produce events."""
52
54
 
53
- @abstractmethod
54
- def produce_events_with_context(self):
55
- """Produce events with context."""
56
-
57
55
 
58
56
  class OrderEventProducer(EventProducer):
59
57
  """Order event producer."""
58
+
60
59
  def __init__(self, dispatcher):
61
60
  super().__init__(dispatcher)
62
61
  self.client = setup_client()
62
+ self.setup_contexts = import_string(settings.MPT_SETUP_CONTEXTS_FUNC)
63
63
 
64
64
  def produce_events(self):
65
65
  """Produce order events."""
@@ -67,27 +67,20 @@ class OrderEventProducer(EventProducer):
67
67
  with self.sleep(settings.MPT_ORDERS_API_POLLING_INTERVAL_SECS):
68
68
  orders = self.get_processing_orders()
69
69
  logger.info("%d orders found for processing...", len(orders))
70
- for order in orders:
71
- self.dispatcher.dispatch_event(Event(order["id"], "orders", order))
70
+ self.dispatch_events(orders)
72
71
 
73
- def produce_events_with_context(self): # pragma: no cover
74
- """Produce order events with context."""
75
- while self.running:
76
- with self.sleep(settings.MPT_ORDERS_API_POLLING_INTERVAL_SECS):
77
- orders = self.get_processing_orders()
78
- orders, contexts = self.filter_and_enrich(self.client, orders)
79
- logger.info("%d orders found for processing...", len(orders))
80
- for order, context in zip(orders, contexts, strict=False):
81
- self.dispatcher.dispatch_event(
82
- Event(order["id"], "orders", order, context)
83
- )
72
+ def dispatch_events(self, orders):
73
+ """Dispatch events for the given orders."""
74
+ contexts = self.setup_contexts(self.client, orders)
75
+ for context in contexts:
76
+ self.dispatcher.dispatch_event(Event(context.order_id, "orders", context))
84
77
 
85
78
  def get_processing_orders(self):
86
79
  """Get processing orders."""
87
80
  orders = []
88
- rql_query = RQLQuery().agreement.product.id.in_(
89
- settings.MPT_PRODUCTS_IDS
90
- ) & RQLQuery(status="processing")
81
+ rql_query = RQLQuery().agreement.product.id.in_(settings.MPT_PRODUCTS_IDS) & RQLQuery(
82
+ status="processing"
83
+ )
91
84
  url = (
92
85
  f"/commerce/orders?{rql_query}&select=audit,parameters,lines,subscriptions,"
93
86
  f"subscriptions.lines,agreement,buyer,seller&order=audit.created.at"
@@ -105,9 +98,7 @@ class OrderEventProducer(EventProducer):
105
98
  page = response.json()
106
99
  orders.extend(page["data"])
107
100
  else:
108
- logger.warning(
109
- "Order API error: %s %s", response.status_code, response.content
110
- )
101
+ logger.warning("Order API error: %s %s", response.status_code, response.content)
111
102
  return []
112
103
  offset += limit
113
104
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mpt-extension-sdk"
3
- version = "5.9.2"
3
+ version = "5.10.0"
4
4
  description = "Extensions SDK for SoftwareONE Marketplace Platform"
5
5
  authors = [{ name = "SoftwareOne AG" }]
6
6
  requires-python = ">=3.12,<4"