summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
authorWolfgang Müller2024-11-14 20:12:19 +0100
committerWolfgang Müller2024-11-14 20:45:03 +0100
commita68bdd1419150a98b4255ca6f7db6889e73b7aa0 (patch)
tree61754e35cf075d1be634b4be8908b788efd73840 /src
parenta43a295335f24bcb924e96718edcdd64a08f3597 (diff)
downloadhircine-a68bdd1419150a98b4255ca6f7db6889e73b7aa0.tar.gz
backend/scraper: Add parser methods for Language
We can expect a number of scraper sources to either give languages as ISO 639-3 or as their English name, so it makes sense to implement a simple parser method on our side.
Diffstat (limited to '')
-rw-r--r--src/hircine/scraper/types.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/hircine/scraper/types.py b/src/hircine/scraper/types.py
index 534792b..23cb634 100644
--- a/src/hircine/scraper/types.py
+++ b/src/hircine/scraper/types.py
@@ -137,6 +137,38 @@ class Language:
def __bool__(self):
return self.value is not None
+ @classmethod
+ def from_iso_639_3(cls, string):
+ """
+ Returns a new instance of this class given a case-insensitive ISO 639-3
+ language code.
+
+ :param str string: The ISO 639-3 language code.
+ :raise: :exc:`~hircine.scraper.ScrapeWarning` if the language code could
+ not be parsed.
+ """
+ try:
+ return Language(value=hircine.enums.Language[string.upper()])
+ except KeyError as e:
+ raise ScrapeWarning(
+ f"Could not parse language code: '{string}' as ISO 639-3"
+ ) from e
+
+ @classmethod
+ def from_name(cls, string):
+ """
+ Returns a new instance of this class given a case-insensitive language name.
+ Permissible language names are defined in :class:`hircine.enums.Language`.
+
+ :param str string: The language name.
+ :raise: :exc:`~hircine.scraper.ScrapeWarning` if the language name could
+ not be parsed.
+ """
+ try:
+ return Language(value=hircine.enums.Language(string.capitalize()))
+ except ValueError as e:
+ raise ScrapeWarning(f"Could not parse language name: '{string}'") from e
+
@dataclass(frozen=True)
class Direction: