Esempio n. 1
0
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. 2
0
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. 3
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
Esempio n. 4
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. 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 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. 7
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. 8
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. 9
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. 10
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. 11
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. 12
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. 13
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. 14
0
    def test_update_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)

        new_translator = Translator(
            Translation, session_cls(), 'language')
        new_translatable = TranslatableString(
            pending_value='new translation', **params)
        new_translator.save_translation(new_translatable)

        read_translatable = TranslatableString(**params)
        translation = translator.translate(read_translatable)
        assert translation == 'new translation'
        assert session.query(Translation).count() == 1
Esempio n. 15
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
Esempio n. 16
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. 17
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. 18
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. 19
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. 20
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. 21
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. 22
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. 23
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. 24
0
    def test_values(self, 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(name='name')
        session1.add(instance)
        session1.commit()
        pk = instance.id

        loaded = session2.query(Model).get(pk)
        assert loaded.name is not None

        instance.name = None
        session1.commit()

        session2.rollback()  # expire isn't enough to trigger reloading
        assert loaded.name is None
        assert translator1.session.query(Translation).count() == 0
Esempio n. 25
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. 26
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. 27
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. 28
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. 29
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. 30
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'