diff --git a/requirements/py310-django42.txt b/requirements/py310-django42.txt index 42e6ec09..f5f66693 100644 --- a/requirements/py310-django42.txt +++ b/requirements/py310-django42.txt @@ -8,9 +8,9 @@ asgiref==3.12.1 \ --hash=sha256:59dcb51c272ad209d59bed5708a64a333083e86017d7fcdd67498eeab7784340 \ --hash=sha256:fe386d1c2bff7259ea95929266d12a8cf9a8b5a1c2598402967d8792e7a7c094 # via django -django==4.2.30 \ - --hash=sha256:4d07aaf1c62f9984842b67c2874ebbf7056a17be253860299b93ae1881faad65 \ - --hash=sha256:4ebc7a434e3819db6cf4b399fb5b3f536310a30e8486f08b66886840be84b37c +django==5.2.16 \ + --hash=sha256:04f354bf9d807a86ad1a8392fe3808d362358a8eafc322848e0e43e59b24371d \ + --hash=sha256:59ea02020c3136fce14bef0bbece21a10a4febef5eed1c51c22ae468efa22200 # via -r requirements/runtime.in sqlparse==0.6.0 \ --hash=sha256:113c35c75365ab9cc9c7231d68c6428fb11c085fc8e9eb1ad659b7ddbf6cd2b9 \ diff --git a/requirements/py310-django52.txt b/requirements/py310-django52.txt index cde4edfa..691db0d1 100644 --- a/requirements/py310-django52.txt +++ b/requirements/py310-django52.txt @@ -8,9 +8,9 @@ asgiref==3.12.1 \ --hash=sha256:59dcb51c272ad209d59bed5708a64a333083e86017d7fcdd67498eeab7784340 \ --hash=sha256:fe386d1c2bff7259ea95929266d12a8cf9a8b5a1c2598402967d8792e7a7c094 # via django -django==5.2.17 \ - --hash=sha256:9d4d93be539a18ab80d058eb515900e10951e04c537c5a6b394fc49528d3251f \ - --hash=sha256:f04fb3b36ee119e1af4fa1d397d5fd6cf12700f49321e84d4f4c642c5b1973db +django==5.2.16 \ + --hash=sha256:04f354bf9d807a86ad1a8392fe3808d362358a8eafc322848e0e43e59b24371d \ + --hash=sha256:59ea02020c3136fce14bef0bbece21a10a4febef5eed1c51c22ae468efa22200 # via -r requirements/runtime.in sqlparse==0.6.0 \ --hash=sha256:113c35c75365ab9cc9c7231d68c6428fb11c085fc8e9eb1ad659b7ddbf6cd2b9 \ diff --git a/requirements/py311-django42.txt b/requirements/py311-django42.txt index 3597aed2..843c66f4 100644 --- a/requirements/py311-django42.txt +++ b/requirements/py311-django42.txt @@ -8,9 +8,9 @@ asgiref==3.12.1 \ --hash=sha256:59dcb51c272ad209d59bed5708a64a333083e86017d7fcdd67498eeab7784340 \ --hash=sha256:fe386d1c2bff7259ea95929266d12a8cf9a8b5a1c2598402967d8792e7a7c094 # via django -django==4.2.30 \ - --hash=sha256:4d07aaf1c62f9984842b67c2874ebbf7056a17be253860299b93ae1881faad65 \ - --hash=sha256:4ebc7a434e3819db6cf4b399fb5b3f536310a30e8486f08b66886840be84b37c +django==5.2.16 \ + --hash=sha256:04f354bf9d807a86ad1a8392fe3808d362358a8eafc322848e0e43e59b24371d \ + --hash=sha256:59ea02020c3136fce14bef0bbece21a10a4febef5eed1c51c22ae468efa22200 # via -r requirements/runtime.in sqlparse==0.6.0 \ --hash=sha256:113c35c75365ab9cc9c7231d68c6428fb11c085fc8e9eb1ad659b7ddbf6cd2b9 \ diff --git a/requirements/py311-django52.txt b/requirements/py311-django52.txt index 1f6242e9..ceadba68 100644 --- a/requirements/py311-django52.txt +++ b/requirements/py311-django52.txt @@ -8,9 +8,9 @@ asgiref==3.12.1 \ --hash=sha256:59dcb51c272ad209d59bed5708a64a333083e86017d7fcdd67498eeab7784340 \ --hash=sha256:fe386d1c2bff7259ea95929266d12a8cf9a8b5a1c2598402967d8792e7a7c094 # via django -django==5.2.17 \ - --hash=sha256:9d4d93be539a18ab80d058eb515900e10951e04c537c5a6b394fc49528d3251f \ - --hash=sha256:f04fb3b36ee119e1af4fa1d397d5fd6cf12700f49321e84d4f4c642c5b1973db +django==5.2.16 \ + --hash=sha256:04f354bf9d807a86ad1a8392fe3808d362358a8eafc322848e0e43e59b24371d \ + --hash=sha256:59ea02020c3136fce14bef0bbece21a10a4febef5eed1c51c22ae468efa22200 # via -r requirements/runtime.in sqlparse==0.6.0 \ --hash=sha256:113c35c75365ab9cc9c7231d68c6428fb11c085fc8e9eb1ad659b7ddbf6cd2b9 \ diff --git a/requirements/py312-django42.txt b/requirements/py312-django42.txt index 914a2bbd..798a7f79 100644 --- a/requirements/py312-django42.txt +++ b/requirements/py312-django42.txt @@ -8,9 +8,9 @@ asgiref==3.12.1 \ --hash=sha256:59dcb51c272ad209d59bed5708a64a333083e86017d7fcdd67498eeab7784340 \ --hash=sha256:fe386d1c2bff7259ea95929266d12a8cf9a8b5a1c2598402967d8792e7a7c094 # via django -django==4.2.30 \ - --hash=sha256:4d07aaf1c62f9984842b67c2874ebbf7056a17be253860299b93ae1881faad65 \ - --hash=sha256:4ebc7a434e3819db6cf4b399fb5b3f536310a30e8486f08b66886840be84b37c +django==5.2.16 \ + --hash=sha256:04f354bf9d807a86ad1a8392fe3808d362358a8eafc322848e0e43e59b24371d \ + --hash=sha256:59ea02020c3136fce14bef0bbece21a10a4febef5eed1c51c22ae468efa22200 # via -r requirements/runtime.in sqlparse==0.6.0 \ --hash=sha256:113c35c75365ab9cc9c7231d68c6428fb11c085fc8e9eb1ad659b7ddbf6cd2b9 \ diff --git a/requirements/py312-django52.txt b/requirements/py312-django52.txt index a7a0e0c8..00217ebc 100644 --- a/requirements/py312-django52.txt +++ b/requirements/py312-django52.txt @@ -8,9 +8,9 @@ asgiref==3.12.1 \ --hash=sha256:59dcb51c272ad209d59bed5708a64a333083e86017d7fcdd67498eeab7784340 \ --hash=sha256:fe386d1c2bff7259ea95929266d12a8cf9a8b5a1c2598402967d8792e7a7c094 # via django -django==5.2.17 \ - --hash=sha256:9d4d93be539a18ab80d058eb515900e10951e04c537c5a6b394fc49528d3251f \ - --hash=sha256:f04fb3b36ee119e1af4fa1d397d5fd6cf12700f49321e84d4f4c642c5b1973db +django==5.2.16 \ + --hash=sha256:04f354bf9d807a86ad1a8392fe3808d362358a8eafc322848e0e43e59b24371d \ + --hash=sha256:59ea02020c3136fce14bef0bbece21a10a4febef5eed1c51c22ae468efa22200 # via -r requirements/runtime.in sqlparse==0.6.0 \ --hash=sha256:113c35c75365ab9cc9c7231d68c6428fb11c085fc8e9eb1ad659b7ddbf6cd2b9 \ diff --git a/requirements/py313-django52.txt b/requirements/py313-django52.txt index 0d384bb7..4294b72e 100644 --- a/requirements/py313-django52.txt +++ b/requirements/py313-django52.txt @@ -8,9 +8,9 @@ asgiref==3.12.1 \ --hash=sha256:59dcb51c272ad209d59bed5708a64a333083e86017d7fcdd67498eeab7784340 \ --hash=sha256:fe386d1c2bff7259ea95929266d12a8cf9a8b5a1c2598402967d8792e7a7c094 # via django -django==5.2.17 \ - --hash=sha256:9d4d93be539a18ab80d058eb515900e10951e04c537c5a6b394fc49528d3251f \ - --hash=sha256:f04fb3b36ee119e1af4fa1d397d5fd6cf12700f49321e84d4f4c642c5b1973db +django==5.2.16 \ + --hash=sha256:04f354bf9d807a86ad1a8392fe3808d362358a8eafc322848e0e43e59b24371d \ + --hash=sha256:59ea02020c3136fce14bef0bbece21a10a4febef5eed1c51c22ae468efa22200 # via -r requirements/runtime.in sqlparse==0.6.0 \ --hash=sha256:113c35c75365ab9cc9c7231d68c6428fb11c085fc8e9eb1ad659b7ddbf6cd2b9 \ diff --git a/requirements/py314-django52.txt b/requirements/py314-django52.txt index 432e0724..ea295d76 100644 --- a/requirements/py314-django52.txt +++ b/requirements/py314-django52.txt @@ -8,9 +8,9 @@ asgiref==3.12.1 \ --hash=sha256:59dcb51c272ad209d59bed5708a64a333083e86017d7fcdd67498eeab7784340 \ --hash=sha256:fe386d1c2bff7259ea95929266d12a8cf9a8b5a1c2598402967d8792e7a7c094 # via django -django==5.2.17 \ - --hash=sha256:9d4d93be539a18ab80d058eb515900e10951e04c537c5a6b394fc49528d3251f \ - --hash=sha256:f04fb3b36ee119e1af4fa1d397d5fd6cf12700f49321e84d4f4c642c5b1973db +django==5.2.16 \ + --hash=sha256:04f354bf9d807a86ad1a8392fe3808d362358a8eafc322848e0e43e59b24371d \ + --hash=sha256:59ea02020c3136fce14bef0bbece21a10a4febef5eed1c51c22ae468efa22200 # via -r requirements/runtime.in sqlparse==0.6.0 \ --hash=sha256:113c35c75365ab9cc9c7231d68c6428fb11c085fc8e9eb1ad659b7ddbf6cd2b9 \ diff --git a/src/django_errors/mail_identity.py b/src/django_errors/mail_identity.py index 5cc380fa..b4866461 100644 --- a/src/django_errors/mail_identity.py +++ b/src/django_errors/mail_identity.py @@ -39,23 +39,43 @@ def _read_env_file(path: str | Path) -> dict[str, str]: def identity_tag( *, - scope: Optional[str] = None, - role: Optional[str] = None, - hostname: Optional[str] = None, - install_tag: Optional[str] = None, + scope: str | None = None, + role: str | None = None, + hostname: str | None = None, + install_tag: str | None = None, env_file: str | Path = _DEFAULT_ENV_FILE, - environ: Optional[Mapping[str, str]] = None, + environ: Mapping[str, str] | None = None, ) -> str: """Return the compact identity tag for this host.""" env = environ if environ is not None else os.environ file_vars = _read_env_file(env_file) - cached = (env.get("SH_MAIL_IDENTITY_TAG") or file_vars.get("SH_MAIL_IDENTITY_TAG") or "").strip() - if cached and scope is None and role is None and hostname is None and install_tag is None: + cached = ( + env.get("SH_MAIL_IDENTITY_TAG") + or file_vars.get("SH_MAIL_IDENTITY_TAG") + or "" + ).strip() + if ( + cached + and scope is None + and role is None + and hostname is None + and install_tag is None + ): return cached - scope_v = (scope or env.get("SH_OS_Scope") or file_vars.get("SH_OS_Scope") or "unknown").strip() - role_v = (role or env.get("SH_Host_Role") or file_vars.get("SH_Host_Role") or "unknown").strip() + scope_v = ( + scope + or env.get("SH_OS_Scope") + or file_vars.get("SH_OS_Scope") + or "unknown" + ).strip() + role_v = ( + role + or env.get("SH_Host_Role") + or file_vars.get("SH_Host_Role") + or "unknown" + ).strip() host_v = ( hostname or env.get("SH_OS_HostName") @@ -65,7 +85,11 @@ def identity_tag( install_v = ( install_tag if install_tag is not None - else (env.get("SH_Mail_InstallTag") or file_vars.get("SH_Mail_InstallTag") or "") + else ( + env.get("SH_Mail_InstallTag") + or file_vars.get("SH_Mail_InstallTag") + or "" + ) ).strip() if scope_v == "PROD" and role_v in _PROD_COMPACT_ROLES: @@ -80,13 +104,17 @@ def identity_tag( def subject_prefix( kind: str = "app", *, - environ: Optional[Mapping[str, str]] = None, + environ: Mapping[str, str] | None = None, env_file: str | Path = _DEFAULT_ENV_FILE, ) -> str: """Return ``[kind]`` with trailing space (Django EMAIL_SUBJECT_PREFIX).""" env = environ if environ is not None else os.environ file_vars = _read_env_file(env_file) - explicit = (env.get("EMAIL_SUBJECT_PREFIX") or file_vars.get("EMAIL_SUBJECT_PREFIX") or "").rstrip() + explicit = ( + env.get("EMAIL_SUBJECT_PREFIX") + or file_vars.get("EMAIL_SUBJECT_PREFIX") + or "" + ).rstrip() if explicit and kind == "app": return f"{explicit} " if not explicit.endswith(" ") else explicit return f"[{kind}]{identity_tag(environ=env, env_file=env_file)} "