mpt-extension-sdk 4.0.4__tar.gz → 4.0.5__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 (46) hide show
  1. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/PKG-INFO +3 -1
  2. mpt_extension_sdk-4.0.5/mpt_extension_sdk/key_vault/base.py +110 -0
  3. mpt_extension_sdk-4.0.5/mpt_extension_sdk/runtime/events/__init__.py +0 -0
  4. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/pyproject.toml +16 -14
  5. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/LICENSE +0 -0
  6. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/README.md +0 -0
  7. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/__init__.py +0 -0
  8. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/airtable/wrap_http_error.py +0 -0
  9. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/constants.py +0 -0
  10. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/core/__init__.py +0 -0
  11. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/core/events/__init__.py +0 -0
  12. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/core/events/dataclasses.py +0 -0
  13. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/core/events/registry.py +0 -0
  14. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/core/extension.py +0 -0
  15. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/core/security.py +0 -0
  16. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/core/utils.py +0 -0
  17. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/flows/__init__.py +0 -0
  18. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/flows/context.py +0 -0
  19. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/flows/pipeline.py +1 -1
  20. {mpt_extension_sdk-4.0.4/mpt_extension_sdk/mpt_http → mpt_extension_sdk-4.0.5/mpt_extension_sdk/key_vault}/__init__.py +0 -0
  21. {mpt_extension_sdk-4.0.4/mpt_extension_sdk/runtime/commands → mpt_extension_sdk-4.0.5/mpt_extension_sdk/mpt_http}/__init__.py +0 -0
  22. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/mpt_http/base.py +0 -0
  23. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/mpt_http/mpt.py +0 -0
  24. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/mpt_http/utils.py +0 -0
  25. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/mpt_http/wrap_http_error.py +0 -0
  26. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/runtime/__init__.py +0 -0
  27. {mpt_extension_sdk-4.0.4/mpt_extension_sdk/runtime/djapp → mpt_extension_sdk-4.0.5/mpt_extension_sdk/runtime/commands}/__init__.py +0 -0
  28. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/runtime/commands/django.py +0 -0
  29. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/runtime/commands/run.py +0 -0
  30. {mpt_extension_sdk-4.0.4/mpt_extension_sdk/runtime/djapp/management → mpt_extension_sdk-4.0.5/mpt_extension_sdk/runtime/djapp}/__init__.py +0 -0
  31. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/runtime/djapp/apps.py +0 -0
  32. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/runtime/djapp/conf/__init__.py +0 -0
  33. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/runtime/djapp/conf/default.py +0 -0
  34. {mpt_extension_sdk-4.0.4/mpt_extension_sdk/runtime/djapp/management/commands → mpt_extension_sdk-4.0.5/mpt_extension_sdk/runtime/djapp/management}/__init__.py +0 -0
  35. {mpt_extension_sdk-4.0.4/mpt_extension_sdk/runtime/events → mpt_extension_sdk-4.0.5/mpt_extension_sdk/runtime/djapp/management/commands}/__init__.py +0 -0
  36. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/runtime/djapp/management/commands/consume_events.py +0 -0
  37. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/runtime/djapp/middleware.py +0 -0
  38. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/runtime/events/dispatcher.py +0 -0
  39. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/runtime/events/producers.py +0 -0
  40. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/runtime/events/utils.py +0 -0
  41. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/runtime/initializer.py +0 -0
  42. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/runtime/logging.py +0 -0
  43. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/runtime/master.py +0 -0
  44. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/runtime/swoext.py +0 -0
  45. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/mpt_extension_sdk/runtime/utils.py +0 -0
  46. {mpt_extension_sdk-4.0.4 → mpt_extension_sdk-4.0.5}/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.4
3
+ Version: 4.0.5
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
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "mpt-extension-sdk"
3
- version = "4.0.4"
3
+ version = "4.0.5"
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]
@@ -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