mpt-extension-sdk 5.10.0__py3-none-any.whl → 5.12.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.
- mpt_extension_sdk/airtable/wrap_http_error.py +4 -3
- mpt_extension_sdk/core/events/dataclasses.py +1 -0
- mpt_extension_sdk/core/events/registry.py +1 -0
- mpt_extension_sdk/core/extension.py +1 -0
- mpt_extension_sdk/core/security.py +1 -0
- mpt_extension_sdk/flows/context.py +1 -0
- mpt_extension_sdk/flows/pipeline.py +3 -0
- mpt_extension_sdk/key_vault/base.py +2 -1
- mpt_extension_sdk/mpt_http/base.py +1 -0
- mpt_extension_sdk/mpt_http/mpt.py +38 -2
- mpt_extension_sdk/mpt_http/wrap_http_error.py +4 -0
- mpt_extension_sdk/runtime/djapp/apps.py +2 -0
- mpt_extension_sdk/runtime/djapp/management/commands/consume_events.py +1 -0
- mpt_extension_sdk/runtime/djapp/middleware.py +1 -0
- mpt_extension_sdk/runtime/errors.py +1 -0
- mpt_extension_sdk/runtime/events/dispatcher.py +5 -11
- mpt_extension_sdk/runtime/events/utils.py +2 -3
- mpt_extension_sdk/runtime/initializer.py +1 -3
- mpt_extension_sdk/runtime/logging.py +2 -0
- mpt_extension_sdk/runtime/master.py +3 -6
- mpt_extension_sdk/runtime/tracer.py +1 -0
- mpt_extension_sdk/runtime/utils.py +8 -24
- mpt_extension_sdk/runtime/workers.py +1 -0
- {mpt_extension_sdk-5.10.0.dist-info → mpt_extension_sdk-5.12.0.dist-info}/METADATA +1 -1
- {mpt_extension_sdk-5.10.0.dist-info → mpt_extension_sdk-5.12.0.dist-info}/RECORD +28 -28
- {mpt_extension_sdk-5.10.0.dist-info → mpt_extension_sdk-5.12.0.dist-info}/WHEEL +0 -0
- {mpt_extension_sdk-5.10.0.dist-info → mpt_extension_sdk-5.12.0.dist-info}/entry_points.txt +0 -0
- {mpt_extension_sdk-5.10.0.dist-info → mpt_extension_sdk-5.12.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.")]
|
|
@@ -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
|
|
|
@@ -109,7 +109,15 @@ def set_processing_template(mpt_client, order_id, template):
|
|
|
109
109
|
|
|
110
110
|
|
|
111
111
|
@wrap_mpt_http_error
|
|
112
|
-
def create_asset(mpt_client,
|
|
112
|
+
def create_asset(mpt_client, asset):
|
|
113
|
+
"""Create a new asset."""
|
|
114
|
+
response = mpt_client.post("/commerce/assets", json=asset)
|
|
115
|
+
response.raise_for_status()
|
|
116
|
+
return response.json()
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
@wrap_mpt_http_error
|
|
120
|
+
def create_order_asset(mpt_client, order_id, asset):
|
|
113
121
|
"""Create a new asset for an order."""
|
|
114
122
|
response = mpt_client.post(f"/commerce/orders/{order_id}/assets", json=asset)
|
|
115
123
|
response.raise_for_status()
|
|
@@ -117,13 +125,41 @@ def create_asset(mpt_client, order_id, asset):
|
|
|
117
125
|
|
|
118
126
|
|
|
119
127
|
@wrap_mpt_http_error
|
|
120
|
-
def
|
|
128
|
+
def update_order_asset(mpt_client, order_id, asset_id, **kwargs):
|
|
121
129
|
"""Update an order asset."""
|
|
122
130
|
response = mpt_client.put(f"/commerce/orders/{order_id}/assets/{asset_id}", json=kwargs)
|
|
123
131
|
response.raise_for_status()
|
|
124
132
|
return response.json()
|
|
125
133
|
|
|
126
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
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
|
|
@@ -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,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=
|
|
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=
|
|
7
|
-
mpt_extension_sdk/core/security.py,sha256=
|
|
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=
|
|
11
|
-
mpt_extension_sdk/core/events/registry.py,sha256=
|
|
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=
|
|
14
|
-
mpt_extension_sdk/flows/pipeline.py,sha256=
|
|
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=
|
|
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=
|
|
19
|
-
mpt_extension_sdk/mpt_http/mpt.py,sha256=
|
|
18
|
+
mpt_extension_sdk/mpt_http/base.py,sha256=PbaicrynWLo-plMNC7urIO_iAR5u97tgYrPxrpTn5mI,1514
|
|
19
|
+
mpt_extension_sdk/mpt_http/mpt.py,sha256=AtdXZv1lKrozdOcL9s-0lyd8nebvsZO5qS08dvPqmfQ,17182
|
|
20
20
|
mpt_extension_sdk/mpt_http/utils.py,sha256=Ek2D4efcJNhQlOyXd4ZeBhwqDjFpvcbBEqxuCqRQ7cU,166
|
|
21
|
-
mpt_extension_sdk/mpt_http/wrap_http_error.py,sha256=
|
|
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=
|
|
24
|
-
mpt_extension_sdk/runtime/initializer.py,sha256=
|
|
25
|
-
mpt_extension_sdk/runtime/logging.py,sha256=
|
|
26
|
-
mpt_extension_sdk/runtime/master.py,sha256=
|
|
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=
|
|
29
|
-
mpt_extension_sdk/runtime/utils.py,sha256=
|
|
30
|
-
mpt_extension_sdk/runtime/workers.py,sha256=
|
|
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=
|
|
36
|
-
mpt_extension_sdk/runtime/djapp/middleware.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
51
|
-
mpt_extension_sdk-5.
|
|
52
|
-
mpt_extension_sdk-5.
|
|
53
|
-
mpt_extension_sdk-5.
|
|
54
|
-
mpt_extension_sdk-5.
|
|
50
|
+
mpt_extension_sdk-5.12.0.dist-info/METADATA,sha256=7mcDwF2VmJ4_sMWxnUl95C8i-tiXnarjzgld2u9-6V4,1359
|
|
51
|
+
mpt_extension_sdk-5.12.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
52
|
+
mpt_extension_sdk-5.12.0.dist-info/entry_points.txt,sha256=N8T9gBssEOm_UeBf9ABbGqtlnethrumfMoL4hNYWVFA,146
|
|
53
|
+
mpt_extension_sdk-5.12.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
54
|
+
mpt_extension_sdk-5.12.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|