Skip to content

Commit c22c750

Browse files
committed
Fix dynaconf's django integration code
Thre should be no settings activity after dyanconf's instantiation. Assisted-by: Claude (Claude Code)
1 parent 5ec42cf commit c22c750

1 file changed

Lines changed: 49 additions & 34 deletions

File tree

pulpcore/app/settings.py

Lines changed: 49 additions & 34 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
@@ -629,6 +628,51 @@ def enable_v4_hook(settings):
629628
return data
630629

631630

631+
def api_root_hook(settings):
632+
# protocol://host:port/{API_ROOT}{domain}/api/{version}/
633+
# All of the below are DEPRECATED, and should be replaced by calling
634+
# pulpcore.plugin.find_url.find_api_root() (q.v.)
635+
if settings.API_ROOT_REWRITE_HEADER:
636+
api_root = "/<path:api_root>/"
637+
else:
638+
api_root = settings.API_ROOT
639+
return {
640+
"dynaconf_merge": False, # overwrite, not user configurable
641+
"V3_API_ROOT": api_root + "api/v3/",
642+
"V3_DOMAIN_API_ROOT": api_root + "<slug:pulp_domain>/api/v3/",
643+
"V3_API_ROOT_NO_FRONT_SLASH": (api_root + "api/v3/").lstrip("/"),
644+
"V3_DOMAIN_API_ROOT_NO_FRONT_SLASH": (api_root + "<slug:pulp_domain>/api/v3/").lstrip("/"),
645+
}
646+
647+
648+
def forbidden_checksums_hook(settings):
649+
return {
650+
"dynaconf_merge": False, # overwrite, not user configurable
651+
"FORBIDDEN_CHECKSUMS": sorted(
652+
set(constants.ALL_KNOWN_CONTENT_CHECKSUMS).difference(
653+
settings.ALLOWED_CONTENT_CHECKSUMS
654+
)
655+
),
656+
}
657+
658+
659+
def validate_db_encryption_key_hook(settings):
660+
if Path(sys.argv[0]).name in ["pytest", "sphinx-build"] or (
661+
len(sys.argv) >= 2 and sys.argv[1] in ["collectstatic", "openapi"]
662+
):
663+
return {}
664+
try:
665+
with open(settings.DB_ENCRYPTION_KEY, "rb") as key_file:
666+
Fernet(key_file.read())
667+
except Exception as ex:
668+
raise ImproperlyConfigured(
669+
"Could not load DB_ENCRYPTION_KEY file '{file}': {err}".format(
670+
file=settings.DB_ENCRYPTION_KEY, err=ex
671+
)
672+
)
673+
return {}
674+
675+
632676
del preload_settings
633677

634678
settings = DjangoDynaconf(
@@ -657,40 +701,11 @@ def enable_v4_hook(settings):
657701
otel_middleware_hook,
658702
saml2_settings_hook,
659703
enable_v4_hook,
704+
api_root_hook,
705+
forbidden_checksums_hook,
706+
validate_db_encryption_key_hook,
660707
),
661708
dynaboxify=False,
662709
)
663710

664-
_logger = getLogger(__name__)
665-
666-
667-
if not (
668-
Path(sys.argv[0]).name in ["pytest", "sphinx-build"]
669-
or (len(sys.argv) >= 2 and sys.argv[1] in ["collectstatic", "openapi"])
670-
):
671-
try:
672-
with open(DB_ENCRYPTION_KEY, "rb") as key_file:
673-
Fernet(key_file.read())
674-
except Exception as ex:
675-
raise ImproperlyConfigured(
676-
("Could not load DB_ENCRYPTION_KEY file '{file}': {err}").format(
677-
file=DB_ENCRYPTION_KEY, err=ex
678-
)
679-
)
680-
681-
682-
FORBIDDEN_CHECKSUMS = set(constants.ALL_KNOWN_CONTENT_CHECKSUMS).difference(
683-
ALLOWED_CONTENT_CHECKSUMS
684-
)
685-
686-
# protocol://host:port/{API_ROOT}{domain}/api/{version}/
687-
# All of the below are DEPRECATED, and should be replaced by calling
688-
# pulpcore.plugin.find_url.find_api_root() (q.v.)
689-
if settings.API_ROOT_REWRITE_HEADER:
690-
api_root = "/<path:api_root>/"
691-
else:
692-
api_root = settings.API_ROOT
693-
settings.set("V3_API_ROOT", api_root + "api/v3/") # Not user configurable
694-
settings.set("V3_DOMAIN_API_ROOT", api_root + "<slug:pulp_domain>/api/v3/")
695-
settings.set("V3_API_ROOT_NO_FRONT_SLASH", settings.V3_API_ROOT.lstrip("/"))
696-
settings.set("V3_DOMAIN_API_ROOT_NO_FRONT_SLASH", settings.V3_DOMAIN_API_ROOT.lstrip("/"))
711+
# HERE ENDS DYNACONF EXTENSION LOAD (No more code below this line)

0 commit comments

Comments
 (0)