Exemplo n.º 1
0
 def given_detector(self):
     self.assertIsInstance(self.known_languages, list,
                           "Require a list of languages to initialize")
     self.assertGreaterEqual(
         len(self.known_languages), 1,
         "Could only be initialized with one or more languages")
     self.detector = ExactLanguages(languages=self.known_languages)
Exemplo n.º 2
0
    def __init__(self,
                 languages=None,
                 allow_redetect_language=False,
                 settings=None):
        self._settings = settings
        available_language_map = self._get_language_loader().get_language_map()

        if isinstance(languages, (list, tuple, collections.Set)):

            if all(
                [language in available_language_map
                 for language in languages]):
                languages = [
                    available_language_map[language] for language in languages
                ]
            else:
                unsupported_languages = set(languages) - set(
                    available_language_map.keys())
                raise ValueError("Unknown language(s): %s" %
                                 ', '.join(map(repr, unsupported_languages)))
        elif languages is not None:
            raise TypeError("languages argument must be a list (%r given)" %
                            type(languages))

        if allow_redetect_language:
            self.language_detector = AutoDetectLanguage(
                languages
                if languages else list(available_language_map.values()),
                allow_redetection=True)
        elif languages:
            self.language_detector = ExactLanguages(languages=languages)
        else:
            self.language_detector = AutoDetectLanguage(
                list(available_language_map.values()), allow_redetection=False)
Exemplo n.º 3
0
class TestExactLanguages(BaseLanguageDetectorTestCase):
    __test__ = True

    @parameterized.expand([
        param("01-01-12", ['en', 'fr']),
        param("01-01-12", ['tr', 'ar']),
        param("01-01-12", ['ru', 'fr', 'en', 'pl']),
        param("01-01-12", ['en']),
    ])
    def test_exact_languages(self, datetime_string, shortnames):
        self.given_string(datetime_string)
        self.given_known_languages(shortnames)
        self.given_detector()
        self.when_using_exact_languages()
        self.then_exact_languages_were_filtered(shortnames)

    def given_known_languages(self, shortnames):
        self.known_languages = [default_language_loader.get_language(shortname)
                                for shortname in shortnames]

    def given_detector(self):
        self.assertIsInstance(self.known_languages, list, "Require a list of languages to initialize")
        self.assertGreaterEqual(len(self.known_languages), 1, "Could only be initialized with one or more languages")
        self.detector = ExactLanguages(languages=self.known_languages)

    def when_using_exact_languages(self):
        self.exact_languages = self.detector.iterate_applicable_languages(self.datetime_string, modify=True, settings=settings)

    def then_exact_languages_were_filtered(self, shortnames):
        self.assertEqual(set(shortnames), set([lang.shortname for lang in self.exact_languages]))
Exemplo n.º 4
0
class TestExactLanguages(BaseLanguageDetectorTestCase):
    __test__ = True

    @parameterized.expand([
        param("01-01-12", ['en', 'fr']),
        param("01-01-12", ['tr', 'ar']),
        param("01-01-12", ['ru', 'fr', 'en', 'pl']),
        param("01-01-12", ['en']),
    ])
    def test_exact_languages(self, datetime_string, shortnames):
        self.given_string(datetime_string)
        self.given_known_languages(shortnames)
        self.given_detector()
        self.when_using_exact_languages()
        self.then_exact_languages_were_filtered(shortnames)

    def given_known_languages(self, shortnames):
        self.known_languages = [self.language_loader.get_language(shortname) for shortname in shortnames]

    def given_detector(self):
        self.assertIsInstance(self.known_languages, list, "Require a list of languages to initialize")
        self.assertGreaterEqual(len(self.known_languages), 1, "Could only be initialized with one or more languages")
        self.detector = ExactLanguages(languages=self.known_languages)

    def when_using_exact_languages(self):
        self.exact_languages = self.detector.iterate_applicable_languages(self.datetime_string, modify=True)

    def then_exact_languages_were_filtered(self, shortnames):
        self.assertEqual(set(shortnames), set([lang.shortname for lang in self.exact_languages]))
Exemplo n.º 5
0
class ExactLanguagesTest(BaseTestCase):
    def setUp(self):
        super(ExactLanguagesTest, self).setUp()
        self.parser = NotImplemented
        self.detected_languages = NotImplemented

    def test_languages_passed_in_constructor_should_not_be_none(self):
        self.when_parser_is_constructed(languages=None)
        self.then_error_was_raised(ValueError, ['language cannot be None for ExactLanguages'])

    @parameterized.expand([
        param(languages=['fr'], date_strings=["04-decembre-2015", "13 aou, 2014"]),
    ])
    def test_missing_diacritical_marks(self, languages, date_strings):
        settings.NORMALIZE = True
        self.given_parser(languages)
        self.when_languages_are_detected(date_strings)
        self.then_detected_languages_are(languages)

    @parameterized.expand([
        param(languages=['es'], date_strings=["13 Ago, 2014"]),
        param(languages=['es'], date_strings=["13 Septiembre, 2014"]),
        param(languages=['es'], date_strings=["13/03/2014"]),
        param(languages=['es'], date_strings=["11/03/2014"]),
    ])
    def test_parse_date_in_exact_language(self, languages, date_strings):
        self.given_parser(languages)
        self.when_languages_are_detected(date_strings)
        self.then_detected_languages_are(languages)

    @parameterized.expand([
        param(languages=['es'], date_strings=["13 Setembro, 2014"]),
    ])
    def test_reject_dates_in_other_languages(self, languages, date_strings):
        self.given_parser(languages=languages)
        self.when_languages_are_detected(date_strings)
        self.then_detected_languages_are([])

    def given_parser(self, languages):
        language_map = default_language_loader.get_language_map()
        languages = [language_map[language]
                     for language in languages]
        self.parser = ExactLanguages(languages)

    def when_languages_are_detected(self, date_strings, modify=False):
        assert not isinstance(date_strings, six.string_types)
        for date_string in date_strings:
            detected_languages = list(self.parser.iterate_applicable_languages(date_string, modify=modify, settings=settings))
        self.detected_languages = detected_languages

    def when_parser_is_constructed(self, languages):
        try:
            ExactLanguages(languages)
        except Exception as error:
            self.error = error

    def then_detected_languages_are(self, expected_languages):
        shortnames = map(attrgetter('shortname'), self.detected_languages)
        six.assertCountEqual(self, expected_languages, shortnames)
Exemplo n.º 6
0
class ExactLanguagesTest(BaseTestCase):
    def setUp(self):
        super(ExactLanguagesTest, self).setUp()
        self.parser = NotImplemented
        self.detected_languages = NotImplemented

    def test_languages_passed_in_constructor_should_not_be_none(self):
        self.when_parser_is_constructed(languages=None)
        self.then_error_was_raised(ValueError, ['language cannot be None for ExactLanguages'])

    @parameterized.expand([
        param(languages=['fr'], date_strings=["04-decembre-2015", "13 aou, 2014"]),
    ])
    def test_missing_diacritical_marks(self, languages, date_strings):
        settings.NORMALIZE = True
        self.given_parser(languages)
        self.when_languages_are_detected(date_strings)
        self.then_detected_languages_are(languages)

    @parameterized.expand([
        param(languages=['es'], date_strings=["13 Ago, 2014"]),
        param(languages=['es'], date_strings=["13 Septiembre, 2014"]),
        param(languages=['es'], date_strings=["13/03/2014"]),
        param(languages=['es'], date_strings=["11/03/2014"]),
    ])
    def test_parse_date_in_exact_language(self, languages, date_strings):
        self.given_parser(languages)
        self.when_languages_are_detected(date_strings)
        self.then_detected_languages_are(languages)

    @parameterized.expand([
        param(languages=['es'], date_strings=["13 Setembro, 2014"]),
    ])
    def test_reject_dates_in_other_languages(self, languages, date_strings):
        self.given_parser(languages=languages)
        self.when_languages_are_detected(date_strings)
        self.then_detected_languages_are([])

    def given_parser(self, languages):
        language_map = default_language_loader.get_language_map()
        languages = [language_map[language]
                     for language in languages]
        self.parser = ExactLanguages(languages)

    def when_languages_are_detected(self, date_strings, modify=False):
        assert not isinstance(date_strings, six.string_types)
        for date_string in date_strings:
            detected_languages = list(self.parser.iterate_applicable_languages(date_string, modify=modify, settings=settings))
        self.detected_languages = detected_languages

    def when_parser_is_constructed(self, languages):
        try:
            ExactLanguages(languages)
        except Exception as error:
            self.error = error

    def then_detected_languages_are(self, expected_languages):
        shortnames = map(attrgetter('shortname'), self.detected_languages)
        six.assertCountEqual(self, expected_languages, shortnames)
Exemplo n.º 7
0
    def test_parse_date_in_exact_language(self):
        date_fixtures = [
            (u'13 Ago, 2014', datetime(2014, 8, 13)),
            (u'13 Septiembre, 2014', datetime(2014, 9, 13)),
            (u'13/03/2014', datetime(2014, 3, 13)),

            # TODO: make the following test pass
            # in this case, it should have detected spanish as the
            # language, and so it should use d/m/Y instead of d/m/Y
            # (u'11/03/2014', datetime(2014, 3, 11)),
        ]
        spanish = LanguageDataLoader().get_language('es')
        parser = ExactLanguages([spanish])

        for date_string, correct_date in date_fixtures:
            parsed_date = parser.parse(date_string, None)
            self.assertEqual(correct_date.date(), parsed_date.date())

        with self.assertRaisesRegexp(ValueError, 'Invalid date'):
            portuguese_date = u'13 Setembro, 2014'
            parser.parse(portuguese_date, None)
Exemplo n.º 8
0
    def test_parse_date_in_exact_language(self):
        date_fixtures = [
            (u'13 Ago, 2014', datetime(2014, 8, 13)),
            (u'13 Septiembre, 2014', datetime(2014, 9, 13)),
            (u'13/03/2014', datetime(2014, 3, 13)),

            # TODO: make the following test pass
            # in this case, it should have detected spanish as the
            # language, and so it should use d/m/Y instead of d/m/Y
            # (u'11/03/2014', datetime(2014, 3, 11)),
        ]
        spanish = LanguageDataLoader().get_language('es')
        parser = ExactLanguages([spanish])

        for date_string, correct_date in date_fixtures:
            parsed_date = parser.parse(date_string, None)
            self.assertEqual(correct_date.date(), parsed_date.date())

        with self.assertRaisesRegexp(ValueError, 'Invalid date'):
            portuguese_date = u'13 Setembro, 2014'
            parser.parse(portuguese_date, None)
Exemplo n.º 9
0
 def given_detector(self):
     self.assertIsInstance(self.known_languages, list, "Require a list of languages to initialize")
     self.assertGreaterEqual(len(self.known_languages), 1, "Could only be initialized with one or more languages")
     self.detector = ExactLanguages(languages=self.known_languages)
Exemplo n.º 10
0
 def when_parser_is_constructed(self, languages):
     try:
         ExactLanguages(languages)
     except Exception as error:
         self.error = error
Exemplo n.º 11
0
 def given_parser(self, languages):
     language_map = default_language_loader.get_language_map()
     languages = [language_map[language] for language in languages]
     self.parser = ExactLanguages(languages)
Exemplo n.º 12
0
 def given_parser(self, languages):
     language_map = default_language_loader.get_language_map()
     languages = [language_map[language]
                  for language in languages]
     self.parser = ExactLanguages(languages)
Exemplo n.º 13
0
    def test_force_setting_language(self):
        with self.assertRaisesRegexp(TypeError, 'takes exactly 2 arguments'):
            ExactLanguages()

        with self.assertRaisesRegexp(ValueError, 'cannot be None'):
            ExactLanguages(None)