from django.conf import settings class PingcapCookieSsoSettings: all_settings = [ 'IDP_API_TOKEN', 'IDP_API_ENDPOINT', 'SSO_COOKIE_NAME', 'PU_SSO_SYNC_API_TOKEN', 'JWT_PUBLIC_KEY' ] default_settings = { 'IDP_API_ENDPOINT': 'https://accounts.pingcap.com/api/_/sso/session-info', 'SSO_COOKIE_NAME': 'ssid' } def __init__(self): self.user_settings = getattr(settings, "PINGCAP_COOKIE_SSO", {}) def check(self): for st in self.all_settings: getattr(self, st) def __getattr__(self, attr): try: val = self.user_settings[attr] except KeyError: try: val = self.default_settings[attr] except KeyError as exc: raise KeyError( "PingCAP COOKIE-SSO missed required settings: %s, " "please defined `PINGCAP_COOKIE_SSO = {'%s': ..}` " "in your settings." % (attr, attr)) from exc # Cache result setattr(self, attr, val) return val sso_settings = PingcapCookieSsoSettings()