mpt-extension-sdk 5.17.1__tar.gz → 5.17.3__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 (59) hide show
  1. mpt_extension_sdk-5.17.3/PKG-INFO +94 -0
  2. mpt_extension_sdk-5.17.3/README.md +65 -0
  3. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/mpt_http/mpt.py +21 -0
  4. mpt_extension_sdk-5.17.3/mpt_extension_sdk/runtime/djapp/conf/__init__.py +6 -0
  5. mpt_extension_sdk-5.17.3/mpt_extension_sdk/runtime/events/__init__.py +0 -0
  6. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/runtime/events/producers.py +1 -1
  7. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/runtime/swoext.py +16 -12
  8. mpt_extension_sdk-5.17.1/mpt_extension_sdk/runtime/__init__.py → mpt_extension_sdk-5.17.3/mpt_extension_sdk/runtime/version.py +2 -2
  9. mpt_extension_sdk-5.17.3/mpt_extension_sdk/swo_rql/__init__.py +3 -0
  10. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/pyproject.toml +117 -44
  11. mpt_extension_sdk-5.17.1/PKG-INFO +0 -39
  12. mpt_extension_sdk-5.17.1/README.md +0 -2
  13. mpt_extension_sdk-5.17.1/mpt_extension_sdk/swo_rql/__init__.py +0 -5
  14. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/.gitignore +0 -0
  15. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/LICENSE +0 -0
  16. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/__init__.py +0 -0
  17. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/airtable/__init__.py +0 -0
  18. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/airtable/wrap_http_error.py +0 -0
  19. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/constants.py +0 -0
  20. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/core/__init__.py +0 -0
  21. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/core/events/__init__.py +0 -0
  22. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/core/events/dataclasses.py +0 -0
  23. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/core/events/registry.py +0 -0
  24. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/core/extension.py +0 -0
  25. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/core/security.py +0 -0
  26. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/core/utils.py +0 -0
  27. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/flows/__init__.py +0 -0
  28. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/flows/context.py +0 -0
  29. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/flows/pipeline.py +0 -0
  30. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/key_vault/__init__.py +0 -0
  31. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/key_vault/base.py +0 -0
  32. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/mpt_http/__init__.py +0 -0
  33. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/mpt_http/base.py +0 -0
  34. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/mpt_http/utils.py +0 -0
  35. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/mpt_http/wrap_http_error.py +0 -0
  36. {mpt_extension_sdk-5.17.1/mpt_extension_sdk/runtime/commands → mpt_extension_sdk-5.17.3/mpt_extension_sdk/runtime}/__init__.py +0 -0
  37. {mpt_extension_sdk-5.17.1/mpt_extension_sdk/runtime/djapp → mpt_extension_sdk-5.17.3/mpt_extension_sdk/runtime/commands}/__init__.py +0 -0
  38. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/runtime/commands/django.py +0 -0
  39. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/runtime/commands/run.py +0 -0
  40. {mpt_extension_sdk-5.17.1/mpt_extension_sdk/runtime/djapp/management → mpt_extension_sdk-5.17.3/mpt_extension_sdk/runtime/djapp}/__init__.py +0 -0
  41. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/runtime/djapp/apps.py +0 -0
  42. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/runtime/djapp/conf/default.py +0 -0
  43. /mpt_extension_sdk-5.17.1/mpt_extension_sdk/runtime/djapp/conf/__init__.py → /mpt_extension_sdk-5.17.3/mpt_extension_sdk/runtime/djapp/conf/product_utils.py +0 -0
  44. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/runtime/djapp/conf/urls.py +0 -0
  45. {mpt_extension_sdk-5.17.1/mpt_extension_sdk/runtime/djapp/management/commands → mpt_extension_sdk-5.17.3/mpt_extension_sdk/runtime/djapp/management}/__init__.py +0 -0
  46. {mpt_extension_sdk-5.17.1/mpt_extension_sdk/runtime/events → mpt_extension_sdk-5.17.3/mpt_extension_sdk/runtime/djapp/management/commands}/__init__.py +0 -0
  47. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/runtime/djapp/management/commands/consume_events.py +0 -0
  48. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/runtime/djapp/middleware.py +0 -0
  49. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/runtime/errors.py +0 -0
  50. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/runtime/events/dispatcher.py +0 -0
  51. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/runtime/events/utils.py +0 -0
  52. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/runtime/initializer.py +0 -0
  53. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/runtime/logging.py +0 -0
  54. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/runtime/master.py +0 -0
  55. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/runtime/tracer.py +0 -0
  56. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/runtime/utils.py +0 -0
  57. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/runtime/workers.py +0 -0
  58. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/swo_rql/constants.py +0 -0
  59. {mpt_extension_sdk-5.17.1 → mpt_extension_sdk-5.17.3}/mpt_extension_sdk/swo_rql/query_builder.py +0 -0
@@ -0,0 +1,94 @@
1
+ Metadata-Version: 2.4
2
+ Name: mpt-extension-sdk
3
+ Version: 5.17.3
4
+ Summary: Extensions SDK for SoftwareONE Marketplace Platform
5
+ Author: SoftwareOne AG
6
+ License: Apache-2.0 license
7
+ License-File: LICENSE
8
+ Requires-Python: <4,>=3.12
9
+ Requires-Dist: azure-identity==1.25.*
10
+ Requires-Dist: azure-keyvault-secrets==4.10.*
11
+ Requires-Dist: azure-monitor-opentelemetry-exporter==1.0.0b46
12
+ Requires-Dist: click==8.3.*
13
+ Requires-Dist: debugpy==1.8.*
14
+ Requires-Dist: django-ninja==1.1.*
15
+ Requires-Dist: django==4.2.*
16
+ Requires-Dist: gunicorn==23.0.*
17
+ Requires-Dist: opentelemetry-api==1.39.0
18
+ Requires-Dist: opentelemetry-instrumentation-django==0.60.*
19
+ Requires-Dist: opentelemetry-instrumentation-logging==0.60.*
20
+ Requires-Dist: opentelemetry-instrumentation-requests==0.60.*
21
+ Requires-Dist: opentelemetry-sdk==1.39.0
22
+ Requires-Dist: pyfiglet==1.0.*
23
+ Requires-Dist: pyjwt==2.10.*
24
+ Requires-Dist: requests==2.32.*
25
+ Requires-Dist: rich==14.2.*
26
+ Requires-Dist: typing-extensions==4.15.*
27
+ Requires-Dist: watchfiles==1.1.*
28
+ Description-Content-Type: text/markdown
29
+
30
+ [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=softwareone-platform_mpt-extension-sdk&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=softwareone-platform_mpt-extension-sdk)
31
+ [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=softwareone-platform_mpt-extension-sdk&metric=coverage)](https://sonarcloud.io/summary/new_code?id=softwareone-platform_mpt-extension-sdk)
32
+
33
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
34
+
35
+ # SoftwareONE Extension SDK
36
+
37
+ SDK for SoftwareONE python extensions
38
+
39
+ ## Getting started
40
+
41
+ ### Prerequisites
42
+
43
+ - Docker and Docker Compose plugin (`docker compose` CLI)
44
+ - `make`
45
+ - Valid `.env` file
46
+ - Adobe credentials and authorizations JSON files in the project root
47
+ - [CodeRabbit CLI](https://www.coderabbit.ai/cli) (optional. Used for running review check locally)
48
+
49
+
50
+ ### Make targets overview
51
+
52
+ Common development workflows are wrapped in the `makefile`:
53
+
54
+ - `make help` – list available commands
55
+ - `make bash` – start the app container and open a bash shell
56
+ - `make build` – build the application image for development
57
+ - `make build-package` – build the package locally
58
+ - `make check` – run code quality checks (ruff, flake8, lockfile check)
59
+ - `make check-all` – run checks, formatting, and tests
60
+ - `make down` – stop and remove containers
61
+ - `make format` – apply formatting and import fixes
62
+ - `make review` – check the code in the cli by running CodeRabbit
63
+ - `make shell` – open a Django shell inside the running app container
64
+ - `make test` – run the test suite with pytest
65
+
66
+ ## Running tests
67
+
68
+ Tests run inside Docker using the dev configuration.
69
+
70
+ Run the full test suite:
71
+
72
+ ```bash
73
+ make test
74
+ ```
75
+
76
+ Pass additional arguments to pytest using the `args` variable:
77
+
78
+ ```bash
79
+ make test args="-k test_bla -vv"
80
+ make test args="tests/test_bla.py"
81
+ ```
82
+
83
+ ## Developer utilities
84
+
85
+ Useful helper targets during development:
86
+
87
+ ```bash
88
+ make bash # open a bash shell in the app container
89
+ make build-package # build the package locally
90
+ make check # run ruff, flake8, and lockfile checks
91
+ make check-all # run checks and tests
92
+ make format # auto-format code and imports
93
+ make review # check the code in the cli by running CodeRabbit
94
+ ```
@@ -0,0 +1,65 @@
1
+ [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=softwareone-platform_mpt-extension-sdk&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=softwareone-platform_mpt-extension-sdk)
2
+ [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=softwareone-platform_mpt-extension-sdk&metric=coverage)](https://sonarcloud.io/summary/new_code?id=softwareone-platform_mpt-extension-sdk)
3
+
4
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
5
+
6
+ # SoftwareONE Extension SDK
7
+
8
+ SDK for SoftwareONE python extensions
9
+
10
+ ## Getting started
11
+
12
+ ### Prerequisites
13
+
14
+ - Docker and Docker Compose plugin (`docker compose` CLI)
15
+ - `make`
16
+ - Valid `.env` file
17
+ - Adobe credentials and authorizations JSON files in the project root
18
+ - [CodeRabbit CLI](https://www.coderabbit.ai/cli) (optional. Used for running review check locally)
19
+
20
+
21
+ ### Make targets overview
22
+
23
+ Common development workflows are wrapped in the `makefile`:
24
+
25
+ - `make help` – list available commands
26
+ - `make bash` – start the app container and open a bash shell
27
+ - `make build` – build the application image for development
28
+ - `make build-package` – build the package locally
29
+ - `make check` – run code quality checks (ruff, flake8, lockfile check)
30
+ - `make check-all` – run checks, formatting, and tests
31
+ - `make down` – stop and remove containers
32
+ - `make format` – apply formatting and import fixes
33
+ - `make review` – check the code in the cli by running CodeRabbit
34
+ - `make shell` – open a Django shell inside the running app container
35
+ - `make test` – run the test suite with pytest
36
+
37
+ ## Running tests
38
+
39
+ Tests run inside Docker using the dev configuration.
40
+
41
+ Run the full test suite:
42
+
43
+ ```bash
44
+ make test
45
+ ```
46
+
47
+ Pass additional arguments to pytest using the `args` variable:
48
+
49
+ ```bash
50
+ make test args="-k test_bla -vv"
51
+ make test args="tests/test_bla.py"
52
+ ```
53
+
54
+ ## Developer utilities
55
+
56
+ Useful helper targets during development:
57
+
58
+ ```bash
59
+ make bash # open a bash shell in the app container
60
+ make build-package # build the package locally
61
+ make check # run ruff, flake8, and lockfile checks
62
+ make check-all # run checks and tests
63
+ make format # auto-format code and imports
64
+ make review # check the code in the cli by running CodeRabbit
65
+ ```
@@ -427,6 +427,27 @@ def get_listings_by_price_list_and_seller_and_authorization(
427
427
  return response.json()["data"]
428
428
 
429
429
 
430
+ @wrap_mpt_http_error
431
+ def get_item_prices_by_pricelist_id(mpt_client, price_list_id, item_ids):
432
+ """
433
+ Retrieve item prices by price list ID.
434
+
435
+ Args:
436
+ mpt_client: Client instance to interact with the required API.
437
+ price_list_id: The ID of the price list to retrieve item prices for.
438
+ item_ids: The IDs list to retrieve prices.
439
+
440
+ Returns:
441
+ list: A list of item prices.
442
+ """
443
+ item_ids_str = ",".join(item_ids)
444
+ response = mpt_client.get(
445
+ f"/catalog/price-lists/{price_list_id}/items?in(item.id,({item_ids_str}))"
446
+ )
447
+ response.raise_for_status()
448
+ return response.json()["data"]
449
+
450
+
430
451
  @wrap_mpt_http_error
431
452
  def create_listing(mpt_client, listing):
432
453
  """Create a new listing."""
@@ -0,0 +1,6 @@
1
+ from mpt_extension_sdk.runtime.djapp.conf.product_utils import extract_product_ids, get_for_product
2
+
3
+ __all__ = [
4
+ "extract_product_ids",
5
+ "get_for_product",
6
+ ]
@@ -11,7 +11,7 @@ from django.utils.module_loading import import_string
11
11
 
12
12
  from mpt_extension_sdk.core.events.dataclasses import Event
13
13
  from mpt_extension_sdk.core.utils import setup_client
14
- from mpt_extension_sdk.swo_rql import RQLQuery
14
+ from mpt_extension_sdk.swo_rql import R as RQLQuery
15
15
 
16
16
  logger = logging.getLogger(__name__)
17
17
 
@@ -1,8 +1,8 @@
1
1
  import click
2
2
  from django.utils.module_loading import import_string
3
3
 
4
- from mpt_extension_sdk.runtime import get_version
5
4
  from mpt_extension_sdk.runtime.utils import show_banner
5
+ from mpt_extension_sdk.runtime.version import get_version
6
6
 
7
7
 
8
8
  def print_version(ctx, param, value):
@@ -27,16 +27,6 @@ def cli(ctx):
27
27
  show_banner()
28
28
 
29
29
 
30
- for cmd in map(
31
- import_string,
32
- (
33
- "mpt_extension_sdk.runtime.commands.run.run",
34
- "mpt_extension_sdk.runtime.commands.django.django",
35
- ),
36
- ):
37
- cli.add_command(cmd)
38
-
39
-
40
30
  def make_django_command(name, django_command=None, help_value=None):
41
31
  """A wrapper to convert a Django subcommand a Click command."""
42
32
  if django_command is None:
@@ -59,11 +49,25 @@ def make_django_command(name, django_command=None, help_value=None):
59
49
  return inner
60
50
 
61
51
 
62
- cli.add_command(make_django_command("shell", help_value="Open Django console"))
52
+ def register_commands():
53
+ """Register django and extension run commands."""
54
+ cmds = map(
55
+ import_string,
56
+ (
57
+ "mpt_extension_sdk.runtime.commands.run.run",
58
+ "mpt_extension_sdk.runtime.commands.django.django",
59
+ ),
60
+ )
61
+
62
+ for cmd in cmds:
63
+ cli.add_command(cmd)
64
+
65
+ cli.add_command(make_django_command("shell", help_value="Open Django console"))
63
66
 
64
67
 
65
68
  def main():
66
69
  """Main entry point for the CLI."""
70
+ register_commands()
67
71
  cli(standalone_mode=False)
68
72
 
69
73
 
@@ -1,8 +1,8 @@
1
- from importlib.metadata import version
1
+ from importlib.metadata import PackageNotFoundError, version
2
2
 
3
3
  try:
4
4
  __version__ = version("swo-runtime")
5
- except Exception: # pragma: no cover
5
+ except PackageNotFoundError: # pragma: no cover
6
6
  __version__ = "0.0.0"
7
7
 
8
8
 
@@ -0,0 +1,3 @@
1
+ from mpt_extension_sdk.swo_rql.query_builder import R, RQLQuery # noqa: WPS347
2
+
3
+ __all__ = ["R", "RQLQuery"]
@@ -1,39 +1,31 @@
1
1
  [project]
2
2
  name = "mpt-extension-sdk"
3
- version = "5.17.1"
3
+ version = "5.17.3"
4
4
  description = "Extensions SDK for SoftwareONE Marketplace Platform"
5
5
  authors = [{ name = "SoftwareOne AG" }]
6
6
  requires-python = ">=3.12,<4"
7
7
  readme = "README.md"
8
8
  license = {text = "Apache-2.0 license"}
9
9
  dependencies = [
10
- "azure-identity>=1.21.0,<2",
11
- "azure-keyvault-secrets>=4.9.0,<5",
12
- "azure-monitor-opentelemetry-exporter==1.0.0b25",
13
- "click==8.1.*",
10
+ "azure-identity==1.25.*",
11
+ "azure-keyvault-secrets==4.10.*",
12
+ "azure-monitor-opentelemetry-exporter==1.0.0b46",
13
+ "click==8.3.*",
14
14
  "debugpy==1.8.*",
15
15
  "django==4.2.*",
16
16
  "django-ninja==1.1.*",
17
17
  "gunicorn==23.0.*",
18
- "jinja2==3.1.*",
19
- "markdown-it-py==3.0.*",
20
- "openpyxl==3.1.*",
21
- "opentelemetry-api==1.30.*",
22
- "opentelemetry-instrumentation-django==0.51b0",
23
- "opentelemetry-instrumentation-logging==0.51b0",
24
- "opentelemetry-instrumentation-requests==0.51b0",
25
- "opentelemetry-sdk==1.30.*",
26
- "phonenumbers==8.13.*",
27
- "pyairtable==2.3.*",
18
+ "opentelemetry-api==1.39.0",
19
+ "opentelemetry-instrumentation-django==0.60.*",
20
+ "opentelemetry-instrumentation-logging==0.60.*",
21
+ "opentelemetry-instrumentation-requests==0.60.*",
22
+ "opentelemetry-sdk==1.39.0",
28
23
  "pyfiglet==1.0.*",
29
- "pyjwt==2.8.*",
30
- "pymsteams==0.2.*",
31
- "regex>=2024.7.24,<2025",
24
+ "pyjwt==2.10.*",
32
25
  "requests==2.32.*",
33
- "rich==14.1.*",
34
- "types-openpyxl==3.1.*",
35
- "typing-extensions==4.14.*",
36
- "watchfiles==0.21.*",
26
+ "rich==14.2.*",
27
+ "typing-extensions==4.15.*",
28
+ "watchfiles==1.1.*",
37
29
  ]
38
30
 
39
31
  [project.scripts]
@@ -44,24 +36,26 @@ app_config = "mpt_extension_sdk.runtime.djapp.apps:ExtensionConfig"
44
36
 
45
37
  [dependency-groups]
46
38
  dev = [
47
- "flake8>=7.3.0",
48
- "freezegun==1.4.*",
39
+ "flake8==7.3.*", # force flake8 version to have same formatting everywhere, also update in pre-commit config
40
+ # "flake8-aaa==0.17.*", # also update pre-commit config TODO: add it on next iteration
41
+ "flake8-pyproject==1.2.*", # also update pre-commit config
42
+ "freezegun==1.5.*",
49
43
  "ipdb==0.13.*",
50
- "ipython==8.*",
51
- "mypy==1.8.*",
52
- "pre-commit==3.6.*",
53
- "pytest==7.4.*",
54
- "pytest-cov==4.1.*",
55
- "pytest-deadfixtures==2.2.*",
56
- "pytest-django==4.7.*",
57
- "pytest-mock==3.12.*",
58
- "pytest-randomly==3.15.*",
59
- "pytest-xdist==3.5.*",
60
- "responses==0.24.*",
61
- "ruff==0.12.11", # force ruff version to have same formatting everywhere
44
+ "ipython==9.*",
45
+ "mypy==1.19.*",
46
+ "pre-commit==4.5.*",
47
+ "pytest==9.0.*",
48
+ "pytest-cov==7.0.*",
49
+ "pytest-deadfixtures==3.1.*",
50
+ "pytest-django==4.11.*",
51
+ "pytest-mock==3.15.*",
52
+ "pytest-randomly==4.0.*",
53
+ "pytest-xdist==3.8.*",
54
+ "responses==0.25.*",
55
+ "ruff==0.14.13", # force ruff version to have same formatting everywhere, also update in pre-commit config
62
56
  "types-openpyxl==3.1.*",
63
- "types-requests==2.31.*",
64
- "wemake-python-styleguide==1.3.*",
57
+ "types-requests==2.32.*",
58
+ "wemake-python-styleguide==1.5.*", # also update pre-commit config
65
59
  ]
66
60
 
67
61
  [build-system]
@@ -92,6 +86,59 @@ omit = [
92
86
  "__init__.py",
93
87
  ]
94
88
 
89
+ [tool.flake8]
90
+ allowed-domain-names = ["result"]
91
+ allowed-module-metadata = ["__all__"]
92
+ aaa_act_block_style = "large"
93
+ doctests = true
94
+ extend-ignore = ["WPS226"]
95
+ extend-exclude = [
96
+ ".coverage",
97
+ ".github",
98
+ ".idea",
99
+ ".mypy_cache",
100
+ ".pytest_cache",
101
+ ".ruff_cache",
102
+ "uv.lock",
103
+ ".venv"
104
+ ]
105
+ format = "wemake"
106
+ max-imports = 17
107
+ max-line-length = 100
108
+ select = ["E999", "WPS"]
109
+ show-source = true
110
+ statistics = false
111
+ # To be fixed and removed
112
+ per-file-ignores = [
113
+ "tests/**/*.py: WPS",
114
+ "tests/*.py: WPS",
115
+ "mpt_extension_sdk/core/utils.py: WPS100 WPS453",
116
+ "mpt_extension_sdk/mpt_http/mpt.py: WPS202 WPS118 WPS211",
117
+ "mpt_extension_sdk/mpt_http/utils.py: WPS100",
118
+ "mpt_extension_sdk/mpt_http/wrap_http_error.py: WPS110 WPS430 WPS505",
119
+ "mpt_extension_sdk/runtime/__init__.py: WPS412",
120
+ "mpt_extension_sdk/runtime/djapp/conf/__init__.py: WPS412",
121
+ "mpt_extension_sdk/airtable/wrap_http_error.py: WPS110 WPS430 WPS231 WPS505 WPS328",
122
+ "mpt_extension_sdk/core/events/dataclasses.py: WPS110",
123
+ "mpt_extension_sdk/flows/context.py: WPS214",
124
+ "mpt_extension_sdk/key_vault/base.py: WPS615",
125
+ "mpt_extension_sdk/runtime/commands/run.py: WPS400 WPS216",
126
+ "mpt_extension_sdk/runtime/djapp/conf/default.py: WPS407",
127
+ "mpt_extension_sdk/runtime/djapp/management/commands/consume_events.py: WPS403 WPS213 WPS110",
128
+ "mpt_extension_sdk/runtime/djapp/middleware.py: WPS420 WPS122 WPS211 WPS121",
129
+ "mpt_extension_sdk/runtime/errors.py: WPS453",
130
+ "mpt_extension_sdk/runtime/events/dispatcher.py: WPS420 WPS230 WPS529",
131
+ "mpt_extension_sdk/runtime/events/producers.py: WPS210",
132
+ "mpt_extension_sdk/runtime/events/utils.py: WPS100 WPS430",
133
+ "mpt_extension_sdk/runtime/initializer.py: WPS407 WPS210",
134
+ "mpt_extension_sdk/runtime/logging.py: WPS115",
135
+ "mpt_extension_sdk/runtime/master.py: WPS220 WPS214 WPS230",
136
+ "mpt_extension_sdk/runtime/swoext.py: WPS110 WPS430",
137
+ "mpt_extension_sdk/runtime/utils.py: WPS100 WPS202 WPS460 WPS210 WPS221 WPS349 WPS110 WPS430 WPS237 WPS202 WPS460",
138
+ "mpt_extension_sdk/swo_rql/__init__.py: WPS111 WPS410 WPS412",
139
+ "mpt_extension_sdk/swo_rql/query_builder.py: WPS210 WPS231 WPS110 WPS214 WPS115 WPS111 WPS478 WPS221 WPS211 WPS237",
140
+ ]
141
+
95
142
  [tool.ruff]
96
143
  preview = true
97
144
  target-version = "py312"
@@ -170,11 +217,18 @@ ignore = [
170
217
  external = [ "WPS" ]
171
218
 
172
219
  # Plugin configs:
173
- flake8-import-conventions.banned-from = [ "ast", "datetime" ]
174
- flake8-import-conventions.aliases = { datetime = "dt" }
175
- flake8-quotes.inline-quotes = "double"
176
- mccabe.max-complexity = 6
177
- pydocstyle.convention = "google"
220
+ [tool.ruff.lint.flake8-import-conventions]
221
+ banned-from = ["ast", "datetime"]
222
+ aliases = { datetime = "dt" }
223
+
224
+ [tool.ruff.lint.flake8-quotes]
225
+ inline-quotes = "double"
226
+
227
+ [tool.ruff.lint.mccabe]
228
+ max-complexity = 6
229
+
230
+ [tool.ruff.lint.pydocstyle]
231
+ convention = "google"
178
232
 
179
233
  [tool.ruff.lint.per-file-ignores]
180
234
  "tests/*.py" = [
@@ -193,7 +247,26 @@ pydocstyle.convention = "google"
193
247
  known-third-party = ["swo"]
194
248
 
195
249
  [tool.mypy]
196
- warn_no_return = false
250
+ # The mypy configurations: http://bit.ly/2zEl9WI
251
+ enable_error_code = [
252
+ "truthy-bool",
253
+ "truthy-iterable",
254
+ "redundant-expr",
255
+ "unused-awaitable",
256
+ "ignore-without-code",
257
+ "possibly-undefined",
258
+ "redundant-self",
259
+ "explicit-override",
260
+ "mutable-override",
261
+ "unimported-reveal",
262
+ "deprecated",
263
+ ]
264
+ exclude = ["tests"]
265
+ exclude_gitignore = true
266
+ ignore_missing_imports = true
267
+ local_partial_types = true
268
+ strict = true
269
+ warn_unreachable = true
197
270
 
198
271
  [[tool.mypy.overrides]]
199
272
  module = "django.*"
@@ -1,39 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: mpt-extension-sdk
3
- Version: 5.17.1
4
- Summary: Extensions SDK for SoftwareONE Marketplace Platform
5
- Author: SoftwareOne AG
6
- License: Apache-2.0 license
7
- License-File: LICENSE
8
- Requires-Python: <4,>=3.12
9
- Requires-Dist: azure-identity<2,>=1.21.0
10
- Requires-Dist: azure-keyvault-secrets<5,>=4.9.0
11
- Requires-Dist: azure-monitor-opentelemetry-exporter==1.0.0b25
12
- Requires-Dist: click==8.1.*
13
- Requires-Dist: debugpy==1.8.*
14
- Requires-Dist: django-ninja==1.1.*
15
- Requires-Dist: django==4.2.*
16
- Requires-Dist: gunicorn==23.0.*
17
- Requires-Dist: jinja2==3.1.*
18
- Requires-Dist: markdown-it-py==3.0.*
19
- Requires-Dist: openpyxl==3.1.*
20
- Requires-Dist: opentelemetry-api==1.30.*
21
- Requires-Dist: opentelemetry-instrumentation-django==0.51b0
22
- Requires-Dist: opentelemetry-instrumentation-logging==0.51b0
23
- Requires-Dist: opentelemetry-instrumentation-requests==0.51b0
24
- Requires-Dist: opentelemetry-sdk==1.30.*
25
- Requires-Dist: phonenumbers==8.13.*
26
- Requires-Dist: pyairtable==2.3.*
27
- Requires-Dist: pyfiglet==1.0.*
28
- Requires-Dist: pyjwt==2.8.*
29
- Requires-Dist: pymsteams==0.2.*
30
- Requires-Dist: regex<2025,>=2024.7.24
31
- Requires-Dist: requests==2.32.*
32
- Requires-Dist: rich==14.1.*
33
- Requires-Dist: types-openpyxl==3.1.*
34
- Requires-Dist: typing-extensions==4.14.*
35
- Requires-Dist: watchfiles==0.21.*
36
- Description-Content-Type: text/markdown
37
-
38
- # swo-extension-sdk
39
- SDK for SoftwareONE python extensions
@@ -1,2 +0,0 @@
1
- # swo-extension-sdk
2
- SDK for SoftwareONE python extensions
@@ -1,5 +0,0 @@
1
- from mpt_extension_sdk.swo_rql.query_builder import RQLQuery
2
-
3
- R = RQLQuery
4
-
5
- __all__ = ["R", "RQLQuery"]