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
@@ -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+
537579del preload_settings
538580
539581settings = 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