Coverage for opt/mealie/lib/python3.12/site-packages/mealie/pkgs/i18n/provider_factory.py: 78%
34 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-11-25 15:32 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2025-11-25 15:32 +0000
1from dataclasses import dataclass, field 1a
2from functools import cached_property 1a
3from pathlib import Path 1a
5from .json_provider import JsonProvider 1a
8@dataclass(slots=True) 1a
9class InUseProvider: 1a
10 provider: JsonProvider 1a
11 locks: int 1a
14@dataclass 1a
15class ProviderFactory: 1a
16 directory: Path 1a
17 fallback_locale: str = "en-US" 1a
18 filename_format = "{locale}.{format}" 1a
20 _store: dict[str, InUseProvider] = field(default_factory=dict) 1a
22 @property 1a
23 def fallback_file(self) -> Path: 1a
24 return self.directory / self.filename_format.format(locale=self.fallback_locale, format="json") 1bcdefghijklm
26 @cached_property 1a
27 def supported_locales(self) -> list[str]: 1a
28 return [path.stem for path in self.directory.glob(self.filename_format.format(locale="*", format="json"))]
30 def _load(self, locale: str) -> JsonProvider: 1a
31 filename = self.filename_format.format(locale=locale, format="json") 1nbcdefghijklm
32 path = self.directory / filename 1nbcdefghijklm
34 return JsonProvider(path) if path.exists() else JsonProvider(self.fallback_file) 1nbcdefghijklm
36 def release(self, locale) -> None: 1a
37 if locale in self._store:
38 self._store[locale].locks -= 1
39 if self._store[locale].locks == 0:
40 del self._store[locale]
42 def get(self, locale: str) -> JsonProvider: 1a
43 if locale in self._store: 1nbcdefghijklm
44 self._store[locale].locks += 1 1bcdefghijklm
45 else:
46 self._store[locale] = InUseProvider(provider=self._load(locale), locks=1) 1nbcdefghijklm
48 return self._store[locale].provider 1nbcdefghijklm