django-lambda-tasks 0.4.4__tar.gz → 0.4.6__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 (101) hide show
  1. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/PKG-INFO +1 -1
  2. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/lambda_tasks/decorators.py +7 -7
  3. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/lambda_tasks/local_executor.py +10 -0
  4. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/lambda_tasks/settings.py +4 -1
  5. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/pyproject.toml +1 -1
  6. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.github/workflows/ci.yml +0 -0
  7. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.github/workflows/release.yml +0 -0
  8. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.gitignore +0 -0
  9. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/async-local-execution/.config.kiro +0 -0
  10. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/async-local-execution/design.md +0 -0
  11. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/async-local-execution/requirements.md +0 -0
  12. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/async-local-execution/tasks.md +0 -0
  13. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/deferred-task-enqueue/.config.kiro +0 -0
  14. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/deferred-task-enqueue/design.md +0 -0
  15. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/deferred-task-enqueue/requirements.md +0 -0
  16. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/deferred-task-enqueue/tasks.md +0 -0
  17. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/eager-mode-example-app/.config.kiro +0 -0
  18. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/eager-mode-example-app/design.md +0 -0
  19. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/eager-mode-example-app/requirements.md +0 -0
  20. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/eager-mode-example-app/tasks.md +0 -0
  21. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/ignore-errors-decorator-option/.config.kiro +0 -0
  22. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/ignore-errors-decorator-option/design.md +0 -0
  23. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/ignore-errors-decorator-option/requirements.md +0 -0
  24. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/ignore-errors-decorator-option/tasks.md +0 -0
  25. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/import-string-task-resolution/.config.kiro +0 -0
  26. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/import-string-task-resolution/design.md +0 -0
  27. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/import-string-task-resolution/requirements.md +0 -0
  28. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/import-string-task-resolution/tasks.md +0 -0
  29. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/retry-delay/.config.kiro +0 -0
  30. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/retry-delay/design.md +0 -0
  31. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/retry-delay/requirements.md +0 -0
  32. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/retry-delay/tasks.md +0 -0
  33. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/rse-background-tasks/.config.kiro +0 -0
  34. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/rse-background-tasks/design.md +0 -0
  35. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/rse-background-tasks/requirements.md +0 -0
  36. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/rse-background-tasks/tasks.md +0 -0
  37. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/rse-background-tasks-bugfix/.config.kiro +0 -0
  38. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/rse-background-tasks-bugfix/bugfix.md +0 -0
  39. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/rse-background-tasks-bugfix/design.md +0 -0
  40. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/rse-background-tasks-bugfix/tasks.md +0 -0
  41. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/singleton-task/.config.kiro +0 -0
  42. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/singleton-task/design.md +0 -0
  43. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/singleton-task/requirements.md +0 -0
  44. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/singleton-task/tasks.md +0 -0
  45. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/ssm-environment-loader/.config.kiro +0 -0
  46. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/ssm-environment-loader/design.md +0 -0
  47. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/ssm-environment-loader/requirements.md +0 -0
  48. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/ssm-environment-loader/tasks.md +0 -0
  49. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/task-retry/.config.kiro +0 -0
  50. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/task-retry/design.md +0 -0
  51. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/task-retry/requirements.md +0 -0
  52. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/specs/task-retry/tasks.md +0 -0
  53. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/steering/product.md +0 -0
  54. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/steering/structure.md +0 -0
  55. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.kiro/steering/tech.md +0 -0
  56. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.pre-commit-config.yaml +0 -0
  57. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/.vscode/settings.json +0 -0
  58. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/README.md +0 -0
  59. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/example/README.md +0 -0
  60. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/example/example_app/__init__.py +0 -0
  61. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/example/example_app/apps.py +0 -0
  62. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/example/example_app/tasks.py +0 -0
  63. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/example/example_app/urls.py +0 -0
  64. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/example/example_app/views.py +0 -0
  65. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/example/example_project/__init__.py +0 -0
  66. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/example/example_project/settings.py +0 -0
  67. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/example/example_project/urls.py +0 -0
  68. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/example/example_project/wsgi.py +0 -0
  69. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/example/manage.py +0 -0
  70. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/lambda_tasks/__init__.py +0 -0
  71. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/lambda_tasks/admin.py +0 -0
  72. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/lambda_tasks/apps.py +0 -0
  73. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/lambda_tasks/environment_loader.py +0 -0
  74. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/lambda_tasks/handler.py +0 -0
  75. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/lambda_tasks/logging.py +0 -0
  76. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/lambda_tasks/migrations/0001_initial.py +0 -0
  77. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/lambda_tasks/migrations/0002_alter_taskrecord_status.py +0 -0
  78. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/lambda_tasks/migrations/__init__.py +0 -0
  79. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/lambda_tasks/models.py +0 -0
  80. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/lambda_tasks/secret_loader.py +0 -0
  81. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/lambda_tasks/tasks.py +0 -0
  82. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/lambda_tasks/timeouts.py +0 -0
  83. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/tests/conftest.py +0 -0
  84. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/tests/settings.py +0 -0
  85. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/tests/test_admin.py +0 -0
  86. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/tests/test_decorator.py +0 -0
  87. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/tests/test_decorators.py +0 -0
  88. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/tests/test_deferred_enqueue.py +0 -0
  89. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/tests/test_environment_loader.py +0 -0
  90. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/tests/test_handler.py +0 -0
  91. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/tests/test_kwargs_only.py +0 -0
  92. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/tests/test_local_executor.py +0 -0
  93. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/tests/test_logging.py +0 -0
  94. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/tests/test_memory_limit.py +0 -0
  95. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/tests/test_models.py +0 -0
  96. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/tests/test_secret_loader.py +0 -0
  97. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/tests/test_serializer.py +0 -0
  98. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/tests/test_settings.py +0 -0
  99. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/tests/test_tasks.py +0 -0
  100. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/tests/test_timeout_validation.py +0 -0
  101. {django_lambda_tasks-0.4.4 → django_lambda_tasks-0.4.6}/tests/test_timeouts.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-lambda-tasks
3
- Version: 0.4.4
3
+ Version: 0.4.6
4
4
  Summary: Run async tasks in a lambda function
5
5
  Requires-Python: >=3.10
6
6
  Requires-Dist: awslambdaric
@@ -19,7 +19,7 @@ import pydantic
19
19
  from redis.exceptions import LockError
20
20
 
21
21
  from lambda_tasks.models import SQSLambdaTask, SQSLambdaTaskMessage
22
- from lambda_tasks.settings import MAX_TIMEOUT, LambdaTasksSettings
22
+ from lambda_tasks.settings import MAX_DELAY, MAX_TIMEOUT, LambdaTasksSettings
23
23
 
24
24
 
25
25
  def _build_kwargs_model(func: types.FunctionType) -> type[pydantic.BaseModel]:
@@ -257,9 +257,9 @@ class LambdaTaskWrapper:
257
257
 
258
258
  @staticmethod
259
259
  def _validate_delay(*, delay: int) -> None:
260
- """Raise ValueError if delay is outside the allowed range [0, 900]."""
261
- if delay < 0 or delay > 900:
262
- raise ValueError(f"delay ({delay}) must be in the range [0, 900].")
260
+ """Raise ValueError if delay is outside the allowed range [0, MAX_DELAY]."""
261
+ if delay < 0 or delay > MAX_DELAY:
262
+ raise ValueError(f"delay ({delay}) must be in the range [0, {MAX_DELAY}].")
263
263
 
264
264
  @staticmethod
265
265
  def _validate_retry_delay(
@@ -267,10 +267,10 @@ class LambdaTaskWrapper:
267
267
  retry_delay: int,
268
268
  retry_on: tuple[type[BaseException], ...],
269
269
  ) -> None:
270
- """Raise ValueError if retry_delay is outside [0, 900], or TypeError if retry_delay != 0 and retry_on is empty."""
271
- if retry_delay < 0 or retry_delay > 900:
270
+ """Raise ValueError if retry_delay is outside [0, MAX_DELAY], or TypeError if retry_delay != 0 and retry_on is empty."""
271
+ if retry_delay < 0 or retry_delay > MAX_DELAY:
272
272
  raise ValueError(
273
- f"retry_delay ({retry_delay}) must be in the range [0, 900]."
273
+ f"retry_delay ({retry_delay}) must be in the range [0, {MAX_DELAY}]."
274
274
  )
275
275
 
276
276
  if retry_delay != 0 and not retry_on:
@@ -1,5 +1,6 @@
1
1
  """Process pool executor for async local task execution."""
2
2
 
3
+ import atexit
3
4
  import logging
4
5
  import uuid
5
6
  from concurrent.futures import Future, ProcessPoolExecutor
@@ -18,6 +19,14 @@ def _pool_initializer() -> None:
18
19
  django.setup()
19
20
 
20
21
 
22
+ def _shutdown_pool() -> None:
23
+ """Shut down the pool at interpreter exit to release semaphores."""
24
+ global _pool
25
+ if _pool is not None:
26
+ _pool.shutdown(wait=False)
27
+ _pool = None
28
+
29
+
21
30
  def get_pool() -> ProcessPoolExecutor:
22
31
  """Return the shared ProcessPoolExecutor, creating it on first call."""
23
32
  global _pool
@@ -27,6 +36,7 @@ def get_pool() -> ProcessPoolExecutor:
27
36
  max_workers=conf.LOCAL_WORKERS,
28
37
  initializer=_pool_initializer,
29
38
  )
39
+ atexit.register(_shutdown_pool)
30
40
  return _pool
31
41
 
32
42
 
@@ -1,7 +1,10 @@
1
+ from typing import Final
2
+
1
3
  from django.conf import settings as django_settings
2
4
  from django.core.exceptions import ImproperlyConfigured
3
5
 
4
- MAX_TIMEOUT = 900
6
+ MAX_DELAY: Final = 900
7
+ MAX_TIMEOUT: Final = 900
5
8
 
6
9
 
7
10
  class LambdaTasksSettings:
@@ -7,7 +7,7 @@ packages = ["lambda_tasks"]
7
7
 
8
8
  [project]
9
9
  name = "django-lambda-tasks"
10
- version = "0.4.4"
10
+ version = "0.4.6"
11
11
  description = "Run async tasks in a lambda function"
12
12
  readme = "README.md"
13
13
  requires-python = ">=3.10"