project-callisto/callisto-core

View on GitHub
callisto_core/utils/tenant_api.py

Summary

Maintainability
A
0 mins
Test Coverage
from copy import copy
from distutils.util import strtobool


def cast_string_to_type(value: str, cast: [str, bool, int]) -> [str, bool, int]:
    if cast is str:
        return value
    elif cast is bool:
        return strtobool(value)
    elif cast is int:
        return int(value)
    else:
        raise KeyError("Invalid `cast` param")


class CallistoCoreTenantApi(object):
    def get_current_domain(self):
        return 1

    @staticmethod
    def site_settings(var, cast=str, request=None, site_id=1):
        """
        Implement this function to provide multi-tenant functionality for
        you application. You need to be able to derive your current tenant from
        either request or site_id (preferably both)

        The implementation here is a naive mock of a similar implementation in
        callisto campus

        Use like:
            from callisto_core.utils.tenant_api import TenantApi
            TenantApi.site_settings('SOME_NUMBER', cast=int, site_id=10)
        """
        if request:
            try:
                site_id = request.site.id
            except BaseException:
                site_id = 1

        default_values = {
            "DEMO_MODE": False,
            "DISABLE_SIGNUP": False,
            "SCHOOL_SHORTNAME": "callisto-core",
            "COORDINATOR_NAME": "COORDINATOR_NAME",
            "COORDINATOR_EMAIL": "COORDINATOR_EMAIL@example.com",
            "SCHOOL_EMAIL_DOMAIN": "example.com",
            "COORDINATOR_PUBLIC_KEY": """
-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: GPGTools - https://gpgtools.org

mQENBFdY2/0BCADse8jTgEgWtmHr3XkWVXh3zgxN2ubEI4sFXP4NK5yn8MVnFd2/
SdADsbZ7cCpVm2M/zAaEjbAK7Cvlomiuw2tuyT3EQrfLF9NHb7fIgANuA6VWquNO
wqOE/S/GzEYNtC/a0JqcYF82dzEb3ZvMhezvDuEwCfOEtrQV9sXUUEakQyo/0bRO
dLVuR/ralT9J0wb8RXE9dEkWE38mMgH/GFCIGen+l3gJJOYv/k3xlMcF+Uu7HOeZ
LT31CQIXQkMvUkcbvBKm5ynWvLbcfUcKX0L/YoCUbfd8Mf5KIg3rFMMJZWWOduuq
ePJN/Gcjv69CLB7quZSYSYP6s+1SyKv9HzjHABEBAAG0DWNhbGxpc3RvLWNvcmWJ
ATcEEwEKACEFAldY2/0CGwMFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQ6+nJ
/nll+xyUaAgAvtQrBbHRPMviyIv5x8tLOYQeSdSZQ4OgNLYO6fQJkTdQX0p/OLCA
D2gSOj8pkzrwsh2OMXhuHaG2oUZzbChVy7ErkAN2UiWR1B9sV2IQ+A6F+ruXOjZO
M3cMlh/67gZQR7NfOFdsAjHATVcexHEWqfZAALl3Gt6jhxw9XpAzuAWnvGQSWFyg
7IE1r/MkFfsn56hbO4XMhDbiwENPtaTG1NUtJQLpykgfKgevSAOyKUEaLQwTf3iI
AQHnjf+0fR6p4Cj0QJFIADRzSxEcQ/tbXr9HDJct1w2wANrfSxwCxW/FDW/QpWqH
CyD4LzZm+C5DjSYuT06r7j/Wd6fuIqgcsrkBDQRXWNv9AQgAt7GEcgVIKmN/SCDA
UOY9VWib3VrXbpCg7Kwy54VDrC79WsZN5RmVIdjcTSzZz8xgfMSPtDrt6izp9WCz
tcRri+ont8uRNf5k/FPVG9Db5hZdTJS/kNspAOT8iuno4pmeihRvLEcFkvjC9tAM
eGMX4/CzOgcZLn81pekrfaLdRa62sl2S1w7UlU0JzsXf19IfGy6pXKMtE3a8APjH
JDI7cNyumPPXHR0Aksf4NRh5DjuwExKTQKP5yETWxRljPbump34PP5oHdIe36bGr
c2BAM7uRRWHz19PatFIeDOnICk8FcCK71aor7XCLlUta/iILQUeJd9YH92OwIHUw
7p8WmQARAQABiQEfBBgBCgAJBQJXWNv9AhsMAAoJEOvpyf55Zfsc55UH/i2NeMrZ
csE2gfoUsLmLYttVr5n1A4KH0qYL37NAqNq/IOQu3EvTSlyUk/r7Oi1qTYrxSKsB
1xCuyMYkjhzwFtAaN77XTd7YXqyMCNDM4DvPgVzAP/YV1xaDmcr3VG9K42JRL1EA
BnV6NcykEFwf+CCMHWX9R6zOSwurEMda6qNKdO5+wy2JOOl7IWe0IxgE3KDOmRdv
TpQMuo8A2LtGRdrWrl1C+17N30Zx7Xjy7zg8W8CkEPZEy3dPXZpH4HnV85tIKNk+
wcFlYKGBlea/REi7+EAtE0u/nX2FB6adtMwopHlyTonKURJnInM9/T0UAwiNxfAB
cL+QqgshFt79Yh0=
=3BvZ
-----END PGP PUBLIC KEY BLOCK-----
            """,
        }

        defaults_with_signup_disabled = copy(default_values)
        defaults_with_signup_disabled["DISABLE_SIGNUP"] = True

        defaults_with_demo_mode_enabled = copy(default_values)
        defaults_with_demo_mode_enabled["DEMO_MODE"] = True

        site_values = {
            1: default_values,
            2: defaults_with_signup_disabled,
            3: default_values,
            4: defaults_with_demo_mode_enabled,
        }.get(site_id, {})

        value = site_values.get(var, "")
        value = cast_string_to_type(str(value), cast)

        return value