1212from contextlib import suppress
1313from importlib import import_module
1414from importlib .metadata import entry_points
15- from logging import getLogger
1615from pathlib import Path
1716
1817from 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+
514556del preload_settings
515557
516558settings = 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