django-qstash 0.1.0__py3-none-any.whl → 0.1.2__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.
Potentially problematic release.
This version of django-qstash might be problematic. Click here for more details.
- django_qstash/__init__.py +1 -1
- django_qstash/results/services.py +25 -8
- {django_qstash-0.1.0.dist-info → django_qstash-0.1.2.dist-info}/METADATA +21 -5
- {django_qstash-0.1.0.dist-info → django_qstash-0.1.2.dist-info}/RECORD +6 -6
- {django_qstash-0.1.0.dist-info → django_qstash-0.1.2.dist-info}/WHEEL +1 -1
- {django_qstash-0.1.0.dist-info → django_qstash-0.1.2.dist-info}/top_level.txt +0 -0
django_qstash/__init__.py
CHANGED
|
@@ -12,14 +12,31 @@ from django_qstash.db.models import TaskStatus
|
|
|
12
12
|
logger = logging.getLogger(__name__)
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
def
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
def function_result_to_dict(result: Any) -> dict | None:
|
|
16
|
+
"""
|
|
17
|
+
Convert a task result to a Python dict for the result JSONField.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
result: Any Python value to be converted
|
|
21
|
+
|
|
22
|
+
Returns:
|
|
23
|
+
dict: A dictionary representation of the result
|
|
24
|
+
None: If the input is None
|
|
25
|
+
"""
|
|
26
|
+
if result is None:
|
|
22
27
|
return None
|
|
28
|
+
elif isinstance(result, dict):
|
|
29
|
+
return result
|
|
30
|
+
elif isinstance(result, str):
|
|
31
|
+
try:
|
|
32
|
+
parsed = json.loads(result)
|
|
33
|
+
if isinstance(parsed, dict):
|
|
34
|
+
return parsed
|
|
35
|
+
return {"result": parsed}
|
|
36
|
+
except json.JSONDecodeError as e:
|
|
37
|
+
logger.info("Task result is not a JSON string: %s", str(e))
|
|
38
|
+
return {"result": result}
|
|
39
|
+
return {"result": result}
|
|
23
40
|
|
|
24
41
|
|
|
25
42
|
def store_task_result(
|
|
@@ -44,7 +61,7 @@ def store_task_result(
|
|
|
44
61
|
task_name=task_name,
|
|
45
62
|
status=status,
|
|
46
63
|
date_done=timezone.now(),
|
|
47
|
-
result=
|
|
64
|
+
result=function_result_to_dict(result),
|
|
48
65
|
traceback=traceback,
|
|
49
66
|
args=args,
|
|
50
67
|
kwargs=kwargs,
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: django-qstash
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: A drop-in replacement for Celery's shared_task with Upstash QStash.
|
|
5
5
|
Author-email: Justin Mitchel <justin@codingforentrepreneurs.com>
|
|
6
6
|
Project-URL: Changelog, https://github.com/jmitchel3/django-qstash
|
|
7
7
|
Project-URL: Documentation, https://github.com/jmitchel3/django-qstash
|
|
8
8
|
Project-URL: Funding, https://github.com/jmitchel3/django-qstash
|
|
9
9
|
Project-URL: Repository, https://github.com/jmitchel3/django-qstash
|
|
10
|
-
Classifier: Development Status ::
|
|
10
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
11
11
|
Classifier: Framework :: Django :: 4.2
|
|
12
12
|
Classifier: Framework :: Django :: 5.0
|
|
13
13
|
Classifier: Framework :: Django :: 5.1
|
|
14
|
+
Classifier: Framework :: Django :: 5.2
|
|
14
15
|
Classifier: Intended Audience :: Developers
|
|
15
16
|
Classifier: License :: OSI Approved :: MIT License
|
|
16
17
|
Classifier: Natural Language :: English
|
|
@@ -64,10 +65,25 @@ This allows us to:
|
|
|
64
65
|
- Trigger GitHub Actions Workflows or GitLab CI/CD pipelines for handling other kinds of background tasks based on our project's code.
|
|
65
66
|
|
|
66
67
|
|
|
68
|
+
## Demo
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
### Django QStash in 3 Minutes on YouTube
|
|
72
|
+
|
|
73
|
+
[](https://www.youtube.com/watch?v=e-hloBp4eVQ)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
### Mini Course on YouTube
|
|
77
|
+
|
|
78
|
+
Step-by-Step [tutorial playlist on YouTube](https://www.youtube.com/playlist?list=PLEsfXFp6DpzQgNC8Q_ijgqxCVRtSC4_-L) on my [@CodingEntrepreneurs](https://cfe.sh/youtube) Youtube channel.
|
|
79
|
+
|
|
67
80
|
## Table of Contents
|
|
68
81
|
|
|
69
82
|
- [django-qstash](#django-qstash)
|
|
70
83
|
- [How it works](#how-it-works)
|
|
84
|
+
- [Demo](#demo)
|
|
85
|
+
- [Django QStash in 3 Minutes on YouTube](#django-qstash-in-3-minutes-on-youtube)
|
|
86
|
+
- [Mini Course on YouTube](#mini-course-on-youtube)
|
|
71
87
|
- [Table of Contents](#table-of-contents)
|
|
72
88
|
- [Installation](#installation)
|
|
73
89
|
- [Using Pip](#using-pip)
|
|
@@ -450,8 +466,8 @@ desired_task = "django_qstash.results.clear_stale_results_task"
|
|
|
450
466
|
# or desired_task = "example_app.tasks.my_task"
|
|
451
467
|
|
|
452
468
|
task_to_use = desired_task
|
|
453
|
-
if desired_task not in
|
|
454
|
-
task_to_use =
|
|
469
|
+
if desired_task not in all_available_tasks:
|
|
470
|
+
task_to_use = all_available_tasks[0]
|
|
455
471
|
|
|
456
472
|
print(f"Using task: {task_to_use}")
|
|
457
473
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
django_qstash/__init__.py,sha256=
|
|
1
|
+
django_qstash/__init__.py,sha256=tIjYx2IGsgzp2NUsXGDsfqLKnQw6H73F64CG5F8wGz4,187
|
|
2
2
|
django_qstash/callbacks.py,sha256=IQ-D8sPlSRuREZ1zwkRyd2GtxfmrJJh2x4jLd39rZCE,813
|
|
3
3
|
django_qstash/client.py,sha256=9xO4iwR62PkEQhzC92yKRlzqEIF5Yi0HpYc88v_drsI,612
|
|
4
4
|
django_qstash/cron.py,sha256=13OzTMGXFgjNEXjs2Et20WGZYtW9lKlu79BjbRySnVc,716
|
|
@@ -27,7 +27,7 @@ django_qstash/results/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
|
27
27
|
django_qstash/results/admin.py,sha256=Vr1O6E7vucSnkZ1PwHQ7RYkwOxiX4WHPAKaA7L8Cn-4,580
|
|
28
28
|
django_qstash/results/apps.py,sha256=4me4cg5yeoeSJTphkHYzGMJUfGucT47FNIUMYu5gmIo,275
|
|
29
29
|
django_qstash/results/models.py,sha256=AV7-nVEMq-Xt2QVY6D7NQc4_3E7v-6NA2xngTU8DfXA,1062
|
|
30
|
-
django_qstash/results/services.py,sha256=
|
|
30
|
+
django_qstash/results/services.py,sha256=150IP9A_93bm6wZQjRqAmMyBvyigSlUXTca14DpqAxQ,2069
|
|
31
31
|
django_qstash/results/tasks.py,sha256=kd49OOZyOg6OG3RSyywtZPtpGaPlycY2OXl1BXaoxVM,2746
|
|
32
32
|
django_qstash/results/migrations/0001_initial.py,sha256=A90SKgWmBf4SIJYG1Jh6-b_81Ia1zIzGj3Bfl1O4-kg,1902
|
|
33
33
|
django_qstash/results/migrations/0002_taskresult_function_path_alter_taskresult_status_and_more.py,sha256=FevtPlzkKHjRD1tcnXskigY5jr2X3gYv7KE2TcdEAxU,1374
|
|
@@ -46,7 +46,7 @@ django_qstash/schedules/migrations/0001_initial.py,sha256=66cA8xnJV3h7QgzCaOiv-N
|
|
|
46
46
|
django_qstash/schedules/migrations/0002_taskschedule_updated_at.py,sha256=6hZO0a9P2ZpOROkk7O5UXBhahghU0QfxZl4E-c3HKGw,459
|
|
47
47
|
django_qstash/schedules/migrations/0003_alter_taskschedule_cron.py,sha256=oBW_FcvosKsa0l_l3eVDRIZli5K1wQaN_DJjamVe23s,826
|
|
48
48
|
django_qstash/schedules/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
49
|
-
django_qstash-0.1.
|
|
50
|
-
django_qstash-0.1.
|
|
51
|
-
django_qstash-0.1.
|
|
52
|
-
django_qstash-0.1.
|
|
49
|
+
django_qstash-0.1.2.dist-info/METADATA,sha256=KkBw-pE5A28SA9wUo6jNariS1hvRqar3yYWJJzbr8bc,21865
|
|
50
|
+
django_qstash-0.1.2.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
|
51
|
+
django_qstash-0.1.2.dist-info/top_level.txt,sha256=AlV3WSK1A0ZvKuCLsINtIJhJW8zo7SEB-D3_RAjZ0hI,14
|
|
52
|
+
django_qstash-0.1.2.dist-info/RECORD,,
|
|
File without changes
|