Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions requirements/docs.txt
Original file line number Diff line number Diff line change
Expand Up @@ -128,9 +128,9 @@ gitdb==4.0.11 \
--hash=sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4 \
--hash=sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b
# via gitpython
gitpython==3.1.50 \
--hash=sha256:80da2d12504d52e1f998772dc5baf6e553f8d2fcfe1fcc226c9d9a2ee3372dcc \
--hash=sha256:d352abe2908d07355014abdd21ddf798c2a961469239afec4962e9da884858f9
gitpython==3.1.58 \
--hash=sha256:621416df10ef3fd0e19fabf9172ddeed0fa704d353d04f194eec56a625a95b22 \
--hash=sha256:d331e722577f0fd7fc1f857419b3ecc07af66282b933d2a4d95f84a042fdd50f
# via mkdocs-git-revision-date-plugin
idna==3.15 \
--hash=sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8 \
Expand Down
52 changes: 40 additions & 12 deletions src/django_errors/mail_identity.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand All @@ -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:
Expand All @@ -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]<IdentityTag>`` 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)} "
Expand Down
Loading