Coverage for apis_core/utils/settings.py: 41%
29 statements
« prev ^ index » next coverage.py v7.5.3, created at 2025-06-25 10:00 +0000
« prev ^ index » next coverage.py v7.5.3, created at 2025-06-25 10:00 +0000
1# SPDX-FileCopyrightText: 2023 Birger Schacht
2# SPDX-License-Identifier: MIT
4import logging
5import tomllib
6from urllib.parse import urlparse
8from django.conf import settings
9from django.template.utils import get_app_template_dirs
11logger = logging.getLogger(__name__)
14def get_entity_settings_by_modelname(entity: str = None) -> dict:
15 """
16 return the settings for a specific entity or the dict for all entities
17 if no entity is given
18 """
19 apis_entities = getattr(settings, "APIS_ENTITIES", {})
20 if entity:
21 # lookup entity settings by name and by capitalized name
22 return apis_entities.get(entity, apis_entities.get(entity.capitalize(), {}))
23 return apis_entities
26def dict_from_toml_directory(directory: str) -> dict:
27 configs = {}
28 pathlists = [path.glob("**/*.toml") for path in get_app_template_dirs(directory)]
29 for file in [path for pathlist in pathlists for path in pathlist]:
30 try:
31 configs[file.resolve()] = tomllib.loads(file.read_text())
32 except Exception as e:
33 logger.error(f"TOML parser could not read {file}: {e}")
34 return configs
37def internal_uris() -> list[str]:
38 return set([apis_base_uri()] + getattr(settings, "APIS_FORMER_BASE_URIS", []))
41def apis_base_uri() -> str:
42 return getattr(settings, "APIS_BASE_URI", "https://example.org")
45def rdf_namespace_prefix() -> str:
46 if hasattr(settings, "APIS_RDF_NAMESPACE_PREFIX"):
47 return settings.APIS_RDF_NAMESPACE_PREFIX
48 base_uri = urlparse(apis_base_uri())
49 return base_uri.hostname.split(".", 1)[0]