Source code for dateparser.languages.loader

# -*- coding: utf-8 -*-
from pkgutil import get_data

import six
from yaml import load as load_yaml

from .language import Language


[docs]class LanguageDataLoader(object): _data = None def __init__(self, file=None): if isinstance(file, six.string_types): file = open(file) self.file = file
[docs] def get_language_map(self): if self._data is None: self._load_data() return self._data
[docs] def get_languages(self): if self._data is None: self._load_data() return self._data.values()
[docs] def get_language(self, shortname): if self._data is None: self._load_data() return self._data.get(shortname)
def _load_data(self): if self.file is None: data = get_data('data', 'languages.yaml') else: data = self.file.read() data = load_yaml(data) base_data = data.pop('base', {'skip': []}) known_languages = {} for shortname, language_info in six.iteritems(data): self._update_language_info_with_base_info(language_info, base_data) language = Language(shortname, language_info) if language.validate_info(): known_languages[shortname] = language self._data = known_languages def _update_language_info_with_base_info(self, language_info, base_info): for key, values in six.iteritems(base_info): if isinstance(values, list): extended_values = (values + language_info[key]) if key in language_info else values language_info[key] = extended_values
default_language_loader = LanguageDataLoader()