python-getpaid-payu 3.0.0a5__tar.gz → 3.1.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.
Files changed (50) hide show
  1. python_getpaid_payu-3.1.0/.github/release-drafter.yml +31 -0
  2. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/.github/workflows/ci.yml +3 -0
  3. python_getpaid_payu-3.1.0/.github/workflows/release.yml +60 -0
  4. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/PKG-INFO +5 -5
  5. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/README.md +1 -1
  6. python_getpaid_payu-3.1.0/docs/changelog.md +51 -0
  7. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/pyproject.toml +4 -3
  8. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/__init__.py +1 -1
  9. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/processor.py +3 -3
  10. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/types.py +1 -6
  11. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/tests/test_public_api.py +2 -2
  12. python_getpaid_payu-3.0.0a5/docs/changelog.md +0 -22
  13. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/.gitignore +0 -0
  14. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/.pre-commit-config.yaml +0 -0
  15. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/.python-version +0 -0
  16. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/.readthedocs.yml +0 -0
  17. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/.sisyphus/evidence/task-26-readme-payu.txt +0 -0
  18. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/.sisyphus/evidence/task-5-baseline-payu.txt +0 -0
  19. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/CODE_OF_CONDUCT.md +0 -0
  20. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/CONTRIBUTING.md +0 -0
  21. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/LICENSE +0 -0
  22. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/docs/codeofconduct.md +0 -0
  23. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/docs/concepts.md +0 -0
  24. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/docs/conf.py +0 -0
  25. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/docs/configuration.md +0 -0
  26. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/docs/contributing.md +0 -0
  27. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/docs/getting-started.md +0 -0
  28. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/docs/index.md +0 -0
  29. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/docs/license.md +0 -0
  30. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/docs/reference.md +0 -0
  31. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/docs/requirements.txt +0 -0
  32. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/sandbox_keys.txt +0 -0
  33. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/client.py +0 -0
  34. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/py.typed +0 -0
  35. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/__init__.py +0 -0
  36. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/plugin.py +0 -0
  37. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/routes.py +0 -0
  38. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/signing.py +0 -0
  39. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/transitions.py +0 -0
  40. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/webhooks.py +0 -0
  41. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/tests/__init__.py +0 -0
  42. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/tests/conftest.py +0 -0
  43. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/tests/test_callback.py +0 -0
  44. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/tests/test_client.py +0 -0
  45. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/tests/test_entry_points.py +0 -0
  46. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/tests/test_processor.py +0 -0
  47. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/tests/test_simulator_plugin.py +0 -0
  48. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/tests/test_types.py +0 -0
  49. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/tests/test_url_construction.py +0 -0
  50. {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/uv.lock +0 -0
@@ -0,0 +1,31 @@
1
+ name-template: 'v$RESOLVED_VERSION'
2
+ tag-template: 'v$RESOLVED_VERSION'
3
+ categories:
4
+ - title: ':boom: Breaking Changes'
5
+ label: 'breaking'
6
+ - title: ':rocket: Features'
7
+ label: 'enhancement'
8
+ - title: ':fire: Removals and Deprecations'
9
+ label: 'removal'
10
+ - title: ':beetle: Fixes'
11
+ label: 'bug'
12
+ - title: ':racehorse: Performance'
13
+ label: 'performance'
14
+ - title: ':rotating_light: Testing'
15
+ label: 'testing'
16
+ - title: ':construction_worker: Continuous Integration'
17
+ label: 'ci'
18
+ - title: ':books: Documentation'
19
+ label: 'documentation'
20
+ - title: ':hammer: Refactoring'
21
+ label: 'refactoring'
22
+ - title: ':lipstick: Style'
23
+ label: 'style'
24
+ - title: ':package: Dependencies'
25
+ labels:
26
+ - 'dependencies'
27
+ - 'build'
28
+ template: |
29
+ ## Changes
30
+
31
+ $CHANGES
@@ -29,5 +29,8 @@ jobs:
29
29
  - name: Lint with ruff
30
30
  run: uv run ruff check .
31
31
 
32
+ - name: Audit dependencies
33
+ run: uv run pip-audit --strict
34
+
32
35
  - name: Run tests
33
36
  run: uv run pytest --tb=short
@@ -0,0 +1,60 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ - master
8
+
9
+ jobs:
10
+ release:
11
+ name: Release
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - name: Check out the repository
15
+ uses: actions/checkout@v4
16
+ with:
17
+ fetch-depth: 0 # Full history needed for version detection
18
+
19
+ - name: Set up Python
20
+ uses: actions/setup-python@v5
21
+ with:
22
+ python-version: "3.12"
23
+
24
+ - name: Install uv
25
+ run: pip install uv
26
+
27
+ # Version is read from __init__.py (dynamic via hatch)
28
+ - name: Detect version from __init__.py
29
+ id: get-version
30
+ run: |
31
+ init_py=$(grep -A2 '\[tool\.hatch\.version\]' pyproject.toml | grep '^path\s*=' | head -1 | sed -E "s/path\s*=\s*['\"]([^'\"]+)['\"].*/\1/")
32
+ version=$(grep '__version__' "$init_py" | head -1 | sed -E "s/.*= ['\"]([^'\"]+)['\"].*/\1/")
33
+ echo "version=$version" >> "$GITHUB_OUTPUT"
34
+
35
+ - name: Check if tag already exists
36
+ id: check-tag
37
+ run: |
38
+ tag="v${{ steps.get-version.outputs.version }}"
39
+ if git rev-parse "$tag" >/dev/null 2>&1; then
40
+ echo "already_tagged=true" >> "$GITHUB_OUTPUT"
41
+ else
42
+ echo "already_tagged=false" >> "$GITHUB_OUTPUT"
43
+ fi
44
+
45
+ - name: Tag new version
46
+ if: steps.check-tag.outputs.already_tagged == 'false'
47
+ run: |
48
+ tag="v${{ steps.get-version.outputs.version }}"
49
+ git config user.name "github-actions[bot]"
50
+ git config user.email "github-actions[bot]@users.noreply.github.com"
51
+ git tag -a "$tag" -m "Release $tag"
52
+ git push origin "$tag"
53
+
54
+ - name: Build package
55
+ run: uv build
56
+
57
+ - name: Publish package on PyPI
58
+ uses: pypa/gh-action-pypi-publish@release/v1
59
+ with:
60
+ password: ${{ secrets.PYPI_TOKEN }}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-getpaid-payu
3
- Version: 3.0.0a5
3
+ Version: 3.1.0
4
4
  Summary: PayU payment gateway integration for python-getpaid ecosystem.
5
5
  Project-URL: Homepage, https://github.com/django-getpaid/python-getpaid-payu
6
6
  Project-URL: Repository, https://github.com/django-getpaid/python-getpaid-payu
@@ -9,7 +9,7 @@ Project-URL: Changelog, https://github.com/django-getpaid/python-getpaid-payu/re
9
9
  Author-email: Dominik Kozaczko <dominik@kozaczko.info>
10
10
  License: MIT
11
11
  License-File: LICENSE
12
- Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Development Status :: 5 - Production/Stable
13
13
  Classifier: Intended Audience :: Developers
14
14
  Classifier: License :: OSI Approved :: MIT License
15
15
  Classifier: Programming Language :: Python :: 3.12
@@ -19,10 +19,10 @@ Classifier: Topic :: Office/Business :: Financial :: Point-Of-Sale
19
19
  Classifier: Typing :: Typed
20
20
  Requires-Python: >=3.12
21
21
  Requires-Dist: httpx>=0.27.0
22
- Requires-Dist: python-getpaid-core>=3.0.0a4
22
+ Requires-Dist: python-getpaid-core>=3.0.0
23
23
  Provides-Extra: simulator
24
24
  Requires-Dist: litestar>=2.0; extra == 'simulator'
25
- Requires-Dist: python-getpaid-simulator>=3.0.0a3; extra == 'simulator'
25
+ Requires-Dist: python-getpaid-simulator>=3.0.0; extra == 'simulator'
26
26
  Description-Content-Type: text/markdown
27
27
 
28
28
  # python-getpaid-payu
@@ -134,7 +134,7 @@ PayU provides a sandbox environment for testing. You can use the example keys pr
134
134
  ## Requirements
135
135
 
136
136
  - Python 3.12+
137
- - `python-getpaid-core >= 3.0.0a4`
137
+ - `python-getpaid-core >= 3.0.0`
138
138
  - `httpx >= 0.27.0`
139
139
 
140
140
  ## License
@@ -107,7 +107,7 @@ PayU provides a sandbox environment for testing. You can use the example keys pr
107
107
  ## Requirements
108
108
 
109
109
  - Python 3.12+
110
- - `python-getpaid-core >= 3.0.0a4`
110
+ - `python-getpaid-core >= 3.0.0`
111
111
  - `httpx >= 0.27.0`
112
112
 
113
113
  ## License
@@ -0,0 +1,51 @@
1
+ # Changelog
2
+
3
+ ## v3.0.0 (2026-06-04)
4
+
5
+ Major stable release — PayU payment gateway integration for the python-getpaid ecosystem.
6
+
7
+ ### Breaking Changes
8
+
9
+ - Complete rewrite as a framework-agnostic plugin for `python-getpaid-core` v3
10
+ - Requires Python 3.12+
11
+ - Now depends on `python-getpaid-core>=3.0.0` instead of standalone django-getpaid
12
+
13
+ ### Features
14
+
15
+ - Full PayU REST API v2.1 coverage
16
+ - Async HTTP client (`PayUClient`) with OAuth2 token management
17
+ - Payment processor (`PayUProcessor`) implementing `BaseProcessor`
18
+ - All order operations: create, cancel, capture, retrieve
19
+ - Refund operations: create, retrieve single/all
20
+ - Payment methods retrieval
21
+ - Transaction details retrieval
22
+ - Shop info and payout operations
23
+ - Token deletion
24
+ - Automatic amount centification/normalization
25
+ - Signature verification (MD5 and SHA-256)
26
+ - PUSH callback handling with semantic payment updates
27
+ - PULL status polling
28
+ - Full pre-authorization support (lock, charge, release)
29
+
30
+ ---
31
+
32
+ ## v0.1.0 (2026-02-14)
33
+
34
+ Initial release.
35
+
36
+ ### Features
37
+
38
+ - Full PayU REST API v2.1 coverage
39
+ - Async HTTP client (`PayUClient`) with OAuth2 token management
40
+ - Payment processor (`PayUProcessor`) implementing `BaseProcessor`
41
+ - All order operations: create, cancel, capture, retrieve
42
+ - Refund operations: create, retrieve single/all
43
+ - Payment methods retrieval
44
+ - Transaction details retrieval
45
+ - Shop info and payout operations
46
+ - Token deletion
47
+ - Automatic amount centification/normalization
48
+ - Signature verification (MD5 and SHA-256)
49
+ - PUSH callback handling with semantic payment updates
50
+ - PULL status polling
51
+ - Full pre-authorization support (lock, charge, release)
@@ -9,7 +9,7 @@ authors = [
9
9
  ]
10
10
  requires-python = '>=3.12'
11
11
  classifiers = [
12
- 'Development Status :: 3 - Alpha',
12
+ 'Development Status :: 5 - Production/Stable',
13
13
  'Intended Audience :: Developers',
14
14
  'License :: OSI Approved :: MIT License',
15
15
  'Programming Language :: Python :: 3.12',
@@ -19,13 +19,13 @@ classifiers = [
19
19
  'Typing :: Typed',
20
20
  ]
21
21
  dependencies = [
22
- 'python-getpaid-core>=3.0.0a4',
22
+ 'python-getpaid-core>=3.0.0',
23
23
  'httpx>=0.27.0',
24
24
  ]
25
25
 
26
26
  [project.optional-dependencies]
27
27
  simulator = [
28
- 'python-getpaid-simulator>=3.0.0a3',
28
+ 'python-getpaid-simulator>=3.0.0',
29
29
  'litestar>=2.0',
30
30
  ]
31
31
 
@@ -38,6 +38,7 @@ dev = [
38
38
  'ruff>=0.9.0',
39
39
  'pre-commit>=4.0',
40
40
  'ty>=0.0.16',
41
+ 'pip-audit>=2.7.0',
41
42
  ]
42
43
  docs = [
43
44
  'furo>=2024.8.6',
@@ -9,4 +9,4 @@ __all__ = [
9
9
  "PayUProcessor",
10
10
  ]
11
11
 
12
- __version__ = "3.0.0a5"
12
+ __version__ = "3.1.0"
@@ -11,7 +11,7 @@ from typing import ClassVar
11
11
  from getpaid_core.enums import PaymentEvent
12
12
  from getpaid_core.exceptions import InvalidCallbackError
13
13
  from getpaid_core.processor import BaseProcessor
14
- from getpaid_core.types import ChargeResponse as CoreChargeResponse
14
+ from getpaid_core.types import ChargeResult as CoreChargeResult
15
15
  from getpaid_core.types import PaymentUpdate
16
16
  from getpaid_core.types import RefundResult
17
17
  from getpaid_core.types import TransactionResult
@@ -291,7 +291,7 @@ class PayUProcessor(BaseProcessor):
291
291
 
292
292
  async def charge(
293
293
  self, amount: Decimal | None = None, **kwargs
294
- ) -> CoreChargeResponse:
294
+ ) -> CoreChargeResult:
295
295
  """Charge a pre-authorized (locked) payment."""
296
296
  client = self._get_client()
297
297
  response = await client.capture(self.payment.external_id)
@@ -299,7 +299,7 @@ class PayUProcessor(BaseProcessor):
299
299
  response.get("status", {}).get("statusCode")
300
300
  == ResponseStatus.SUCCESS
301
301
  )
302
- return CoreChargeResponse(
302
+ return CoreChargeResult(
303
303
  amount_charged=amount or self.payment.amount_locked,
304
304
  success=success,
305
305
  async_call=False,
@@ -1,15 +1,10 @@
1
1
  from datetime import datetime
2
- from enum import StrEnum
3
2
  from enum import auto
4
3
  from enum import unique
5
4
  from typing import Any
6
5
  from typing import TypedDict
7
6
 
8
-
9
- class AutoName(StrEnum):
10
- @staticmethod
11
- def _generate_next_value_(name, start, count, last_values):
12
- return name.strip("_")
7
+ from getpaid_core import AutoName
13
8
 
14
9
 
15
10
  @unique
@@ -7,12 +7,12 @@ import getpaid_payu
7
7
 
8
8
 
9
9
  def test_version() -> None:
10
- assert getpaid_payu.__version__ == "3.0.0a4"
10
+ assert getpaid_payu.__version__ == "3.0.0"
11
11
 
12
12
 
13
13
  def test_core_dependency_floor() -> None:
14
14
  pyproject_data = tomllib.loads(Path("pyproject.toml").read_text())
15
15
  assert (
16
- "python-getpaid-core>=3.0.0a4"
16
+ "python-getpaid-core>=3.0.0"
17
17
  in pyproject_data["project"]["dependencies"]
18
18
  )
@@ -1,22 +0,0 @@
1
- # Changelog
2
-
3
- ## v0.1.0 (2026-02-14)
4
-
5
- Initial release.
6
-
7
- ### Features
8
-
9
- - Full PayU REST API v2.1 coverage
10
- - Async HTTP client (`PayUClient`) with OAuth2 token management
11
- - Payment processor (`PayUProcessor`) implementing `BaseProcessor`
12
- - All order operations: create, cancel, capture, retrieve
13
- - Refund operations: create, retrieve single/all
14
- - Payment methods retrieval
15
- - Transaction details retrieval
16
- - Shop info and payout operations
17
- - Token deletion
18
- - Automatic amount centification/normalization
19
- - Signature verification (MD5 and SHA-256)
20
- - PUSH callback handling with semantic payment updates
21
- - PULL status polling
22
- - Full pre-authorization support (lock, charge, release)