Esempio n. 1
0
    def test_translate_missing(self, session):
        translator = Translator(Translation, session, 'language')
        translatable = TranslatableString(
            context='context', message_id='message_id')

        translation = translator.translate(translatable)
        translation is None
Esempio n. 2
0
    def test_none_value(self, session):
        translator = Translator(Translation, session, SAMPLE_LANGUAGE)
        translatable = TranslatableString(context=SAMPLE_CONTEXT,
                                          message_id=SAMPLE_MESSAGE_ID)

        translation = translator.translate(translatable)
        translation is None
Esempio n. 3
0
    def test_translate_structure(self, session):
        translation = Translation(
            context='context', message_id='message_id',
            language='language', value='translation')
        session.add(translation)
        session.commit()

        translator = Translator(Translation, session, 'language')
        translatable = TranslatableString(
            context='context', message_id='message_id')

        structure = {
            'int': 1,
            'str': 'str',
            'list': [1, 'str', translatable],
            'translatable': translatable,
        }

        translation = translator.translate(structure)
        assert translation == {
            'int': 1,
            'str': 'str',
            'list': [1, 'str', 'translation'],
            'translatable': 'translation',
        }
def test_use_most_frequent(session_cls):
    session_en = session_cls()
    translator_en = Translator(Translation, session_cls(), 'en')
    translator_en.bind(session_en)

    session_fr = session_cls()
    translator_fr = Translator(Translation, session_cls(), 'fr')
    translator_fr.bind(session_fr)

    def add_with_translation(en, fr):
        model = Model(name=en)
        session_en.add(model)
        session_en.commit()

        # translate into fr
        translatable = model.name
        translatable.pending_value = fr
        translator_fr.save_translation(translatable)

    model = Model(name='a')
    session_en.add(model)
    session_en.commit()

    add_with_translation('a', '1')
    translator_fr.suggest_translation(model.name, 'en', 'fr') == '1'

    add_with_translation('a', '2')
    add_with_translation('a', '2')
    translator_fr.suggest_translation(model.name, 'en', 'fr') == '2'
Esempio n. 5
0
    def test_none_value(self, session):
        translator = Translator(Translation, session, SAMPLE_LANGUAGE)
        translatable = TranslatableString(
            context=SAMPLE_CONTEXT, message_id=SAMPLE_MESSAGE_ID)

        translation = translator.translate(translatable)
        translation is None
Esempio n. 6
0
    def test_translate_structure(self, session):
        translation = Translation(
            context='context', message_id='message_id',
            language='language', value='translation')
        session.add(translation)
        session.commit()

        translator = Translator(Translation, session, 'language')
        translatable = TranslatableString(
            context='context', message_id='message_id')

        structure = {
            'int': 1,
            'str': 'str',
            'list': [1, 'str', translatable],
            'translatable': translatable,
        }

        translation = translator.translate(structure)
        assert translation == {
            'int': 1,
            'str': 'str',
            'list': [1, 'str', 'translation'],
            'translatable': 'translation',
        }
Esempio n. 7
0
def bound_session(request, session, session_cls):
    # importing at the module level messes up coverage
    from taal import Translator
    from tests.models import Translation

    translator = Translator(Translation, session_cls(), 'language')
    translator.bind(session)
    return session
Esempio n. 8
0
    def test_translate_missing_debug(self, session):
        translator = Translator(
            Translation, session, 'language', debug_output=True)
        translatable = TranslatableString(
            context='context', message_id='message_id')

        translation = translator.translate(translatable)
        assert "[Translation missing" in translation
Esempio n. 9
0
    def test_list_none(self, session):
        translator = Translator(Translation, session, '')
        translations = translator.list_translations([])

        assert set(translations) == set([
            ('animal', '1'),
            ('animal', '2'),
            ('animal', '3'),
        ])
Esempio n. 10
0
    def test_list_single(self, session):
        translator = Translator(Translation, session, '')
        translations = translator.list_translations(['en'])

        assert set(translations) == set([
            ('animal', '1', 'Moose'),
            ('animal', '2', 'Monkey'),
            ('animal', '3', None),
        ])
Esempio n. 11
0
 def test_invalid_override(self):
     translator = Translator(
         Translation,
         session=None,
         language=None,
     )
     with pytest.raises(ValueError) as exc:
         translator.translate(None, strategy='invalid ಠ_ಠ')
     assert 'Invalid strategy `invalid ಠ_ಠ`' in unicode(exc)
Esempio n. 12
0
    def test_list_missing_translations(self, session):
        translator = Translator(Translation, session, '')
        missing_translations = translator.list_missing_translations(
            ['en', 'sv'])

        assert set(missing_translations) == set([
            ('animal', '2', 'Monkey', None),
            ('animal', '3', None, 'Flodhäst'),
        ])
Esempio n. 13
0
    def test_list_none(self, session):
        translator = Translator(Translation, session, '')
        translations = translator.list_translations([])

        assert set(translations) == set([
            ('animal', '1'),
            ('animal', '2'),
            ('animal', '3'),
        ])
Esempio n. 14
0
    def test_list_single(self, session):
        translator = Translator(Translation, session, '')
        translations = translator.list_translations(['en'])

        assert set(translations) == set([
            ('animal', '1', 'Moose'),
            ('animal', '2', 'Monkey'),
            ('animal', '3', None),
        ])
Esempio n. 15
0
    def test_list_missing_translations(self, session):
        translator = Translator(Translation, session, '')
        missing_translations = translator.list_missing_translations(
            ['en', 'sv'])

        assert set(missing_translations) == set([
            ('animal', '2', 'Monkey', None),
            ('animal', '3', None, 'Flodhäst'),
        ])
Esempio n. 16
0
def test_labeled_hierarchy(session, translating_type_heirarchy, bound_manager):
    manager = bound_manager

    translator = Translator(Translation, session, 'en')
    translator.bind(manager)

    hierarchy = manager.get_labeled_type_hierarchy()
    entity = next(hierarchy)

    assert isinstance(entity[1], TranslatableString)
Esempio n. 17
0
def test_labeled_hierarchy(session, translating_type_heirarchy, bound_manager):
    manager = bound_manager

    translator = Translator(Translation, session, 'en')
    translator.bind(manager)

    hierarchy = manager.get_labeled_type_hierarchy()
    entity = next(hierarchy)

    assert isinstance(entity[1], TranslatableString)
Esempio n. 18
0
    def test_sentinel_value(self, session):
        translator = Translator(Translation,
                                session,
                                SAMPLE_LANGUAGE,
                                strategy=Translator.strategies.SENTINEL_VALUE)
        translatable = TranslatableString(context=SAMPLE_CONTEXT,
                                          message_id=SAMPLE_MESSAGE_ID)

        translation = translator.translate(translatable)
        assert translation is TRANSLATION_MISSING
Esempio n. 19
0
    def test_list_translations(self, session):
        self.setup_(session)
        translator = Translator(Translation, session, '')
        translations = translator.list_translations(['en', 'sv'])

        assert set(translations) == set([
            ('animal', '1', 'Moose', 'Älg'),
            ('animal', '2', 'Monkey', None),
            ('animal', '3', None, 'Flodhäst'),
        ])
Esempio n. 20
0
def bound_manager(request, session_cls, translating_manager):
    # importing at the module level messes up coverage
    from taal import Translator
    from tests.models import Translation

    manager = translating_manager

    translator = Translator(Translation, session_cls(), 'language')
    translator.bind(manager)
    return manager
Esempio n. 21
0
    def test_debug_value(self, session):
        translator = Translator(Translation,
                                session,
                                SAMPLE_LANGUAGE,
                                strategy=Translator.strategies.DEBUG_VALUE)
        translatable = TranslatableString(context=SAMPLE_CONTEXT,
                                          message_id=SAMPLE_MESSAGE_ID)

        translation = translator.translate(translatable)
        assert "[Translation missing" in translation
def test_basic(session_cls):
    session_en = session_cls()
    translator_en = Translator(Translation, session_cls(), 'en')
    translator_en.bind(session_en)

    session_fr = session_cls()
    translator_fr = Translator(Translation, session_cls(), 'fr')
    translator_fr.bind(session_fr)

    model = Model(name='name')
    session_en.add(model)
    session_en.commit()

    # translate into fr
    translatable = model.name
    translatable.pending_value = 'namë_fr'
    translator_fr.save_translation(translatable)

    new_model = Model(name='name')
    session_en.add(new_model)
    session_en.commit()

    suggestion = translator_fr.suggest_translation(
        new_model.name, from_language='en', to_language='fr')

    assert suggestion == 'namë_fr'
Esempio n. 23
0
def test_set_from_other_model(session, session_cls):
    model1 = Model(name='name')
    model2 = RequiredModel(name=model1.name)
    translator = Translator(Translation, session_cls(), 'language')
    translator.bind(session)
    session.add(model1)
    session.add(model2)
    session.commit()

    assert translator.session.query(
        Translation.context).distinct().count() == 2
Esempio n. 24
0
def test_unknown_language(session_cls):
    session = session_cls()
    translator = Translator(Translation, session_cls(), 'en')
    translator.bind(session)

    model = Model(name='name')
    session.add(model)
    session.commit()

    assert translator.suggest_translation(model.name, 'en', 'foo') is None
    assert translator.suggest_translation(model.name, 'foo', 'en') is None
def test_unknown_language(session_cls):
    session = session_cls()
    translator = Translator(Translation, session_cls(), 'en')
    translator.bind(session)

    model = Model(name='name')
    session.add(model)
    session.commit()

    assert translator.suggest_translation(model.name, 'en', 'foo') is None
    assert translator.suggest_translation(model.name, 'foo', 'en') is None
Esempio n. 26
0
def test_set_from_other_model(session, session_cls):
    model1 = Model(name='name')
    model2 = RequiredModel(name=model1.name)
    translator = Translator(Translation, session_cls(), 'language')
    translator.bind(session)
    session.add(model1)
    session.add(model2)
    session.commit()

    assert translator.session.query(
        Translation.context).distinct().count() == 2
Esempio n. 27
0
    def test_debug_value(self, session):
        translator = Translator(
            Translation,
            session,
            SAMPLE_LANGUAGE,
            strategy=Translator.strategies.DEBUG_VALUE
        )
        translatable = TranslatableString(
            context=SAMPLE_CONTEXT, message_id=SAMPLE_MESSAGE_ID)

        translation = translator.translate(translatable)
        assert "[Translation missing" in translation
Esempio n. 28
0
    def test_sentinel_value(self, session):
        translator = Translator(
            Translation,
            session,
            SAMPLE_LANGUAGE,
            strategy=Translator.strategies.SENTINEL_VALUE
        )
        translatable = TranslatableString(
            context=SAMPLE_CONTEXT, message_id=SAMPLE_MESSAGE_ID)

        translation = translator.translate(translatable)
        assert translation is TRANSLATION_MISSING
Esempio n. 29
0
    def test_custom_base_query(self, session):
        translator = Translator(Translation, session, '')
        default_query, _, _ = translator._normalised_translations(['en'])
        assert default_query.count() == 3

        base_query = (session.query(
            Translation.context, Translation.message_id).filter(
                Translation.message_id < 3)).distinct()

        filtered_query, _, _ = translator._normalised_translations(
            ['en'], base_query=base_query)
        assert filtered_query.count() == 2
Esempio n. 30
0
    def test_dont_save_debug_translation(self, session):
        translator = Translator(
            Translation, session, 'language', debug_output=True)

        translatable = TranslatableString(
            context='context', message_id='message_id')
        debug_value = translator._get_debug_translation(translatable)
        translatable.pending_value = debug_value

        translator.save_translation(translatable)

        assert session.query(Translation).count() == 0
Esempio n. 31
0
    def test_save_translation(self, session, session_cls):
        translator = Translator(Translation, session, 'language')
        params = {
            'context': 'context',
            'message_id': 'message_id',
        }
        translatable = TranslatableString(
            pending_value='translation', **params)
        translator.save_translation(translatable)

        read_translatable = TranslatableString(**params)
        translation = translator.translate(read_translatable)
        assert translation == 'translation'
Esempio n. 32
0
def test_query_values(session_cls):
    session1 = session_cls()
    session2 = session_cls()

    translator = Translator(Translation, session_cls(), 'language')
    translator.bind(session1)
    translator.bind(session2)
    model = Model(name='name')
    session1.add(model)
    session1.commit()

    (value, ) = session2.query(Model.name).one()
    assert value == PlaceholderValue
Esempio n. 33
0
def test_query_values(session_cls):
    session1 = session_cls()
    session2 = session_cls()

    translator = Translator(Translation, session_cls(), 'language')
    translator.bind(session1)
    translator.bind(session2)
    model = Model(name='name')
    session1.add(model)
    session1.commit()

    (value,) = session2.query(Model.name).one()
    assert value == PlaceholderValue
Esempio n. 34
0
    def test_translate(self, session):
        translation = Translation(
            context='context', message_id='message_id',
            language='language', value='translation')
        session.add(translation)
        session.commit()

        translator = Translator(Translation, session, 'language')
        translatable = TranslatableString(
            context='context', message_id='message_id')

        translation = translator.translate(translatable)
        assert translation == 'translation'
Esempio n. 35
0
    def test_translate(self, session):
        translation = Translation(
            context='context', message_id='message_id',
            language='language', value='translation')
        session.add(translation)
        session.commit()

        translator = Translator(Translation, session, 'language')
        translatable = TranslatableString(
            context='context', message_id='message_id')

        translation = translator.translate(translatable)
        assert translation == 'translation'
Esempio n. 36
0
    def test_save_translation(self, session, session_cls):
        translator = Translator(Translation, session, 'language')
        params = {
            'context': 'context',
            'message_id': 'message_id',
        }
        translatable = TranslatableString(
            pending_value='translation', **params)
        translator.save_translation(translatable)

        read_translatable = TranslatableString(**params)
        translation = translator.translate(read_translatable)
        assert translation == 'translation'
Esempio n. 37
0
def test_update_removed_values(
        session, bound_manager, change_instance_hierarchy):
    manager = bound_manager
    obj = change_instance_hierarchy

    retrieved = manager.deserialize(manager.serialize(obj))
    new = manager.change_instance_type(retrieved, 'New', {'old': 'new'})

    data = manager.serialize(new)
    translator = Translator(Translation, session, 'language')
    translated = translator.translate(data)

    assert translated['common'] == 'common'
    assert session.query(Translation).count() == 1
Esempio n. 38
0
    def test_dont_save_debug_translation(self, session):
        translator = Translator(Translation,
                                session,
                                SAMPLE_LANGUAGE,
                                strategy=Translator.strategies.DEBUG_VALUE)

        translatable = TranslatableString(context=SAMPLE_CONTEXT,
                                          message_id=SAMPLE_MESSAGE_ID)
        debug_value = translator._get_debug_translation(translatable)
        translatable.pending_value = debug_value

        translator.save_translation(translatable)

        assert session.query(Translation).count() == 0
Esempio n. 39
0
    def test_delete_on_delete(self, session, session_cls):
        session1 = session_cls()
        translator1 = Translator(Translation, session_cls(), 'language1')
        translator1.bind(session1)

        session2 = session_cls()
        translator2 = Translator(Translation, session_cls(), 'language2')
        translator2.bind(session2)

        instance = Model(id=1)
        session.add(instance)
        session.commit()

        instance = session1.query(Model).get(1)
        instance.name = 'name'
        session1.commit()

        instance = session2.query(Model).get(1)
        instance.name = 'name'
        session2.commit()

        assert translator1.session.query(Translation).count() == 2
        session2.delete(instance)
        assert translator1.session.query(Translation).count() == 2
        session2.commit()

        translator1.session.rollback()  # expire caches
        assert translator1.session.query(Translation).count() == 0
def test_update_removed_values(
        session, bound_manager, change_instance_hierarchy):
    manager = bound_manager
    obj = change_instance_hierarchy

    retrieved = manager.deserialize(manager.serialize(obj))
    new = manager.change_instance_type(retrieved, 'New', {'old': 'new'})

    data = manager.serialize(new)
    translator = Translator(Translation, session, 'language')
    translated = translator.translate(data)

    assert translated['common'] == 'common'
    assert session.query(Translation).count() == 1
Esempio n. 41
0
def test_update_unsetting_existing_values(
        session, bound_manager, change_instance_hierarchy):
    manager = bound_manager
    obj = change_instance_hierarchy

    retrieved = manager.deserialize(manager.serialize(obj))
    new = manager.change_instance_type(retrieved, 'New', {'common': None})

    data = manager.serialize(new)
    translator = Translator(Translation, session, 'language')
    translated = translator.translate(data)

    assert translated['common'] is None
    assert session.query(Translation).count() == 0
Esempio n. 42
0
    def test_custom_base_query(self, session):
        translator = Translator(Translation, session, '')
        default_query, _, _ = translator._normalised_translations(['en'])
        assert default_query.count() == 3

        base_query = (
            session
            .query(Translation.context, Translation.message_id)
            .filter(Translation.message_id < 3)
        ).distinct()

        filtered_query, _, _ = translator._normalised_translations(
            ['en'], base_query=base_query)
        assert filtered_query.count() == 2
Esempio n. 43
0
def test_removing_translations(session, session_cls, first, second):
    translator = Translator(Translation, session_cls(), 'language')
    translator.bind(session)
    instance = Model(name=first)
    session.add(instance)
    session.commit()

    expected_count = 1 if is_translatable_value(first) else 0
    assert translator.session.query(Translation).count() == expected_count

    instance.name = second
    session.commit()

    expected_count = 1 if is_translatable_value(second) else 0
    assert translator.session.query(Translation).count() == expected_count
Esempio n. 44
0
def test_merge_from_other_session(session_cls):
    """ regression test """
    session1 = session_cls()
    session2 = session_cls()

    translator = Translator(Translation, session_cls(), 'language')
    translator.bind(session1)
    translator.bind(session2)

    instance = Model(name='name')
    session1.add(instance)
    session1.commit()

    session2.merge(instance)
    session2.commit()
Esempio n. 45
0
def test_merge_from_other_session(session_cls):
    """ regression test """
    session1 = session_cls()
    session2 = session_cls()

    translator = Translator(Translation, session_cls(), 'language')
    translator.bind(session1)
    translator.bind(session2)

    instance = Model(name='name')
    session1.add(instance)
    session1.commit()

    session2.merge(instance)
    session2.commit()
Esempio n. 46
0
def test_removing_translations(session, session_cls, first, second):
    translator = Translator(Translation, session_cls(), 'language')
    translator.bind(session)
    instance = Model(name=first)
    session.add(instance)
    session.commit()

    expected_count = 1 if is_translatable_value(first) else 0
    assert translator.session.query(Translation).count() == expected_count

    instance.name = second
    session.commit()

    expected_count = 1 if is_translatable_value(second) else 0
    assert translator.session.query(Translation).count() == expected_count
Esempio n. 47
0
def test_corrupt_db(session, session_cls):
    class CorruptModel(Base):
        __tablename__ = "models"

        id = Column(Integer, primary_key=True)
        name = Column(Text)
        identifier = Column(Text)

    corrupt = CorruptModel(id=1, name='name')
    session.add(corrupt)
    session.commit()

    translator = Translator(Translation, session_cls(), 'language')
    translator.bind(session)
    with pytest.raises(RuntimeError):
        session.query(Model).get(1)
Esempio n. 48
0
    def test_dont_save_debug_translation(self, session):
        translator = Translator(
            Translation,
            session,
            SAMPLE_LANGUAGE,
            strategy=Translator.strategies.DEBUG_VALUE
        )

        translatable = TranslatableString(
            context=SAMPLE_CONTEXT, message_id=SAMPLE_MESSAGE_ID)
        debug_value = translator._get_debug_translation(translatable)
        translatable.pending_value = debug_value

        translator.save_translation(translatable)

        assert session.query(Translation).count() == 0
Esempio n. 49
0
def test_load(session, session_cls, value):
    instance = Model(name=value)
    translator = Translator(Translation, session_cls(), 'language')
    translator.bind(session)
    session.add(instance)
    session.commit()
    pk = instance.id

    # make a new session
    session = session_cls()
    translator.bind(session)
    instance = session.query(Model).get(pk)
    if value is None:
        assert instance.name is None
    else:
        assert isinstance(instance.name, TranslatableString)
Esempio n. 50
0
def test_get_translation(session, manager):
    manager.save(CustomFieldsEntity)
    item = CustomFieldsEntity()
    manager.save(item)

    create_translation_for_entity(session, manager, 'english', item, 'name',
                                  'English name')

    context = get_context(manager, item, 'name')
    message_id = get_message_id(manager, item)
    translatable = TranslatableString(context=context, message_id=message_id)

    translator = Translator(Translation, session, 'english')
    translated_data = translator.translate(translatable)

    assert translated_data == 'English name'
Esempio n. 51
0
def test_corrupt_db(session, session_cls):
    class CorruptModel(Base):
        __tablename__ = "models"

        id = Column(Integer, primary_key=True)
        name = Column(Text)
        identifier = Column(Text)

    corrupt = CorruptModel(id=1, name='name')
    session.add(corrupt)
    session.commit()

    translator = Translator(Translation, session_cls(), 'language')
    translator.bind(session)
    with pytest.raises(RuntimeError):
        session.query(Model).get(1)
Esempio n. 52
0
def test_get_translation(session, manager):
    manager.save(CustomFieldsEntity)
    item = CustomFieldsEntity()
    manager.save(item)

    create_translation_for_entity(
        session, manager, 'english', item, 'name', 'English name')

    context = get_context(manager, item, 'name')
    message_id = get_message_id(manager, item)
    translatable = TranslatableString(
        context=context, message_id=message_id)

    translator = Translator(Translation, session, 'english')
    translated_data = translator.translate(translatable)

    assert translated_data == 'English name'
Esempio n. 53
0
    def test_case_sensitivity(self, session):
        translation_lower = Translation(
            context='context', message_id='message_id',
            language='language', value='translation')
        translation_upper = Translation(
            context='CONTEXT', message_id='message_id',
            language='language', value='translation')
        session.add(translation_upper)
        session.add(translation_lower)
        session.commit()

        translator = Translator(Translation, session, 'language')
        translatable = TranslatableString(
            context='context', message_id='message_id')

        # this shuold just not raise
        translator.translate(translatable)
Esempio n. 54
0
def test_change_instance_type(
        bound_manager, session, change_instance_hierarchy):
    manager = bound_manager
    obj = change_instance_hierarchy

    assert session.query(Translation).count() == 2

    retrieved = manager.deserialize(manager.serialize(obj))
    new = manager.change_instance_type(retrieved, 'New')

    # make sure we reset our session
    session.rollback()

    data = manager.serialize(new)
    translator = Translator(Translation, session, 'language')
    translated = translator.translate(data)

    assert translated['common'] == 'common'
    assert session.query(Translation).count() == 1
Esempio n. 55
0
def test_dynamic_language():
    language = 'foo'

    def get_language():
        return language

    translator = Translator(None, None, language=get_language)
    assert translator.language == 'foo'

    language = 'bar'
    assert translator.language == 'bar'
Esempio n. 56
0
    def test_savepoints(self, session, session_cls):
        translator = Translator(Translation, session_cls(), 'language')
        translator.bind(session)

        instance1 = Model(name='instance 1')
        session.add(instance1)

        session.begin_nested()

        instance2 = Model(name='instance 2')
        session.add(instance2)
        session.flush()
        assert session in flush_log
        assert len(flush_log[session]) == 2

        session.rollback()
        session.commit()

        assert session.query(Model).count() == 1
        assert translator.session.query(Translation).count() == 1
Esempio n. 57
0
def test_load_and_save(translating_manager, session):
    translator = Translator(Translation, session, 'language')
    manager = translating_manager
    translator.bind(manager)

    manager.save(CustomFieldsEntity)
    obj = CustomFieldsEntity(id=1, identifier='foo', name='name')
    manager.save(obj)
    loaded = manager.serialize(
        manager.get(CustomFieldsEntity, id=1)
    )
    loaded['identifier'] = 'bar'

    manager.save(
        manager.deserialize(loaded)
    )

    reloaded = manager.get(CustomFieldsEntity, id=1)

    assert translator.translate(
        manager.serialize(reloaded)['name']
    ) == 'name'
Esempio n. 58
0
def test_deleting(session, session_cls):
    translator = Translator(Translation, session_cls(), 'language')
    translator.bind(session)
    instance = Model(name='name')
    assert translator.session.query(Translation).count() == 0

    session.add(instance)
    assert translator.session.query(Translation).count() == 0
    session.commit()
    assert translator.session.query(Translation).count() == 1

    session.delete(instance)
    assert translator.session.query(Translation).count() == 1
    session.rollback()
    assert translator.session.query(Translation).count() == 1
    session.commit()
    assert translator.session.query(Translation).count() == 1

    session.delete(instance)
    assert translator.session.query(Translation).count() == 1
    session.commit()
    assert translator.session.query(Translation).count() == 0