python-getpaid-payu 3.0.0a4__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.
- python_getpaid_payu-3.1.0/.github/release-drafter.yml +31 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/.github/workflows/ci.yml +3 -0
- python_getpaid_payu-3.1.0/.github/workflows/release.yml +60 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/PKG-INFO +5 -5
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/README.md +1 -1
- python_getpaid_payu-3.1.0/docs/changelog.md +51 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/pyproject.toml +4 -3
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/src/getpaid_payu/__init__.py +1 -1
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/src/getpaid_payu/processor.py +3 -3
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/plugin.py +1 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/routes.py +23 -8
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/src/getpaid_payu/types.py +1 -6
- python_getpaid_payu-3.1.0/tests/test_public_api.py +18 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/tests/test_simulator_plugin.py +4 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/uv.lock +4 -4
- python_getpaid_payu-3.0.0a4/docs/changelog.md +0 -22
- python_getpaid_payu-3.0.0a4/tests/test_public_api.py +0 -7
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/.gitignore +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/.pre-commit-config.yaml +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/.python-version +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/.readthedocs.yml +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/.sisyphus/evidence/task-26-readme-payu.txt +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/.sisyphus/evidence/task-5-baseline-payu.txt +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/CODE_OF_CONDUCT.md +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/CONTRIBUTING.md +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/LICENSE +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/docs/codeofconduct.md +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/docs/concepts.md +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/docs/conf.py +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/docs/configuration.md +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/docs/contributing.md +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/docs/getting-started.md +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/docs/index.md +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/docs/license.md +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/docs/reference.md +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/docs/requirements.txt +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/sandbox_keys.txt +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/src/getpaid_payu/client.py +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/src/getpaid_payu/py.typed +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/__init__.py +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/signing.py +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/transitions.py +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/webhooks.py +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/tests/__init__.py +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/tests/conftest.py +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/tests/test_callback.py +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/tests/test_client.py +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/tests/test_entry_points.py +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/tests/test_processor.py +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/tests/test_types.py +0 -0
- {python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/tests/test_url_construction.py +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
|
|
@@ -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
|
|
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 ::
|
|
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.
|
|
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.
|
|
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.
|
|
137
|
+
- `python-getpaid-core >= 3.0.0`
|
|
138
138
|
- `httpx >= 0.27.0`
|
|
139
139
|
|
|
140
140
|
## 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 ::
|
|
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.
|
|
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.
|
|
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',
|
|
@@ -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
|
|
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
|
-
) ->
|
|
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
|
|
302
|
+
return CoreChargeResult(
|
|
303
303
|
amount_charged=amount or self.payment.amount_locked,
|
|
304
304
|
success=success,
|
|
305
305
|
async_call=False,
|
{python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/routes.py
RENAMED
|
@@ -4,6 +4,8 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from datetime import UTC
|
|
6
6
|
from datetime import datetime
|
|
7
|
+
from decimal import Decimal
|
|
8
|
+
from decimal import InvalidOperation
|
|
7
9
|
from inspect import isawaitable
|
|
8
10
|
from typing import Any
|
|
9
11
|
from urllib.parse import parse_qsl
|
|
@@ -31,6 +33,23 @@ def _provider_config(request: Request[Any, Any, Any]) -> dict[str, Any]:
|
|
|
31
33
|
return dict(request.app.state.provider_configs["payu"])
|
|
32
34
|
|
|
33
35
|
|
|
36
|
+
def _format_amount_for_display(
|
|
37
|
+
order: dict[str, Any],
|
|
38
|
+
provider_config: dict[str, Any],
|
|
39
|
+
) -> str:
|
|
40
|
+
amount_raw = order.get("totalAmount", 0)
|
|
41
|
+
try:
|
|
42
|
+
amount_value = Decimal(str(amount_raw))
|
|
43
|
+
except (InvalidOperation, TypeError, ValueError):
|
|
44
|
+
return str(amount_raw)
|
|
45
|
+
|
|
46
|
+
minor_unit_places = int(provider_config.get("amount_minor_unit_places", 2))
|
|
47
|
+
if minor_unit_places >= 0:
|
|
48
|
+
amount_value /= Decimal(10) ** minor_unit_places
|
|
49
|
+
|
|
50
|
+
return f"{amount_value:.2f} {order.get('currencyCode', 'PLN')}"
|
|
51
|
+
|
|
52
|
+
|
|
34
53
|
def _unauthorized_response() -> Response[dict[str, dict[str, str]]]:
|
|
35
54
|
return Response(
|
|
36
55
|
content={
|
|
@@ -329,14 +348,10 @@ async def payu_authorize_get(
|
|
|
329
348
|
if order.get("status") in ("COMPLETED", "CANCELED"):
|
|
330
349
|
raise HTTPException(status_code=400, detail="Payment already processed")
|
|
331
350
|
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
f"{amount_value:.2f} {order.get('currencyCode', 'PLN')}"
|
|
337
|
-
)
|
|
338
|
-
except (ValueError, TypeError):
|
|
339
|
-
formatted_amount = str(amount_raw)
|
|
351
|
+
formatted_amount = _format_amount_for_display(
|
|
352
|
+
order,
|
|
353
|
+
_provider_config(request),
|
|
354
|
+
)
|
|
340
355
|
|
|
341
356
|
return Template(
|
|
342
357
|
template_name="authorize.html",
|
|
@@ -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
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"""Tests for the public package API."""
|
|
2
|
+
|
|
3
|
+
import tomllib
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
import getpaid_payu
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def test_version() -> None:
|
|
10
|
+
assert getpaid_payu.__version__ == "3.0.0"
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def test_core_dependency_floor() -> None:
|
|
14
|
+
pyproject_data = tomllib.loads(Path("pyproject.toml").read_text())
|
|
15
|
+
assert (
|
|
16
|
+
"python-getpaid-core>=3.0.0"
|
|
17
|
+
in pyproject_data["project"]["dependencies"]
|
|
18
|
+
)
|
|
@@ -94,6 +94,10 @@ def test_load_provider_config_reads_env_override(
|
|
|
94
94
|
assert load_provider_config()["second_key"] == "override-second-key"
|
|
95
95
|
|
|
96
96
|
|
|
97
|
+
def test_load_provider_config_includes_amount_minor_unit_places() -> None:
|
|
98
|
+
assert load_provider_config()["amount_minor_unit_places"] == 2
|
|
99
|
+
|
|
100
|
+
|
|
97
101
|
@pytest.mark.asyncio
|
|
98
102
|
async def test_trigger_payu_webhook_signs_and_delivers_payload() -> None:
|
|
99
103
|
storage = FakeStorage(
|
|
@@ -829,16 +829,16 @@ wheels = [
|
|
|
829
829
|
|
|
830
830
|
[[package]]
|
|
831
831
|
name = "python-getpaid-core"
|
|
832
|
-
version = "3.0.
|
|
832
|
+
version = "3.0.0a4"
|
|
833
833
|
source = { registry = "https://pypi.org/simple" }
|
|
834
834
|
dependencies = [
|
|
835
835
|
{ name = "anyio" },
|
|
836
836
|
{ name = "httpx" },
|
|
837
837
|
{ name = "transitions" },
|
|
838
838
|
]
|
|
839
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
839
|
+
sdist = { url = "https://files.pythonhosted.org/packages/5c/22/c7a3d249398b609022179299f1cde51207db8e4e9556d4cfe7112f276422/python_getpaid_core-3.0.0a4.tar.gz", hash = "sha256:7784ce418391efe3ec1b6c7fddbfe4d8e1741991a9d0ca3a00ada7807ecb8230", size = 52993, upload-time = "2026-03-25T19:06:56.261Z" }
|
|
840
840
|
wheels = [
|
|
841
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
841
|
+
{ url = "https://files.pythonhosted.org/packages/9e/42/e52551b13b91474e02bcda4517adc2ea21bbb4920f7daae292a5ef795279/python_getpaid_core-3.0.0a4-py3-none-any.whl", hash = "sha256:322afe2a3a777958c1956d1c6ce576f42c93c0cf6ecd1a260bae189a9fa6a97f", size = 15077, upload-time = "2026-03-25T19:06:57.081Z" },
|
|
842
842
|
]
|
|
843
843
|
|
|
844
844
|
[[package]]
|
|
@@ -875,7 +875,7 @@ docs = [
|
|
|
875
875
|
requires-dist = [
|
|
876
876
|
{ name = "httpx", specifier = ">=0.27.0" },
|
|
877
877
|
{ name = "litestar", marker = "extra == 'simulator'", specifier = ">=2.0" },
|
|
878
|
-
{ name = "python-getpaid-core", specifier = ">=3.0.
|
|
878
|
+
{ name = "python-getpaid-core", specifier = ">=3.0.0a4" },
|
|
879
879
|
{ name = "python-getpaid-simulator", marker = "extra == 'simulator'", specifier = ">=3.0.0a3" },
|
|
880
880
|
]
|
|
881
881
|
provides-extras = ["simulator"]
|
|
@@ -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)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/.sisyphus/evidence/task-26-readme-payu.txt
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
|
{python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/__init__.py
RENAMED
|
File without changes
|
{python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/signing.py
RENAMED
|
File without changes
|
{python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/transitions.py
RENAMED
|
File without changes
|
{python_getpaid_payu-3.0.0a4 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/webhooks.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
|