Skip to content

Commit 7546a87

Browse files
pedro-psbpulpbot
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 02e9242 commit 7546a87

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
@@ -534,6 +533,49 @@ def otel_middleware_hook(settings):
534533
return data
535534

536535

536+
def api_root_hook(settings):
537+
# protocol://host:port/{API_ROOT}{domain}/api/{version}/
538+
# All of the below are DEPRECATED, and should be replaced by calling
539+
# pulpcore.plugin.find_url.find_api_root() (q.v.)
540+
if settings.API_ROOT_REWRITE_HEADER:
541+
api_root = "/<path:api_root>/"
542+
else:
543+
api_root = settings.API_ROOT
544+
return {
545+
"V3_API_ROOT": api_root + "api/v3/",
546+
"V3_DOMAIN_API_ROOT": api_root + "<slug:pulp_domain>/api/v3/",
547+
"V3_API_ROOT_NO_FRONT_SLASH": (api_root + "api/v3/").lstrip("/"),
548+
"V3_DOMAIN_API_ROOT_NO_FRONT_SLASH": (api_root + "<slug:pulp_domain>/api/v3/").lstrip("/"),
549+
}
550+
551+
552+
def forbidden_checksums_hook(settings):
553+
return {
554+
"FORBIDDEN_CHECKSUMS": sorted(
555+
set(constants.ALL_KNOWN_CONTENT_CHECKSUMS).difference(
556+
settings.ALLOWED_CONTENT_CHECKSUMS
557+
)
558+
),
559+
}
560+
561+
562+
def validate_db_encryption_key_hook(settings):
563+
if Path(sys.argv[0]).name in ["pytest", "sphinx-build"] or (
564+
len(sys.argv) >= 2 and sys.argv[1] in ["collectstatic", "openapi"]
565+
):
566+
return {}
567+
try:
568+
with open(settings.DB_ENCRYPTION_KEY, "rb") as key_file:
569+
Fernet(key_file.read())
570+
except Exception as ex:
571+
raise ImproperlyConfigured(
572+
"Could not load DB_ENCRYPTION_KEY file '{file}': {err}".format(
573+
file=settings.DB_ENCRYPTION_KEY, err=ex
574+
)
575+
)
576+
return {}
577+
578+
537579
del preload_settings
538580

539581
settings = DjangoDynaconf(
@@ -554,36 +596,12 @@ def otel_middleware_hook(settings):
554596
authentication_json_header_openapi_security_scheme_validator,
555597
otel_pulp_api_histogram_buckets_validator,
556598
],
557-
post_hooks=(otel_middleware_hook,),
558-
)
559-
560-
_logger = getLogger(__name__)
561-
562-
563-
if not (
564-
Path(sys.argv[0]).name in ["pytest", "sphinx-build"]
565-
or (len(sys.argv) >= 2 and sys.argv[1] in ["collectstatic", "openapi"])
566-
):
567-
try:
568-
with open(DB_ENCRYPTION_KEY, "rb") as key_file:
569-
Fernet(key_file.read())
570-
except Exception as ex:
571-
raise ImproperlyConfigured(
572-
("Could not load DB_ENCRYPTION_KEY file '{file}': {err}").format(
573-
file=DB_ENCRYPTION_KEY, err=ex
574-
)
575-
)
576-
577-
578-
FORBIDDEN_CHECKSUMS = set(constants.ALL_KNOWN_CONTENT_CHECKSUMS).difference(
579-
ALLOWED_CONTENT_CHECKSUMS
599+
post_hooks=(
600+
otel_middleware_hook,
601+
api_root_hook,
602+
forbidden_checksums_hook,
603+
validate_db_encryption_key_hook,
604+
),
580605
)
581606

582-
if settings.API_ROOT_REWRITE_HEADER:
583-
api_root = "/<path:api_root>/"
584-
else:
585-
api_root = settings.API_ROOT
586-
settings.set("V3_API_ROOT", api_root + "api/v3/") # Not user configurable
587-
settings.set("V3_DOMAIN_API_ROOT", api_root + "<slug:pulp_domain>/api/v3/")
588-
settings.set("V3_API_ROOT_NO_FRONT_SLASH", settings.V3_API_ROOT.lstrip("/"))
589-
settings.set("V3_DOMAIN_API_ROOT_NO_FRONT_SLASH", settings.V3_DOMAIN_API_ROOT.lstrip("/"))
607+
# HERE ENDS DYNACONF EXTENSION LOAD (No more code below this line)

0 commit comments

Comments
 (0)