django-cfg 1.2.21__py3-none-any.whl → 1.2.23__py3-none-any.whl

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 (92) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/newsletter/signals.py +9 -8
  3. django_cfg/apps/payments/__init__.py +8 -0
  4. django_cfg/apps/payments/admin/__init__.py +23 -0
  5. django_cfg/apps/payments/admin/api_keys_admin.py +347 -0
  6. django_cfg/apps/payments/admin/balance_admin.py +434 -0
  7. django_cfg/apps/payments/admin/currencies_admin.py +186 -0
  8. django_cfg/apps/payments/admin/filters.py +259 -0
  9. django_cfg/apps/payments/admin/payments_admin.py +142 -0
  10. django_cfg/apps/payments/admin/subscriptions_admin.py +227 -0
  11. django_cfg/apps/payments/admin/tariffs_admin.py +199 -0
  12. django_cfg/apps/payments/apps.py +22 -0
  13. django_cfg/apps/payments/config/__init__.py +87 -0
  14. django_cfg/apps/payments/config/module.py +162 -0
  15. django_cfg/apps/payments/config/providers.py +93 -0
  16. django_cfg/apps/payments/config/settings.py +136 -0
  17. django_cfg/apps/payments/config/utils.py +198 -0
  18. django_cfg/apps/payments/decorators.py +291 -0
  19. django_cfg/apps/payments/managers/__init__.py +22 -0
  20. django_cfg/apps/payments/managers/api_key_manager.py +35 -0
  21. django_cfg/apps/payments/managers/balance_manager.py +361 -0
  22. django_cfg/apps/payments/managers/currency_manager.py +32 -0
  23. django_cfg/apps/payments/managers/payment_manager.py +44 -0
  24. django_cfg/apps/payments/managers/subscription_manager.py +37 -0
  25. django_cfg/apps/payments/managers/tariff_manager.py +29 -0
  26. django_cfg/apps/payments/middleware/__init__.py +13 -0
  27. django_cfg/apps/payments/middleware/api_access.py +261 -0
  28. django_cfg/apps/payments/middleware/rate_limiting.py +216 -0
  29. django_cfg/apps/payments/middleware/usage_tracking.py +296 -0
  30. django_cfg/apps/payments/migrations/0001_initial.py +1003 -0
  31. django_cfg/apps/payments/migrations/__init__.py +1 -0
  32. django_cfg/apps/payments/models/__init__.py +67 -0
  33. django_cfg/apps/payments/models/api_keys.py +96 -0
  34. django_cfg/apps/payments/models/balance.py +209 -0
  35. django_cfg/apps/payments/models/base.py +30 -0
  36. django_cfg/apps/payments/models/currencies.py +138 -0
  37. django_cfg/apps/payments/models/events.py +73 -0
  38. django_cfg/apps/payments/models/payments.py +301 -0
  39. django_cfg/apps/payments/models/subscriptions.py +270 -0
  40. django_cfg/apps/payments/models/tariffs.py +102 -0
  41. django_cfg/apps/payments/serializers/__init__.py +56 -0
  42. django_cfg/apps/payments/serializers/api_keys.py +51 -0
  43. django_cfg/apps/payments/serializers/balance.py +59 -0
  44. django_cfg/apps/payments/serializers/currencies.py +55 -0
  45. django_cfg/apps/payments/serializers/payments.py +62 -0
  46. django_cfg/apps/payments/serializers/subscriptions.py +71 -0
  47. django_cfg/apps/payments/serializers/tariffs.py +56 -0
  48. django_cfg/apps/payments/services/__init__.py +65 -0
  49. django_cfg/apps/payments/services/billing/__init__.py +8 -0
  50. django_cfg/apps/payments/services/cache/__init__.py +15 -0
  51. django_cfg/apps/payments/services/cache/base.py +30 -0
  52. django_cfg/apps/payments/services/cache/simple_cache.py +135 -0
  53. django_cfg/apps/payments/services/core/__init__.py +17 -0
  54. django_cfg/apps/payments/services/core/balance_service.py +449 -0
  55. django_cfg/apps/payments/services/core/payment_service.py +393 -0
  56. django_cfg/apps/payments/services/core/subscription_service.py +616 -0
  57. django_cfg/apps/payments/services/internal_types.py +266 -0
  58. django_cfg/apps/payments/services/middleware/__init__.py +8 -0
  59. django_cfg/apps/payments/services/providers/__init__.py +19 -0
  60. django_cfg/apps/payments/services/providers/base.py +137 -0
  61. django_cfg/apps/payments/services/providers/cryptapi.py +262 -0
  62. django_cfg/apps/payments/services/providers/nowpayments.py +293 -0
  63. django_cfg/apps/payments/services/providers/registry.py +99 -0
  64. django_cfg/apps/payments/services/validators/__init__.py +8 -0
  65. django_cfg/apps/payments/signals/__init__.py +13 -0
  66. django_cfg/apps/payments/signals/api_key_signals.py +150 -0
  67. django_cfg/apps/payments/signals/payment_signals.py +127 -0
  68. django_cfg/apps/payments/signals/subscription_signals.py +196 -0
  69. django_cfg/apps/payments/urls.py +78 -0
  70. django_cfg/apps/payments/utils/__init__.py +42 -0
  71. django_cfg/apps/payments/utils/config_utils.py +243 -0
  72. django_cfg/apps/payments/utils/middleware_utils.py +228 -0
  73. django_cfg/apps/payments/utils/validation_utils.py +94 -0
  74. django_cfg/apps/payments/views/__init__.py +62 -0
  75. django_cfg/apps/payments/views/api_key_views.py +164 -0
  76. django_cfg/apps/payments/views/balance_views.py +75 -0
  77. django_cfg/apps/payments/views/currency_views.py +111 -0
  78. django_cfg/apps/payments/views/payment_views.py +111 -0
  79. django_cfg/apps/payments/views/subscription_views.py +135 -0
  80. django_cfg/apps/payments/views/tariff_views.py +131 -0
  81. django_cfg/apps/support/signals.py +16 -4
  82. django_cfg/apps/support/templates/support/chat/ticket_chat.html +1 -1
  83. django_cfg/core/config.py +6 -0
  84. django_cfg/models/revolution.py +14 -0
  85. django_cfg/modules/base.py +9 -0
  86. django_cfg/modules/django_email.py +42 -4
  87. django_cfg/modules/django_unfold/dashboard.py +20 -0
  88. {django_cfg-1.2.21.dist-info → django_cfg-1.2.23.dist-info}/METADATA +2 -1
  89. {django_cfg-1.2.21.dist-info → django_cfg-1.2.23.dist-info}/RECORD +92 -14
  90. {django_cfg-1.2.21.dist-info → django_cfg-1.2.23.dist-info}/WHEEL +0 -0
  91. {django_cfg-1.2.21.dist-info → django_cfg-1.2.23.dist-info}/entry_points.txt +0 -0
  92. {django_cfg-1.2.21.dist-info → django_cfg-1.2.23.dist-info}/licenses/LICENSE +0 -0
@@ -6,6 +6,9 @@ without requiring manual parameter passing.
6
6
  """
7
7
 
8
8
  from typing import List, Optional, Dict, Any, Union
9
+ import socket
10
+ from smtplib import SMTPException
11
+ import logging
9
12
  from django.core.mail import send_mail, EmailMultiAlternatives
10
13
  from django.template.loader import render_to_string
11
14
  from django.utils.html import strip_tags
@@ -13,6 +16,8 @@ from django.conf import settings
13
16
 
14
17
  from . import BaseCfgModule
15
18
 
19
+ logger = logging.getLogger(__name__)
20
+
16
21
 
17
22
  class DjangoEmailService(BaseCfgModule):
18
23
  """
@@ -30,6 +35,35 @@ class DjangoEmailService(BaseCfgModule):
30
35
  self.config = self.get_config()
31
36
  self.email_config = getattr(self.config, 'email', None)
32
37
 
38
+ def _handle_email_sending(self, email_func, *args, **kwargs):
39
+ """
40
+ Wrapper for email sending with proper timeout/exception handling.
41
+
42
+ Args:
43
+ email_func: Email sending function to call
44
+ *args, **kwargs: Arguments to pass to the function
45
+
46
+ Returns:
47
+ Result of email_func or 0 on timeout/error
48
+ """
49
+ try:
50
+ result = email_func(*args, **kwargs)
51
+ logger.debug(f"Email sent successfully: {email_func.__name__}")
52
+ return result
53
+ except (socket.timeout, TimeoutError) as e:
54
+ logger.warning(f"Email sending timeout: {e}")
55
+ logger.info("Consider checking SMTP server configuration or network connectivity")
56
+ return 0
57
+ except SMTPException as e:
58
+ logger.warning(f"SMTP error during email sending: {e}")
59
+ logger.info("Email service temporarily unavailable")
60
+ return 0
61
+ except Exception as e:
62
+ logger.error(f"Unexpected error during email sending: {e}")
63
+ if not kwargs.get('fail_silently', False):
64
+ raise
65
+ return 0
66
+
33
67
  def send_simple(
34
68
  self,
35
69
  subject: str,
@@ -53,7 +87,8 @@ class DjangoEmailService(BaseCfgModule):
53
87
  """
54
88
  from_email = self._get_formatted_from_email(from_email)
55
89
 
56
- return send_mail(
90
+ return self._handle_email_sending(
91
+ send_mail,
57
92
  subject=subject,
58
93
  message=message,
59
94
  from_email=from_email,
@@ -89,7 +124,8 @@ class DjangoEmailService(BaseCfgModule):
89
124
  if text_message is None:
90
125
  text_message = strip_tags(html_message)
91
126
 
92
- return send_mail(
127
+ return self._handle_email_sending(
128
+ send_mail,
93
129
  subject=subject,
94
130
  message=text_message,
95
131
  from_email=from_email,
@@ -174,7 +210,7 @@ class DjangoEmailService(BaseCfgModule):
174
210
  if not html_content and not text_content:
175
211
  raise ValueError("Either html_content or text_content must be provided")
176
212
 
177
- try:
213
+ def _send_multipart_email():
178
214
  email = EmailMultiAlternatives(
179
215
  subject=subject,
180
216
  body=text_content or strip_tags(html_content or ''),
@@ -191,7 +227,9 @@ class DjangoEmailService(BaseCfgModule):
191
227
 
192
228
  email.send(fail_silently=fail_silently)
193
229
  return True
194
-
230
+
231
+ try:
232
+ return self._handle_email_sending(_send_multipart_email) or False
195
233
  except Exception as e:
196
234
  if not fail_silently:
197
235
  raise e
@@ -163,8 +163,28 @@ class DashboardManager(BaseCfgModule):
163
163
  ]
164
164
  ))
165
165
 
166
+ # Add Payments section if enabled
167
+ if self.is_payments_enabled():
168
+ navigation_sections.append(NavigationSection(
169
+ title="Payments",
170
+ separator=True,
171
+ collapsible=True,
172
+ items=[
173
+ NavigationItem(title="Payments", icon=Icons.ACCOUNT_BALANCE, link="/admin/django_cfg_payments/universalpayment/"),
174
+ NavigationItem(title="Subscriptions", icon=Icons.PERSON_ADD, link="/admin/django_cfg_payments/subscription/"),
175
+ NavigationItem(title="API Keys", icon=Icons.KEY, link="/admin/django_cfg_payments/apikey/"),
176
+ NavigationItem(title="Balances", icon=Icons.ACCOUNT_BALANCE_WALLET, link="/admin/django_cfg_payments/userbalance/"),
177
+ NavigationItem(title="Transactions", icon=Icons.DESCRIPTION, link="/admin/django_cfg_payments/transaction/"),
178
+ NavigationItem(title="Currencies", icon=Icons.ACCOUNT_CIRCLE, link="/admin/django_cfg_payments/currency/"),
179
+ NavigationItem(title="Currency Networks", icon=Icons.LINK, link="/admin/django_cfg_payments/currencynetwork/"),
180
+ NavigationItem(title="Endpoint Groups", icon=Icons.GROUP, link="/admin/django_cfg_payments/endpointgroup/"),
181
+ NavigationItem(title="Tariffs", icon=Icons.SETTINGS, link="/admin/django_cfg_payments/tariff/"),
182
+ ]
183
+ ))
184
+
166
185
  # Convert all NavigationSection objects to dictionaries
167
186
  return [section.to_dict() for section in navigation_sections]
187
+
168
188
 
169
189
 
170
190
  def get_unfold_config(self) -> Dict[str, Any]:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-cfg
3
- Version: 1.2.21
3
+ Version: 1.2.23
4
4
  Summary: 🚀 Next-gen Django configuration: type-safety, AI features, blazing-fast setup, and automated best practices — all in one.
5
5
  Project-URL: Homepage, https://djangocfg.com
6
6
  Project-URL: Documentation, https://docs.djangocfg.com
@@ -146,6 +146,7 @@ Description-Content-Type: text/markdown
146
146
 
147
147
  # 🚀 Django-CFG: Enterprise Django Configuration Framework
148
148
 
149
+
149
150
  [![Python Version](https://img.shields.io/pypi/pyversions/django-cfg.svg?style=flat-square&logo=python&logoColor=white)](https://pypi.org/project/django-cfg/)
150
151
  [![Django Version](https://img.shields.io/pypi/djversions/django-cfg.svg?style=flat-square&logo=django&logoColor=white)](https://pypi.org/project/django-cfg/)
151
152
  [![PyPI Version](https://img.shields.io/pypi/v/django-cfg.svg?style=flat-square&logo=pypi&logoColor=white)](https://pypi.org/project/django-cfg/)
@@ -1,5 +1,5 @@
1
1
  django_cfg/README.md,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- django_cfg/__init__.py,sha256=hdpxqrMF75kn_Gpzz8jqS11Cb75Q3GoMd01Q6Mg6MyU,1631
2
+ django_cfg/__init__.py,sha256=UAyyUuLL3rXe_tPmnLDBZA3gajkyvd4DvOdkV8sJKko,1631
3
3
  django_cfg/apps.py,sha256=k84brkeXJI7EgKZLEpTkM9YFZofKI4PzhFOn1cl9Msc,1656
4
4
  django_cfg/config.py,sha256=ME-JKaVzcdmaGhuc1YTkEWoMKSaUasNf1SBlNz-NfrM,1399
5
5
  django_cfg/urls.py,sha256=bpRFjMonQuk4UCUMxx4ueBX3YDNB7HXKFwEghQ3KR3o,793
@@ -246,7 +246,7 @@ django_cfg/apps/newsletter/admin_filters.py,sha256=lPMtHULDOisTsN9_2BMoGu23ICkFE
246
246
  django_cfg/apps/newsletter/apps.py,sha256=TXrULqE2HbmEIHaLomw7z9bkC19le1rKwlUWhK1xrVo,566
247
247
  django_cfg/apps/newsletter/models.py,sha256=tc5IEUJZUAdYbQOhT_XvfiGL86FIb5LvPAuq7TOPrAM,8930
248
248
  django_cfg/apps/newsletter/serializers.py,sha256=Nse8ZmBDNdhzfgZu53LNp_JOR327rI1fSHpgdJtCoV8,4133
249
- django_cfg/apps/newsletter/signals.py,sha256=0wkOxEXnwBnLA1B72sZ_nb_x2ycsvQSQ3jvMwYi92zk,2974
249
+ django_cfg/apps/newsletter/signals.py,sha256=kbjSvnMIy4kwmE_r02YFMneCrHy0oRuc_spjki976dM,3003
250
250
  django_cfg/apps/newsletter/urls.py,sha256=Zfbgj0NZ06dMu503JOn4GGgmKpQ3tOjTIyUmEslaJdE,1609
251
251
  django_cfg/apps/newsletter/admin/__init__.py,sha256=dXCym_3qp9HxT0sUV_LBGgEkKv1k_Mj3a0TTZYnH2yI,290
252
252
  django_cfg/apps/newsletter/admin/filters.py,sha256=lPMtHULDOisTsN9_2BMoGu23ICkFEJDZst5Fhj5Sv5c,3675
@@ -267,13 +267,91 @@ django_cfg/apps/newsletter/views/emails.py,sha256=w-W_egdfFbsbgfW8WjqT0DBJl596lJ
267
267
  django_cfg/apps/newsletter/views/newsletters.py,sha256=gb8skjDYxHd8R2DAVUhSe6z4lnKDCS_e9zbyyHok4CI,1370
268
268
  django_cfg/apps/newsletter/views/subscriptions.py,sha256=marHLbRT6a6e8tMjKVtKG_0K6G_gcjKCU9LmMGihKwg,4774
269
269
  django_cfg/apps/newsletter/views/tracking.py,sha256=EJlAltpASzc_0nslVPJt-6mnIqI_QCEmz3MQEGPKzmU,2481
270
+ django_cfg/apps/payments/__init__.py,sha256=Qb8viLJBKCclV9uuoXjxWXeDevXlbdJ76mV8g5hK7tk,237
271
+ django_cfg/apps/payments/apps.py,sha256=FZgbLQFMeOJPs_892bM6X-3Edt3YPD2CP50HMekH7Sk,551
272
+ django_cfg/apps/payments/decorators.py,sha256=A8MsH7hzw8i7Cl3Eh5Lcqd9Dbn_nubbb6BAI3eZMEgk,10960
273
+ django_cfg/apps/payments/urls.py,sha256=8Tr5Sr3FcTgUB4PRYYlb8MOkugAPgKT46Jd0uVyNruk,3473
274
+ django_cfg/apps/payments/admin/__init__.py,sha256=BUTbE4RfbqX3EBF-9oscrh7wQ2tuwCqofGYqlCz4QM4,666
275
+ django_cfg/apps/payments/admin/api_keys_admin.py,sha256=nMghMkKcDYvjZ4POVwpS59E6Dc7IVP9dHv-1OltpEes,11436
276
+ django_cfg/apps/payments/admin/balance_admin.py,sha256=Dwap1VZGwNJ4ZbELMDbiVIxQPmI80MWnsTudyZOvsxo,15386
277
+ django_cfg/apps/payments/admin/currencies_admin.py,sha256=mMcttxDJlbQNJBhbrUhjJJYY2n9uHg1-7Hn8DCH9pVU,5810
278
+ django_cfg/apps/payments/admin/filters.py,sha256=MCYFqs1t3XL0U4WZv4ONUbwqv0vLOo7sN7eDuSaVFd0,8504
279
+ django_cfg/apps/payments/admin/payments_admin.py,sha256=fYKiTgEn1mHNZ2bEamTdf0alyZXYi_GgzjuFB81Ib98,4356
280
+ django_cfg/apps/payments/admin/subscriptions_admin.py,sha256=mJRSyDd761f0LA64AnG19dzTUmiivqq9wZg4roqKYIo,6913
281
+ django_cfg/apps/payments/admin/tariffs_admin.py,sha256=6UiQyRRIKrDdmpi2IZOpDpLeJLHrebOGNc3OizlikLI,6422
282
+ django_cfg/apps/payments/config/__init__.py,sha256=eEfe8z-RKGLmNQaxXdngcUAVnlbq3VKzo9qKMZwh45A,1873
283
+ django_cfg/apps/payments/config/module.py,sha256=jm8CFJoFoYhUrd1tt7j0uZgFA7oMOTbLQM21UVZNpQw,6547
284
+ django_cfg/apps/payments/config/providers.py,sha256=NuLCdgKbQyMkyWvKKLsmMO4hwkjqT1ddIynsTBoAWAk,3845
285
+ django_cfg/apps/payments/config/settings.py,sha256=S0V_DH4EzU21wAGgyodSLGKcSGs3s14GcHAihFgdGMg,6569
286
+ django_cfg/apps/payments/config/utils.py,sha256=H-4IdmlbpYAknaGWVvuivT_5lyvWY8q2C50Wb8qnkD8,6549
287
+ django_cfg/apps/payments/managers/__init__.py,sha256=uYiETCw-K5GXQyAwpcOa2Qxzof8sbtTNc_SghyW45YU,672
288
+ django_cfg/apps/payments/managers/api_key_manager.py,sha256=xhViRKCLC_eR68hankMZQTcbzMgiRJdyr8KYKk01_dQ,928
289
+ django_cfg/apps/payments/managers/balance_manager.py,sha256=Sm_EETlHO7LtlrWIqF65vFPS4FpPSNYo5oTgQwTFAZ4,13279
290
+ django_cfg/apps/payments/managers/currency_manager.py,sha256=-iq_Nhd3cj_n1aUzObBIMhRRHtpOv50Z0phdwOcKv6w,876
291
+ django_cfg/apps/payments/managers/payment_manager.py,sha256=udiTFIIVXsjqmlwzFwcT0ZTkYJZ9HVOSLLFTvAodY3w,1467
292
+ django_cfg/apps/payments/managers/subscription_manager.py,sha256=LHrw5INc1nSqfpw76bn7W2poEA-29FXfF5uhaxmq7l8,968
293
+ django_cfg/apps/payments/managers/tariff_manager.py,sha256=Kor_0ApvROcH0UKlp1-9rYChtHWDeOFgUc1GG3IepxY,799
294
+ django_cfg/apps/payments/middleware/__init__.py,sha256=ryn3emWBq15-kE8eJxX19gd-eTrk7JlpXqV2Cg8N_Wg,294
295
+ django_cfg/apps/payments/middleware/api_access.py,sha256=JcAg0ntqjR_r1LTUmJ9DTp1F8Uv62_Hza5mo9Rn6hDw,9406
296
+ django_cfg/apps/payments/middleware/rate_limiting.py,sha256=MhpHQkTjoHdH-tsJNlZATQQ9d9R9PDTwrdw1gUt_ydo,7407
297
+ django_cfg/apps/payments/middleware/usage_tracking.py,sha256=i8KT5E0dN6zhQwY8A-wFWtpkc9FJpfTQ4qTnRV8onmw,11176
298
+ django_cfg/apps/payments/migrations/0001_initial.py,sha256=uLAGM9KXBHLuLt4NN9yY8qcelxZ0gxUQYwv2zfp9nus,40538
299
+ django_cfg/apps/payments/migrations/__init__.py,sha256=OHlzxEGDJYKZz82orZXnh77xy-Okv6FcG3EKMfg9LzU,21
300
+ django_cfg/apps/payments/models/__init__.py,sha256=iYRu56c8oZCG5n52aWJqsKEKX44k0_2BiSFkN8jZ46U,1444
301
+ django_cfg/apps/payments/models/api_keys.py,sha256=HCtZuvpW7cYRpsSXkS3U3lk_smMQpgLRf7PHaM58MkQ,2484
302
+ django_cfg/apps/payments/models/balance.py,sha256=F7unVOEVZMUGNvPkvGTWsytxfvQKdV8eQSnEBPZkuDc,7052
303
+ django_cfg/apps/payments/models/base.py,sha256=iypC2MCPrASunrJepuY0y7fASVLDMDSqOwAWp-ovTDk,793
304
+ django_cfg/apps/payments/models/currencies.py,sha256=lz6axNRmfoQa3od-EV78vbZQv3vh2FznxHzGBi20qIU,4106
305
+ django_cfg/apps/payments/models/events.py,sha256=flKdY3SRAx5UZyHw6wLh5TflHTyy2lQpdi5aa1NqJ1o,2372
306
+ django_cfg/apps/payments/models/payments.py,sha256=z_dgYWZBd09wBn5ZEp0jf-3osjJASb4UlWgdELL-f1g,9548
307
+ django_cfg/apps/payments/models/subscriptions.py,sha256=femsIzWxSZZdu1Ee_MgCYnnpMnXshejwb1_JPhbo8k8,8193
308
+ django_cfg/apps/payments/models/tariffs.py,sha256=nqM3RPtu4itAHRvT6jAgZgQEdEIN1KgKnEljkaHGFDc,2749
309
+ django_cfg/apps/payments/serializers/__init__.py,sha256=4l7Tu1NXztXtqceVbC3OxtWJir4n3_dFpVEgRgQ9J4k,1416
310
+ django_cfg/apps/payments/serializers/api_keys.py,sha256=5qG3PEwIVfoNSC6XpbOBbC3l4umgld3kPJC5l_vsYV0,1396
311
+ django_cfg/apps/payments/serializers/balance.py,sha256=QzR1MTRQ_4uTJBRefRB6X-z-0QOkOuHmCyNTojYj_8w,2025
312
+ django_cfg/apps/payments/serializers/currencies.py,sha256=SskSl3rjZBxxLnY_zsaJiFCGfbkz9WyWFHLHiJbbTIM,1821
313
+ django_cfg/apps/payments/serializers/payments.py,sha256=BDhcD9DCea50Cz1PumLNVntgH40dOR55NzCXv4I0YOQ,2258
314
+ django_cfg/apps/payments/serializers/subscriptions.py,sha256=16OileC0yxM90ERK3Uo5Jqe9DeyNf3tBwK-ZqDtEbPw,2795
315
+ django_cfg/apps/payments/serializers/tariffs.py,sha256=54N5tFpc5NBIMyXuN7Re6pDNoQLJc2yZBIb5uVRhn-I,1698
316
+ django_cfg/apps/payments/services/__init__.py,sha256=rBXpwd9kR-zcrjDoBPivUjWpw3vPgAVNUGmpATX1T7Y,1786
317
+ django_cfg/apps/payments/services/internal_types.py,sha256=RgKpbGDIGhtFA4fQGwfI3OCiwaC2mOC8bEJP5ecZjdg,7862
318
+ django_cfg/apps/payments/services/billing/__init__.py,sha256=YHdL1RWo-VAotOdZaykArOd0NTGI0fuQ0B7nBRKn6Lg,149
319
+ django_cfg/apps/payments/services/cache/__init__.py,sha256=CA8cUptfUD5LwbAB9kPMDofdkJBD_o7Z3HHG4vXMoyA,318
320
+ django_cfg/apps/payments/services/cache/base.py,sha256=McWSpr6eNEXbhG2PBkQd_YkL-he-scoWNUVmKI4FohY,696
321
+ django_cfg/apps/payments/services/cache/simple_cache.py,sha256=N2i0yGOR5Y1SPl2hqsXcGyehCpwXdN9SQVrphO1yat0,4508
322
+ django_cfg/apps/payments/services/core/__init__.py,sha256=I7x8Ryz4htQ1LwwtWZRK-MeI_SYboCQ7cKtTxmoqfpk,382
323
+ django_cfg/apps/payments/services/core/balance_service.py,sha256=E1r620C25CzcNdkV8INBR8FbEtl02sPSboYtzLZMU9I,16400
324
+ django_cfg/apps/payments/services/core/payment_service.py,sha256=CaMGobTU7t7o-i0D_TbfPH15XJ1eilbOFJuBWzAM64g,14634
325
+ django_cfg/apps/payments/services/core/subscription_service.py,sha256=ORUHYaz9BQXKwyeRSuLSaKp20UDtRxAkl9PmdRwqxt8,22559
326
+ django_cfg/apps/payments/services/middleware/__init__.py,sha256=SAiK2KW4aFVdfjlNrV3Bv8F0qg_epqwbZXOV0WoS6yA,154
327
+ django_cfg/apps/payments/services/providers/__init__.py,sha256=A0R28JDaB-sI--wTJ-WegbpKXpVmDizTVTKqOYWvSPM,444
328
+ django_cfg/apps/payments/services/providers/base.py,sha256=kjWPb7EutZHaByDW3py8srAcnvZdE4oqj6Tp9xS9ADk,3807
329
+ django_cfg/apps/payments/services/providers/cryptapi.py,sha256=BrAhUHfoQJgmHpUq9I3hWloMLBzyRCqwNG6pMfs5Qlg,10149
330
+ django_cfg/apps/payments/services/providers/nowpayments.py,sha256=xsylxVaN5L5tYfv1j_OJzX_PSEBEq9pmBeRFG80rcCA,11490
331
+ django_cfg/apps/payments/services/providers/registry.py,sha256=uS0C9JutkDlhYjlSs_EiK7Qj3gJCEXFt-dgZNqwVVkw,3687
332
+ django_cfg/apps/payments/services/validators/__init__.py,sha256=_NgbT79oslNvBPPYRpSFnPkvnZuQ48Kk1dzSZIE2ZAU,140
333
+ django_cfg/apps/payments/signals/__init__.py,sha256=L3danrGQ-9tEfaAbkXOILPb2Bw_T4XRN4PodjMl1hvk,342
334
+ django_cfg/apps/payments/signals/api_key_signals.py,sha256=1Sj334_o9vTChrUjiH9KSM789T89S4xHywAncGmT4dE,5601
335
+ django_cfg/apps/payments/signals/payment_signals.py,sha256=XbfW0KLYuqEAl8O8PEkcD8dHxgeLPP6YGUFV5vrNvzQ,4823
336
+ django_cfg/apps/payments/signals/subscription_signals.py,sha256=FDXlR02fpS6ILzMJQjoK4Ln1v7Kb8vp_Ej9v_lqnVE0,7492
337
+ django_cfg/apps/payments/utils/__init__.py,sha256=uE3H5xO0cxMyxfM39qwmLWIL0QVzArCy0Ecr-poeL-U,1063
338
+ django_cfg/apps/payments/utils/config_utils.py,sha256=NvH8thOnlBK5jhgCFzPw6kbYOWIVhiE-YRfWv_U1SQk,8477
339
+ django_cfg/apps/payments/utils/middleware_utils.py,sha256=MTS9MY_8-VqpBVv8uQYH89rfeG8dTnUru38vVbbE-1o,6682
340
+ django_cfg/apps/payments/utils/validation_utils.py,sha256=xSxpjz5aAajSOIxDhaXHdB-Uf98MOi3uDKVx0jHmREo,2704
341
+ django_cfg/apps/payments/views/__init__.py,sha256=00HRO1sDErjnFq2dedFAjBIyIhZZyZmv4DK98lHmx2Q,1613
342
+ django_cfg/apps/payments/views/api_key_views.py,sha256=fG68roqOF9FShde68Qp_CBf0KJuf1chwK41RU0VqUJk,5542
343
+ django_cfg/apps/payments/views/balance_views.py,sha256=rA_OJFizP_UBBr8OdWLQZQ51qlPFYoeJCYUzNXSw4S0,2509
344
+ django_cfg/apps/payments/views/currency_views.py,sha256=B1rjOKDV3KEYRQI6NuPEyEGF8VNumaraoZdI8Qqdu6s,4096
345
+ django_cfg/apps/payments/views/payment_views.py,sha256=zfdHiHJhGby6KHpTe5S9UVeC-pFrJD-RTMhHhkSCl5s,4122
346
+ django_cfg/apps/payments/views/subscription_views.py,sha256=WqBDsaPUQGP6ZCmbheIdRupy-qESPpdj8IgKkaLp3V8,5005
347
+ django_cfg/apps/payments/views/tariff_views.py,sha256=i0uOg6SBk_1sct2M2iwKMw-5YHMr5mhVvm_ljpFRwPQ,4907
270
348
  django_cfg/apps/support/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
271
349
  django_cfg/apps/support/admin.py,sha256=-fcegtqoCcwPiBXwyNLMftcYCTTbTRRBpWItyeNNkDY,8827
272
350
  django_cfg/apps/support/admin_filters.py,sha256=ZpKtetRxppRAMwIr-pwDbXAyh7qouDfTCEZoo1YJfFs,2179
273
351
  django_cfg/apps/support/apps.py,sha256=t-MzsKjXx6ZXACkG72Wa8GSmRYOERxfhrZUwUwjqCak,304
274
352
  django_cfg/apps/support/models.py,sha256=a_m4CWpfR7A2KlVRUYOGPdpNyNPJflD3Mq7EkiwzICA,2465
275
353
  django_cfg/apps/support/serializers.py,sha256=N-PP8d1H00mHSWT6x5DwDYrJoR3PS3AKrUW80L4lncs,1385
276
- django_cfg/apps/support/signals.py,sha256=z465Nr7xin7S82YA7v-E5bNlimpv3ewN7kLoJzlGxtQ,2816
354
+ django_cfg/apps/support/signals.py,sha256=W7lA3o1eoAwZQd92fX0GaiIXp9ptQRYtwn1Siz1FV9g,3706
277
355
  django_cfg/apps/support/urls.py,sha256=t3r4wGRUqQS-BDCQgSXwSF9pbucyvr7lo7_pJ1uZ52Q,899
278
356
  django_cfg/apps/support/admin/__init__.py,sha256=vVoUWfKj6qBHhwr6zG2ZH8ZpUegYNJvzuAxdFoHEo_0,153
279
357
  django_cfg/apps/support/admin/filters.py,sha256=ZpKtetRxppRAMwIr-pwDbXAyh7qouDfTCEZoo1YJfFs,2179
@@ -285,7 +363,7 @@ django_cfg/apps/support/migrations/0001_initial.py,sha256=AUUXqMiRbv_bRhogBWKWdr
285
363
  django_cfg/apps/support/migrations/0002_alter_message_ticket.py,sha256=MxdjTW7hJ1B0yQloKR3sVOgujOzSA6eZp5YCmCuXht0,571
286
364
  django_cfg/apps/support/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
287
365
  django_cfg/apps/support/templates/support/chat/access_denied.html,sha256=QdVXR-61aUHmh9Vlag_zXGcS_BG7a807LesIbduqnag,1094
288
- django_cfg/apps/support/templates/support/chat/ticket_chat.html,sha256=b2UvCQp122-CRl567J_sLCvcp_zZi21VG4DOy7dmjM8,14471
366
+ django_cfg/apps/support/templates/support/chat/ticket_chat.html,sha256=Xz5Z0ADP9aZpiE_cJdcRP9UJpJhY32h1h1sLfI94zgU,14483
289
367
  django_cfg/apps/support/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
290
368
  django_cfg/apps/support/utils/support_email_service.py,sha256=0l4dXqAG6oN2UR7W3JzuRhlomaWa41IT7ceVcanluKs,5570
291
369
  django_cfg/apps/support/views/__init__.py,sha256=E-Iqiy888SncfBTiSyXyGCjaNrMa5Klvapzb3ItYPXc,448
@@ -324,7 +402,7 @@ django_cfg/cli/commands/__init__.py,sha256=EKLXDAx-QttnGmdjsmVANAfhxWplxl2V_2I0S
324
402
  django_cfg/cli/commands/create_project.py,sha256=iuf965j8Yg7zxHcPb0GtFHEj73CYXC45ZJRmd6RbA9E,21025
325
403
  django_cfg/cli/commands/info.py,sha256=o4S1xPJSHv2oEVqmH0X9RTF5f-8Wy9579yHkyd_PC3E,4923
326
404
  django_cfg/core/__init__.py,sha256=eVK57qFOok9kTeHoNEMQ1BplkUOaQ7NB9kP9eQK1vg0,358
327
- django_cfg/core/config.py,sha256=M7rH99nDErty-dT_oHezZOT6HOX8hokjJOubGGKHYZc,28132
405
+ django_cfg/core/config.py,sha256=TS78BFOtzaErZMdEQgZvY2cnMq5PGaC74rOR8dttRuY,28404
328
406
  django_cfg/core/environment.py,sha256=MAoEPqIPsLVhSANT2Bz4nnus2wmbMW0RCOQxhQfDrDc,9106
329
407
  django_cfg/core/exceptions.py,sha256=RTQEoU3PfR8lqqNNv5ayd_HY2yJLs3eioqUy8VM6AG4,10378
330
408
  django_cfg/core/generation.py,sha256=Oa9bnEPsxwEaa0RP71zNl_z2p9NNljHnoCTeRu72X-0,25421
@@ -373,13 +451,13 @@ django_cfg/models/jwt.py,sha256=3R_dpLmVZIcH4zdtwA4qKnuCB8RZQACrgsbbgWY2q4c,9025
373
451
  django_cfg/models/limits.py,sha256=nUfvyPykwKR38ZOlIFqlNGRmfV8RO5hiUrhDH6FCHJw,7449
374
452
  django_cfg/models/logging.py,sha256=4vZF-G9rPmXMxxtUx_ad7Esvgbe8a_5Dl692Yg0fL4A,10636
375
453
  django_cfg/models/ngrok.py,sha256=MVgcKWx0DRSW0QcwhiSx2vVwTSG49vbVrzPkZqDK-zw,3575
376
- django_cfg/models/revolution.py,sha256=n8CLLniMac9PTV5KDcfoO-_8F6U40jLT3DU8-kIIZ4I,7543
454
+ django_cfg/models/revolution.py,sha256=16fQ09iovrmlepNcTr2J0hZ-ShdMnMSQ2rTXa60yrus,8134
377
455
  django_cfg/models/security.py,sha256=Xv19ZVOIenB_-f0wB6fm-Ap4j9kA43bSFaT2XenpSqc,4685
378
456
  django_cfg/models/services.py,sha256=fj9JjrJFrlL4DMnMbx_D8JiiZpz4E5uBqmhquAxau7c,13159
379
457
  django_cfg/models/tasks.py,sha256=2T3apcUFf8zevYJmapbFrh6bWv5PTJPeXR6Bc5vlj4c,15524
380
458
  django_cfg/modules/__init__.py,sha256=Ip9WMpzImEwIAywpFwU056_v0O9oIGG7nCT1YSArxkw,316
381
- django_cfg/modules/base.py,sha256=A-pWUckGKrCAlgfnCfkKmjwtgZjyhc_z-hvJ4ogocpI,5474
382
- django_cfg/modules/django_email.py,sha256=2XXlIKzD6Jao3CT4_zIE2eaM9Cc9ROA1tjp2bJ9z5Lo,16592
459
+ django_cfg/modules/base.py,sha256=ZFXqGPpZGvsVYp9Cc1aCpvMzGrEE9V2z9g50so2P5Nk,5736
460
+ django_cfg/modules/django_email.py,sha256=Kk2B1Y73xlbpNKCDkU2uBT01iVANjKpmVlKbRScVCs4,18059
383
461
  django_cfg/modules/django_health.py,sha256=7QzuQ6WyjWYj6lecd4auwRvEyrMUL7N6hiAp-tLyoY4,8923
384
462
  django_cfg/modules/django_logger.py,sha256=3oP9jev0lOcFUJ1tYcpbFnK524zIGA2xIOrrAiTwpb8,6331
385
463
  django_cfg/modules/django_ngrok.py,sha256=LjlAIJprbFhFYwDG93acas8XaB6iFQGu4fWvZiDNhyQ,10482
@@ -420,7 +498,7 @@ django_cfg/modules/django_twilio/templates/guide.md,sha256=nZfwx-sgWyK5NApm93zOe
420
498
  django_cfg/modules/django_twilio/templates/sendgrid_otp_email.html,sha256=sXR6_D9hmOFfk9CrfPizpLddVhkRirBWpZd_ioEsxVk,6671
421
499
  django_cfg/modules/django_twilio/templates/sendgrid_test_data.json,sha256=fh1VyuSiDELHsS_CIz9gp7tlsMAEjaDOoqbAPSZ3yyo,339
422
500
  django_cfg/modules/django_unfold/__init__.py,sha256=Z91x1iGmkzlRbEb2L9OCFmYDKNAV9C4G3i15j5S0esc,1898
423
- django_cfg/modules/django_unfold/dashboard.py,sha256=DHQruZRtSLD786v2R3le4mmw_5YG5rI32ZL4qjBoAkQ,13426
501
+ django_cfg/modules/django_unfold/dashboard.py,sha256=UITRlmqAGpptKGFMdTwh9rcIZqKyu9V1TkyKkGNHlKo,14892
424
502
  django_cfg/modules/django_unfold/models.py,sha256=bY6QSSaH_-r9vOTkSQjxeIkl5RaED7XkxXkT8-W5stk,4014
425
503
  django_cfg/modules/django_unfold/system_monitor.py,sha256=cznZqldRJqiSLSJbs4U7R2rX8ClzoIpqdfXdXqI2iQw,6955
426
504
  django_cfg/modules/django_unfold/tailwind.py,sha256=X9o1K3QL0VwUISgJ26sLb6zkdK-00qiDuekqTw-fydc,10846
@@ -503,8 +581,8 @@ django_cfg/utils/path_resolution.py,sha256=C9As6p4Q9l3VeoVkFDRPQWGrzAWf8O8UxLVka
503
581
  django_cfg/utils/smart_defaults.py,sha256=MxbUZwn_xbh48li7uLI6W4D9WCD2P2WO48dv85Fra5E,23057
504
582
  django_cfg/utils/toolkit.py,sha256=Td8_iXNaftonF_xdZP4Y3uO65nuA_4_zditn5Q_Pfcw,23310
505
583
  django_cfg/utils/version_check.py,sha256=jI4v3YMdQriUEeb_TvRl511sDghy6I75iKRDUaNpucs,4800
506
- django_cfg-1.2.21.dist-info/METADATA,sha256=eiujuJP0fSTNmByZnWkfR6nOvjzB2mPxZ-3BPtZNbjc,38434
507
- django_cfg-1.2.21.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
508
- django_cfg-1.2.21.dist-info/entry_points.txt,sha256=Ucmde4Z2wEzgb4AggxxZ0zaYDb9HpyE5blM3uJ0_VNg,56
509
- django_cfg-1.2.21.dist-info/licenses/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
510
- django_cfg-1.2.21.dist-info/RECORD,,
584
+ django_cfg-1.2.23.dist-info/METADATA,sha256=2qgEiOin5w8jT2vBv1cxqAPjKWYo0W3D3OEaXTCfqg0,38435
585
+ django_cfg-1.2.23.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
586
+ django_cfg-1.2.23.dist-info/entry_points.txt,sha256=Ucmde4Z2wEzgb4AggxxZ0zaYDb9HpyE5blM3uJ0_VNg,56
587
+ django_cfg-1.2.23.dist-info/licenses/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
588
+ django_cfg-1.2.23.dist-info/RECORD,,