django-chelseru 1.0.1__tar.gz → 1.0.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.
Files changed (34) hide show
  1. django_chelseru-1.0.2/MANIFEST.in +1 -0
  2. django_chelseru-1.0.2/PKG-INFO +95 -0
  3. django_chelseru-1.0.2/README.md +56 -0
  4. django_chelseru-1.0.2/README_PA.md +56 -0
  5. django_chelseru-1.0.2/django_chelseru.egg-info/PKG-INFO +95 -0
  6. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/django_chelseru.egg-info/SOURCES.txt +1 -0
  7. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/drfchelseru/services.py +2 -2
  8. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/drfchelseru/settings.py +33 -20
  9. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/setup.py +3 -3
  10. django_chelseru-1.0.1/MANIFEST.in +0 -1
  11. django_chelseru-1.0.1/PKG-INFO +0 -58
  12. django_chelseru-1.0.1/README.md +0 -19
  13. django_chelseru-1.0.1/django_chelseru.egg-info/PKG-INFO +0 -58
  14. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/LICENSE +0 -0
  15. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/django_chelseru.egg-info/dependency_links.txt +0 -0
  16. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/django_chelseru.egg-info/requires.txt +0 -0
  17. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/django_chelseru.egg-info/top_level.txt +0 -0
  18. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/drfchelseru/__init__.py +0 -0
  19. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/drfchelseru/admin.py +0 -0
  20. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/drfchelseru/apps.py +0 -0
  21. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/drfchelseru/middlewares.py +0 -0
  22. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/drfchelseru/migrations/0001_initial.py +0 -0
  23. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/drfchelseru/migrations/0002_otpcode_session_user.py +0 -0
  24. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/drfchelseru/migrations/0003_rename_mobile_otpcode_mobile_number.py +0 -0
  25. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/drfchelseru/migrations/__init__.py +0 -0
  26. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/drfchelseru/models.py +0 -0
  27. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/drfchelseru/serializers.py +0 -0
  28. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/drfchelseru/signals.py +0 -0
  29. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/drfchelseru/tests.py +0 -0
  30. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/drfchelseru/urls.py +0 -0
  31. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/drfchelseru/validators.py +0 -0
  32. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/drfchelseru/views.py +0 -0
  33. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/pyproject.toml +0 -0
  34. {django_chelseru-1.0.1 → django_chelseru-1.0.2}/setup.cfg +0 -0
@@ -0,0 +1 @@
1
+ include README_PA.md
@@ -0,0 +1,95 @@
1
+ Metadata-Version: 2.4
2
+ Name: django-chelseru
3
+ Version: 1.0.2
4
+ Summary: Authentication system, online and real-time chat, SMS system for Iranian SMS services.
5
+ Home-page: https://pipdjango.chelseru.com
6
+ Author: Sobhan Bahman|Rashnu
7
+ Author-email: bahmanrashnu@gmail.com
8
+ Project-URL: Documentation, https://github.com/Chelseru/django-chelseru-lour/
9
+ Project-URL: Telegram Group, https://t.me/bahmanpy
10
+ Project-URL: Telegram Channel, https://t.me/ChelseruCom
11
+ Keywords: djangochelseruchat djangochat drfchat online-chat online real-time chat iran chelseru lor lur bahman rashnu lour sms djangoauth auth ywt otpauth otp authentication djangootp djangoiransms iransms djangosms djangokavenegar djangomelipayamak sobhan چت سبحان بهمن رشنو چلسرو جنگو پایتون لر لور آنلاین ریل تایم
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Framework :: Django
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: OS Independent
16
+ Requires-Python: >=3.11
17
+ Description-Content-Type: text/markdown
18
+ License-File: LICENSE
19
+ Requires-Dist: Django>=5.1.6
20
+ Requires-Dist: djangorestframework==3.15.2
21
+ Requires-Dist: djangorestframework_simplejwt==5.5.0
22
+ Requires-Dist: channels==4.2.2
23
+ Requires-Dist: channels_redis==4.2.1
24
+ Requires-Dist: daphne==4.1.2
25
+ Requires-Dist: zeep==4.3.1
26
+ Requires-Dist: user-agents==2.2.0
27
+ Dynamic: author
28
+ Dynamic: author-email
29
+ Dynamic: classifier
30
+ Dynamic: description
31
+ Dynamic: description-content-type
32
+ Dynamic: home-page
33
+ Dynamic: keywords
34
+ Dynamic: license-file
35
+ Dynamic: project-url
36
+ Dynamic: requires-dist
37
+ Dynamic: requires-python
38
+ Dynamic: summary
39
+
40
+ django-chelseruیک بسته جنگویی برای گپ‌زنی همزمان، راستی‌آزمایی پیامکی و فرستادن پیامک با یاری‌دهنده‌های ایرانی.نویسندهSobhan Bahman Rashnu🚀 ویژگی‌ها📱 راستی‌آزمایی پیامکی (رمز یک‌بارمصرف): راستی‌آزمایی امن کاربران با یاری‌گیری از رمزهای یک‌بارمصرف که از راه پیامک فرستاده می‌شوند.💬 گپ‌زنی همزمان: کارکرد پیام‌رسانی همزمان بر پایه WebSocket.✉️ سامانه‌های پیامکی: فرستادن پیامک از راه یاری‌دهنده‌های نامور پیامکی ایرانی.⚙️ نصببسته را با یاری‌گیری از pip نصب کنید:pip install django-chelseru
41
+ 'drfchelseru' را به INSTALLED_APPS در پرونده settings.py خود بیفزایید:INSTALLED_APPS = [
42
+ ...
43
+ 'channels',
44
+ 'rest_framework',
45
+ 'rest_framework_simplejwt',
46
+ 'drfchelseru',
47
+ ...
48
+ ]
49
+ 🛠️ پیکربندیبرای پیکربندی بسته، واژه‌نامه DJANGO_CHELSERU را به پرونده settings.py خود بیفزایید. این واژه‌نامه به شما پروانه می‌دهد تا چیدمان‌های راستی‌آزمایی و پیامک را خودساخته نمایید.# settings.py
50
+
51
+ DJANGO_CHELSERU = {
52
+ 'AUTH': {
53
+ 'AUTH_METHOD' : 'OTP', # روش‌های پشتیبانی شده: OTP, PASSWD
54
+ 'AUTH_SERVICE' : 'rest_framework_simplejwt', # سرویس‌های پشتیبانی شده: rest_framework_simplejwt
55
+ 'OPTIONS': {
56
+ 'OTP_LENGTH' : 8, # پیش‌فرض: 8
57
+ 'OTP_EXPIRE_PER_MINUTES': 4, # پیش‌فرض: 4
58
+ 'OTP_SMS_TEMPLATE_ID' : 1, # شناسه قالب پیامکی برای رمز یک‌بارمصرف
59
+ }
60
+ },
61
+ 'SMS': {
62
+ 'SMS_SERVICE': 'PARSIAN_WEBCO_IR', # یاری‌دهنده‌های پشتیبانی شده: PARSIAN_WEBCO_IR, MELI_PAYAMAK_COM, KAVENEGAR_COM
63
+ 'SETTINGS': {
64
+ 'PARSIAN_WEBCO_IR_API_KEY' : 'YOUR_PARSIAN_WEBCO_API_KEY',
65
+ 'MELI_PAYAMAK_COM_USERNAME' : 'YOUR_MELI_PAYAMAK_USERNAME',
66
+ 'MELI_PAYAMAK_COM_PASSWORD' : 'YOUR_MELI_PAYAMAK_PASSWORD',
67
+ 'MELI_PAYAMAK_COM_FROM' : 'YOUR_MELI_PAYAMAK_FROM_NUMBER',
68
+ 'KAVENEGAR_COM_API_KEY' : 'YOUR_KAVENEGAR_API_KEY',
69
+ 'KAVENEGAR_COM_FROM' : 'YOUR_KAVENEGAR_FROM_NUMBER',
70
+ },
71
+ 'TEMPLATES': {
72
+ 'T1': 1,
73
+ 'T2': 2,
74
+ ...
75
+ }
76
+ }
77
+ }
78
+ AUTH_METHOD: روش راستی‌آزمایی را روشن می‌سازد. برای راستی‌آزمایی پیامکی، از 'OTP' بهره بگیرید.OTP_LENGTH: درازای رمز یک‌بارمصرف.OTP_EXPIRE_PER_MINUTES: زمان پایان‌یافتن رمز یک‌بارمصرف بر پایه دقیقه.OTP_SMS_TEMPLATE_ID: شناسه قالب پیامکی که برای فرستادن رمز یک‌بارمصرف بهره گرفته می‌شود.SMS_SERVICE: یاری‌دهنده پیامکی دلخواه خود را برگزینید.SETTINGS: آگاهی‌های نیاز برای یاری‌دهنده پیامکی برگزیده‌تان را فراهم آورید.TEMPLATES: شناسه‌های قالب پیامکی خود را روشن سازید.🔌 نقطه‌های پایانیبرای به کارگیری کارکردهای این بسته، URLهای زیر را به پرونده urls.py خود بیفزایید.# urls.py
79
+
80
+ from django.urls import path, include
81
+
82
+ urlpatterns = [
83
+ ...
84
+ path('api/', include('drfchelseru.urls')),
85
+ ...
86
+ ]
87
+ این بسته نقطه‌های پایانی API زیر را فراهم می‌آورد:نقطه‌ پایانیشرحروش/api/otp/send/یک رمز یک‌بارمصرف به شماره همراه گفته‌شده می‌فرستد.POST/api/authenticate/کاربری را با رمز یک‌بارمصرف دریافت‌شده، راستی‌آزمایی می‌کند.POST/api/sessions/نشست‌های فعال کاربر را فهرست کرده و درایوری می‌کند.GET/api/message/send/یک پیامک با یاری‌دهنده پیکربندی‌شده می‌فرستد.POSTبه کارگیری نقطه‌های پایانی1. فرستادن رمز یک‌بارمصرف (/api/otp/send/)روش: POSTشرح: یک رمز یک‌بارمصرف به شماره همراه کاربر می‌فرستد.داده‌نماهای نیاز:داده‌نماگونهشرحنمونهmobile_numberstrشماره همراه کاربر.09121234567پاسخ‌ها:HTTP 200 OK: رمز یک‌بارمصرف با کامیابی فرستاده شد.{"details": "The OTP code was sent correctly."}
88
+ HTTP 400 BAD REQUEST: ساختار نادرست mobile_number.HTTP 409 CONFLICT: یک رمز یک‌بارمصرف پیش‌تر فرستاده شده و هنوز روایی دارد.{"details": "An OTP code has already been sent. Please wait X seconds before trying again."}
89
+ HTTP 500 INTERNAL SERVER ERROR: یک دشواری در کارگذار پیش آمده است.2. راستی‌آزمایی (/api/authenticate/)روش: POSTشرح: کاربر را با رمز یک‌بارمصرف فراهم شده، راستی‌آزمایی می‌کند. اگر با کامیابی انجام شود، توکن‌های JWT (access و refresh) را بازمی‌گرداند.داده‌نماهای نیاز:داده‌نماگونهشرحنمونهmobile_numberstrشماره همراه کاربر.09121234567codestrرمز یک‌بارمصرف دریافت شده از راه پیامک.12345678groupintاختیاری: یک شناسه دسته برای کاربر.1پاسخ‌ها:HTTP 200 OK: راستی‌آزمایی با کامیابی انجام شد.{
90
+ "access": "...",
91
+ "refresh": "..."
92
+ }
93
+ HTTP 401 UNAUTHORIZED: رمز یک‌بارمصرف ناروا یا پایان‌یافته.{"error": "The code sent to this mobile number was not found."}
94
+ HTTP 400 BAD REQUEST: داده‌نماهای نیاز ناپیدا یا ساختار نادرست.HTTP 500 INTERNAL SERVER ERROR: یک دشواری در کارگذار پیش آمده است.3. فرستادن پیامک (/api/message/send/)روش: POSTشرح: یک پیامک خودساخته را با یاری‌دهنده پیکربندی‌شده می‌فرستد.داده‌نماهای نیاز:داده‌نماگونهشرحنمونهmobile_numberstrشماره همراه گیرنده.09121234567message_textstrنوشتار پیام. (بیشینه ۲۹۰ نویسه)Hello, World!template_idintبرای برخی یاری‌دهنده‌ها (برای نمونه پارسیان) نیاز است.1پاسخ‌ها:HTTP 200 OK: پیام با کامیابی فرستاده شد.{"details": "The Message was sent correctly."}
95
+ HTTP 400 BAD REQUEST: دشواری‌های درست‌سنجی برای داده‌نماها.HTTP 401 UNAUTHORIZED: راستی‌آزمایی انجام نشد.HTTP 500 INTERNAL SERVER ERROR: یک دشواری در کارگذار پیش آمده است.HTTP 502 BAD GATEWAY: یاری‌دهنده پیامکی یک دشواری را بازگرداند.4. فهرست نشست‌ها (/api/sessions/)روش: GETشرح: همه نشست‌های فعال کاربران را فهرست می‌کند. نیاز به راستی‌آزمایی (IsAuthenticated) دارد.سربرگ‌های نیاز:سربرگارزشAuthorizationBearer <your_access_token>💡 مدل‌هااین بسته یک مدل Session برای درایوری نشست‌های فعال کاربران دارد. می‌توانید به این نشست‌ها از راه نقطه‌ پایانی /api/sessions/ دسترسی یافته و آنها را درایوری کنید.
@@ -0,0 +1,56 @@
1
+ django-chelseruA Django package for real-time chat, SMS authentication, and sending SMS messages with Iranian providers.AuthorSobhan Bahman Rashnu🚀 Features📱 SMS Authentication (OTP): Secure user authentication using one-time passwords sent via SMS.💬 Real-time Chat: WebSocket-based real-time messaging functionality.✉️ SMS Services: Send SMS messages through popular Iranian SMS providers.⚙️ InstallationInstall the package using pip:pip install django-chelseru
2
+ Add 'drfchelseru' to your INSTALLED_APPS in settings.py:INSTALLED_APPS = [
3
+ ...
4
+ 'channels',
5
+ 'rest_framework',
6
+ 'rest_framework_simplejwt',
7
+ 'drfchelseru',
8
+ ...
9
+ ]
10
+ 🛠️ ConfigurationTo configure the package, add the DJANGO_CHELSERU dictionary to your settings.py file. This dictionary allows you to customize authentication and SMS settings.# settings.py
11
+
12
+ DJANGO_CHELSERU = {
13
+ 'AUTH': {
14
+ 'AUTH_METHOD' : 'OTP', # Supported methods: OTP, PASSWD
15
+ 'AUTH_SERVICE' : 'rest_framework_simplejwt', # Supported services: rest_framework_simplejwt
16
+ 'OPTIONS': {
17
+ 'OTP_LENGTH' : 8, # Default: 8
18
+ 'OTP_EXPIRE_PER_MINUTES': 4, # Default: 4
19
+ 'OTP_SMS_TEMPLATE_ID' : 1, # SMS template ID for OTP
20
+ }
21
+ },
22
+ 'SMS': {
23
+ 'SMS_SERVICE': 'PARSIAN_WEBCO_IR', # Supported providers: PARSIAN_WEBCO_IR, MELI_PAYAMAK_COM, KAVENEGAR_COM
24
+ 'SETTINGS': {
25
+ 'PARSIAN_WEBCO_IR_API_KEY' : 'YOUR_PARSIAN_WEBCO_API_KEY',
26
+ 'MELI_PAYAMAK_COM_USERNAME' : 'YOUR_MELI_PAYAMAK_USERNAME',
27
+ 'MELI_PAYAMAK_COM_PASSWORD' : 'YOUR_MELI_PAYAMAK_PASSWORD',
28
+ 'MELI_PAYAMAK_COM_FROM' : 'YOUR_MELI_PAYAMAK_FROM_NUMBER',
29
+ 'KAVENEGAR_COM_API_KEY' : 'YOUR_KAVENEGAR_API_KEY',
30
+ 'KAVENEGAR_COM_FROM' : 'YOUR_KAVENEGAR_FROM_NUMBER',
31
+ },
32
+ 'TEMPLATES': {
33
+ 'T1': 1,
34
+ 'T2': 2,
35
+ ...
36
+ }
37
+ }
38
+ }
39
+ AUTH_METHOD: Specifies the authentication method. Use 'OTP' for SMS-based authentication.OTP_LENGTH: The length of the one-time password.OTP_EXPIRE_PER_MINUTES: The expiration time for the OTP in minutes.OTP_SMS_TEMPLATE_ID: The template ID of the SMS message used for sending the OTP.SMS_SERVICE: Select your desired SMS provider.SETTINGS: Provide the necessary credentials for your chosen SMS provider.TEMPLATES: Define your SMS template IDs.🔌 EndpointsAdd the following URLs to your urls.py file to use the package's functionality.# urls.py
40
+
41
+ from django.urls import path, include
42
+
43
+ urlpatterns = [
44
+ ...
45
+ path('api/', include('drfchelseru.urls')),
46
+ ...
47
+ ]
48
+ The package provides the following API endpoints:EndpointDescriptionMethod/api/otp/send/Sends an OTP to the specified phone number.POST/api/authenticate/Authenticates a user with the received OTP.POST/api/sessions/Lists and manages active user sessions.GET/api/message/send/Sends an SMS message using the configured provider.POSTEndpoint Usage1. OTP Code Sending (/api/otp/send/)Method: POSTDescription: Sends a one-time password to the user's mobile number.Required Parameters:ParameterTypeDescriptionExamplemobile_numberstrThe user's mobile number.09121234567Responses:HTTP 200 OK: OTP code sent successfully.{"details": "The OTP code was sent correctly."}
49
+ HTTP 400 BAD REQUEST: Invalid mobile_number format.HTTP 409 CONFLICT: An OTP has already been sent and is still valid.{"details": "An OTP code has already been sent. Please wait X seconds before trying again."}
50
+ HTTP 500 INTERNAL SERVER ERROR: An issue occurred on the server.2. Authentication (/api/authenticate/)Method: POSTDescription: Authenticates the user with the provided OTP. On success, it returns JWT tokens (access and refresh).Required Parameters:ParameterTypeDescriptionExamplemobile_numberstrThe user's mobile number.09121234567codestrThe OTP received via SMS.12345678groupintOptional: A group identifier for the user.1Responses:HTTP 200 OK: Authentication successful.{
51
+ "access": "...",
52
+ "refresh": "..."
53
+ }
54
+ HTTP 401 UNAUTHORIZED: Invalid or expired OTP code.{"error": "The code sent to this mobile number was not found."}
55
+ HTTP 400 BAD REQUEST: Missing required parameters or invalid format.HTTP 500 INTERNAL SERVER ERROR: An issue occurred on the server.3. Message Sending (/api/message/send/)Method: POSTDescription: Sends a custom SMS message using the configured provider.Required Parameters:ParameterTypeDescriptionExamplemobile_numberstrThe recipient's mobile number.09121234567message_textstrThe text of the message. (Max 290 chars)Hello, World!template_idintRequired for some providers (e.g., Parsian).1Responses:HTTP 200 OK: Message sent successfully.{"details": "The Message was sent correctly."}
56
+ HTTP 400 BAD REQUEST: Validation errors for parameters.HTTP 401 UNAUTHORIZED: Authentication failed.HTTP 500 INTERNAL SERVER ERROR: An issue occurred on the server.HTTP 502 BAD GATEWAY: SMS provider returned an error.4. Session List (/api/sessions/)Method: GETDescription: Lists all active user sessions. Requires authentication (IsAuthenticated).Required Headers:HeaderValueAuthorizationBearer <your_access_token>💡 ModelsThis package includes a Session model for managing active user sessions. You can access and manage these sessions through the /api/sessions/ endpoint.
@@ -0,0 +1,56 @@
1
+ django-chelseruیک بسته جنگویی برای گپ‌زنی همزمان، راستی‌آزمایی پیامکی و فرستادن پیامک با یاری‌دهنده‌های ایرانی.نویسندهSobhan Bahman Rashnu🚀 ویژگی‌ها📱 راستی‌آزمایی پیامکی (رمز یک‌بارمصرف): راستی‌آزمایی امن کاربران با یاری‌گیری از رمزهای یک‌بارمصرف که از راه پیامک فرستاده می‌شوند.💬 گپ‌زنی همزمان: کارکرد پیام‌رسانی همزمان بر پایه WebSocket.✉️ سامانه‌های پیامکی: فرستادن پیامک از راه یاری‌دهنده‌های نامور پیامکی ایرانی.⚙️ نصببسته را با یاری‌گیری از pip نصب کنید:pip install django-chelseru
2
+ 'drfchelseru' را به INSTALLED_APPS در پرونده settings.py خود بیفزایید:INSTALLED_APPS = [
3
+ ...
4
+ 'channels',
5
+ 'rest_framework',
6
+ 'rest_framework_simplejwt',
7
+ 'drfchelseru',
8
+ ...
9
+ ]
10
+ 🛠️ پیکربندیبرای پیکربندی بسته، واژه‌نامه DJANGO_CHELSERU را به پرونده settings.py خود بیفزایید. این واژه‌نامه به شما پروانه می‌دهد تا چیدمان‌های راستی‌آزمایی و پیامک را خودساخته نمایید.# settings.py
11
+
12
+ DJANGO_CHELSERU = {
13
+ 'AUTH': {
14
+ 'AUTH_METHOD' : 'OTP', # روش‌های پشتیبانی شده: OTP, PASSWD
15
+ 'AUTH_SERVICE' : 'rest_framework_simplejwt', # سرویس‌های پشتیبانی شده: rest_framework_simplejwt
16
+ 'OPTIONS': {
17
+ 'OTP_LENGTH' : 8, # پیش‌فرض: 8
18
+ 'OTP_EXPIRE_PER_MINUTES': 4, # پیش‌فرض: 4
19
+ 'OTP_SMS_TEMPLATE_ID' : 1, # شناسه قالب پیامکی برای رمز یک‌بارمصرف
20
+ }
21
+ },
22
+ 'SMS': {
23
+ 'SMS_SERVICE': 'PARSIAN_WEBCO_IR', # یاری‌دهنده‌های پشتیبانی شده: PARSIAN_WEBCO_IR, MELI_PAYAMAK_COM, KAVENEGAR_COM
24
+ 'SETTINGS': {
25
+ 'PARSIAN_WEBCO_IR_API_KEY' : 'YOUR_PARSIAN_WEBCO_API_KEY',
26
+ 'MELI_PAYAMAK_COM_USERNAME' : 'YOUR_MELI_PAYAMAK_USERNAME',
27
+ 'MELI_PAYAMAK_COM_PASSWORD' : 'YOUR_MELI_PAYAMAK_PASSWORD',
28
+ 'MELI_PAYAMAK_COM_FROM' : 'YOUR_MELI_PAYAMAK_FROM_NUMBER',
29
+ 'KAVENEGAR_COM_API_KEY' : 'YOUR_KAVENEGAR_API_KEY',
30
+ 'KAVENEGAR_COM_FROM' : 'YOUR_KAVENEGAR_FROM_NUMBER',
31
+ },
32
+ 'TEMPLATES': {
33
+ 'T1': 1,
34
+ 'T2': 2,
35
+ ...
36
+ }
37
+ }
38
+ }
39
+ AUTH_METHOD: روش راستی‌آزمایی را روشن می‌سازد. برای راستی‌آزمایی پیامکی، از 'OTP' بهره بگیرید.OTP_LENGTH: درازای رمز یک‌بارمصرف.OTP_EXPIRE_PER_MINUTES: زمان پایان‌یافتن رمز یک‌بارمصرف بر پایه دقیقه.OTP_SMS_TEMPLATE_ID: شناسه قالب پیامکی که برای فرستادن رمز یک‌بارمصرف بهره گرفته می‌شود.SMS_SERVICE: یاری‌دهنده پیامکی دلخواه خود را برگزینید.SETTINGS: آگاهی‌های نیاز برای یاری‌دهنده پیامکی برگزیده‌تان را فراهم آورید.TEMPLATES: شناسه‌های قالب پیامکی خود را روشن سازید.🔌 نقطه‌های پایانیبرای به کارگیری کارکردهای این بسته، URLهای زیر را به پرونده urls.py خود بیفزایید.# urls.py
40
+
41
+ from django.urls import path, include
42
+
43
+ urlpatterns = [
44
+ ...
45
+ path('api/', include('drfchelseru.urls')),
46
+ ...
47
+ ]
48
+ این بسته نقطه‌های پایانی API زیر را فراهم می‌آورد:نقطه‌ پایانیشرحروش/api/otp/send/یک رمز یک‌بارمصرف به شماره همراه گفته‌شده می‌فرستد.POST/api/authenticate/کاربری را با رمز یک‌بارمصرف دریافت‌شده، راستی‌آزمایی می‌کند.POST/api/sessions/نشست‌های فعال کاربر را فهرست کرده و درایوری می‌کند.GET/api/message/send/یک پیامک با یاری‌دهنده پیکربندی‌شده می‌فرستد.POSTبه کارگیری نقطه‌های پایانی1. فرستادن رمز یک‌بارمصرف (/api/otp/send/)روش: POSTشرح: یک رمز یک‌بارمصرف به شماره همراه کاربر می‌فرستد.داده‌نماهای نیاز:داده‌نماگونهشرحنمونهmobile_numberstrشماره همراه کاربر.09121234567پاسخ‌ها:HTTP 200 OK: رمز یک‌بارمصرف با کامیابی فرستاده شد.{"details": "The OTP code was sent correctly."}
49
+ HTTP 400 BAD REQUEST: ساختار نادرست mobile_number.HTTP 409 CONFLICT: یک رمز یک‌بارمصرف پیش‌تر فرستاده شده و هنوز روایی دارد.{"details": "An OTP code has already been sent. Please wait X seconds before trying again."}
50
+ HTTP 500 INTERNAL SERVER ERROR: یک دشواری در کارگذار پیش آمده است.2. راستی‌آزمایی (/api/authenticate/)روش: POSTشرح: کاربر را با رمز یک‌بارمصرف فراهم شده، راستی‌آزمایی می‌کند. اگر با کامیابی انجام شود، توکن‌های JWT (access و refresh) را بازمی‌گرداند.داده‌نماهای نیاز:داده‌نماگونهشرحنمونهmobile_numberstrشماره همراه کاربر.09121234567codestrرمز یک‌بارمصرف دریافت شده از راه پیامک.12345678groupintاختیاری: یک شناسه دسته برای کاربر.1پاسخ‌ها:HTTP 200 OK: راستی‌آزمایی با کامیابی انجام شد.{
51
+ "access": "...",
52
+ "refresh": "..."
53
+ }
54
+ HTTP 401 UNAUTHORIZED: رمز یک‌بارمصرف ناروا یا پایان‌یافته.{"error": "The code sent to this mobile number was not found."}
55
+ HTTP 400 BAD REQUEST: داده‌نماهای نیاز ناپیدا یا ساختار نادرست.HTTP 500 INTERNAL SERVER ERROR: یک دشواری در کارگذار پیش آمده است.3. فرستادن پیامک (/api/message/send/)روش: POSTشرح: یک پیامک خودساخته را با یاری‌دهنده پیکربندی‌شده می‌فرستد.داده‌نماهای نیاز:داده‌نماگونهشرحنمونهmobile_numberstrشماره همراه گیرنده.09121234567message_textstrنوشتار پیام. (بیشینه ۲۹۰ نویسه)Hello, World!template_idintبرای برخی یاری‌دهنده‌ها (برای نمونه پارسیان) نیاز است.1پاسخ‌ها:HTTP 200 OK: پیام با کامیابی فرستاده شد.{"details": "The Message was sent correctly."}
56
+ HTTP 400 BAD REQUEST: دشواری‌های درست‌سنجی برای داده‌نماها.HTTP 401 UNAUTHORIZED: راستی‌آزمایی انجام نشد.HTTP 500 INTERNAL SERVER ERROR: یک دشواری در کارگذار پیش آمده است.HTTP 502 BAD GATEWAY: یاری‌دهنده پیامکی یک دشواری را بازگرداند.4. فهرست نشست‌ها (/api/sessions/)روش: GETشرح: همه نشست‌های فعال کاربران را فهرست می‌کند. نیاز به راستی‌آزمایی (IsAuthenticated) دارد.سربرگ‌های نیاز:سربرگارزشAuthorizationBearer <your_access_token>💡 مدل‌هااین بسته یک مدل Session برای درایوری نشست‌های فعال کاربران دارد. می‌توانید به این نشست‌ها از راه نقطه‌ پایانی /api/sessions/ دسترسی یافته و آنها را درایوری کنید.
@@ -0,0 +1,95 @@
1
+ Metadata-Version: 2.4
2
+ Name: django-chelseru
3
+ Version: 1.0.2
4
+ Summary: Authentication system, online and real-time chat, SMS system for Iranian SMS services.
5
+ Home-page: https://pipdjango.chelseru.com
6
+ Author: Sobhan Bahman|Rashnu
7
+ Author-email: bahmanrashnu@gmail.com
8
+ Project-URL: Documentation, https://github.com/Chelseru/django-chelseru-lour/
9
+ Project-URL: Telegram Group, https://t.me/bahmanpy
10
+ Project-URL: Telegram Channel, https://t.me/ChelseruCom
11
+ Keywords: djangochelseruchat djangochat drfchat online-chat online real-time chat iran chelseru lor lur bahman rashnu lour sms djangoauth auth ywt otpauth otp authentication djangootp djangoiransms iransms djangosms djangokavenegar djangomelipayamak sobhan چت سبحان بهمن رشنو چلسرو جنگو پایتون لر لور آنلاین ریل تایم
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Framework :: Django
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: OS Independent
16
+ Requires-Python: >=3.11
17
+ Description-Content-Type: text/markdown
18
+ License-File: LICENSE
19
+ Requires-Dist: Django>=5.1.6
20
+ Requires-Dist: djangorestframework==3.15.2
21
+ Requires-Dist: djangorestframework_simplejwt==5.5.0
22
+ Requires-Dist: channels==4.2.2
23
+ Requires-Dist: channels_redis==4.2.1
24
+ Requires-Dist: daphne==4.1.2
25
+ Requires-Dist: zeep==4.3.1
26
+ Requires-Dist: user-agents==2.2.0
27
+ Dynamic: author
28
+ Dynamic: author-email
29
+ Dynamic: classifier
30
+ Dynamic: description
31
+ Dynamic: description-content-type
32
+ Dynamic: home-page
33
+ Dynamic: keywords
34
+ Dynamic: license-file
35
+ Dynamic: project-url
36
+ Dynamic: requires-dist
37
+ Dynamic: requires-python
38
+ Dynamic: summary
39
+
40
+ django-chelseruیک بسته جنگویی برای گپ‌زنی همزمان، راستی‌آزمایی پیامکی و فرستادن پیامک با یاری‌دهنده‌های ایرانی.نویسندهSobhan Bahman Rashnu🚀 ویژگی‌ها📱 راستی‌آزمایی پیامکی (رمز یک‌بارمصرف): راستی‌آزمایی امن کاربران با یاری‌گیری از رمزهای یک‌بارمصرف که از راه پیامک فرستاده می‌شوند.💬 گپ‌زنی همزمان: کارکرد پیام‌رسانی همزمان بر پایه WebSocket.✉️ سامانه‌های پیامکی: فرستادن پیامک از راه یاری‌دهنده‌های نامور پیامکی ایرانی.⚙️ نصببسته را با یاری‌گیری از pip نصب کنید:pip install django-chelseru
41
+ 'drfchelseru' را به INSTALLED_APPS در پرونده settings.py خود بیفزایید:INSTALLED_APPS = [
42
+ ...
43
+ 'channels',
44
+ 'rest_framework',
45
+ 'rest_framework_simplejwt',
46
+ 'drfchelseru',
47
+ ...
48
+ ]
49
+ 🛠️ پیکربندیبرای پیکربندی بسته، واژه‌نامه DJANGO_CHELSERU را به پرونده settings.py خود بیفزایید. این واژه‌نامه به شما پروانه می‌دهد تا چیدمان‌های راستی‌آزمایی و پیامک را خودساخته نمایید.# settings.py
50
+
51
+ DJANGO_CHELSERU = {
52
+ 'AUTH': {
53
+ 'AUTH_METHOD' : 'OTP', # روش‌های پشتیبانی شده: OTP, PASSWD
54
+ 'AUTH_SERVICE' : 'rest_framework_simplejwt', # سرویس‌های پشتیبانی شده: rest_framework_simplejwt
55
+ 'OPTIONS': {
56
+ 'OTP_LENGTH' : 8, # پیش‌فرض: 8
57
+ 'OTP_EXPIRE_PER_MINUTES': 4, # پیش‌فرض: 4
58
+ 'OTP_SMS_TEMPLATE_ID' : 1, # شناسه قالب پیامکی برای رمز یک‌بارمصرف
59
+ }
60
+ },
61
+ 'SMS': {
62
+ 'SMS_SERVICE': 'PARSIAN_WEBCO_IR', # یاری‌دهنده‌های پشتیبانی شده: PARSIAN_WEBCO_IR, MELI_PAYAMAK_COM, KAVENEGAR_COM
63
+ 'SETTINGS': {
64
+ 'PARSIAN_WEBCO_IR_API_KEY' : 'YOUR_PARSIAN_WEBCO_API_KEY',
65
+ 'MELI_PAYAMAK_COM_USERNAME' : 'YOUR_MELI_PAYAMAK_USERNAME',
66
+ 'MELI_PAYAMAK_COM_PASSWORD' : 'YOUR_MELI_PAYAMAK_PASSWORD',
67
+ 'MELI_PAYAMAK_COM_FROM' : 'YOUR_MELI_PAYAMAK_FROM_NUMBER',
68
+ 'KAVENEGAR_COM_API_KEY' : 'YOUR_KAVENEGAR_API_KEY',
69
+ 'KAVENEGAR_COM_FROM' : 'YOUR_KAVENEGAR_FROM_NUMBER',
70
+ },
71
+ 'TEMPLATES': {
72
+ 'T1': 1,
73
+ 'T2': 2,
74
+ ...
75
+ }
76
+ }
77
+ }
78
+ AUTH_METHOD: روش راستی‌آزمایی را روشن می‌سازد. برای راستی‌آزمایی پیامکی، از 'OTP' بهره بگیرید.OTP_LENGTH: درازای رمز یک‌بارمصرف.OTP_EXPIRE_PER_MINUTES: زمان پایان‌یافتن رمز یک‌بارمصرف بر پایه دقیقه.OTP_SMS_TEMPLATE_ID: شناسه قالب پیامکی که برای فرستادن رمز یک‌بارمصرف بهره گرفته می‌شود.SMS_SERVICE: یاری‌دهنده پیامکی دلخواه خود را برگزینید.SETTINGS: آگاهی‌های نیاز برای یاری‌دهنده پیامکی برگزیده‌تان را فراهم آورید.TEMPLATES: شناسه‌های قالب پیامکی خود را روشن سازید.🔌 نقطه‌های پایانیبرای به کارگیری کارکردهای این بسته، URLهای زیر را به پرونده urls.py خود بیفزایید.# urls.py
79
+
80
+ from django.urls import path, include
81
+
82
+ urlpatterns = [
83
+ ...
84
+ path('api/', include('drfchelseru.urls')),
85
+ ...
86
+ ]
87
+ این بسته نقطه‌های پایانی API زیر را فراهم می‌آورد:نقطه‌ پایانیشرحروش/api/otp/send/یک رمز یک‌بارمصرف به شماره همراه گفته‌شده می‌فرستد.POST/api/authenticate/کاربری را با رمز یک‌بارمصرف دریافت‌شده، راستی‌آزمایی می‌کند.POST/api/sessions/نشست‌های فعال کاربر را فهرست کرده و درایوری می‌کند.GET/api/message/send/یک پیامک با یاری‌دهنده پیکربندی‌شده می‌فرستد.POSTبه کارگیری نقطه‌های پایانی1. فرستادن رمز یک‌بارمصرف (/api/otp/send/)روش: POSTشرح: یک رمز یک‌بارمصرف به شماره همراه کاربر می‌فرستد.داده‌نماهای نیاز:داده‌نماگونهشرحنمونهmobile_numberstrشماره همراه کاربر.09121234567پاسخ‌ها:HTTP 200 OK: رمز یک‌بارمصرف با کامیابی فرستاده شد.{"details": "The OTP code was sent correctly."}
88
+ HTTP 400 BAD REQUEST: ساختار نادرست mobile_number.HTTP 409 CONFLICT: یک رمز یک‌بارمصرف پیش‌تر فرستاده شده و هنوز روایی دارد.{"details": "An OTP code has already been sent. Please wait X seconds before trying again."}
89
+ HTTP 500 INTERNAL SERVER ERROR: یک دشواری در کارگذار پیش آمده است.2. راستی‌آزمایی (/api/authenticate/)روش: POSTشرح: کاربر را با رمز یک‌بارمصرف فراهم شده، راستی‌آزمایی می‌کند. اگر با کامیابی انجام شود، توکن‌های JWT (access و refresh) را بازمی‌گرداند.داده‌نماهای نیاز:داده‌نماگونهشرحنمونهmobile_numberstrشماره همراه کاربر.09121234567codestrرمز یک‌بارمصرف دریافت شده از راه پیامک.12345678groupintاختیاری: یک شناسه دسته برای کاربر.1پاسخ‌ها:HTTP 200 OK: راستی‌آزمایی با کامیابی انجام شد.{
90
+ "access": "...",
91
+ "refresh": "..."
92
+ }
93
+ HTTP 401 UNAUTHORIZED: رمز یک‌بارمصرف ناروا یا پایان‌یافته.{"error": "The code sent to this mobile number was not found."}
94
+ HTTP 400 BAD REQUEST: داده‌نماهای نیاز ناپیدا یا ساختار نادرست.HTTP 500 INTERNAL SERVER ERROR: یک دشواری در کارگذار پیش آمده است.3. فرستادن پیامک (/api/message/send/)روش: POSTشرح: یک پیامک خودساخته را با یاری‌دهنده پیکربندی‌شده می‌فرستد.داده‌نماهای نیاز:داده‌نماگونهشرحنمونهmobile_numberstrشماره همراه گیرنده.09121234567message_textstrنوشتار پیام. (بیشینه ۲۹۰ نویسه)Hello, World!template_idintبرای برخی یاری‌دهنده‌ها (برای نمونه پارسیان) نیاز است.1پاسخ‌ها:HTTP 200 OK: پیام با کامیابی فرستاده شد.{"details": "The Message was sent correctly."}
95
+ HTTP 400 BAD REQUEST: دشواری‌های درست‌سنجی برای داده‌نماها.HTTP 401 UNAUTHORIZED: راستی‌آزمایی انجام نشد.HTTP 500 INTERNAL SERVER ERROR: یک دشواری در کارگذار پیش آمده است.HTTP 502 BAD GATEWAY: یاری‌دهنده پیامکی یک دشواری را بازگرداند.4. فهرست نشست‌ها (/api/sessions/)روش: GETشرح: همه نشست‌های فعال کاربران را فهرست می‌کند. نیاز به راستی‌آزمایی (IsAuthenticated) دارد.سربرگ‌های نیاز:سربرگارزشAuthorizationBearer <your_access_token>💡 مدل‌هااین بسته یک مدل Session برای درایوری نشست‌های فعال کاربران دارد. می‌توانید به این نشست‌ها از راه نقطه‌ پایانی /api/sessions/ دسترسی یافته و آنها را درایوری کنید.
@@ -1,6 +1,7 @@
1
1
  LICENSE
2
2
  MANIFEST.in
3
3
  README.md
4
+ README_PA.md
4
5
  pyproject.toml
5
6
  setup.py
6
7
  django_chelseru.egg-info/PKG-INFO
@@ -155,7 +155,7 @@ class KavenegarCom:
155
155
  def send_message(mobile_number, message_text, data, template_id=None):
156
156
  try:
157
157
  icheck = sms_init_check()
158
- if not (icheck and isinstance(icheck, dict) and 'SMS_SERVICE' in icheck and 'OPTIONS' in icheck):
158
+ if not (icheck and isinstance(icheck, dict) and 'SMS_SERVICE' in icheck and 'SETTINGS' in icheck):
159
159
  raise 'SMS service settings are not configured correctly.'
160
160
 
161
161
  except ImproperlyConfigured as e:
@@ -163,7 +163,7 @@ def send_message(mobile_number, message_text, data, template_id=None):
163
163
  raise
164
164
 
165
165
  sms_service = icheck['SMS_SERVICE']
166
- options = icheck['OPTIONS']
166
+ options = icheck['SETTINGS']
167
167
  response_data = None
168
168
  response_status_code = HTTP_500_INTERNAL_SERVER_ERROR
169
169
  response_bool = False
@@ -1,23 +1,34 @@
1
1
  """
2
2
  DJANGO_CHELSERU = {
3
3
  'AUTH': {
4
- 'AUTH_METHOD' : 'OTP', # OTP, PASSWD
5
- 'AUTH_SERVICE' : 'rest_framework_simplejwt', # rest_framework_simplejwt
4
+ 'AUTH_METHOD' : 'OTP', # OTP, PASSWD
5
+ 'AUTH_SERVICE' : 'rest_framework_simplejwt', # rest_framework_simplejwt
6
6
  'OPTIONS': {
7
7
  'OTP_LENGTH' : 8, # DEFAULT 8
8
8
  'OTP_EXPIRE_PER_MINUTES': 4, # DEFAULT 4
9
- 'SMS_TEMPLATE_ID': : 1,
9
+ 'OTP_SMS_TEMPLATE_ID' : 1,
10
10
  }
11
11
  },
12
12
  'SMS': {
13
13
  'SMS_SERVICE': 'PARSIAN_WEBCO_IR', # PARSIAN_WEBCO_IR , MELI_PAYAMAK_COM , KAVENEGAR_COM
14
- 'OPTIONS': {
14
+ 'SETTINGS': {
15
15
  'PARSIAN_WEBCO_IR_API_KEY' : '',
16
16
  'MELI_PAYAMAK_COM_USERNAME' : '',
17
17
  'MELI_PAYAMAK_COM_PASSWORD' : '',
18
18
  'MELI_PAYAMAK_COM_FROM' : '',
19
19
  'KAVENEGAR_COM_API_KEY' : '656F6635756C485658666F6A52307562456C4F5043714769597A58434D2B527974434534672B50445736553D',
20
20
  'KAVENEGAR_COM_FROM' : '2000660110',
21
+ },
22
+ 'TEMPLATES': {
23
+ 'T1': 1,
24
+ 'T2': 2,
25
+ 'T3': 3,
26
+ 'T4': 4,
27
+ 'T5': 5,
28
+ 'T6': 6,
29
+ 'T7': 7,
30
+ 'T8': 8,
31
+ 'T9': 9,
21
32
  }
22
33
  }
23
34
  }
@@ -51,7 +62,7 @@ def auth_init_check():
51
62
  _auth_service = _auth.get('AUTH_SERVICE')
52
63
  _opt_len = _auth.get('OPTIONS').get('OTP_LENGTH', 6)
53
64
  _opt_exp_time = _auth.get('OPTIONS').get('OTP_EXPIRE_PER_MINUTES', 4)
54
- _otp_sms_template = _auth.get('OPTIONS').get('SMS_TEMPLATE_ID', 0)
65
+ _otp_sms_template = _auth.get('OPTIONS').get('OTP_SMS_TEMPLATE_ID', 0)
55
66
 
56
67
  if _auth_mode:
57
68
  if _auth_mode in list(map(lambda x: x[1], AUTH_METHOD)):
@@ -95,6 +106,7 @@ def sms_init_check():
95
106
  try:
96
107
  sms_service = None
97
108
  options = {}
109
+ templates = {}
98
110
  if not hasattr(settings, SERVICE_NAME):
99
111
  raise ImproperlyConfigured(f'{SERVICE_NAME} must be defined in settings.py.')
100
112
 
@@ -103,6 +115,7 @@ def sms_init_check():
103
115
  raise ImproperlyConfigured(f'SMS key must be defined in {SERVICE_NAME}')
104
116
 
105
117
  else:
118
+ templates = getattr(settings, SERVICE_NAME).get('SMS').get('TEMPLATES', {})
106
119
  sms_service = getattr(settings, SERVICE_NAME).get('SMS').get('SMS_SERVICE')
107
120
  if not sms_service:
108
121
  raise ImproperlyConfigured(f'SMS_SERVICE key must be defined in {SERVICE_NAME}: SMS .')
@@ -112,58 +125,58 @@ def sms_init_check():
112
125
  raise ImproperlyConfigured(f'SMS_SERVICE must be choice between {list(map(lambda x: x[1], SMS_SERVICES))}.')
113
126
 
114
127
  else:
115
- if not getattr(settings, SERVICE_NAME).get('SMS').get('OPTIONS'):
116
- raise ImproperlyConfigured(f'OPTIONS key must be defined in {SERVICE_NAME}: SMS .')
128
+ if not getattr(settings, SERVICE_NAME).get('SMS').get('SETTINGS'):
129
+ raise ImproperlyConfigured(f'SETTINGS key must be defined in {SERVICE_NAME}: SMS .')
117
130
 
118
131
  else:
119
132
  if sms_service == 'PARSIAN_WEBCO_IR':
120
- api_key = getattr(settings, SERVICE_NAME).get('SMS').get('OPTIONS').get('PARSIAN_WEBCO_IR_API_KEY')
133
+ api_key = getattr(settings, SERVICE_NAME).get('SMS').get('SETTINGS').get('PARSIAN_WEBCO_IR_API_KEY')
121
134
  if not api_key:
122
- raise ImproperlyConfigured(f'PARSIAN_WEBCO_IR_API_KEY key must be defined in {SERVICE_NAME}: SMS: OPTION for get login access to sms provider.')
135
+ raise ImproperlyConfigured(f'PARSIAN_WEBCO_IR_API_KEY must be defined in {SERVICE_NAME}: SMS: SETTINGS, To access the SMS service API, you need to have API keys.')
123
136
 
124
137
  else:
125
138
  options['api_key'] = api_key
126
139
 
127
140
  # -------------------------------------
128
141
  elif sms_service == 'MELI_PAYAMAK_COM':
129
- username = getattr(settings, SERVICE_NAME).get('SMS').get('OPTIONS').get('MELI_PAYAMAK_COM_USERNAME')
142
+ username = getattr(settings, SERVICE_NAME).get('SMS').get('SETTINGS').get('MELI_PAYAMAK_COM_USERNAME')
130
143
  if not username:
131
- raise ImproperlyConfigured(f'MELI_PAYAMAK_COM_USERNAME key must be defined in {SERVICE_NAME}: SMS: OPTION for get login access to sms provider.')
144
+ raise ImproperlyConfigured(f'MELI_PAYAMAK_COM_USERNAME must be defined in {SERVICE_NAME}: SMS: SETTINGS, To access the SMS service API, you need to have API keys.')
132
145
 
133
146
  else:
134
147
  options['username'] = username
135
148
 
136
- password = getattr(settings, SERVICE_NAME).get('SMS').get('OPTIONS').get('MELI_PAYAMAK_COM_PASSWORD')
149
+ password = getattr(settings, SERVICE_NAME).get('SMS').get('SETTINGS').get('MELI_PAYAMAK_COM_PASSWORD')
137
150
  if not password:
138
- raise ImproperlyConfigured(f'MELI_PAYAMAK_COM_PASSWORD key must be defined in {SERVICE_NAME}: SMS: OPTION for get login access to sms provider.')
151
+ raise ImproperlyConfigured(f'MELI_PAYAMAK_COM_PASSWORD must be defined in {SERVICE_NAME}: SMS: SETTINGS, To access the SMS service API, you need to have API keys.')
139
152
 
140
153
  else:
141
154
  options['password'] = password
142
155
 
143
- _from = getattr(settings, SERVICE_NAME).get('SMS').get('OPTIONS').get('MELI_PAYAMAK_COM_FROM')
156
+ _from = getattr(settings, SERVICE_NAME).get('SMS').get('SETTINGS').get('MELI_PAYAMAK_COM_FROM')
144
157
  if not _from:
145
- raise ImproperlyConfigured(f'MELI_PAYAMAK_COM_FROM key must be defined in {SERVICE_NAME}: SMS: OPTION for get login access to sms provider.')
158
+ raise ImproperlyConfigured(f'MELI_PAYAMAK_COM_FROM must be defined in {SERVICE_NAME}: SMS: SETTINGS, To send an SMS, the sender`s number is required.')
146
159
 
147
160
  else:
148
161
  options['from'] = _from
149
162
 
150
163
  # -------------------------------------
151
164
  elif sms_service == 'KAVENEGAR_COM':
152
- api_key = getattr(settings, SERVICE_NAME).get('SMS').get('OPTIONS').get('KAVENEGAR_COM_API_KEY')
165
+ api_key = getattr(settings, SERVICE_NAME).get('SMS').get('SETTINGS').get('KAVENEGAR_COM_API_KEY')
153
166
  if not api_key:
154
- raise ImproperlyConfigured(f'KAVENEGAR_COM_API_KEY key must be defined in {SERVICE_NAME}: SMS: OPTION for get login access to sms provider.')
167
+ raise ImproperlyConfigured(f'KAVENEGAR_COM_API_KEY must be defined in {SERVICE_NAME}: SMS: SETTINGS, To access the SMS service API, you need to have API keys.')
155
168
 
156
169
  else:
157
170
  options['api_key'] = api_key
158
171
 
159
- _from = getattr(settings, SERVICE_NAME).get('SMS').get('OPTIONS').get('KAVENEGAR_COM_FROM')
172
+ _from = getattr(settings, SERVICE_NAME).get('SMS').get('SETTINGS').get('KAVENEGAR_COM_FROM')
160
173
  if not _from:
161
- raise ImproperlyConfigured(f'KAVENEGAR_COM_FROM key must be defined in {SERVICE_NAME}: SMS: OPTION for get login access to sms provider.')
174
+ raise ImproperlyConfigured(f'KAVENEGAR_COM_FROM must be defined in {SERVICE_NAME}: SMS: SETTINGS, To send an SMS, the sender`s number is required.')
162
175
 
163
176
  else:
164
177
  options['from'] = _from
165
178
 
166
- return {'SMS_SERVICE': sms_service, 'OPTIONS': options}
179
+ return {'SMS_SERVICE': sms_service, 'SETTINGS': options, 'TEMPLATES': templates}
167
180
  except ImproperlyConfigured as e:
168
181
  print(f"Configuration Error: {e}")
169
182
  raise
@@ -3,7 +3,7 @@ from setuptools import setup, find_packages
3
3
 
4
4
  setup(
5
5
  name='django-chelseru',
6
- version='1.0.1',
6
+ version='1.0.2',
7
7
  packages=find_packages(),
8
8
  include_package_data=True,
9
9
  install_requires=[
@@ -19,9 +19,9 @@ setup(
19
19
  author='Sobhan Bahman|Rashnu',
20
20
  author_email='bahmanrashnu@gmail.com',
21
21
  description='Authentication system, online and real-time chat, SMS system for Iranian SMS services.',
22
- long_description=open('README.md').read(),
22
+ long_description=open('README_PA.md').read(),
23
23
  long_description_content_type='text/markdown',
24
- url='https://pip-django.chelseru.com',
24
+ url='https://pipdjango.chelseru.com',
25
25
  project_urls={
26
26
  "Documentation": "https://github.com/Chelseru/django-chelseru-lour/",
27
27
  "Telegram Group": "https://t.me/bahmanpy",
@@ -1 +0,0 @@
1
- include README.md
@@ -1,58 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: django-chelseru
3
- Version: 1.0.1
4
- Summary: Authentication system, online and real-time chat, SMS system for Iranian SMS services.
5
- Home-page: https://pip-django.chelseru.com
6
- Author: Sobhan Bahman|Rashnu
7
- Author-email: bahmanrashnu@gmail.com
8
- Project-URL: Documentation, https://github.com/Chelseru/django-chelseru-lour/
9
- Project-URL: Telegram Group, https://t.me/bahmanpy
10
- Project-URL: Telegram Channel, https://t.me/ChelseruCom
11
- Keywords: djangochelseruchat djangochat drfchat online-chat online real-time chat iran chelseru lor lur bahman rashnu lour sms djangoauth auth ywt otpauth otp authentication djangootp djangoiransms iransms djangosms djangokavenegar djangomelipayamak sobhan چت سبحان بهمن رشنو چلسرو جنگو پایتون لر لور آنلاین ریل تایم
12
- Classifier: Programming Language :: Python :: 3
13
- Classifier: Framework :: Django
14
- Classifier: License :: OSI Approved :: MIT License
15
- Classifier: Operating System :: OS Independent
16
- Requires-Python: >=3.11
17
- Description-Content-Type: text/markdown
18
- License-File: LICENSE
19
- Requires-Dist: Django>=5.1.6
20
- Requires-Dist: djangorestframework==3.15.2
21
- Requires-Dist: djangorestframework_simplejwt==5.5.0
22
- Requires-Dist: channels==4.2.2
23
- Requires-Dist: channels_redis==4.2.1
24
- Requires-Dist: daphne==4.1.2
25
- Requires-Dist: zeep==4.3.1
26
- Requires-Dist: user-agents==2.2.0
27
- Dynamic: author
28
- Dynamic: author-email
29
- Dynamic: classifier
30
- Dynamic: description
31
- Dynamic: description-content-type
32
- Dynamic: home-page
33
- Dynamic: keywords
34
- Dynamic: license-file
35
- Dynamic: project-url
36
- Dynamic: requires-dist
37
- Dynamic: requires-python
38
- Dynamic: summary
39
-
40
- # Django Chelseru
41
-
42
- ---
43
-
44
- ## Installation
45
-
46
- ```bash
47
- pip install django-chelseru
48
- ```
49
-
50
- ---
51
- -
52
-
53
- ## License
54
-
55
- MIT License
56
-
57
- Sobhan Bahman | Rashnu
58
-
@@ -1,19 +0,0 @@
1
- # Django Chelseru
2
-
3
- ---
4
-
5
- ## Installation
6
-
7
- ```bash
8
- pip install django-chelseru
9
- ```
10
-
11
- ---
12
- -
13
-
14
- ## License
15
-
16
- MIT License
17
-
18
- Sobhan Bahman | Rashnu
19
-
@@ -1,58 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: django-chelseru
3
- Version: 1.0.1
4
- Summary: Authentication system, online and real-time chat, SMS system for Iranian SMS services.
5
- Home-page: https://pip-django.chelseru.com
6
- Author: Sobhan Bahman|Rashnu
7
- Author-email: bahmanrashnu@gmail.com
8
- Project-URL: Documentation, https://github.com/Chelseru/django-chelseru-lour/
9
- Project-URL: Telegram Group, https://t.me/bahmanpy
10
- Project-URL: Telegram Channel, https://t.me/ChelseruCom
11
- Keywords: djangochelseruchat djangochat drfchat online-chat online real-time chat iran chelseru lor lur bahman rashnu lour sms djangoauth auth ywt otpauth otp authentication djangootp djangoiransms iransms djangosms djangokavenegar djangomelipayamak sobhan چت سبحان بهمن رشنو چلسرو جنگو پایتون لر لور آنلاین ریل تایم
12
- Classifier: Programming Language :: Python :: 3
13
- Classifier: Framework :: Django
14
- Classifier: License :: OSI Approved :: MIT License
15
- Classifier: Operating System :: OS Independent
16
- Requires-Python: >=3.11
17
- Description-Content-Type: text/markdown
18
- License-File: LICENSE
19
- Requires-Dist: Django>=5.1.6
20
- Requires-Dist: djangorestframework==3.15.2
21
- Requires-Dist: djangorestframework_simplejwt==5.5.0
22
- Requires-Dist: channels==4.2.2
23
- Requires-Dist: channels_redis==4.2.1
24
- Requires-Dist: daphne==4.1.2
25
- Requires-Dist: zeep==4.3.1
26
- Requires-Dist: user-agents==2.2.0
27
- Dynamic: author
28
- Dynamic: author-email
29
- Dynamic: classifier
30
- Dynamic: description
31
- Dynamic: description-content-type
32
- Dynamic: home-page
33
- Dynamic: keywords
34
- Dynamic: license-file
35
- Dynamic: project-url
36
- Dynamic: requires-dist
37
- Dynamic: requires-python
38
- Dynamic: summary
39
-
40
- # Django Chelseru
41
-
42
- ---
43
-
44
- ## Installation
45
-
46
- ```bash
47
- pip install django-chelseru
48
- ```
49
-
50
- ---
51
- -
52
-
53
- ## License
54
-
55
- MIT License
56
-
57
- Sobhan Bahman | Rashnu
58
-
File without changes