mpt-extension-sdk 5.1.2__tar.gz → 5.2.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-5.1.2 → mpt_extension_sdk-5.2.0}/PKG-INFO +1 -1
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/docker-compose.yml +2 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/mpt_http/mpt.py +16 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/master.py +2 -1
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/pyproject.toml +1 -1
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/django/settings.py +1 -1
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/mpt/conftest.py +18 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/mpt/test_mpt.py +18 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/.env.sample +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/.flake8 +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/.github/CODEOWNERS +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/.github/workflows/on-release.yml +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/.github/workflows/pr-build-merge.yml +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/.gitignore +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/LICENSE +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/README.md +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/dev.Dockerfile +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/__init__.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/airtable/wrap_http_error.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/constants.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/core/__init__.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/core/events/__init__.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/core/events/dataclasses.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/core/events/registry.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/core/extension.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/core/security.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/core/utils.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/flows/__init__.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/flows/context.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/flows/pipeline.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/key_vault/__init__.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/key_vault/base.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/mpt_http/__init__.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/mpt_http/base.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/mpt_http/utils.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/mpt_http/wrap_http_error.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/__init__.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/commands/__init__.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/commands/django.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/commands/run.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/djapp/__init__.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/djapp/apps.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/djapp/conf/__init__.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/djapp/conf/default.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/djapp/management/__init__.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/djapp/management/commands/__init__.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/djapp/management/commands/consume_events.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/djapp/middleware.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/events/__init__.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/events/dispatcher.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/events/producers.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/events/utils.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/initializer.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/logging.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/swoext.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/utils.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/workers.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/prod.Dockerfile +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/sonar-project.properties +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/__init__.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/conftest.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/core/test_core_registry.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/core/test_core_utils.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/django/__init__.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/flows/__init__.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/flows/test_context.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/flows/test_pipeline.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/key_vault/__init__.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/key_vault/test_key_vault.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/mpt/__init__.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/mpt/test_error.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/runtime/events/test_events_dispatcher.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/runtime/events/test_events_producers.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/runtime/test_apps.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/runtime/test_initializer.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/runtime/test_runtime_logging.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/runtime/test_runtime_master.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/runtime/test_runtime_utils.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/runtime/test_runtime_workers.py +0 -0
- {mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/uv.lock +0 -0
|
@@ -209,6 +209,22 @@ def get_agreements_by_next_sync(mpt_client, next_sync_parameter):
|
|
|
209
209
|
return get_agreements_by_query(mpt_client, rql_query)
|
|
210
210
|
|
|
211
211
|
|
|
212
|
+
def get_agreements_by_3yc_enroll_status(
|
|
213
|
+
mpt_client: MPTClient, enroll_statuses: tuple[str], status: str = "Active"
|
|
214
|
+
):
|
|
215
|
+
param_condition = (
|
|
216
|
+
f"any(parameters.fulfillment,"
|
|
217
|
+
f"and(eq(externalId,3YCEnrollStatus),in(displayValue,({",".join(enroll_statuses)}))))"
|
|
218
|
+
)
|
|
219
|
+
status_condition = f"eq(status,{status})"
|
|
220
|
+
|
|
221
|
+
rql_query = (
|
|
222
|
+
f"and({status_condition},{param_condition})"
|
|
223
|
+
"&select=lines,parameters,subscriptions,product,listing"
|
|
224
|
+
)
|
|
225
|
+
return get_agreements_by_query(mpt_client, rql_query)
|
|
226
|
+
|
|
227
|
+
|
|
212
228
|
@wrap_mpt_http_error
|
|
213
229
|
def update_agreement_subscription(mpt_client, subscription_id, **kwargs):
|
|
214
230
|
response = mpt_client.put(
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
|
+
import os
|
|
2
3
|
import signal
|
|
3
4
|
import threading
|
|
4
5
|
import time
|
|
@@ -14,7 +15,7 @@ logger = logging.getLogger(__name__)
|
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
HANDLED_SIGNALS = (signal.SIGINT, signal.SIGTERM)
|
|
17
|
-
PROCESS_CHECK_INTERVAL_SECS = 5
|
|
18
|
+
PROCESS_CHECK_INTERVAL_SECS = int(os.environ.get("PROCESS_CHECK_INTERVAL_SECS", 5))
|
|
18
19
|
|
|
19
20
|
|
|
20
21
|
def _display_path(path):
|
|
@@ -169,7 +169,7 @@ MPT_API_TOKEN = os.getenv("MPT_API_TOKEN", "change-me!")
|
|
|
169
169
|
MPT_API_TOKEN_OPERATIONS = os.getenv("MPT_API_TOKEN_OPERATIONS", "change-me!")
|
|
170
170
|
# TODO: Should be synced with the initializer.py::initialize function
|
|
171
171
|
MPT_PRODUCTS_IDS = ["PRD-1111-1111"]
|
|
172
|
-
MPT_ORDERS_API_POLLING_INTERVAL_SECS =
|
|
172
|
+
MPT_ORDERS_API_POLLING_INTERVAL_SECS = 0
|
|
173
173
|
MPT_PORTAL_BASE_URL = "https://portal.s1.local"
|
|
174
174
|
MPT_NOTIFY_CATEGORIES = json.loads(
|
|
175
175
|
os.getenv("MPT_NOTIFY_CATEGORIES", '{"ORDERS": "NTC-0000-0006"}')
|
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
import pytest
|
|
2
2
|
|
|
3
|
+
from mpt_extension_sdk.mpt_http.base import MPTClient
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@pytest.fixture()
|
|
7
|
+
def mock_mpt_client(mocker):
|
|
8
|
+
"""
|
|
9
|
+
Create an instance of the MPT client used by the extension.
|
|
10
|
+
"""
|
|
11
|
+
return mocker.MagicMock(spec=MPTClient)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@pytest.fixture()
|
|
15
|
+
def mock_get_agreements_by_query(mocker):
|
|
16
|
+
return mocker.patch(
|
|
17
|
+
"mpt_extension_sdk.mpt_http.mpt.get_agreements_by_query",
|
|
18
|
+
spec=True,
|
|
19
|
+
)
|
|
20
|
+
|
|
3
21
|
|
|
4
22
|
@pytest.fixture(scope="session")
|
|
5
23
|
def notify_post_resp():
|
|
@@ -15,6 +15,7 @@ from mpt_extension_sdk.mpt_http.mpt import (
|
|
|
15
15
|
get_agreement,
|
|
16
16
|
get_agreement_subscription,
|
|
17
17
|
get_agreement_subscription_by_external_id,
|
|
18
|
+
get_agreements_by_3yc_enroll_status,
|
|
18
19
|
get_agreements_by_customer_deployments,
|
|
19
20
|
get_agreements_by_external_id_values,
|
|
20
21
|
get_agreements_by_ids,
|
|
@@ -1054,6 +1055,23 @@ def test_get_agreements_by_next_sync(mocker):
|
|
|
1054
1055
|
mocked_get_by_query.assert_called_once_with(mocked_client, rql_query)
|
|
1055
1056
|
|
|
1056
1057
|
|
|
1058
|
+
@pytest.mark.parametrize("status", ["Active", "processing"])
|
|
1059
|
+
def test_get_agreements_by_3yc_enroll_status(
|
|
1060
|
+
mock_mpt_client, mock_get_agreements_by_query, status
|
|
1061
|
+
):
|
|
1062
|
+
rql_query = (
|
|
1063
|
+
f"and(eq(status,{status}),any(parameters.fulfillment,and(eq(externalId,3YCEnrollStatus),"
|
|
1064
|
+
"in(displayValue,(REQUESTED,ACCEPTED)))))"
|
|
1065
|
+
"&select=lines,parameters,subscriptions,product,listing"
|
|
1066
|
+
)
|
|
1067
|
+
|
|
1068
|
+
get_agreements_by_3yc_enroll_status(
|
|
1069
|
+
mock_mpt_client, ("REQUESTED", "ACCEPTED"), status=status
|
|
1070
|
+
)
|
|
1071
|
+
|
|
1072
|
+
mock_get_agreements_by_query.assert_called_once_with(mock_mpt_client, rql_query)
|
|
1073
|
+
|
|
1074
|
+
|
|
1057
1075
|
def test_get_buyer(mpt_client, requests_mocker):
|
|
1058
1076
|
buyer_id = "buyer_id"
|
|
1059
1077
|
requests_mocker.get(
|
|
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-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/airtable/wrap_http_error.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/core/events/__init__.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/core/events/dataclasses.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.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-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/mpt_http/wrap_http_error.py
RENAMED
|
File without changes
|
|
File without changes
|
{mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/commands/__init__.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/commands/django.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/commands/run.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/djapp/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/djapp/conf/__init__.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/djapp/conf/default.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/djapp/middleware.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/events/__init__.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/events/dispatcher.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/events/producers.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/mpt_extension_sdk/runtime/events/utils.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.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
|
|
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-5.1.2 → mpt_extension_sdk-5.2.0}/tests/runtime/events/test_events_dispatcher.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-5.1.2 → mpt_extension_sdk-5.2.0}/tests/runtime/events/test_events_producers.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
|