mpt-extension-sdk 5.10.0__py3-none-any.whl → 5.11.0__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.
Files changed (28) hide show
  1. mpt_extension_sdk/airtable/wrap_http_error.py +4 -3
  2. mpt_extension_sdk/core/events/dataclasses.py +1 -0
  3. mpt_extension_sdk/core/events/registry.py +1 -0
  4. mpt_extension_sdk/core/extension.py +1 -0
  5. mpt_extension_sdk/core/security.py +1 -0
  6. mpt_extension_sdk/flows/context.py +1 -0
  7. mpt_extension_sdk/flows/pipeline.py +3 -0
  8. mpt_extension_sdk/key_vault/base.py +2 -1
  9. mpt_extension_sdk/mpt_http/base.py +1 -0
  10. mpt_extension_sdk/mpt_http/mpt.py +36 -0
  11. mpt_extension_sdk/mpt_http/wrap_http_error.py +4 -0
  12. mpt_extension_sdk/runtime/djapp/apps.py +2 -0
  13. mpt_extension_sdk/runtime/djapp/management/commands/consume_events.py +1 -0
  14. mpt_extension_sdk/runtime/djapp/middleware.py +1 -0
  15. mpt_extension_sdk/runtime/errors.py +1 -0
  16. mpt_extension_sdk/runtime/events/dispatcher.py +5 -11
  17. mpt_extension_sdk/runtime/events/utils.py +2 -3
  18. mpt_extension_sdk/runtime/initializer.py +1 -3
  19. mpt_extension_sdk/runtime/logging.py +2 -0
  20. mpt_extension_sdk/runtime/master.py +3 -6
  21. mpt_extension_sdk/runtime/tracer.py +1 -0
  22. mpt_extension_sdk/runtime/utils.py +8 -24
  23. mpt_extension_sdk/runtime/workers.py +1 -0
  24. {mpt_extension_sdk-5.10.0.dist-info → mpt_extension_sdk-5.11.0.dist-info}/METADATA +1 -1
  25. {mpt_extension_sdk-5.10.0.dist-info → mpt_extension_sdk-5.11.0.dist-info}/RECORD +28 -28
  26. {mpt_extension_sdk-5.10.0.dist-info → mpt_extension_sdk-5.11.0.dist-info}/WHEEL +0 -0
  27. {mpt_extension_sdk-5.10.0.dist-info → mpt_extension_sdk-5.11.0.dist-info}/entry_points.txt +0 -0
  28. {mpt_extension_sdk-5.10.0.dist-info → mpt_extension_sdk-5.11.0.dist-info}/licenses/LICENSE +0 -0
@@ -10,6 +10,7 @@ class AirTableError(Exception):
10
10
 
11
11
  class AirTableHttpError(AirTableError):
12
12
  """Exception raised for HTTP errors in the AirTable API."""
13
+
13
14
  def __init__(self, status_code: int, content: str):
14
15
  self.status_code = status_code
15
16
  self.content = content
@@ -18,6 +19,7 @@ class AirTableHttpError(AirTableError):
18
19
 
19
20
  class AirTableAPIError(AirTableHttpError):
20
21
  """Exception raised for errors in the AirTable API."""
22
+
21
23
  def __init__(self, status_code: int, payload) -> None:
22
24
  super().__init__(status_code, json.dumps(payload))
23
25
  self.payload = payload
@@ -33,6 +35,7 @@ class AirTableAPIError(AirTableHttpError):
33
35
 
34
36
  def wrap_airtable_http_error(func):
35
37
  """Wrap a function to catch AirTable HTTP errors."""
38
+
36
39
  @wraps(func)
37
40
  def _wrapper(*args, **kwargs):
38
41
  try:
@@ -41,8 +44,6 @@ def wrap_airtable_http_error(func):
41
44
  try:
42
45
  raise AirTableAPIError(err.response.status_code, err.response.json())
43
46
  except JSONDecodeError:
44
- raise AirTableHttpError(
45
- err.response.status_code, err.response.content.decode()
46
- )
47
+ raise AirTableHttpError(err.response.status_code, err.response.content.decode())
47
48
 
48
49
  return _wrapper
@@ -12,6 +12,7 @@ EventType = Annotated[Literal[EVENT_TYPES], Doc("Unique identifier of the event
12
12
  @dataclass
13
13
  class Event:
14
14
  """Represents an event."""
15
+
15
16
  id: Annotated[str, Doc("The unique identifier of the event.")]
16
17
  type: EventType
17
18
  data: Annotated[Mapping | Sequence, Doc("Event data.")]
@@ -8,6 +8,7 @@ EventListener = Callable[[Any, Event], None]
8
8
 
9
9
  class EventsRegistry:
10
10
  """Registry for event listeners."""
11
+
11
12
  def __init__(
12
13
  self,
13
14
  ) -> None:
@@ -5,6 +5,7 @@ from mpt_extension_sdk.core.events.registry import EventsRegistry
5
5
 
6
6
  class Extension:
7
7
  """Base class for all extensions."""
8
+
8
9
  def __init__(
9
10
  self,
10
11
  /,
@@ -14,6 +14,7 @@ logger = logging.getLogger(__name__)
14
14
 
15
15
  class JWTAuth(HttpBearer):
16
16
  """JWT authentication using JSON Web Tokens."""
17
+
17
18
  jwt_algos: ClassVar[list[str]] = [SECURITY_ALGORITHM]
18
19
 
19
20
  def __init__(
@@ -8,6 +8,7 @@ ORDER_TYPE_TERMINATION = "Termination"
8
8
  @dataclass
9
9
  class Context:
10
10
  """Represents the context for an order."""
11
+
11
12
  order: dict
12
13
 
13
14
  @property
@@ -9,6 +9,7 @@ NextStep = Callable[[MPTClient, Context], None]
9
9
 
10
10
  class Step(ABC):
11
11
  """Abstract base class for pipeline steps."""
12
+
12
13
  @abstractmethod
13
14
  def __call__(
14
15
  self,
@@ -26,6 +27,7 @@ def _default_error_handler(error: Exception, context: Context, next_step: NextSt
26
27
 
27
28
  class Cursor:
28
29
  """A cursor for navigating through pipeline steps."""
30
+
29
31
  def __init__(self, steps, error_handler):
30
32
  self.queue = steps
31
33
  self.error_handler = error_handler
@@ -45,6 +47,7 @@ class Cursor:
45
47
 
46
48
  class Pipeline:
47
49
  """A pipeline for processing steps."""
50
+
48
51
  def __init__(self, *steps):
49
52
  self.queue = steps
50
53
 
@@ -13,6 +13,7 @@ logger = logging.getLogger(__name__)
13
13
 
14
14
  class KeyVault(Session):
15
15
  """A client for interacting with Azure Key Vault."""
16
+
16
17
  def __init__(self, key_vault_name: str):
17
18
  """
18
19
  Initialize the KeyVault client with the provided Key Vault name.
@@ -62,7 +63,7 @@ class KeyVault(Session):
62
63
  "Failed to set secret '%s' in Key Vault '%s': %s",
63
64
  secret_name,
64
65
  self.key_vault_name,
65
- err # noqa: TRY401
66
+ err, # noqa: TRY401
66
67
  )
67
68
  return None
68
69
 
@@ -8,6 +8,7 @@ from mpt_extension_sdk.constants import POOL_MAX_SIZE, USER_AGENT
8
8
 
9
9
  class MPTClient(Session):
10
10
  """Client for interacting with the MPT API."""
11
+
11
12
  def __init__(self, base_url, api_token):
12
13
  super().__init__()
13
14
  retries = Retry(
@@ -124,6 +124,42 @@ def update_asset(mpt_client, order_id, asset_id, **kwargs):
124
124
  return response.json()
125
125
 
126
126
 
127
+ @wrap_mpt_http_error
128
+ def create_agreement_asset(mpt_client, asset):
129
+ """Create a new agreement asset."""
130
+ response = mpt_client.post("/commerce/assets", json=asset)
131
+ response.raise_for_status()
132
+ return response.json()
133
+
134
+
135
+ @wrap_mpt_http_error
136
+ def get_agreement_asset_by_external_id(mpt_client, agreement_id, asset_external_id):
137
+ """Retrieve an agreement asset by external ID."""
138
+ response = mpt_client.get(
139
+ f"/commerce/assets?eq(externalIds.vendor,{asset_external_id})"
140
+ f"&eq(agreement.id,{agreement_id})"
141
+ f"&eq(status,Active)"
142
+ f"&select=agreement.id&limit=1"
143
+ )
144
+ response.raise_for_status()
145
+ assets = response.json()
146
+ return assets["data"][0] if assets["data"] else None
147
+
148
+
149
+ @wrap_mpt_http_error
150
+ def get_order_asset_by_external_id(mpt_client, order_id, asset_external_id):
151
+ """Retrieve an order asset by its external ID."""
152
+ response = mpt_client.get(
153
+ f"/commerce/orders/{order_id}/assets?eq(externalIds.vendor,{asset_external_id})&limit=1",
154
+ )
155
+ response.raise_for_status()
156
+ assets = response.json()
157
+ if assets["$meta"]["pagination"]["total"] == 1:
158
+ return assets["data"][0]
159
+
160
+ return None
161
+
162
+
127
163
  @wrap_mpt_http_error
128
164
  def create_subscription(mpt_client, order_id, subscription):
129
165
  """Create a new subscription for an order."""
@@ -10,6 +10,7 @@ class MPTError(Exception):
10
10
 
11
11
  class MPTHttpError(MPTError):
12
12
  """Represents an HTTP error."""
13
+
13
14
  def __init__(self, status_code: int, content: str):
14
15
  self.status_code = status_code
15
16
  self.content = content
@@ -18,6 +19,7 @@ class MPTHttpError(MPTError):
18
19
 
19
20
  class MPTAPIError(MPTHttpError):
20
21
  """Represents an API error."""
22
+
21
23
  def __init__(self, status_code, payload):
22
24
  super().__init__(status_code, json.dumps(payload))
23
25
  self.payload = payload
@@ -40,6 +42,7 @@ class MPTAPIError(MPTHttpError):
40
42
 
41
43
  def wrap_mpt_http_error(func):
42
44
  """Wrap a function to catch MPT HTTP errors."""
45
+
43
46
  @wraps(func)
44
47
  def _wrapper(*args, **kwargs):
45
48
  try:
@@ -57,6 +60,7 @@ def wrap_mpt_http_error(func):
57
60
 
58
61
  class ValidationError:
59
62
  """Represents a validation error."""
63
+
60
64
  def __init__(self, err_id, message):
61
65
  self.id = err_id
62
66
  self.message = message
@@ -9,6 +9,7 @@ ext = Extension()
9
9
 
10
10
  class DjAppConfig(AppConfig):
11
11
  """Django AppConfig for the extension."""
12
+
12
13
  name = "mpt_extension_sdk.runtime.djapp"
13
14
 
14
15
  def ready(self):
@@ -27,6 +28,7 @@ class DjAppConfig(AppConfig):
27
28
 
28
29
  class ExtensionConfig(DjAppConfig):
29
30
  """Configuration for the extension."""
31
+
30
32
  name = "mpt_extension_sdk"
31
33
  verbose_name = "SWO Extension SDK"
32
34
  extension = ext
@@ -13,6 +13,7 @@ from mpt_extension_sdk.runtime.events.producers import (
13
13
 
14
14
  class Command(BaseCommand): # pragma: no cover
15
15
  """Command to consume events."""
16
+
16
17
  help = CONSUME_EVENTS_HELP_TEXT
17
18
  producer_classes: ClassVar[list] = [
18
19
  OrderEventProducer,
@@ -7,6 +7,7 @@ _CLIENT = None
7
7
 
8
8
  class MPTClientMiddleware: # pragma: no cover
9
9
  """Middleware to set up MPTClient for each request."""
10
+
10
11
  def __init__(self, get_response):
11
12
  self.get_response = get_response
12
13
 
@@ -1,4 +1,5 @@
1
1
  # Custom exception for variable format errors
2
2
 
3
+
3
4
  class VariableNotWellFormedError(Exception):
4
5
  """Raised when a variable is not well-formed."""
@@ -30,6 +30,7 @@ def done_callback(futures, key, future): # pragma: no cover
30
30
 
31
31
  class Dispatcher:
32
32
  """Event dispatcher."""
33
+
33
34
  def __init__(self, group=DEFAULT_APP_CONFIG_GROUP, name=DEFAULT_APP_CONFIG_NAME):
34
35
  self.registry: EventsRegistry = get_events_registry(group=group, name=name)
35
36
  self.queue = deque()
@@ -66,25 +67,18 @@ class Dispatcher:
66
67
  skipped = []
67
68
  while len(self.queue) > 0:
68
69
  event_type, event = self.queue.pop()
69
- logger.debug(
70
- "got event of type %s (%s) from queue...", event_type, event.id
71
- )
72
- listener = wrap_for_trace(
73
- self.registry.get_listener(event_type), event_type
74
- )
70
+ logger.debug("got event of type %s (%s) from queue...", event_type, event.id)
71
+ listener = wrap_for_trace(self.registry.get_listener(event_type), event_type)
75
72
  if (event.type, event.id) in self.futures:
76
73
  logger.info(
77
- "An event for (%s, %s) is already processing, skip it",
78
- event.type, event.id
74
+ "An event for (%s, %s) is already processing, skip it", event.type, event.id
79
75
  )
80
76
  skipped.append((event.type, event))
81
77
  else:
82
78
  future = self.executor.submit(listener, self.client, event)
83
79
  self.futures[event.type, event.id] = future
84
80
  future.add_done_callback(
85
- functools.partial(
86
- done_callback, self.futures, (event.type, event.id)
87
- )
81
+ functools.partial(done_callback, self.futures, (event.type, event.id))
88
82
  )
89
83
 
90
84
  self.queue.extendleft(skipped)
@@ -48,14 +48,13 @@ def instrument_logging(): # pragma: no cover
48
48
 
49
49
  def wrap_for_trace(func, event_type): # pragma: no cover
50
50
  """Wrap a function to add OpenTelemetry tracing."""
51
+
51
52
  @wraps(func)
52
53
  def opentelemetry_wrapper(client, event):
53
54
  tracer = trace.get_tracer(event_type)
54
55
  object_id = event.id
55
56
 
56
- with tracer.start_as_current_span(
57
- f"Event {event_type} for {object_id}"
58
- ) as span:
57
+ with tracer.start_as_current_span(f"Event {event_type} for {object_id}") as span:
59
58
  try:
60
59
  func(client, event)
61
60
  except Exception:
@@ -27,9 +27,7 @@ JSON_EXT_VARIABLES = {
27
27
  def initialize(options, group=DEFAULT_APP_CONFIG_GROUP, name=DEFAULT_APP_CONFIG_NAME):
28
28
  """Initialize the SDK."""
29
29
  rich.reconfigure(theme=Theme({"repr.mpt_id": "bold light_salmon3"}))
30
- django_settings_module = options.get(
31
- "django_settings_module", DJANGO_SETTINGS_MODULE
32
- )
30
+ django_settings_module = options.get("django_settings_module", DJANGO_SETTINGS_MODULE)
33
31
  os.environ.setdefault("DJANGO_SETTINGS_MODULE", django_settings_module)
34
32
  import django # noqa: PLC0415
35
33
  from django.conf import settings # noqa: PLC0415
@@ -6,6 +6,7 @@ from rich.logging import RichHandler as _RichHandler
6
6
 
7
7
  class ReprHighlighter(_ReprHighlighter):
8
8
  """Highlighter for MPT IDs."""
9
+
9
10
  accounts_prefixes = ("ACC", "BUY", "LCE", "MOD", "SEL", "USR", "AUSR", "UGR")
10
11
  catalog_prefixes = (
11
12
  "PRD",
@@ -40,4 +41,5 @@ class ReprHighlighter(_ReprHighlighter):
40
41
 
41
42
  class RichHandler(_RichHandler):
42
43
  """Rich handler for logging with color support."""
44
+
43
45
  HIGHLIGHTER_CLASS = ReprHighlighter
@@ -27,6 +27,7 @@ def _display_path(path): # pragma: no cover
27
27
 
28
28
  class Master:
29
29
  """Master process for managing worker processes."""
30
+
30
31
  def __init__(self, options, settings):
31
32
  self.workers = {}
32
33
  self.options = options
@@ -94,12 +95,8 @@ class Master:
94
95
  exited_workers.append(worker_type)
95
96
  logger.info("%s worker exited", worker_type.capitalize())
96
97
  else:
97
- logger.info(
98
- "Process of type %s is dead, restart it", worker_type
99
- )
100
- self.start_worker_process(
101
- worker_type, self.proc_targets[worker_type]
102
- )
98
+ logger.info("Process of type %s is dead, restart it", worker_type)
99
+ self.start_worker_process(worker_type, self.proc_targets[worker_type])
103
100
  if exited_workers == list(self.workers.keys()):
104
101
  self.stop_event.set()
105
102
 
@@ -7,6 +7,7 @@ tracer = trace.get_tracer(__name__)
7
7
 
8
8
  def dynamic_trace_span(name_fn):
9
9
  """Dynamically create a trace span."""
10
+
10
11
  def decorator(func):
11
12
  @wraps(func)
12
13
  def wrapper(*args, **kwargs):
@@ -20,9 +20,7 @@ from mpt_extension_sdk.constants import (
20
20
  from mpt_extension_sdk.runtime.errors import VariableNotWellFormedError
21
21
 
22
22
 
23
- def get_extension_app_config_name(
24
- group=DEFAULT_APP_CONFIG_GROUP, name=DEFAULT_APP_CONFIG_NAME
25
- ):
23
+ def get_extension_app_config_name(group=DEFAULT_APP_CONFIG_GROUP, name=DEFAULT_APP_CONFIG_NAME):
26
24
  """Get the extension app config name for the specified group and name."""
27
25
  eps = entry_points()
28
26
  (app_config_ep,) = eps.select(group=group, name=name)
@@ -30,15 +28,12 @@ def get_extension_app_config_name(
30
28
  return f"{app_config.__module__}.{app_config.__name__}"
31
29
 
32
30
 
33
- def get_extension_app_config(
34
- group=DEFAULT_APP_CONFIG_GROUP, name=DEFAULT_APP_CONFIG_NAME
35
- ):
31
+ def get_extension_app_config(group=DEFAULT_APP_CONFIG_GROUP, name=DEFAULT_APP_CONFIG_NAME):
36
32
  """Get the extension app config for the specified group and name."""
37
33
  app_config_name = get_extension_app_config_name(group=group, name=name)
38
34
  return next(
39
35
  filter(
40
- lambda app: app_config_name
41
- == get_app_name(app),
36
+ lambda app: app_config_name == get_app_name(app),
42
37
  apps.app_configs.values(),
43
38
  ),
44
39
  None,
@@ -66,18 +61,11 @@ def gradient(start_hex, end_hex, num_samples=10): # pragma: no cover
66
61
  end_rgb = tuple(int(end_hex[idx : idx + 2], GRADIENT_HEX_BASE) for idx in range(1, 6, 2))
67
62
  gradient_colors = [start_hex]
68
63
  for sample in range(1, num_samples):
69
- red = int(
70
- start_rgb[0]
71
- + (float(sample) / (num_samples - 1)) * (end_rgb[0] - start_rgb[0])
72
- )
64
+ red = int(start_rgb[0] + (float(sample) / (num_samples - 1)) * (end_rgb[0] - start_rgb[0]))
73
65
  green = int(
74
- start_rgb[1]
75
- + (float(sample) / (num_samples - 1)) * (end_rgb[1] - start_rgb[1])
76
- )
77
- blue = int(
78
- start_rgb[2]
79
- + (float(sample) / (num_samples - 1)) * (end_rgb[2] - start_rgb[2])
66
+ start_rgb[1] + (float(sample) / (num_samples - 1)) * (end_rgb[1] - start_rgb[1])
80
67
  )
68
+ blue = int(start_rgb[2] + (float(sample) / (num_samples - 1)) * (end_rgb[2] - start_rgb[2]))
81
69
  gradient_colors.append(f"#{red:02X}{green:02X}{blue:02X}")
82
70
 
83
71
  return gradient_colors
@@ -149,14 +137,10 @@ def get_initializer_function():
149
137
  """Dynamically import and return the initializer function from settings.INITIALIZER."""
150
138
  # Read from environment variable instead of Django settings to avoid circular dependency
151
139
  # (Django settings need to be configured before we can read settings.INITIALIZER)
152
- return os.getenv(
153
- "MPT_INITIALIZER", "mpt_extension_sdk.runtime.initializer.initialize"
154
- )
140
+ return os.getenv("MPT_INITIALIZER", "mpt_extension_sdk.runtime.initializer.initialize")
155
141
 
156
142
 
157
- def initialize_extension(
158
- options, group=DEFAULT_APP_CONFIG_GROUP, name=DEFAULT_APP_CONFIG_NAME
159
- ):
143
+ def initialize_extension(options, group=DEFAULT_APP_CONFIG_GROUP, name=DEFAULT_APP_CONFIG_NAME):
160
144
  """Initialize the extension."""
161
145
  initialize_path = get_initializer_function()
162
146
  initialize_func = import_string(initialize_path)
@@ -11,6 +11,7 @@ from mpt_extension_sdk.runtime.utils import initialize_extension
11
11
 
12
12
  class ExtensionWebApplication(BaseApplication):
13
13
  """Gunicorn application for the extension."""
14
+
14
15
  def __init__(self, app, options=None):
15
16
  self.options = options or {}
16
17
  self.application = app
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mpt-extension-sdk
3
- Version: 5.10.0
3
+ Version: 5.11.0
4
4
  Summary: Extensions SDK for SoftwareONE Marketplace Platform
5
5
  Author: SoftwareOne AG
6
6
  License: Apache-2.0 license
@@ -1,54 +1,54 @@
1
1
  mpt_extension_sdk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  mpt_extension_sdk/constants.py,sha256=Qrwnvc9v6BFaNF6Fc6_EB-PfazjQfF1F3HMOQLIQgiA,527
3
3
  mpt_extension_sdk/airtable/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- mpt_extension_sdk/airtable/wrap_http_error.py,sha256=9SSnnHREJ3QS1VPzO_YgSQy-H7l49D5jlOXa0OfZ3wc,1498
4
+ mpt_extension_sdk/airtable/wrap_http_error.py,sha256=0vaFm5hqYlYRPcNxlVoQdXIFJ7wpAGoNMIfqGcdTk6o,1463
5
5
  mpt_extension_sdk/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- mpt_extension_sdk/core/extension.py,sha256=E78tT7lQBTDMeFRVeeyiwtIK66t7jZbF_Y9EITPnXbk,307
7
- mpt_extension_sdk/core/security.py,sha256=Zzvd5k64f9JK4LvzJtDXRO-UltM7NPk46K5kxJiKHl4,1720
6
+ mpt_extension_sdk/core/extension.py,sha256=RjO7GEVMLz5QMrj85yzsQIxfAJHrRBuNlINqx_aSxd4,308
7
+ mpt_extension_sdk/core/security.py,sha256=VM0kdoYWHeGPnnA2MminHvPybIFKEzh2nQ0CtS9eaEw,1721
8
8
  mpt_extension_sdk/core/utils.py,sha256=IDDUykQL_y4OpwdrqNtrG3DPieV6U9AEp2_94hEvXQo,436
9
9
  mpt_extension_sdk/core/events/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- mpt_extension_sdk/core/events/dataclasses.py,sha256=RS_fm0WmD1BFdS9KU5fM9YAX4qlY6iQKsEBTsVa1-hs,500
11
- mpt_extension_sdk/core/events/registry.py,sha256=sLQq4mnaSCyS9pIBtagrEnE-SbZmS6nS9xQNyheK8RQ,1502
10
+ mpt_extension_sdk/core/events/dataclasses.py,sha256=31B8LK64VRhJfvNDxnuLN9hTlCSXFUxflCawwqSO6sQ,501
11
+ mpt_extension_sdk/core/events/registry.py,sha256=N6d5ptoxcu7yAyCzZ0biuCh1vHW2mxUe7OppT80ZGFw,1503
12
12
  mpt_extension_sdk/flows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- mpt_extension_sdk/flows/context.py,sha256=xnppxs3etpAxEGoDmP3tAn_uT8Jo2Gnz-1MtKElplSY,1409
14
- mpt_extension_sdk/flows/pipeline.py,sha256=pMpgtcTFcMDaMTe2ygnXrquHD1hoJbnI850ZjWnR5Kg,1649
13
+ mpt_extension_sdk/flows/context.py,sha256=nrvR45HH2O9_o9Ln6o846uCGCoiDhrH0GHFWnbyDjBk,1410
14
+ mpt_extension_sdk/flows/pipeline.py,sha256=s4iYNxszt-fNKkVu3QXX7ffvsT6oehBPUPsX7Vpi9K0,1652
15
15
  mpt_extension_sdk/key_vault/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- mpt_extension_sdk/key_vault/base.py,sha256=lgIqLphJTVE3MHxxvtOWBzs13z1seHwN_kJd0XLaBiI,3867
16
+ mpt_extension_sdk/key_vault/base.py,sha256=OnlBEhof_NMRToPQUO4Nrq-dnT_FPxr5FuSn3CRBQF0,3869
17
17
  mpt_extension_sdk/mpt_http/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
- mpt_extension_sdk/mpt_http/base.py,sha256=PWjuClTrZzEg1tS43wlgCS8-ardHyG12pHsaLEAWNdQ,1513
19
- mpt_extension_sdk/mpt_http/mpt.py,sha256=8_mOhxj_HCn8WDj8piOLR1mRJAVzODm99SbFr5de8QE,16004
18
+ mpt_extension_sdk/mpt_http/base.py,sha256=PbaicrynWLo-plMNC7urIO_iAR5u97tgYrPxrpTn5mI,1514
19
+ mpt_extension_sdk/mpt_http/mpt.py,sha256=ZdK_6_WC0ntcA4krmuPtAzGkKhcyOLShlgLq67Ws5XA,17190
20
20
  mpt_extension_sdk/mpt_http/utils.py,sha256=Ek2D4efcJNhQlOyXd4ZeBhwqDjFpvcbBEqxuCqRQ7cU,166
21
- mpt_extension_sdk/mpt_http/wrap_http_error.py,sha256=O0mEiYfrFwg66wxk9ZRq6h5qShuYlaaepN5ZSlroo2g,2144
21
+ mpt_extension_sdk/mpt_http/wrap_http_error.py,sha256=bFaIH-VG1laWlVqnOudzKsJgKItJLI4D56phn5xGQdw,2148
22
22
  mpt_extension_sdk/runtime/__init__.py,sha256=YY7ChHKTXXv0a6_PG1F4pVASDzleSWMv_Zf7uX0UDyc,244
23
- mpt_extension_sdk/runtime/errors.py,sha256=ZaIyli5uF-rhjqEiE0F5c9_udNc-osT1VXr35YHddWM,145
24
- mpt_extension_sdk/runtime/initializer.py,sha256=illgCeIble59AsGG8kJYGhTTGmh-uarU71xwRJI4h70,2218
25
- mpt_extension_sdk/runtime/logging.py,sha256=Pq4OvrYv_SVAuAZOjIIYzC_b9DmGzp5jIS6uHq8cbkU,1096
26
- mpt_extension_sdk/runtime/master.py,sha256=LbukA5cs2IaKBk32_mZG3qITuAQFW7DtUSnNAdF8pQw,5063
23
+ mpt_extension_sdk/runtime/errors.py,sha256=dO2038Ivj9lzHtOtpJrB5fwL03tUWNT0R6HUKxrzKa4,146
24
+ mpt_extension_sdk/runtime/initializer.py,sha256=P_cbsR10NloHQ1dYZvTeaMOZmYFgrJF0PlEytWFF6rQ,2204
25
+ mpt_extension_sdk/runtime/logging.py,sha256=BB5NSoHaprpQnummbQ3NkkA5Nz6rrsZMZwg_Q7pTDx4,1098
26
+ mpt_extension_sdk/runtime/master.py,sha256=OoXLTTLoCrHWppMFtv90RGDImeg7-XWPYqH31cI9Lho,4956
27
27
  mpt_extension_sdk/runtime/swoext.py,sha256=wrZ1RzPOzKa2DTOXkhTTiTlT9LXM9u5AKki2lX3fsVY,1806
28
- mpt_extension_sdk/runtime/tracer.py,sha256=7c4GPB6BY5SJRLiqzmCPGdS4d7fbL746AfC6RBJ4WsU,458
29
- mpt_extension_sdk/runtime/utils.py,sha256=OkQm7Qw52Rm1lbWIMvSxM2uCQM4SvwWtRaucZC7ZfWo,5289
30
- mpt_extension_sdk/runtime/workers.py,sha256=AL2mXOu20hQRmnO-ta2VeLwqMCsbjlGSYxo7AJokZTo,2932
28
+ mpt_extension_sdk/runtime/tracer.py,sha256=uJNRYDNoVeXButn5aF83W59upZdEZlIVH8hC8Wgi_Gw,459
29
+ mpt_extension_sdk/runtime/utils.py,sha256=AWdr7KLRof4H1hJK71DGN97mh-zMfvoLfFu5H3DjKfo,5165
30
+ mpt_extension_sdk/runtime/workers.py,sha256=hnRviiT0ZQDNEVsvPB0qH7JET5v_-RMQQS-2hpZCrVM,2933
31
31
  mpt_extension_sdk/runtime/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
32
  mpt_extension_sdk/runtime/commands/django.py,sha256=Xsj4VjuYonekWSu6gL-qUHChMbo6tKuRVmCqEs2jeoA,1247
33
33
  mpt_extension_sdk/runtime/commands/run.py,sha256=OaSMi14k7KnJBE1F6KSg-vd0L0VLErWoMBvyKIccZRE,1134
34
34
  mpt_extension_sdk/runtime/djapp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
- mpt_extension_sdk/runtime/djapp/apps.py,sha256=CFyyZbRUEurKl5fTYCKRGRvfcmgMqWdE9wq049wSwrs,1653
36
- mpt_extension_sdk/runtime/djapp/middleware.py,sha256=JX_HvRwTPFvhVf87HOzbOazqtt1OCbti01CJxSzsSPk,651
35
+ mpt_extension_sdk/runtime/djapp/apps.py,sha256=jJ_Gev5D_3nZa632IVnNoU1y54QaEaZsrmFAUC9uMcM,1655
36
+ mpt_extension_sdk/runtime/djapp/middleware.py,sha256=lRi2U7rq5r8diqcJYCjO-bXxmzhCAFo7yikWDp_v9LQ,652
37
37
  mpt_extension_sdk/runtime/djapp/conf/__init__.py,sha256=zT_Ep9clWx3oXT6EJwY15vUrtk98TqbedXLV0MXptsw,401
38
38
  mpt_extension_sdk/runtime/djapp/conf/default.py,sha256=ZjyqHXq8qMJqKWMqnQ2EcRv2eJv7h43GA6njEhMs9R4,6445
39
39
  mpt_extension_sdk/runtime/djapp/conf/urls.py,sha256=g-h1vzwDgCGLliSE2BDjb1eRJevZxZ7ehJrqSis12So,309
40
40
  mpt_extension_sdk/runtime/djapp/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
41
  mpt_extension_sdk/runtime/djapp/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
- mpt_extension_sdk/runtime/djapp/management/commands/consume_events.py,sha256=mXUO-Ip1rEpXnchz4iMoe7IWulcyNd2RTZ_QHbxfrBs,1424
42
+ mpt_extension_sdk/runtime/djapp/management/commands/consume_events.py,sha256=C7KPtN03ipPxMvlmHSqWqThzKl77OYELvMAoNMQ7WI8,1425
43
43
  mpt_extension_sdk/runtime/events/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
- mpt_extension_sdk/runtime/events/dispatcher.py,sha256=vpH7eYo3ZD35i9JOKQ6ZqieiNUf6DfSo3-F4bTlUSAo,3348
44
+ mpt_extension_sdk/runtime/events/dispatcher.py,sha256=YQvGG_GseHKRbJrmpqY1Uhcmk3CSTxHEj61A8fmVm2k,3195
45
45
  mpt_extension_sdk/runtime/events/producers.py,sha256=8ADzsnJ3rvynvzNjZnK5P8JrenME_QGFywmMaHkWYjg,3727
46
- mpt_extension_sdk/runtime/events/utils.py,sha256=6aQVwe9EtUxxictQV9sk8szKC4UXgpQeDmoxdg49fww,2768
46
+ mpt_extension_sdk/runtime/events/utils.py,sha256=GybK8Qs9Xj03Qqm98ulKeZzPiz92L-G9CwMwhZhBnkk,2747
47
47
  mpt_extension_sdk/swo_rql/__init__.py,sha256=QrvRDYhpK-Pd3OF-U2aMeazuKm_kbvXwLRIjd9Mm6ok,104
48
48
  mpt_extension_sdk/swo_rql/constants.py,sha256=39BZ78OzdU_dIQtoy-Z_5utXqEXRweIFvM9Zfxg9j5M,171
49
49
  mpt_extension_sdk/swo_rql/query_builder.py,sha256=CG1dm7uJNPPCwWcf9sRD5zLbz-dtgECkQ_pX4QXpJPw,10825
50
- mpt_extension_sdk-5.10.0.dist-info/METADATA,sha256=Dp4mz2j2-XTRX4KkWXdvA8Ts63k6uSPNV1iLTWDdvOI,1359
51
- mpt_extension_sdk-5.10.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
52
- mpt_extension_sdk-5.10.0.dist-info/entry_points.txt,sha256=N8T9gBssEOm_UeBf9ABbGqtlnethrumfMoL4hNYWVFA,146
53
- mpt_extension_sdk-5.10.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
54
- mpt_extension_sdk-5.10.0.dist-info/RECORD,,
50
+ mpt_extension_sdk-5.11.0.dist-info/METADATA,sha256=FnCoDnkwKLBc0Ao07MlgzoR58tFnIoOOeOtICuYmmzo,1359
51
+ mpt_extension_sdk-5.11.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
52
+ mpt_extension_sdk-5.11.0.dist-info/entry_points.txt,sha256=N8T9gBssEOm_UeBf9ABbGqtlnethrumfMoL4hNYWVFA,146
53
+ mpt_extension_sdk-5.11.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
54
+ mpt_extension_sdk-5.11.0.dist-info/RECORD,,