payme-pkg 2.6.5__tar.gz → 2.6.7__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 payme-pkg might be problematic. Click here for more details.

Files changed (58) hide show
  1. {payme-pkg-2.6.5/lib/payme_pkg.egg-info → payme_pkg-2.6.7}/PKG-INFO +4 -1
  2. payme_pkg-2.6.7/README.md +22 -0
  3. payme_pkg-2.6.7/lib/core/asgi.py +16 -0
  4. payme_pkg-2.6.7/lib/core/settings.py +133 -0
  5. payme_pkg-2.6.7/lib/core/urls.py +25 -0
  6. payme_pkg-2.6.7/lib/core/wsgi.py +16 -0
  7. payme_pkg-2.6.7/lib/my_app/admin.py +3 -0
  8. payme_pkg-2.6.7/lib/my_app/apps.py +6 -0
  9. payme_pkg-2.6.7/lib/my_app/models.py +3 -0
  10. payme_pkg-2.6.7/lib/my_app/tests.py +3 -0
  11. payme_pkg-2.6.7/lib/my_app/views.py +16 -0
  12. payme_pkg-2.6.7/lib/payme/methods/__init__.py +0 -0
  13. payme_pkg-2.6.7/lib/payme/migrations/__init__.py +0 -0
  14. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/models.py +21 -14
  15. payme_pkg-2.6.7/lib/payme/utils/__init__.py +0 -0
  16. {payme-pkg-2.6.5 → payme_pkg-2.6.7/lib/payme_pkg.egg-info}/PKG-INFO +4 -1
  17. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme_pkg.egg-info/SOURCES.txt +12 -0
  18. payme_pkg-2.6.7/lib/payme_pkg.egg-info/requires.txt +5 -0
  19. payme_pkg-2.6.7/lib/payme_pkg.egg-info/top_level.txt +3 -0
  20. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/setup.py +3 -3
  21. payme-pkg-2.6.5/README.md +0 -903
  22. payme-pkg-2.6.5/lib/payme_pkg.egg-info/requires.txt +0 -3
  23. payme-pkg-2.6.5/lib/payme_pkg.egg-info/top_level.txt +0 -1
  24. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/LICENSE.txt +0 -0
  25. {payme-pkg-2.6.5/lib/payme → payme_pkg-2.6.7/lib/core}/__init__.py +0 -0
  26. {payme-pkg-2.6.5/lib/payme/decorators → payme_pkg-2.6.7/lib/my_app}/__init__.py +0 -0
  27. {payme-pkg-2.6.5/lib/payme/errors → payme_pkg-2.6.7/lib/my_app/migrations}/__init__.py +0 -0
  28. {payme-pkg-2.6.5/lib/payme/methods → payme_pkg-2.6.7/lib/payme}/__init__.py +0 -0
  29. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/admin.py +0 -0
  30. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/apps.py +0 -0
  31. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/cards/__init__.py +0 -0
  32. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/cards/subscribe_cards.py +0 -0
  33. {payme-pkg-2.6.5/lib/payme/migrations → payme_pkg-2.6.7/lib/payme/decorators}/__init__.py +0 -0
  34. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/decorators/decorators.py +0 -0
  35. {payme-pkg-2.6.5/lib/payme/utils → payme_pkg-2.6.7/lib/payme/errors}/__init__.py +0 -0
  36. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/errors/exceptions.py +0 -0
  37. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/methods/cancel_transaction.py +0 -0
  38. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/methods/check_perform_transaction.py +0 -0
  39. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/methods/check_transaction.py +0 -0
  40. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/methods/create_transaction.py +0 -0
  41. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/methods/generate_link.py +0 -0
  42. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/methods/get_statement.py +0 -0
  43. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/methods/perform_transaction.py +0 -0
  44. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/migrations/0001_initial.py +0 -0
  45. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/receipts/__init__.py +0 -0
  46. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/receipts/subscribe_receipts.py +0 -0
  47. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/serializers.py +0 -0
  48. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/urls.py +0 -0
  49. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/utils/get_params.py +0 -0
  50. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/utils/logging.py +0 -0
  51. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/utils/make_aware_datetime.py +0 -0
  52. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/utils/support.py +0 -0
  53. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/utils/to_json.py +0 -0
  54. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme/views.py +0 -0
  55. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/lib/payme_pkg.egg-info/dependency_links.txt +0 -0
  56. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/setup.cfg +0 -0
  57. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/tests/test_cards.py +0 -0
  58. {payme-pkg-2.6.5 → payme_pkg-2.6.7}/tests/test_receipts.py +0 -0
@@ -1,9 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: payme-pkg
3
- Version: 2.6.5
3
+ Version: 2.6.7
4
4
  Home-page: https://github.com/Muhammadali-Akbarov/payme-pkg
5
5
  Author: Muhammadali Akbarov
6
6
  Author-email: muhammadali17abc@gmail.com
7
7
  License: MIT
8
8
  Keywords: paymeuz paycomuz payme-merchant merchant-api subscribe-api payme-pkg payme-api
9
9
  License-File: LICENSE.txt
10
+ Requires-Dist: requests==2.*
11
+ Requires-Dist: dataclasses==0.*; python_version < "3.7"
12
+ Requires-Dist: djangorestframework==3.*
@@ -0,0 +1,22 @@
1
+ # Payme Uzbekistan Integration Uzcard and Humo
2
+
3
+ <p align="center">
4
+ <a href="https://youtu.be/r2RO3kJVP7g">
5
+ <img style="width: 60%;" src="https://i.postimg.cc/WbD32bHC/payme-pkg-demo-m4a.gif">
6
+ </a>
7
+ </p>
8
+ Support Group - <a href="https://t.me/+Ng1axYLNyBAyYTRi">Telegram</a> <br/>
9
+ YouTube - <a href="https://youtu.be/sJORIyykHcw">Watch Video</a><br/>
10
+ Implementation Sample - https://github.com/PayTechUz/payme-sample
11
+
12
+ <p align="center">
13
+ <br>
14
+ <a href="https://www.buymeacoffee.com/paytechuz" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>
15
+ </p>
16
+
17
+
18
+ ## 📚 **Full Documentation:**
19
+
20
+ For in-depth details, examples, and comprehensive documentation, please visit our official documentation website: [Documentation Website](https://docs.pay-tech.uz).
21
+
22
+ Happy coding! 🚀
@@ -0,0 +1,16 @@
1
+ """
2
+ ASGI config for core project.
3
+
4
+ It exposes the ASGI callable as a module-level variable named ``application``.
5
+
6
+ For more information on this file, see
7
+ https://docs.djangoproject.com/en/4.1/howto/deployment/asgi/
8
+ """
9
+
10
+ import os
11
+
12
+ from django.core.asgi import get_asgi_application
13
+
14
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings')
15
+
16
+ application = get_asgi_application()
@@ -0,0 +1,133 @@
1
+ """
2
+ Django settings for core project.
3
+
4
+ Generated by 'django-admin startproject' using Django 4.1.
5
+
6
+ For more information on this file, see
7
+ https://docs.djangoproject.com/en/4.1/topics/settings/
8
+
9
+ For the full list of settings and their values, see
10
+ https://docs.djangoproject.com/en/4.1/ref/settings/
11
+ """
12
+
13
+ from pathlib import Path
14
+
15
+ # Build paths inside the project like this: BASE_DIR / 'subdir'.
16
+ BASE_DIR = Path(__file__).resolve().parent.parent
17
+
18
+
19
+ # Quick-start development settings - unsuitable for production
20
+ # See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/
21
+
22
+ # SECURITY WARNING: keep the secret key used in production secret!
23
+ SECRET_KEY = 'django-insecure-kc)e&w47x5n@)dgep=ffbkr1th2xjpx4n-8=heu6%%z4p4r8u&'
24
+
25
+ # SECURITY WARNING: don't run with debug turned on in production!
26
+ DEBUG = True
27
+
28
+ ALLOWED_HOSTS = ['*']
29
+
30
+
31
+ # Application definition
32
+
33
+ INSTALLED_APPS = [
34
+ 'django.contrib.admin',
35
+ 'django.contrib.auth',
36
+ 'django.contrib.contenttypes',
37
+ 'django.contrib.sessions',
38
+ 'django.contrib.messages',
39
+ 'django.contrib.staticfiles',
40
+ 'payme',
41
+ 'my_app'
42
+ ]
43
+
44
+ MIDDLEWARE = [
45
+ 'django.middleware.security.SecurityMiddleware',
46
+ 'django.contrib.sessions.middleware.SessionMiddleware',
47
+ 'django.middleware.common.CommonMiddleware',
48
+ 'django.middleware.csrf.CsrfViewMiddleware',
49
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
50
+ 'django.contrib.messages.middleware.MessageMiddleware',
51
+ 'django.middleware.clickjacking.XFrameOptionsMiddleware',
52
+ ]
53
+
54
+ ROOT_URLCONF = 'core.urls'
55
+
56
+ TEMPLATES = [
57
+ {
58
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
59
+ 'DIRS': [],
60
+ 'APP_DIRS': True,
61
+ 'OPTIONS': {
62
+ 'context_processors': [
63
+ 'django.template.context_processors.debug',
64
+ 'django.template.context_processors.request',
65
+ 'django.contrib.auth.context_processors.auth',
66
+ 'django.contrib.messages.context_processors.messages',
67
+ ],
68
+ },
69
+ },
70
+ ]
71
+
72
+ WSGI_APPLICATION = 'core.wsgi.application'
73
+
74
+
75
+ # Database
76
+ # https://docs.djangoproject.com/en/4.1/ref/settings/#databases
77
+
78
+ DATABASES = {
79
+ 'default': {
80
+ 'ENGINE': 'django.db.backends.sqlite3',
81
+ 'NAME': BASE_DIR / 'db.sqlite3',
82
+ }
83
+ }
84
+
85
+
86
+ # Password validation
87
+ # https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators
88
+
89
+ AUTH_PASSWORD_VALIDATORS = [
90
+ {
91
+ 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
92
+ },
93
+ {
94
+ 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
95
+ },
96
+ {
97
+ 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
98
+ },
99
+ {
100
+ 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
101
+ },
102
+ ]
103
+
104
+ PAYME: dict = {
105
+ 'PAYME_ID': '64245b936420371977b5c755',
106
+ 'PAYME_KEY': 'yHI3RA1RN&H5f0Svcrx@vq9muNsmHUo49dTv',
107
+ 'PAYME_URL': 'https://checkout.test.paycom.uz',
108
+ 'PAYME_CALL_BACK_URL': 'https://internal-monitor-greatly.ngrok-free.app/payment/merchant', # merchant api callback url
109
+ 'PAYME_MIN_AMOUNT': 1, # integer field
110
+ 'PAYME_ACCOUNT': 'order_id',
111
+ }
112
+
113
+ # Internationalization
114
+ # https://docs.djangoproject.com/en/4.1/topics/i18n/
115
+
116
+ LANGUAGE_CODE = 'en-us'
117
+
118
+ TIME_ZONE = 'UTC'
119
+
120
+ USE_I18N = True
121
+
122
+ USE_TZ = True
123
+
124
+
125
+ # Static files (CSS, JavaScript, Images)
126
+ # https://docs.djangoproject.com/en/4.1/howto/static-files/
127
+
128
+ STATIC_URL = 'static/'
129
+
130
+ # Default primary key field type
131
+ # https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field
132
+
133
+ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
@@ -0,0 +1,25 @@
1
+ """core URL Configuration
2
+
3
+ The `urlpatterns` list routes URLs to views. For more information please see:
4
+ https://docs.djangoproject.com/en/4.1/topics/http/urls/
5
+ Examples:
6
+ Function views
7
+ 1. Add an import: from my_app import views
8
+ 2. Add a URL to urlpatterns: path('', views.home, name='home')
9
+ Class-based views
10
+ 1. Add an import: from other_app.views import Home
11
+ 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
12
+ Including another URLconf
13
+ 1. Import the include() function: from django.urls import include, path
14
+ 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
15
+ """
16
+ from django.contrib import admin
17
+ from django.urls import path
18
+
19
+ from my_app.views import PaymeCallBackAPIView
20
+
21
+
22
+ urlpatterns = [
23
+ path('admin/', admin.site.urls),
24
+ path("payments/merchant/", PaymeCallBackAPIView.as_view()),
25
+ ]
@@ -0,0 +1,16 @@
1
+ """
2
+ WSGI config for core project.
3
+
4
+ It exposes the WSGI callable as a module-level variable named ``application``.
5
+
6
+ For more information on this file, see
7
+ https://docs.djangoproject.com/en/4.1/howto/deployment/wsgi/
8
+ """
9
+
10
+ import os
11
+
12
+ from django.core.wsgi import get_wsgi_application
13
+
14
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings')
15
+
16
+ application = get_wsgi_application()
@@ -0,0 +1,3 @@
1
+ from django.contrib import admin
2
+
3
+ # Register your models here.
@@ -0,0 +1,6 @@
1
+ from django.apps import AppConfig
2
+
3
+
4
+ class MyAppConfig(AppConfig):
5
+ default_auto_field = 'django.db.models.BigAutoField'
6
+ name = 'my_app'
@@ -0,0 +1,3 @@
1
+ from django.db import models
2
+
3
+ # Create your models here.
@@ -0,0 +1,3 @@
1
+ from django.test import TestCase
2
+
3
+ # Create your tests here.
@@ -0,0 +1,16 @@
1
+ # Create your views here.
2
+ from payme.views import MerchantAPIView
3
+
4
+
5
+ class PaymeCallBackAPIView(MerchantAPIView):
6
+ """
7
+ the cancel transition.
8
+ """
9
+ def create_transaction(self, order_id, action) -> None:
10
+ print(f"create_transaction for order_id: {order_id}, response: {action}") # noqa
11
+
12
+ def perform_transaction(self, order_id, action) -> None:
13
+ print(f"perform_transaction for order_id: {order_id}, response: {action}") # noqa
14
+
15
+ def cancel_transaction(self, order_id, action) -> None:
16
+ print(f"cancel_transaction for order_id: {order_id}, response: {action}") # noqa
File without changes
File without changes
@@ -2,6 +2,7 @@ from django.db import models
2
2
  from django.conf import settings
3
3
  from django.utils.module_loading import import_string
4
4
  from django.core.exceptions import FieldError
5
+ from django.utils.translation import gettext_lazy as _
5
6
 
6
7
  from payme.utils.logging import logger
7
8
 
@@ -12,21 +13,25 @@ class MerchantTransactionsModel(models.Model):
12
13
  That's used for managing transactions in database.
13
14
  """
14
15
  _id = models.CharField(max_length=255, null=True, blank=False)
15
- transaction_id = models.CharField(max_length=255, null=True, blank=False)
16
- order_id = models.BigIntegerField(null=True, blank=True)
17
- amount = models.FloatField(null=True, blank=True)
18
- time = models.BigIntegerField(null=True, blank=True)
19
- perform_time = models.BigIntegerField(null=True, default=0)
20
- cancel_time = models.BigIntegerField(null=True, default=0)
21
- state = models.IntegerField(null=True, default=1)
22
- reason = models.CharField(max_length=255, null=True, blank=True)
23
- created_at_ms = models.CharField(max_length=255, null=True, blank=True)
24
- created_at = models.DateTimeField(auto_now_add=True)
25
- updated_at = models.DateTimeField(auto_now=True)
16
+ transaction_id = models.CharField(max_length=255, null=True, blank=False, verbose_name=_("Transaction ID"))
17
+ order_id = models.BigIntegerField(null=True, blank=True, verbose_name=_("Order ID"))
18
+ amount = models.FloatField(null=True, blank=True, verbose_name=_("Amount"))
19
+ time = models.BigIntegerField(null=True, blank=True, verbose_name=_("Time"))
20
+ perform_time = models.BigIntegerField(null=True, default=0, verbose_name=_("Perform Time"))
21
+ cancel_time = models.BigIntegerField(null=True, default=0, verbose_name=_("Cancel Time"))
22
+ state = models.IntegerField(null=True, default=1, verbose_name=_("State"))
23
+ reason = models.CharField(max_length=255, null=True, blank=True, verbose_name=_("Reason"))
24
+ created_at_ms = models.CharField(max_length=255, null=True, blank=True, verbose_name=_("Created At MS"))
25
+ created_at = models.DateTimeField(auto_now_add=True, verbose_name=_("Created At"))
26
+ updated_at = models.DateTimeField(auto_now=True, verbose_name=_("Updated At"))
26
27
 
27
28
  def __str__(self):
28
29
  return str(self._id)
29
30
 
31
+ class Meta:
32
+ verbose_name = _("Merchant Transaction")
33
+ verbose_name_plural = _("Merchant Transactions")
34
+
30
35
 
31
36
  try:
32
37
  CUSTOM_ORDER = import_string(settings.ORDER_MODEL)
@@ -49,9 +54,9 @@ except (ImportError, AttributeError):
49
54
  Order class \
50
55
  That's used for managing order process
51
56
  """
52
- amount = models.IntegerField(null=True, blank=True)
53
- created_at = models.DateTimeField(auto_now_add=True)
54
- updated_at = models.DateTimeField(auto_now=True)
57
+ amount = models.IntegerField(null=True, blank=True, verbose_name=_("Amount"))
58
+ created_at = models.DateTimeField(auto_now_add=True, verbose_name=_("Created At"))
59
+ updated_at = models.DateTimeField(auto_now=True, verbose_name=_("Updated At"))
55
60
 
56
61
  def __str__(self):
57
62
  return f"ORDER ID: {self.pk} - AMOUNT: {self.amount}"
@@ -59,3 +64,5 @@ except (ImportError, AttributeError):
59
64
  class Meta:
60
65
  # pylint: disable=missing-class-docstring
61
66
  managed = False
67
+ verbose_name = _("Order")
68
+ verbose_name_plural = _("Orders")
File without changes
@@ -1,9 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: payme-pkg
3
- Version: 2.6.5
3
+ Version: 2.6.7
4
4
  Home-page: https://github.com/Muhammadali-Akbarov/payme-pkg
5
5
  Author: Muhammadali Akbarov
6
6
  Author-email: muhammadali17abc@gmail.com
7
7
  License: MIT
8
8
  Keywords: paymeuz paycomuz payme-merchant merchant-api subscribe-api payme-pkg payme-api
9
9
  License-File: LICENSE.txt
10
+ Requires-Dist: requests==2.*
11
+ Requires-Dist: dataclasses==0.*; python_version < "3.7"
12
+ Requires-Dist: djangorestframework==3.*
@@ -2,6 +2,18 @@ LICENSE.txt
2
2
  README.md
3
3
  setup.cfg
4
4
  setup.py
5
+ lib/core/__init__.py
6
+ lib/core/asgi.py
7
+ lib/core/settings.py
8
+ lib/core/urls.py
9
+ lib/core/wsgi.py
10
+ lib/my_app/__init__.py
11
+ lib/my_app/admin.py
12
+ lib/my_app/apps.py
13
+ lib/my_app/models.py
14
+ lib/my_app/tests.py
15
+ lib/my_app/views.py
16
+ lib/my_app/migrations/__init__.py
5
17
  lib/payme/__init__.py
6
18
  lib/payme/admin.py
7
19
  lib/payme/apps.py
@@ -0,0 +1,5 @@
1
+ requests==2.*
2
+ djangorestframework==3.*
3
+
4
+ [:python_version < "3.7"]
5
+ dataclasses==0.*
@@ -0,0 +1,3 @@
1
+ core
2
+ my_app
3
+ payme
@@ -3,7 +3,7 @@ from setuptools import setup, find_packages
3
3
 
4
4
  setup(
5
5
  name='payme-pkg',
6
- version='2.6.5',
6
+ version='2.6.7',
7
7
  license='MIT',
8
8
  author="Muhammadali Akbarov",
9
9
  author_email='muhammadali17abc@gmail.com',
@@ -13,7 +13,7 @@ setup(
13
13
  keywords='paymeuz paycomuz payme-merchant merchant-api subscribe-api payme-pkg payme-api',
14
14
  install_requires=[
15
15
  'requests==2.*',
16
- 'dataclasses==0.*',
17
- 'djangorestframework==3.14.0'
16
+ "dataclasses==0.*;python_version<'3.7'", # will only install on py3.6
17
+ 'djangorestframework==3.*'
18
18
  ],
19
19
  )