mpt-extension-sdk 4.0.4__tar.gz → 4.0.6__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-4.0.4 → mpt_extension_sdk-4.0.6}/PKG-INFO +3 -1
- mpt_extension_sdk-4.0.6/mpt_extension_sdk/key_vault/base.py +110 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/mpt_http/mpt.py +1 -1
- mpt_extension_sdk-4.0.6/mpt_extension_sdk/runtime/events/__init__.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/pyproject.toml +16 -14
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/LICENSE +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/README.md +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/__init__.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/airtable/wrap_http_error.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/constants.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/core/__init__.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/core/events/__init__.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/core/events/dataclasses.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/core/events/registry.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/core/extension.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/core/security.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/core/utils.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/flows/__init__.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/flows/context.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/flows/pipeline.py +1 -1
- {mpt_extension_sdk-4.0.4/mpt_extension_sdk/mpt_http → mpt_extension_sdk-4.0.6/mpt_extension_sdk/key_vault}/__init__.py +0 -0
- {mpt_extension_sdk-4.0.4/mpt_extension_sdk/runtime/commands → mpt_extension_sdk-4.0.6/mpt_extension_sdk/mpt_http}/__init__.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/mpt_http/base.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/mpt_http/utils.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/mpt_http/wrap_http_error.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/__init__.py +0 -0
- {mpt_extension_sdk-4.0.4/mpt_extension_sdk/runtime/djapp → mpt_extension_sdk-4.0.6/mpt_extension_sdk/runtime/commands}/__init__.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/commands/django.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/commands/run.py +0 -0
- {mpt_extension_sdk-4.0.4/mpt_extension_sdk/runtime/djapp/management → mpt_extension_sdk-4.0.6/mpt_extension_sdk/runtime/djapp}/__init__.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/djapp/apps.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/djapp/conf/__init__.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/djapp/conf/default.py +0 -0
- {mpt_extension_sdk-4.0.4/mpt_extension_sdk/runtime/djapp/management/commands → mpt_extension_sdk-4.0.6/mpt_extension_sdk/runtime/djapp/management}/__init__.py +0 -0
- {mpt_extension_sdk-4.0.4/mpt_extension_sdk/runtime/events → mpt_extension_sdk-4.0.6/mpt_extension_sdk/runtime/djapp/management/commands}/__init__.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/djapp/management/commands/consume_events.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/djapp/middleware.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/events/dispatcher.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/events/producers.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/events/utils.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/initializer.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/logging.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/master.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/swoext.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/utils.py +0 -0
- {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/workers.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: mpt-extension-sdk
|
|
3
|
-
Version: 4.0.
|
|
3
|
+
Version: 4.0.6
|
|
4
4
|
Summary: Extensions SDK for SoftwareONE Marketplace Platform
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Author: SoftwareOne AG
|
|
@@ -9,6 +9,8 @@ Classifier: License :: OSI Approved :: Apache Software License
|
|
|
9
9
|
Classifier: Programming Language :: Python :: 3
|
|
10
10
|
Classifier: Programming Language :: Python :: 3.12
|
|
11
11
|
Classifier: Programming Language :: Python :: 3.13
|
|
12
|
+
Requires-Dist: azure-identity (>=1.21.0,<2.0.0)
|
|
13
|
+
Requires-Dist: azure-keyvault-secrets (>=4.9.0,<5.0.0)
|
|
12
14
|
Requires-Dist: azure-monitor-opentelemetry-exporter (==1.0.0b25)
|
|
13
15
|
Requires-Dist: boto3 (==1.34.*)
|
|
14
16
|
Requires-Dist: click (==8.1.*)
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
3
|
+
from azure.core.exceptions import (
|
|
4
|
+
HttpResponseError,
|
|
5
|
+
ResourceNotFoundError,
|
|
6
|
+
)
|
|
7
|
+
from azure.identity import DefaultAzureCredential
|
|
8
|
+
from azure.keyvault.secrets import SecretClient
|
|
9
|
+
from requests import Session
|
|
10
|
+
|
|
11
|
+
logger = logging.getLogger(__name__)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class KeyVault(Session):
|
|
15
|
+
def __init__(self, key_vault_name: str):
|
|
16
|
+
"""
|
|
17
|
+
Initialize the KeyVault client with the provided Key Vault name.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
key_vault_name (str): The name of the Azure Key Vault.
|
|
21
|
+
"""
|
|
22
|
+
super().__init__()
|
|
23
|
+
self.key_vault_name = key_vault_name
|
|
24
|
+
|
|
25
|
+
def get_secret(self, secret_name: str):
|
|
26
|
+
"""
|
|
27
|
+
Retrieve a secret from the Azure Key Vault.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
key_vault_url (str): The URL of the Azure Key Vault.
|
|
31
|
+
secret_name (str): The name of the secret to retrieve.
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
str: The value of the secret.
|
|
35
|
+
"""
|
|
36
|
+
try:
|
|
37
|
+
client = self._get_key_vault_client(self.key_vault_name)
|
|
38
|
+
|
|
39
|
+
# Retrieve the secret from the Key Vault
|
|
40
|
+
secret = client.get_secret(secret_name)
|
|
41
|
+
|
|
42
|
+
return secret.value
|
|
43
|
+
except ResourceNotFoundError as e:
|
|
44
|
+
logger.error(
|
|
45
|
+
f"Secret '{secret_name}' not found in Key Vault '{self.key_vault_name}': {e}"
|
|
46
|
+
)
|
|
47
|
+
return None
|
|
48
|
+
|
|
49
|
+
def set_secret(self, secret_name: str, secret_value: str):
|
|
50
|
+
"""
|
|
51
|
+
Set a secret in the Azure Key Vault.
|
|
52
|
+
|
|
53
|
+
Args:
|
|
54
|
+
key_vault_url (str): The URL of the Azure Key Vault.
|
|
55
|
+
secret_name (str): The name of the secret to set.
|
|
56
|
+
secret_value (str): The value of the secret to set.
|
|
57
|
+
|
|
58
|
+
Returns:
|
|
59
|
+
None
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
# Set the secret in the Key Vault
|
|
63
|
+
try:
|
|
64
|
+
client = self._get_key_vault_client(self.key_vault_name)
|
|
65
|
+
|
|
66
|
+
client.set_secret(secret_name, secret_value)
|
|
67
|
+
|
|
68
|
+
updated_secret = client.get_secret(secret_name)
|
|
69
|
+
|
|
70
|
+
return updated_secret.value
|
|
71
|
+
except HttpResponseError as e:
|
|
72
|
+
logger.error(
|
|
73
|
+
f"Failed to set secret '{secret_name}' in Key Vault '{self.key_vault_name}': {e}"
|
|
74
|
+
)
|
|
75
|
+
return None
|
|
76
|
+
|
|
77
|
+
def _get_key_vault_url(self, key_vault_name: str):
|
|
78
|
+
"""
|
|
79
|
+
Construct the Key Vault URL using the provided Key Vault name.
|
|
80
|
+
|
|
81
|
+
Args:
|
|
82
|
+
key_vault_name (str): The name of the Azure Key Vault.
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
str: The URL of the Azure Key Vault.
|
|
86
|
+
"""
|
|
87
|
+
|
|
88
|
+
# Construct the Key Vault URL
|
|
89
|
+
return f"https://{key_vault_name}.vault.azure.net/"
|
|
90
|
+
|
|
91
|
+
def _get_key_vault_client(self, key_vault_name: str):
|
|
92
|
+
"""
|
|
93
|
+
Create a Key Vault client using the provided Key Vault URL and secret name.
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
key_vault_url (str): The URL of the Azure Key Vault.
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
SecretClient: An instance of the SecretClient for the specified Key Vault.
|
|
100
|
+
"""
|
|
101
|
+
|
|
102
|
+
# Get the Key Vault URL
|
|
103
|
+
key_vault_url = self._get_key_vault_url(key_vault_name)
|
|
104
|
+
# Create a credential object using DefaultAzureCredential
|
|
105
|
+
credential = DefaultAzureCredential()
|
|
106
|
+
|
|
107
|
+
# Create a Key Vault client using the credential
|
|
108
|
+
client = SecretClient(vault_url=key_vault_url, credential=credential)
|
|
109
|
+
|
|
110
|
+
return client
|
|
@@ -68,7 +68,7 @@ def query_order(mpt_client, order_id, **kwargs):
|
|
|
68
68
|
|
|
69
69
|
|
|
70
70
|
@wrap_mpt_http_error
|
|
71
|
-
def fail_order(mpt_client, order_id,
|
|
71
|
+
def fail_order(mpt_client, order_id, status_notes, **kwargs):
|
|
72
72
|
response = mpt_client.post(
|
|
73
73
|
f"/commerce/orders/{order_id}/fail",
|
|
74
74
|
json={
|
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "mpt-extension-sdk"
|
|
3
|
-
version = "4.0.
|
|
3
|
+
version = "4.0.6"
|
|
4
4
|
description = "Extensions SDK for SoftwareONE Marketplace Platform"
|
|
5
5
|
authors = ["SoftwareOne AG"]
|
|
6
6
|
readme = "README.md"
|
|
@@ -8,31 +8,33 @@ license = "Apache-2.0"
|
|
|
8
8
|
|
|
9
9
|
[tool.poetry.dependencies]
|
|
10
10
|
python = ">=3.12,<4"
|
|
11
|
+
azure-identity = "^1.21.0"
|
|
12
|
+
azure-keyvault-secrets = "^4.9.0"
|
|
13
|
+
azure-monitor-opentelemetry-exporter = "1.0.0b25"
|
|
11
14
|
boto3 = "1.34.*"
|
|
15
|
+
click = "8.1.*"
|
|
16
|
+
debugpy = "1.8.*"
|
|
12
17
|
django = "4.2.*" # should it be a dependency of the extension ? it is already a dependency of the sdk.
|
|
18
|
+
django-ninja = "1.1.*"
|
|
19
|
+
gunicorn = "23.0.*"
|
|
13
20
|
jinja2 = "3.1.*"
|
|
14
21
|
markdown-it-py = "3.0.*"
|
|
15
22
|
openpyxl = "3.1.*"
|
|
16
|
-
phonenumbers = "8.13.*"
|
|
17
|
-
pyairtable = "2.3.*"
|
|
18
|
-
pymsteams = "0.2.*"
|
|
19
|
-
regex = "^2024.7.24"
|
|
20
|
-
requests = "2.32.*"
|
|
21
|
-
types-openpyxl = "3.1.*"
|
|
22
|
-
django-ninja = "1.1.*"
|
|
23
|
-
pyjwt = "2.8.*"
|
|
24
|
-
typing-extensions = "4.9.*"
|
|
25
|
-
click = "8.1.*"
|
|
26
|
-
debugpy = "1.8.*"
|
|
27
|
-
gunicorn = "23.0.*"
|
|
28
|
-
azure-monitor-opentelemetry-exporter = "1.0.0b25"
|
|
29
23
|
opentelemetry-api = "1.30.*"
|
|
30
24
|
opentelemetry-instrumentation-django = "0.51b0"
|
|
31
25
|
opentelemetry-instrumentation-logging = "0.51b0"
|
|
32
26
|
opentelemetry-instrumentation-requests = "0.51b0"
|
|
33
27
|
opentelemetry-sdk = "1.30.*"
|
|
28
|
+
phonenumbers = "8.13.*"
|
|
29
|
+
pyairtable = "2.3.*"
|
|
34
30
|
pyfiglet = "1.0.*"
|
|
31
|
+
pyjwt = "2.8.*"
|
|
32
|
+
pymsteams = "0.2.*"
|
|
33
|
+
regex = "^2024.7.24"
|
|
34
|
+
requests = "2.32.*"
|
|
35
35
|
rich = "13.7.*"
|
|
36
|
+
types-openpyxl = "3.1.*"
|
|
37
|
+
typing-extensions = "4.9.*"
|
|
36
38
|
watchfiles = "0.21.*"
|
|
37
39
|
|
|
38
40
|
[tool.poetry.group.dev.dependencies]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/airtable/wrap_http_error.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/core/events/__init__.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/core/events/dataclasses.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/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
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
from abc import ABC, abstractmethod
|
|
2
2
|
from typing import Callable
|
|
3
3
|
|
|
4
|
-
from mpt_extension_sdk.mpt_http.base import MPTClient
|
|
5
4
|
from mpt_extension_sdk.flows.context import Context
|
|
5
|
+
from mpt_extension_sdk.mpt_http.base import MPTClient
|
|
6
6
|
|
|
7
7
|
NextStep = Callable[[MPTClient, Context], None]
|
|
8
8
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/mpt_http/wrap_http_error.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/commands/django.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/commands/run.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/djapp/conf/__init__.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/djapp/conf/default.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/djapp/middleware.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/events/dispatcher.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/events/producers.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/mpt_extension_sdk/runtime/events/utils.py
RENAMED
|
File without changes
|
{mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.6}/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
|