paytechuz 0.1.0__tar.gz → 0.1.2__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.
Potentially problematic release.
This version of paytechuz might be problematic. Click here for more details.
- {paytechuz-0.1.0 → paytechuz-0.1.2}/MANIFEST.in +7 -0
- {paytechuz-0.1.0/paytechuz.egg-info → paytechuz-0.1.2}/PKG-INFO +2 -2
- {paytechuz-0.1.0 → paytechuz-0.1.2/paytechuz.egg-info}/PKG-INFO +2 -2
- paytechuz-0.1.2/paytechuz.egg-info/SOURCES.txt +40 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2}/paytechuz.egg-info/top_level.txt +1 -1
- {paytechuz-0.1.0 → paytechuz-0.1.2}/setup.py +16 -4
- paytechuz-0.1.2/src/__init__.py +74 -0
- paytechuz-0.1.2/src/core/payme/errors.py +25 -0
- paytechuz-0.1.0/paytechuz.egg-info/SOURCES.txt +0 -40
- paytechuz-0.1.0/tests/__init__.py +0 -1
- paytechuz-0.1.0/tests/test_gateway.py +0 -70
- {paytechuz-0.1.0 → paytechuz-0.1.2}/README.md +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2}/paytechuz.egg-info/dependency_links.txt +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2}/paytechuz.egg-info/requires.txt +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2}/setup.cfg +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/core/__init__.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/core/base.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/core/constants.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/core/exceptions.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/core/http.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/core/utils.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/gateways/__init__.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/gateways/click/__init__.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/gateways/click/client.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/gateways/click/merchant.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/gateways/click/webhook.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/gateways/payme/__init__.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/gateways/payme/cards.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/gateways/payme/client.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/gateways/payme/receipts.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/gateways/payme/webhook.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/integrations/__init__.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/integrations/django/__init__.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/integrations/django/admin.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/integrations/django/apps.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/integrations/django/migrations/0001_initial.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/integrations/django/migrations/__init__.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/integrations/django/models.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/integrations/django/signals.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/integrations/django/views.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/integrations/django/webhooks.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/integrations/fastapi/__init__.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/integrations/fastapi/models.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/integrations/fastapi/routes.py +0 -0
- {paytechuz-0.1.0 → paytechuz-0.1.2/src}/integrations/fastapi/schemas.py +0 -0
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
include LICENSE
|
|
2
2
|
include README.md
|
|
3
3
|
include PYPI_UPLOAD.md
|
|
4
|
+
|
|
5
|
+
# Include all Python files
|
|
6
|
+
recursive-include src *.py
|
|
7
|
+
|
|
8
|
+
# Include examples
|
|
4
9
|
recursive-include examples *
|
|
5
10
|
recursive-exclude examples *.pyc
|
|
6
11
|
recursive-exclude examples __pycache__
|
|
@@ -8,6 +13,8 @@ recursive-exclude examples/shop_env *
|
|
|
8
13
|
recursive-exclude examples/shop/media *
|
|
9
14
|
recursive-exclude examples/shop/static/img *
|
|
10
15
|
recursive-exclude examples/shop/db.sqlite3
|
|
16
|
+
|
|
17
|
+
# Exclude tests and cache files
|
|
11
18
|
recursive-exclude tests *.pyc
|
|
12
19
|
recursive-exclude tests __pycache__
|
|
13
20
|
recursive-exclude * *.py[co]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: paytechuz
|
|
3
|
-
Version: 0.1.
|
|
4
|
-
Summary: Unified Python package for Uzbekistan payment gateways
|
|
3
|
+
Version: 0.1.2
|
|
4
|
+
Summary: Unified Python package for Uzbekistan payment gateways
|
|
5
5
|
Home-page: https://github.com/Muhammadali-Akbarov/paytechuz
|
|
6
6
|
Author: Muhammadali Akbarov
|
|
7
7
|
Author-email: muhammadali17abc@gmail.com
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: paytechuz
|
|
3
|
-
Version: 0.1.
|
|
4
|
-
Summary: Unified Python package for Uzbekistan payment gateways
|
|
3
|
+
Version: 0.1.2
|
|
4
|
+
Summary: Unified Python package for Uzbekistan payment gateways
|
|
5
5
|
Home-page: https://github.com/Muhammadali-Akbarov/paytechuz
|
|
6
6
|
Author: Muhammadali Akbarov
|
|
7
7
|
Author-email: muhammadali17abc@gmail.com
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
MANIFEST.in
|
|
2
|
+
README.md
|
|
3
|
+
setup.py
|
|
4
|
+
paytechuz.egg-info/PKG-INFO
|
|
5
|
+
paytechuz.egg-info/SOURCES.txt
|
|
6
|
+
paytechuz.egg-info/dependency_links.txt
|
|
7
|
+
paytechuz.egg-info/requires.txt
|
|
8
|
+
paytechuz.egg-info/top_level.txt
|
|
9
|
+
src/__init__.py
|
|
10
|
+
src/core/__init__.py
|
|
11
|
+
src/core/base.py
|
|
12
|
+
src/core/constants.py
|
|
13
|
+
src/core/exceptions.py
|
|
14
|
+
src/core/http.py
|
|
15
|
+
src/core/utils.py
|
|
16
|
+
src/core/payme/errors.py
|
|
17
|
+
src/gateways/__init__.py
|
|
18
|
+
src/gateways/click/__init__.py
|
|
19
|
+
src/gateways/click/client.py
|
|
20
|
+
src/gateways/click/merchant.py
|
|
21
|
+
src/gateways/click/webhook.py
|
|
22
|
+
src/gateways/payme/__init__.py
|
|
23
|
+
src/gateways/payme/cards.py
|
|
24
|
+
src/gateways/payme/client.py
|
|
25
|
+
src/gateways/payme/receipts.py
|
|
26
|
+
src/gateways/payme/webhook.py
|
|
27
|
+
src/integrations/__init__.py
|
|
28
|
+
src/integrations/django/__init__.py
|
|
29
|
+
src/integrations/django/admin.py
|
|
30
|
+
src/integrations/django/apps.py
|
|
31
|
+
src/integrations/django/models.py
|
|
32
|
+
src/integrations/django/signals.py
|
|
33
|
+
src/integrations/django/views.py
|
|
34
|
+
src/integrations/django/webhooks.py
|
|
35
|
+
src/integrations/django/migrations/0001_initial.py
|
|
36
|
+
src/integrations/django/migrations/__init__.py
|
|
37
|
+
src/integrations/fastapi/__init__.py
|
|
38
|
+
src/integrations/fastapi/models.py
|
|
39
|
+
src/integrations/fastapi/routes.py
|
|
40
|
+
src/integrations/fastapi/schemas.py
|
|
@@ -1,21 +1,33 @@
|
|
|
1
|
+
"""Setup script for PayTechUZ package."""
|
|
2
|
+
|
|
1
3
|
import pathlib
|
|
2
|
-
from setuptools import setup
|
|
4
|
+
from setuptools import setup
|
|
3
5
|
|
|
4
6
|
here = pathlib.Path(__file__).parent.resolve()
|
|
5
7
|
long_description = (here / "README.md").read_text(encoding="utf-8")
|
|
6
8
|
|
|
7
9
|
setup(
|
|
8
10
|
name='paytechuz',
|
|
9
|
-
version='0.1.
|
|
11
|
+
version='0.1.2',
|
|
10
12
|
license='MIT',
|
|
11
13
|
author="Muhammadali Akbarov",
|
|
12
14
|
author_email='muhammadali17abc@gmail.com',
|
|
13
|
-
description="Unified Python package for Uzbekistan payment gateways
|
|
15
|
+
description="Unified Python package for Uzbekistan payment gateways",
|
|
14
16
|
long_description=long_description,
|
|
15
17
|
long_description_content_type="text/markdown",
|
|
16
18
|
url='https://github.com/Muhammadali-Akbarov/paytechuz',
|
|
17
19
|
|
|
18
|
-
packages=
|
|
20
|
+
packages=['paytechuz', 'core', 'gateways', 'integrations'],
|
|
21
|
+
package_dir={
|
|
22
|
+
'paytechuz': 'src',
|
|
23
|
+
'core': 'src/core',
|
|
24
|
+
'gateways': 'src/gateways',
|
|
25
|
+
'integrations': 'src/integrations',
|
|
26
|
+
},
|
|
27
|
+
include_package_data=True,
|
|
28
|
+
package_data={
|
|
29
|
+
'': ['*.py'],
|
|
30
|
+
},
|
|
19
31
|
python_requires='>=3.6',
|
|
20
32
|
|
|
21
33
|
install_requires=[
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"""PayTechUZ - Unified payment library for Uzbekistan payment systems.
|
|
2
|
+
|
|
3
|
+
This library provides a unified interface for working with Payme and Click
|
|
4
|
+
payment systems in Uzbekistan. It supports Django, Flask, and FastAPI.
|
|
5
|
+
"""
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
__version__ = '0.1.1'
|
|
9
|
+
|
|
10
|
+
# Define dummy classes to avoid import errors
|
|
11
|
+
class PaymeGateway:
|
|
12
|
+
"""Dummy PaymeGateway class to avoid import errors."""
|
|
13
|
+
def __init__(self, **kwargs):
|
|
14
|
+
pass
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ClickGateway:
|
|
18
|
+
"""Dummy ClickGateway class to avoid import errors."""
|
|
19
|
+
def __init__(self, **kwargs):
|
|
20
|
+
pass
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class PaymentGateway:
|
|
24
|
+
"""Dummy PaymentGateway enum to avoid import errors."""
|
|
25
|
+
class PAYME:
|
|
26
|
+
value = 'payme'
|
|
27
|
+
|
|
28
|
+
class CLICK:
|
|
29
|
+
value = 'click'
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# Import framework integrations - these imports are used to check availability
|
|
33
|
+
# of frameworks, not for direct usage
|
|
34
|
+
try:
|
|
35
|
+
import django # noqa: F401 - Used for availability check
|
|
36
|
+
HAS_DJANGO = True
|
|
37
|
+
except ImportError:
|
|
38
|
+
HAS_DJANGO = False
|
|
39
|
+
|
|
40
|
+
try:
|
|
41
|
+
import fastapi # noqa: F401 - Used for availability check
|
|
42
|
+
HAS_FASTAPI = True
|
|
43
|
+
except ImportError:
|
|
44
|
+
HAS_FASTAPI = False
|
|
45
|
+
|
|
46
|
+
try:
|
|
47
|
+
import flask # noqa: F401 - Used for availability check
|
|
48
|
+
HAS_FLASK = True
|
|
49
|
+
except ImportError:
|
|
50
|
+
HAS_FLASK = False
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def create_gateway(gateway_type: str, **kwargs) -> Any:
|
|
54
|
+
"""
|
|
55
|
+
Create a payment gateway instance.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
gateway_type: Type of gateway ('payme' or 'click')
|
|
59
|
+
**kwargs: Gateway-specific configuration
|
|
60
|
+
|
|
61
|
+
Returns:
|
|
62
|
+
Payment gateway instance
|
|
63
|
+
|
|
64
|
+
Raises:
|
|
65
|
+
ValueError: If the gateway type is not supported
|
|
66
|
+
ImportError: If the required gateway module is not available
|
|
67
|
+
"""
|
|
68
|
+
# Just use the dummy classes for now
|
|
69
|
+
if gateway_type.lower() == 'payme':
|
|
70
|
+
return PaymeGateway(**kwargs)
|
|
71
|
+
if gateway_type.lower() == 'click':
|
|
72
|
+
return ClickGateway(**kwargs)
|
|
73
|
+
|
|
74
|
+
raise ValueError(f"Unsupported gateway type: {gateway_type}")
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Payme API error codes.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
# System errors
|
|
6
|
+
SYSTEM_ERROR = -32400
|
|
7
|
+
INVALID_JSON_RPC = -32600
|
|
8
|
+
METHOD_NOT_FOUND = -32601
|
|
9
|
+
INVALID_PARAMS = -32602
|
|
10
|
+
INTERNAL_ERROR = -32603
|
|
11
|
+
|
|
12
|
+
# Authorization errors
|
|
13
|
+
AUTH_ERROR = -32504
|
|
14
|
+
AUTH_TOKEN_INVALID = -32504
|
|
15
|
+
AUTH_TOKEN_EXPIRED = -32504
|
|
16
|
+
|
|
17
|
+
# Business logic errors
|
|
18
|
+
INVALID_AMOUNT = -31001
|
|
19
|
+
INVALID_ACCOUNT = -31050
|
|
20
|
+
COULD_NOT_PERFORM = -31008
|
|
21
|
+
COULD_NOT_CANCEL = -31007
|
|
22
|
+
TRANSACTION_NOT_FOUND = -31003
|
|
23
|
+
TRANSACTION_ALREADY_EXISTS = -31060
|
|
24
|
+
TRANSACTION_ALREADY_CANCELLED = -31061
|
|
25
|
+
TRANSACTION_ALREADY_COMPLETED = -31062
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
MANIFEST.in
|
|
2
|
-
README.md
|
|
3
|
-
setup.py
|
|
4
|
-
core/__init__.py
|
|
5
|
-
core/base.py
|
|
6
|
-
core/constants.py
|
|
7
|
-
core/exceptions.py
|
|
8
|
-
core/http.py
|
|
9
|
-
core/utils.py
|
|
10
|
-
gateways/__init__.py
|
|
11
|
-
gateways/click/__init__.py
|
|
12
|
-
gateways/click/client.py
|
|
13
|
-
gateways/click/merchant.py
|
|
14
|
-
gateways/click/webhook.py
|
|
15
|
-
gateways/payme/__init__.py
|
|
16
|
-
gateways/payme/cards.py
|
|
17
|
-
gateways/payme/client.py
|
|
18
|
-
gateways/payme/receipts.py
|
|
19
|
-
gateways/payme/webhook.py
|
|
20
|
-
integrations/__init__.py
|
|
21
|
-
integrations/django/__init__.py
|
|
22
|
-
integrations/django/admin.py
|
|
23
|
-
integrations/django/apps.py
|
|
24
|
-
integrations/django/models.py
|
|
25
|
-
integrations/django/signals.py
|
|
26
|
-
integrations/django/views.py
|
|
27
|
-
integrations/django/webhooks.py
|
|
28
|
-
integrations/django/migrations/0001_initial.py
|
|
29
|
-
integrations/django/migrations/__init__.py
|
|
30
|
-
integrations/fastapi/__init__.py
|
|
31
|
-
integrations/fastapi/models.py
|
|
32
|
-
integrations/fastapi/routes.py
|
|
33
|
-
integrations/fastapi/schemas.py
|
|
34
|
-
paytechuz.egg-info/PKG-INFO
|
|
35
|
-
paytechuz.egg-info/SOURCES.txt
|
|
36
|
-
paytechuz.egg-info/dependency_links.txt
|
|
37
|
-
paytechuz.egg-info/requires.txt
|
|
38
|
-
paytechuz.egg-info/top_level.txt
|
|
39
|
-
tests/__init__.py
|
|
40
|
-
tests/test_gateway.py
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Tests for the gateway module.
|
|
3
|
-
"""
|
|
4
|
-
import unittest
|
|
5
|
-
from unittest.mock import patch, MagicMock
|
|
6
|
-
|
|
7
|
-
from paytechuz import create_gateway
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class TestCreateGateway(unittest.TestCase):
|
|
11
|
-
"""
|
|
12
|
-
Test the create_gateway function.
|
|
13
|
-
"""
|
|
14
|
-
|
|
15
|
-
def test_create_payme_gateway(self):
|
|
16
|
-
"""
|
|
17
|
-
Test creating a Payme gateway.
|
|
18
|
-
"""
|
|
19
|
-
with patch('paytechuz.gateway.PaymeGateway') as mock_payme:
|
|
20
|
-
mock_instance = MagicMock()
|
|
21
|
-
mock_payme.return_value = mock_instance
|
|
22
|
-
|
|
23
|
-
gateway = create_gateway(
|
|
24
|
-
'payme',
|
|
25
|
-
payme_id='test-id',
|
|
26
|
-
payme_key='test-key',
|
|
27
|
-
is_test_mode=True
|
|
28
|
-
)
|
|
29
|
-
|
|
30
|
-
self.assertEqual(gateway, mock_instance)
|
|
31
|
-
mock_payme.assert_called_once_with(
|
|
32
|
-
payme_id='test-id',
|
|
33
|
-
payme_key='test-key',
|
|
34
|
-
is_test_mode=True
|
|
35
|
-
)
|
|
36
|
-
|
|
37
|
-
def test_create_click_gateway(self):
|
|
38
|
-
"""
|
|
39
|
-
Test creating a Click gateway.
|
|
40
|
-
"""
|
|
41
|
-
with patch('paytechuz.gateway.ClickGateway') as mock_click:
|
|
42
|
-
mock_instance = MagicMock()
|
|
43
|
-
mock_click.return_value = mock_instance
|
|
44
|
-
|
|
45
|
-
gateway = create_gateway(
|
|
46
|
-
'click',
|
|
47
|
-
service_id='test-service-id',
|
|
48
|
-
merchant_id='test-merchant-id',
|
|
49
|
-
secret_key='test-secret-key',
|
|
50
|
-
is_test_mode=True
|
|
51
|
-
)
|
|
52
|
-
|
|
53
|
-
self.assertEqual(gateway, mock_instance)
|
|
54
|
-
mock_click.assert_called_once_with(
|
|
55
|
-
service_id='test-service-id',
|
|
56
|
-
merchant_id='test-merchant-id',
|
|
57
|
-
secret_key='test-secret-key',
|
|
58
|
-
is_test_mode=True
|
|
59
|
-
)
|
|
60
|
-
|
|
61
|
-
def test_invalid_gateway_type(self):
|
|
62
|
-
"""
|
|
63
|
-
Test creating a gateway with an invalid type.
|
|
64
|
-
"""
|
|
65
|
-
with self.assertRaises(ValueError):
|
|
66
|
-
create_gateway('invalid')
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
if __name__ == '__main__':
|
|
70
|
-
unittest.main()
|
|
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
|
|
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
|