"""Cache helper functions for Tenant.""" from typing import List from uuid import UUID from pdp import config from pdp.constants.constants import TenantType from pdp.utils.cache import DELIMITER_KEY_VAL TENANT_HIERARCHY_KEY_PREFIX = "tenant_hierarchy" KEY_DELIMITER = "_" TENANT_HIERARCHY_CACHE_TTL_BY_TENANT_TYPE = { # PP-1072: Add custom TTL for collaborator TenantType.TENANT_TYPE_PARENT_COMPANY: config.CACHE_TTL_SECONDS_TENANT_HIERARCHY_PARENT_COMPANY, # noqa: E501 TenantType.TENANT_TYPE_COMPANY_BRAND: config.CACHE_TTL_SECONDS_TENANT_HIERARCHY_COMPANY_BRAND, # noqa: E501 TenantType.TENANT_TYPE_ACCOUNT: config.CACHE_TTL_SECONDS_TENANT_HIERARCHY_ACCOUNT, TenantType.TENANT_TYPE_SUBACCOUNT: config.CACHE_TTL_SECONDS_TENANT_HIERARCHY_SUBACCOUNT, # noqa: E501 TenantType.TENANT_TYPE_LABEL_PARTICIPANT: config.CACHE_TTL_SECONDS_TENANT_HIERARCHY_LABEL_PARTICIPANT, # noqa: E501 } def make_simple_cache_key( *key_vals: str, delimiter: str = DELIMITER_KEY_VAL, ) -> str: """Return a key where each key_val is delimited. Either the custom delimiter or default DELIMITER_KEY_VAL will be used. Examples: make_simple_cache_key('arg1', 'arg2', 'arg3', delimiter="_") returns arg1_arg2_arg3 make_simple_cache_key('arg1', 'arg2', 'arg3', delimiter=None) returns arg1#arg2#arg3 make_simple_cache_key('arg1', 'arg2', 'arg3') returns arg1#arg2#arg3 """ assert len(key_vals) > 1, "Cache keys can only be formed with multiple key_vals" if not delimiter: delimiter = DELIMITER_KEY_VAL return delimiter.join(key_vals) def get_cache_key_from_tenant_uuid( tenant_uuid: UUID, cache_prefix: str, ) -> str: """Get cache key for tenant.""" cache_prefix = cache_prefix.strip() if not cache_prefix: raise ValueError("Found an empty cache_prefix.") return make_simple_cache_key( cache_prefix, str(tenant_uuid), delimiter=KEY_DELIMITER ) def get_cache_keys_from_tenant_uuid_list( tenant_uuids: List[UUID], cache_prefix: str ) -> List[str]: """Convert a list of tenant uuids to a list of cache keys.""" cache_prefix = cache_prefix.strip() if not cache_prefix: raise ValueError("Found an empty cache_prefix.") cache_keys = [ get_cache_key_from_tenant_uuid( tenant_uuid=tenant_uuid, cache_prefix=cache_prefix, ) for tenant_uuid in tenant_uuids ] return cache_keys