Coverage for src/django_global_search/settings.py: 100%
27 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-06 22:25 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-06 22:25 +0000
1"""django-global-search settings."""
3from dataclasses import dataclass
5from django.conf import settings
6from django.contrib.admin.sites import AdminSite
9@dataclass(frozen=True)
10class GlobalSearchAdminSiteSettings:
11 """Global Search admin site settings."""
13 min_query_length: int
14 """Minimum query length."""
15 max_results_per_model: int
16 """Maximum results per model."""
17 search_timeout_ms: int
18 """Search timeout in milliseconds."""
19 excluded_models: list[str]
20 """Excluded models.
22 example: ['auth.user', 'auth.group']
23 """
25 @classmethod
26 def from_admin_site(cls, admin_site: AdminSite):
27 """Create GlobalSearchAdminSiteSettings from AdminSite."""
28 min_query_length = getattr(settings, "GLOBAL_SEARCH_MIN_QUERY_LENGTH", 2)
29 max_results_per_model = getattr(settings, "GLOBAL_SEARCH_MAX_RESULTS_PER_MODEL", 10)
30 search_timeout_ms = getattr(settings, "GLOBAL_SEARCH_TIMEOUT_MS", 20000)
31 excluded_models = getattr(settings, "GLOBAL_SEARCH_EXCLUDED_MODELS", [])
33 defaults = {
34 "min_query_length": min_query_length,
35 "max_results_per_model": max_results_per_model,
36 "search_timeout_ms": search_timeout_ms,
37 "excluded_models": excluded_models,
38 }
40 if hasattr(admin_site, "global_search_settings"):
41 defaults.update(admin_site.global_search_settings)
43 return cls(**defaults)
46@dataclass(frozen=True)
47class GlobalSearchSettings:
48 """Global Search settings."""
50 inject_default_admin_site_enabled: bool
51 """Inject default admin site."""
53 @classmethod
54 def from_settings(cls):
55 """Create GlobalSearchSettings from settings."""
56 inject_default_admin_site_enabled = getattr(
57 settings, "GLOBAL_SEARCH_INJECT_DEFAULT_ADMIN_SITE_ENABLED", True
58 )
60 return cls(inject_default_admin_site_enabled=inject_default_admin_site_enabled)
63global_search_settings = GlobalSearchSettings.from_settings()