django-resonant-settings 0.30__py3-none-any.whl → 0.33.0__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-resonant-settings
3
- Version: 0.30
3
+ Version: 0.33.0
4
4
  Summary: Shared Django settings for Resonant applications.
5
5
  Project-URL: Repository, https://github.com/kitware-resonant/cookiecutter-resonant
6
6
  Project-URL: Bug Reports, https://github.com/kitware-resonant/cookiecutter-resonant/issues
@@ -26,6 +26,8 @@ Requires-Python: >=3.10
26
26
  Requires-Dist: django-environ
27
27
  Provides-Extra: allauth
28
28
  Requires-Dist: django-allauth; extra == 'allauth'
29
+ Provides-Extra: celery
30
+ Requires-Dist: celery; extra == 'celery'
29
31
  Description-Content-Type: text/markdown
30
32
 
31
33
  # django-resonant-settings
@@ -1,7 +1,7 @@
1
1
  resonant_settings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  resonant_settings/_env.py,sha256=TA97UtDkh7tgBIPc92Osj4FtrBfzMTCmBQ6UR1dPHEk,36
3
3
  resonant_settings/allauth.py,sha256=jhAu6SqCUarWiHCrHUcED_2ewBJLpScXAZncYuLKISc,1766
4
- resonant_settings/celery.py,sha256=JZld5ch3Kf657MHiHQzjo0mPJI1BY5iz-BZeoJ14YRI,2928
4
+ resonant_settings/celery.py,sha256=G2-MnaEmX2zhJhXqHm9SuaOFbbVwpIGaM0vTNzyYHo4,3152
5
5
  resonant_settings/django.py,sha256=x7YKyP3KTiit_lPGpGYyepFg9gWKQEIXmCyHnCOBYZs,1500
6
6
  resonant_settings/django_extensions.py,sha256=kHXU3m4DyM2o8mS3peJ0YcvDeHu3g0Hsq1PzH5K4DrU,208
7
7
  resonant_settings/logging.py,sha256=sPjCN-vvLqozCOpDMKiZ-S9AWzaxH_S7LCuyuc7js4A,2811
@@ -11,20 +11,19 @@ resonant_settings/rest_framework.py,sha256=xMp9uXmHYhlN9UKiv2KtJkivnv85bIsh1VaHv
11
11
  resonant_settings/allauth_support/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  resonant_settings/allauth_support/adapter.py,sha256=GSyublJa-2ZCIY_Adb2A0NOoVAtZUuZxB9ZkA5nl66o,395
13
13
  resonant_settings/allauth_support/apps.py,sha256=aMx4hSBL9xOMTr5E93rjsW5QUi6m2iNFuz_Ld4isihA,184
14
- resonant_settings/allauth_support/createsuperuser.py,sha256=KA_CJxEixlOI322zQNsL9xoUQ4SjNxLRqut2m9Cc4rA,3049
15
- resonant_settings/allauth_support/receiver.py,sha256=iqiEPbWqgMd4i4qbkfcJMzQZdXAHw-jmc5JyKzJu8Io,1573
16
- resonant_settings/allauth_support/utils.py,sha256=F2cjjiZXy6KFQi2iGajS4daKg3h2MfMHS1FWwpeDJzs,404
14
+ resonant_settings/allauth_support/createsuperuser.py,sha256=tnv1BxKJ_5m635F-9m9qswd7t8WIZYedte-AdqEG5J8,3069
15
+ resonant_settings/allauth_support/receiver.py,sha256=NlMMLIIWsz-psIgaqKltsjP9H76czu1OAIseYvtDYiI,1609
16
+ resonant_settings/allauth_support/utils.py,sha256=1nhH8p8-YqdUUoHQixxYIANveKAqaNE8phzvN3abNp0,497
17
17
  resonant_settings/allauth_support/management/commands/createsuperuser.py,sha256=61gF3oxhYXbnn49w78rl9SvZOE28tSLmBNVmGNOaexQ,1423
18
18
  resonant_settings/development/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
- resonant_settings/development/celery.py,sha256=nFac1F3Z12TlAbpzxmF2Y9QedNtNFabXTqrMncqA0Rg,330
19
+ resonant_settings/development/celery.py,sha256=6t4hEjf9q6XOT-qiS3BgJViOjOJ1etiPwxghhpB4118,519
20
20
  resonant_settings/development/debug_toolbar.py,sha256=GhIMbjYsHjiRhrRF6qhYwg-f4gqfO_9OPtD9x-wXz2o,427
21
+ resonant_settings/development/minio_storage.py,sha256=4FIC3ZHyfej8IgbSgylFqXOcNx_-_sTUlCoBZLkeLYs,1002
21
22
  resonant_settings/production/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
23
  resonant_settings/production/email.py,sha256=EQJ7f9jhcu4NxnBa1Wo0gs7JFqaUB87_ETHbVdUo8HY,623
23
24
  resonant_settings/production/https.py,sha256=2mru4jteqwW4z1AJJwvqy5sZhpxTh-9OidHOb94X1vY,860
24
25
  resonant_settings/production/s3_storage.py,sha256=MDqpxX92t91E50Or_cMXpPzR40OuN52QrGcYJYRmXCQ,968
25
- resonant_settings/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- resonant_settings/testing/minio_storage.py,sha256=3t7F_mA-p9U06kfn7tz5rOfSwefjhauVPj_1D0x4toM,921
27
- django_resonant_settings-0.30.dist-info/METADATA,sha256=XQOOFY46ARv7ZYPCtA4t0M6SbyvASRoS66lWOxAc5bs,1654
28
- django_resonant_settings-0.30.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
29
- django_resonant_settings-0.30.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
30
- django_resonant_settings-0.30.dist-info/RECORD,,
26
+ django_resonant_settings-0.33.0.dist-info/METADATA,sha256=Vs0mTFsax-0AVj9XakE6jYBLB382W5Nb3QeBllcCVHU,1720
27
+ django_resonant_settings-0.33.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
28
+ django_resonant_settings-0.33.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
29
+ django_resonant_settings-0.33.0.dist-info/RECORD,,
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import ClassVar
3
+ from typing import Any, ClassVar
4
4
 
5
5
  from django.contrib.auth.management.commands import createsuperuser
6
6
  from django.contrib.auth.models import User, UserManager
@@ -9,7 +9,7 @@ from resonant_settings.allauth_support.utils import temporarily_change_attribute
9
9
 
10
10
 
11
11
  class Command(createsuperuser.Command):
12
- def __init__(self, *args, **kwargs):
12
+ def __init__(self, *args: Any, **kwargs: Any):
13
13
  super().__init__(*args, **kwargs)
14
14
  self.UserModel = EmailAsUsernameProxyUser
15
15
  self.username_field = self.UserModel._meta.get_field(self.UserModel.USERNAME_FIELD)
@@ -37,7 +37,7 @@ class EmailAsUsernameProxyUserManager(UserManager):
37
37
  username: str | None = None,
38
38
  email: str | None = None,
39
39
  password: str | None = None,
40
- **extra_fields,
40
+ **extra_fields: Any,
41
41
  ) -> EmailAsUsernameProxyUser:
42
42
  # Practically, email will always be provided
43
43
  assert email
@@ -1,4 +1,5 @@
1
1
  import logging
2
+ from typing import Any
2
3
 
3
4
  from allauth.account.models import EmailAddress
4
5
  from django.contrib.auth.models import AbstractUser
@@ -10,8 +11,8 @@ def verify_email_address_on_user_post_save(
10
11
  sender: type[AbstractUser],
11
12
  instance: AbstractUser,
12
13
  created: bool,
13
- **kwargs,
14
- ):
14
+ **kwargs: Any,
15
+ ) -> None:
15
16
  """Automatically verify email addresses of newly created superusers."""
16
17
  # These should always be true, but it's a final sanity check
17
18
  if created and instance.is_superuser:
@@ -1,9 +1,11 @@
1
+ from collections.abc import Generator
1
2
  from contextlib import contextmanager
3
+ from typing import Any
2
4
 
3
5
 
4
6
  # From https://stackoverflow.com/a/38532086
5
7
  @contextmanager
6
- def temporarily_change_attributes(something, **kwargs):
8
+ def temporarily_change_attributes(something: object, **kwargs: Any) -> Generator[None]:
7
9
  previous_values = {k: getattr(something, k) for k in kwargs}
8
10
  for k, v in kwargs.items():
9
11
  setattr(something, k, v)
@@ -7,6 +7,8 @@ Configure Celery with the following features:
7
7
  This requires the `celery` package to be installed.
8
8
  """
9
9
 
10
+ import celery.app.trace # type: ignore[import-not-found]
11
+
10
12
  from resonant_settings._env import env
11
13
 
12
14
  # Assume AMQP.
@@ -62,3 +64,8 @@ CELERY_WORKER_PREFETCH_MULTIPLIER = 1
62
64
  # Accept the default of the number of CPU cores.
63
65
  # Workers running memory-intensive tasks may need to decrease this.
64
66
  CELERY_WORKER_CONCURRENCY: int | None = None
67
+
68
+ # Make the task received log message include the task's arguments.
69
+ celery.app.trace.LOG_RECEIVED = """\
70
+ Task %(name)s[%(id)s] received: (%(args)s, %(kwargs)s)\
71
+ """
@@ -1,7 +1,12 @@
1
+ from resonant_settings._env import env
2
+
1
3
  # Acknowledge early in development, which will help prevent failing or
2
4
  # long-running tasks from being started automatically every time the worker
3
5
  # process restarts; this more aggressively flushes the task queue.
4
6
  CELERY_TASK_ACKS_LATE = False
5
7
 
8
+ CELERY_TASK_ALWAYS_EAGER: bool = env.bool("DJANGO_CELERY_TASK_ALWAYS_EAGER", default=False)
9
+ CELERY_TASK_EAGER_PROPAGATES = CELERY_TASK_ALWAYS_EAGER
10
+
6
11
  # In development, run without concurrency.
7
12
  CELERY_WORKER_CONCURRENCY: int | None = 1
@@ -22,5 +22,7 @@ MINIO_STORAGE_MEDIA_BUCKET_NAME = minio_url.path.lstrip("/")
22
22
  MINIO_STORAGE_MEDIA_URL: str | None = env.str("DJANGO_MINIO_STORAGE_MEDIA_URL", default=None)
23
23
 
24
24
  MINIO_STORAGE_AUTO_CREATE_MEDIA_BUCKET = True
25
- MINIO_STORAGE_AUTO_CREATE_MEDIA_POLICY = "READ_WRITE"
25
+ # Make the bucket private to the public
26
+ MINIO_STORAGE_AUTO_CREATE_MEDIA_POLICY = "NONE"
27
+ # Issue signed URLs to provide any read access
26
28
  MINIO_STORAGE_MEDIA_USE_PRESIGNED = True
File without changes