"""Where the rest of the portal gets its adapters. Tests install fakes with `install`.""" from __future__ import annotations from django.conf import settings from .directory import Directory, LdapDirectory from .idp import Idp, OidcIdp from .mail import Mailer, SmtpMailer _directory: Directory | None = None _idp: Idp | None = None _mailer: Mailer | None = None def get_directory() -> Directory: global _directory if _directory is None: _directory = LdapDirectory(settings.DIRECTORY) return _directory def get_idp() -> Idp: global _idp if _idp is None: _idp = OidcIdp(settings.OIDC) return _idp def get_mailer() -> Mailer: global _mailer if _mailer is None: _mailer = SmtpMailer(settings.SMTP) return _mailer def install( directory: Directory | None = None, idp: Idp | None = None, mailer: Mailer | None = None ) -> None: """Replace the adapters (tests). Passing None for one leaves it to be built on first use.""" global _directory, _idp, _mailer _directory, _idp, _mailer = directory, idp, mailer