django-lambda-tasks 0.8.0__tar.gz → 0.8.1__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 (110) hide show
  1. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/PKG-INFO +1 -1
  2. django_lambda_tasks-0.8.1/lambda_tasks/migrations/0004_remove_taskrecord_taskrecord_kwargs_trgm_and_more.py +48 -0
  3. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/lambda_tasks/models.py +10 -2
  4. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/pyproject.toml +1 -1
  5. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/test_admin.py +27 -0
  6. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.github/workflows/ci.yml +0 -0
  7. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.github/workflows/release.yml +0 -0
  8. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.gitignore +0 -0
  9. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/async-local-execution/.config.kiro +0 -0
  10. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/async-local-execution/design.md +0 -0
  11. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/async-local-execution/requirements.md +0 -0
  12. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/async-local-execution/tasks.md +0 -0
  13. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/deferred-task-enqueue/.config.kiro +0 -0
  14. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/deferred-task-enqueue/design.md +0 -0
  15. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/deferred-task-enqueue/requirements.md +0 -0
  16. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/deferred-task-enqueue/tasks.md +0 -0
  17. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/eager-mode-example-app/.config.kiro +0 -0
  18. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/eager-mode-example-app/design.md +0 -0
  19. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/eager-mode-example-app/requirements.md +0 -0
  20. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/eager-mode-example-app/tasks.md +0 -0
  21. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/ignore-errors-decorator-option/.config.kiro +0 -0
  22. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/ignore-errors-decorator-option/design.md +0 -0
  23. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/ignore-errors-decorator-option/requirements.md +0 -0
  24. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/ignore-errors-decorator-option/tasks.md +0 -0
  25. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/import-string-task-resolution/.config.kiro +0 -0
  26. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/import-string-task-resolution/design.md +0 -0
  27. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/import-string-task-resolution/requirements.md +0 -0
  28. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/import-string-task-resolution/tasks.md +0 -0
  29. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/retry-delay/.config.kiro +0 -0
  30. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/retry-delay/design.md +0 -0
  31. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/retry-delay/requirements.md +0 -0
  32. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/retry-delay/tasks.md +0 -0
  33. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/rse-background-tasks/.config.kiro +0 -0
  34. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/rse-background-tasks/design.md +0 -0
  35. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/rse-background-tasks/requirements.md +0 -0
  36. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/rse-background-tasks/tasks.md +0 -0
  37. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/rse-background-tasks-bugfix/.config.kiro +0 -0
  38. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/rse-background-tasks-bugfix/bugfix.md +0 -0
  39. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/rse-background-tasks-bugfix/design.md +0 -0
  40. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/rse-background-tasks-bugfix/tasks.md +0 -0
  41. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/singleton-task/.config.kiro +0 -0
  42. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/singleton-task/design.md +0 -0
  43. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/singleton-task/requirements.md +0 -0
  44. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/singleton-task/tasks.md +0 -0
  45. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/ssm-environment-loader/.config.kiro +0 -0
  46. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/ssm-environment-loader/design.md +0 -0
  47. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/ssm-environment-loader/requirements.md +0 -0
  48. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/ssm-environment-loader/tasks.md +0 -0
  49. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/task-retry/.config.kiro +0 -0
  50. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/task-retry/design.md +0 -0
  51. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/task-retry/requirements.md +0 -0
  52. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/specs/task-retry/tasks.md +0 -0
  53. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/steering/product.md +0 -0
  54. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/steering/structure.md +0 -0
  55. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.kiro/steering/tech.md +0 -0
  56. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.pre-commit-config.yaml +0 -0
  57. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/.vscode/settings.json +0 -0
  58. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/README.md +0 -0
  59. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/docker-compose.yml +0 -0
  60. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/example/README.md +0 -0
  61. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/example/docker-compose.yml +0 -0
  62. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/example/example_app/__init__.py +0 -0
  63. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/example/example_app/apps.py +0 -0
  64. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/example/example_app/tasks.py +0 -0
  65. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/example/example_app/urls.py +0 -0
  66. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/example/example_app/views.py +0 -0
  67. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/example/example_project/__init__.py +0 -0
  68. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/example/example_project/settings.py +0 -0
  69. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/example/example_project/urls.py +0 -0
  70. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/example/example_project/wsgi.py +0 -0
  71. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/example/manage.py +0 -0
  72. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/lambda_tasks/__init__.py +0 -0
  73. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/lambda_tasks/admin.py +0 -0
  74. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/lambda_tasks/apps.py +0 -0
  75. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/lambda_tasks/checks.py +0 -0
  76. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/lambda_tasks/decorators.py +0 -0
  77. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/lambda_tasks/environment_loader.py +0 -0
  78. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/lambda_tasks/handler.py +0 -0
  79. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/lambda_tasks/local_executor.py +0 -0
  80. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/lambda_tasks/logging.py +0 -0
  81. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/lambda_tasks/migrations/0001_initial.py +0 -0
  82. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/lambda_tasks/migrations/0002_alter_taskrecord_status.py +0 -0
  83. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/lambda_tasks/migrations/0003_taskrecord_taskrecord_kwargs_trgm.py +0 -0
  84. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/lambda_tasks/migrations/__init__.py +0 -0
  85. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/lambda_tasks/secret_loader.py +0 -0
  86. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/lambda_tasks/settings.py +0 -0
  87. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/lambda_tasks/tasks.py +0 -0
  88. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/lambda_tasks/timeouts.py +0 -0
  89. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/conftest.py +0 -0
  90. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/settings.py +0 -0
  91. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/test_batch.py +0 -0
  92. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/test_batch_worker.py +0 -0
  93. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/test_checks.py +0 -0
  94. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/test_decorator.py +0 -0
  95. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/test_decorators.py +0 -0
  96. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/test_deferred_enqueue.py +0 -0
  97. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/test_environment_loader.py +0 -0
  98. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/test_handler.py +0 -0
  99. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/test_kwargs_only.py +0 -0
  100. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/test_local_executor.py +0 -0
  101. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/test_logging.py +0 -0
  102. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/test_memory_limit.py +0 -0
  103. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/test_models.py +0 -0
  104. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/test_noop_execution.py +0 -0
  105. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/test_secret_loader.py +0 -0
  106. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/test_serializer.py +0 -0
  107. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/test_settings.py +0 -0
  108. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/test_tasks.py +0 -0
  109. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/test_timeout_validation.py +0 -0
  110. {django_lambda_tasks-0.8.0 → django_lambda_tasks-0.8.1}/tests/test_timeouts.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: django-lambda-tasks
3
- Version: 0.8.0
3
+ Version: 0.8.1
4
4
  Summary: Run async tasks in a lambda function
5
5
  Requires-Python: >=3.10
6
6
  Requires-Dist: awslambdaric
@@ -0,0 +1,48 @@
1
+ # Generated by Django 6.0.3 on 2026-08-18 09:47
2
+
3
+ import django.contrib.postgres.indexes
4
+ import django.db.models.functions.comparison
5
+ import django.db.models.functions.text
6
+ from django.db import migrations, models
7
+
8
+
9
+ class Migration(migrations.Migration):
10
+
11
+ dependencies = [
12
+ ("lambda_tasks", "0003_taskrecord_taskrecord_kwargs_trgm"),
13
+ ]
14
+
15
+ operations = [
16
+ migrations.RemoveIndex(
17
+ model_name="taskrecord",
18
+ name="taskrecord_kwargs_trgm",
19
+ ),
20
+ migrations.AddIndex(
21
+ model_name="taskrecord",
22
+ index=django.contrib.postgres.indexes.GinIndex(
23
+ django.contrib.postgres.indexes.OpClass(
24
+ django.db.models.functions.text.Upper(
25
+ django.db.models.functions.comparison.Cast(
26
+ "id", output_field=models.TextField()
27
+ )
28
+ ),
29
+ name="gin_trgm_ops",
30
+ ),
31
+ name="taskrecord_id_trgm",
32
+ ),
33
+ ),
34
+ migrations.AddIndex(
35
+ model_name="taskrecord",
36
+ index=django.contrib.postgres.indexes.GinIndex(
37
+ django.contrib.postgres.indexes.OpClass(
38
+ django.db.models.functions.text.Upper(
39
+ django.db.models.functions.comparison.Cast(
40
+ "kwargs", output_field=models.TextField()
41
+ )
42
+ ),
43
+ name="gin_trgm_ops",
44
+ ),
45
+ name="taskrecord_kwargs_trgm",
46
+ ),
47
+ ),
48
+ ]
@@ -13,7 +13,7 @@ from django.core.cache import caches
13
13
  from django.core.exceptions import ImproperlyConfigured
14
14
  from django.db import models, transaction
15
15
  from django.db.models import Q
16
- from django.db.models.functions import Cast
16
+ from django.db.models.functions import Cast, Upper
17
17
  from django.utils.module_loading import import_string
18
18
  from django.utils.timezone import now
19
19
  from pydantic import BaseModel, ConfigDict, Field
@@ -78,7 +78,15 @@ class TaskRecord(models.Model):
78
78
  models.Index(fields=["-start_time"]),
79
79
  GinIndex(
80
80
  OpClass(
81
- Cast("kwargs", output_field=models.TextField()), name="gin_trgm_ops"
81
+ Upper(Cast("id", output_field=models.TextField())),
82
+ name="gin_trgm_ops",
83
+ ),
84
+ name="taskrecord_id_trgm",
85
+ ),
86
+ GinIndex(
87
+ OpClass(
88
+ Upper(Cast("kwargs", output_field=models.TextField())),
89
+ name="gin_trgm_ops",
82
90
  ),
83
91
  name="taskrecord_kwargs_trgm",
84
92
  ),
@@ -7,7 +7,7 @@ packages = ["lambda_tasks"]
7
7
 
8
8
  [project]
9
9
  name = "django-lambda-tasks"
10
- version = "0.8.0"
10
+ version = "0.8.1"
11
11
  description = "Run async tasks in a lambda function"
12
12
  readme = "README.md"
13
13
  requires-python = ">=3.10"
@@ -281,3 +281,30 @@ class TestReplayAction:
281
281
 
282
282
  action_names = list(model_admin.get_actions(request).keys())
283
283
  assert "replay_tasks" in action_names
284
+
285
+
286
+ @pytest.mark.django_db()
287
+ class TestKwargsSearchUsesIndex:
288
+ def test_admin_search_uses_gin_trigram_indexes(self) -> None:
289
+ """Verify the GIN trigram indexes are used for admin search queries."""
290
+ from django.db import connection
291
+ from django.test import RequestFactory
292
+
293
+ model_admin = admin.site._registry[TaskRecord]
294
+ request = RequestFactory().get("/", data={"q": "29992d75"})
295
+ request.user = User(is_staff=True, is_superuser=True)
296
+
297
+ changelist = model_admin.get_changelist_instance(request)
298
+ queryset = changelist.get_queryset(request)
299
+
300
+ sql, params = queryset.query.sql_with_params()
301
+ with connection.cursor() as cursor:
302
+ cursor.execute("SET enable_seqscan = off")
303
+ cursor.execute("SET enable_indexscan = off")
304
+ cursor.execute(f"EXPLAIN {sql}", params)
305
+ plan = "\n".join(row[0] for row in cursor.fetchall())
306
+ cursor.execute("SET enable_indexscan = on")
307
+ cursor.execute("SET enable_seqscan = on")
308
+
309
+ assert "taskrecord_id_trgm" in plan
310
+ assert "taskrecord_kwargs_trgm" in plan