Skip to content

Commit a6e481f

Browse files
pedro-psbmdellweg
authored andcommitted
Fix dynaconf's django integration code
Thre should be no settings activity after dyanconf's instantiation. Assisted-by: Claude (Claude Code) (cherry picked from commit 0a06d30)
1 parent d071811 commit a6e481f

1 file changed

Lines changed: 50 additions & 32 deletions

File tree

pulpcore/app/settings.py

Lines changed: 50 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
from contextlib import suppress
1313
from importlib import import_module
1414
from importlib.metadata import entry_points
15-
from logging import getLogger
1615
from pathlib import Path
1716

1817
from cryptography.fernet import Fernet
@@ -511,6 +510,49 @@ def otel_middleware_hook(settings):
511510
return data
512511

513512

513+
def api_root_hook(settings):
514+
# protocol://host:port/{API_ROOT}{domain}/api/{version}/
515+
# All of the below are DEPRECATED, and should be replaced by calling
516+
# pulpcore.plugin.find_url.find_api_root() (q.v.)
517+
if settings.API_ROOT_REWRITE_HEADER:
518+
api_root = "/<path:api_root>/"
519+
else:
520+
api_root = settings.API_ROOT
521+
return {
522+
"V3_API_ROOT": api_root + "api/v3/",
523+
"V3_DOMAIN_API_ROOT": api_root + "<slug:pulp_domain>/api/v3/",
524+
"V3_API_ROOT_NO_FRONT_SLASH": (api_root + "api/v3/").lstrip("/"),
525+
"V3_DOMAIN_API_ROOT_NO_FRONT_SLASH": (api_root + "<slug:pulp_domain>/api/v3/").lstrip("/"),
526+
}
527+
528+
529+
def forbidden_checksums_hook(settings):
530+
return {
531+
"FORBIDDEN_CHECKSUMS": sorted(
532+
set(constants.ALL_KNOWN_CONTENT_CHECKSUMS).difference(
533+
settings.ALLOWED_CONTENT_CHECKSUMS
534+
)
535+
),
536+
}
537+
538+
539+
def validate_db_encryption_key_hook(settings):
540+
if Path(sys.argv[0]).name in ["pytest", "sphinx-build"] or (
541+
len(sys.argv) >= 2 and sys.argv[1] in ["collectstatic", "openapi"]
542+
):
543+
return {}
544+
try:
545+
with open(settings.DB_ENCRYPTION_KEY, "rb") as key_file:
546+
Fernet(key_file.read())
547+
except Exception as ex:
548+
raise ImproperlyConfigured(
549+
"Could not load DB_ENCRYPTION_KEY file '{file}': {err}".format(
550+
file=settings.DB_ENCRYPTION_KEY, err=ex
551+
)
552+
)
553+
return {}
554+
555+
514556
del preload_settings
515557

516558
settings = DjangoDynaconf(
@@ -530,36 +572,12 @@ def otel_middleware_hook(settings):
530572
json_header_auth_validator,
531573
authentication_json_header_openapi_security_scheme_validator,
532574
],
533-
post_hooks=(otel_middleware_hook,),
534-
)
535-
536-
_logger = getLogger(__name__)
537-
538-
539-
if not (
540-
Path(sys.argv[0]).name in ["pytest", "sphinx-build"]
541-
or (len(sys.argv) >= 2 and sys.argv[1] in ["collectstatic", "openapi"])
542-
):
543-
try:
544-
with open(DB_ENCRYPTION_KEY, "rb") as key_file:
545-
Fernet(key_file.read())
546-
except Exception as ex:
547-
raise ImproperlyConfigured(
548-
("Could not load DB_ENCRYPTION_KEY file '{file}': {err}").format(
549-
file=DB_ENCRYPTION_KEY, err=ex
550-
)
551-
)
552-
553-
554-
FORBIDDEN_CHECKSUMS = set(constants.ALL_KNOWN_CONTENT_CHECKSUMS).difference(
555-
ALLOWED_CONTENT_CHECKSUMS
575+
post_hooks=(
576+
otel_middleware_hook,
577+
api_root_hook,
578+
forbidden_checksums_hook,
579+
validate_db_encryption_key_hook,
580+
),
556581
)
557582

558-
if settings.API_ROOT_REWRITE_HEADER:
559-
api_root = "/<path:api_root>/"
560-
else:
561-
api_root = settings.API_ROOT
562-
settings.set("V3_API_ROOT", api_root + "api/v3/") # Not user configurable
563-
settings.set("V3_DOMAIN_API_ROOT", api_root + "<slug:pulp_domain>/api/v3/")
564-
settings.set("V3_API_ROOT_NO_FRONT_SLASH", settings.V3_API_ROOT.lstrip("/"))
565-
settings.set("V3_DOMAIN_API_ROOT_NO_FRONT_SLASH", settings.V3_DOMAIN_API_ROOT.lstrip("/"))
583+
# HERE ENDS DYNACONF EXTENSION LOAD (No more code below this line)

0 commit comments

Comments
 (0)