コード例 #1
0
import glob
import json
import datetime

from bson.json_util import loads

from appcomposer import app
from appcomposer.translator.ops import get_golab_default_user, add_full_translation_to_app
from appcomposer.translator.utils import extract_local_translations_url

files = glob.glob("dump/*")

with app.app_context():
    user = get_golab_default_user()

    for f in files:
        print "Processing...",f,
        translation = loads(open(f).read())
        app_url = translation['spec']
        language, target = translation['bundle'].rsplit('_', 1)
        if language == 'all_ALL':
            print "Skipping all_ALL"
            continue
        elif language.startswith('af'):
            print "Skipping afghan and afrikaans"
            continue

        try:
            translated_messages = json.loads(json.loads(translation['data']))
        except (ValueError, TypeError):
            translated_messages = json.loads(translation['data'])
コード例 #2
0
def _add_or_update_app(app_url, metadata_information, repo_app_id, force_reload):
    if DEBUG:
        logger.debug("Starting %s" % app_url)
    print("Starting %s" % app_url)

    try:
        repo_app = db.session.query(RepositoryApp).filter_by(id=repo_app_id).one()
        initial_contents_hash = repo_app.contents_hash
        initial_downloaded_hash = repo_app.downloaded_hash

        default_user = get_golab_default_user()

        translation_url = metadata_information.get('default_translation_url')
        original_messages = metadata_information['default_translations']
        default_metadata = metadata_information['default_metadata']
        for language, translated_messages in metadata_information['original_translations'].iteritems():
            add_full_translation_to_app(user_email = default_user.email, app_url = app_url, translation_url = translation_url, 
                                app_metadata = default_metadata,
                                language = language, target = u'ALL', translated_messages = translated_messages, 
                                original_messages = original_messages, from_developer = True)

        namespaces = set([ msg['namespace'] for msg in original_messages.values() if msg['namespace'] ])
        processed_languages = []
        if namespaces:
            pairs = []
            for key, msg in original_messages.iteritems():
                if msg['namespace']:
                    pairs.append({
                        'key' : key,
                        'namespace' : msg['namespace'],
                    })
        
            for language_pack in get_bundles_by_key_namespaces(pairs):
                cur_language = language_pack['language']
                cur_target = language_pack['target']

                if cur_target == 'ALL' and cur_language in metadata_information['original_translations']:
                    # Already processed
                    continue

                processed_languages.append((cur_language, cur_target))
                add_full_translation_to_app(user_email = default_user.email, app_url = app_url, translation_url = translation_url,
                                app_metadata = default_metadata,
                                language = cur_language, target = cur_target, translated_messages = {},
                                original_messages = original_messages, from_developer = False)

        db_translation_url = db.session.query(TranslationUrl).filter_by(url = translation_url).first()
        if db_translation_url:
            for translation_bundle in db.session.query(TranslationBundle).filter_by(translation_url = db_translation_url).all():
                if translation_bundle.target == u'ALL' and translation_bundle.language in metadata_information['original_translations']:
                    # Already processed
                    continue
                found = False
                for processed_language, processed_target in processed_languages:
                    if translation_bundle.target == processed_target and translation_bundle.language == processed_language:
                        found = True
                        break

                if found:
                    # Already processed
                    continue

                add_full_translation_to_app(user_email = default_user.email, app_url = app_url, translation_url = translation_url, 
                            app_metadata = default_metadata,
                            language = translation_bundle.language, target = translation_bundle.target, translated_messages = None,
                            original_messages = original_messages, from_developer = False)
                   

        repo_app = db.session.query(RepositoryApp).filter_by(id=repo_app_id).one()
        translation_percent = retrieve_translations_percent(translation_url, original_messages)
        if translation_percent != repo_app.translation_percent:
            repo_app.translation_percent = json.dumps(translation_percent)
        
        repo_app.last_processed_contents_hash = initial_contents_hash
        repo_app.last_processed_downloaded_hash = initial_downloaded_hash
        repo_app.last_processed_time = datetime.datetime.utcnow()

        try:
            db.session.commit()
        except:
            import traceback
            traceback.print_exc()
            db.session.rollback()
            raise

        # In the meanwhile, maybe there were changes. Just make 100% sure that the hash is right
        update_content_hash(app_url)
    except:
        import traceback
        traceback.print_exc()
        raise
コード例 #3
0
def _add_or_update_app(cached_requests,
                       app_url,
                       force_reload,
                       repo_app=None,
                       task=None):
    now = datetime.datetime.utcnow()

    if DEBUG:
        logger.debug("Starting %s" % app_url)

    failing = False
    if task is None:
        try:
            metadata_information = extract_metadata_information(
                app_url, cached_requests, force_reload)
        except Exception:
            if DEBUG_VERBOSE:
                print("Error on %s" % app_url)
                traceback.print_exc()
            logger.warning("Error extracting information from %s" % app_url,
                           exc_info=True)
            metadata_information = {}
            failing = True
    else:
        metadata_information = task.metadata_information or {}
        failing = task.failing

    if repo_app is not None:
        if metadata_information.get('translatable') and len(
                metadata_information.get('default_translations', [])) > 0:
            repo_app.translatable = True
        else:
            # If it is translatable but there is no default translation; don't take it into account
            repo_app.translatable = False
        repo_app.adaptable = metadata_information.get('adaptable', False)
        repo_app.original_translations = u','.join(
            metadata_information.get('original_translations', {}).keys())
        repo_app.last_change = now
        repo_app.last_check = now

        if failing:
            if not repo_app.failing:
                # Don't override if it was not failing before
                repo_app.failing_since = now
            repo_app.failing = True

        else:
            if repo_app.failing:
                repo_app.failing = False

    default_user = get_golab_default_user()

    if metadata_information.get('translatable'):
        translation_url = metadata_information.get('default_translation_url')
        original_messages = metadata_information['default_translations']
        default_metadata = metadata_information['default_metadata']
        for language, translated_messages in metadata_information[
                'original_translations'].iteritems():
            add_full_translation_to_app(
                user=default_user,
                app_url=app_url,
                translation_url=translation_url,
                app_metadata=default_metadata,
                language=language,
                target=u'ALL',
                translated_messages=translated_messages,
                original_messages=original_messages,
                from_developer=True)

        namespaces = set([
            msg['namespace'] for msg in original_messages.values()
            if msg['namespace']
        ])
        processed_languages = []
        if namespaces:
            pairs = []
            for key, msg in original_messages.iteritems():
                if msg['namespace']:
                    pairs.append({
                        'key': key,
                        'namespace': msg['namespace'],
                    })

            for language_pack in get_bundles_by_key_namespaces(pairs):
                cur_language = language_pack['language']
                cur_target = language_pack['target']

                if cur_target == 'ALL' and cur_language in metadata_information[
                        'original_translations']:
                    # Already processed
                    continue

                processed_languages.append((cur_language, cur_target))
                add_full_translation_to_app(
                    user=default_user,
                    app_url=app_url,
                    translation_url=translation_url,
                    app_metadata=default_metadata,
                    language=cur_language,
                    target=cur_target,
                    translated_messages={},
                    original_messages=original_messages,
                    from_developer=False)

        db_translation_url = db.session.query(TranslationUrl).filter_by(
            url=translation_url).first()
        if db_translation_url:
            for translation_bundle in db.session.query(
                    TranslationBundle).filter_by(
                        translation_url=db_translation_url).all():
                if translation_bundle.target == u'ALL' and translation_bundle.language in metadata_information[
                        'original_translations']:
                    # Already processed
                    continue
                found = False
                for processed_language, processed_target in processed_languages:
                    if translation_bundle.target == processed_target and translation_bundle.language == processed_language:
                        found = True
                        break

                if found:
                    # Already processed
                    continue

                add_full_translation_to_app(
                    user=default_user,
                    app_url=app_url,
                    translation_url=translation_url,
                    app_metadata=default_metadata,
                    language=translation_bundle.language,
                    target=translation_bundle.target,
                    translated_messages=None,
                    original_messages=original_messages,
                    from_developer=False)

        translation_percent = retrieve_translations_percent(
            translation_url, original_messages)
        if repo_app is not None and translation_percent != repo_app.translation_percent:
            repo_app.translation_percent = json.dumps(translation_percent)

    try:
        db.session.commit()
    except:
        db.session.rollback()
        raise
コード例 #4
0
            if active_message.value == '{0}':
                reason(bundle, "value={0}")
                continue
            
#             if bundle.translation_url.url == 'http://go-lab.gw.utwente.nl/production/conceptmapper/build/languages/conceptmapper_en_ALL.xml' and active_message.key == 'help.helpDialog.content.conceptmapper' and bundle.language == 'es_ALL':
#                 print "*" * 20
#                 print "Processing {0}::{1}_{2}::{3} ({4!r}) ({5!r})".format(bundle.translation_url.url, bundle.language, bundle.target, active_message.key, active_message.value, original_messages.get(active_message.key))
#                 # print not active_message.taken_from_default
#                 # print active_message.from_developer
#                 # print active_message.value == original_messages.get(active_message.key, '________this.will.never.be')
#                 current = active_message.value
#                 past = original_messages.get(active_message.key, '________this.will.never.be')
#                 print current.strip() == past.strip()
#                 print "*" * 20
            if not active_message.taken_from_default and active_message.from_developer and active_message.value.strip() == original_messages.get(active_message.key, '________this.will.never.be').strip():
                total += 1
                print "Processing {0}::{1}_{2}::{3} ({4!r})".format(bundle.translation_url.url, bundle.language, bundle.target, active_message.key, active_message.value)
                ph = active_message.history
                original_message = original_messages.get(active_message.key, '________this.will.never.be')
                new_history = TranslationMessageHistory(bundle = ph.bundle, key = ph.key, value = original_message, user = get_golab_default_user(), datetime = datetime.datetime.utcnow(), parent_translation_id = ph.id, taken_from_default = True, same_tool = ph.same_tool, tool_id = ph.tool_id, fmt = ph.fmt, position = ph.position, category = ph.category, from_developer = ph.from_developer, namespace = ph.namespace)
                db.session.add(new_history)
                db.session.flush()
                db.session.refresh(new_history)
                am = active_message
                new_active_message = ActiveTranslationMessage(bundle = bundle, key = am.key, value = original_message, history = new_history, datetime = datetime.datetime.utcnow(), taken_from_default = True, position = am.position, category = am.category, from_developer = am.from_developer, namespace = am.namespace, tool_id = am.tool_id, same_tool = am.same_tool, fmt = am.fmt)
                db.session.delete(active_message)
                db.session.add(new_active_message)

    db.session.commit()
    print("{0} records processed".format(total))
コード例 #5
0
import glob
import json
import datetime

from bson.json_util import loads

from appcomposer import app
from appcomposer.translator.ops import get_golab_default_user, add_full_translation_to_app
from appcomposer.translator.utils import extract_local_translations_url

files = glob.glob("dump/*")

with app.app_context():
    user = get_golab_default_user()

    for f in files:
        print "Processing...", f,
        translation = loads(open(f).read())
        app_url = translation['spec']
        language, target = translation['bundle'].rsplit('_', 1)
        if language == 'all_ALL':
            print "Skipping all_ALL"
            continue
        elif language.startswith('af'):
            print "Skipping afghan and afrikaans"
            continue

        try:
            translated_messages = json.loads(json.loads(translation['data']))
        except (ValueError, TypeError):
            translated_messages = json.loads(translation['data'])
コード例 #6
0
def _add_or_update_app(cached_requests, app_url, force_reload, repo_app = None, task = None):
    now = datetime.datetime.utcnow()

    if DEBUG:
        logger.debug("Starting %s" % app_url)

    failing = False
    if task is None:
        try:
            metadata_information = extract_metadata_information(app_url, cached_requests, force_reload)
        except Exception:
            logger.warning("Error extracting information from %s" % app_url, exc_info = True)
            metadata_information = {}
            failing = True
    else:
        metadata_information = task.metadata_information or {}
        failing = task.failing

    if repo_app is not None:
        repo_app.translatable = metadata_information.get('translatable', False)
        repo_app.adaptable = metadata_information.get('adaptable', False)
        repo_app.original_translations = u','.join(metadata_information.get('original_translations', {}).keys())
        repo_app.last_change = now
        repo_app.last_check = now

        if failing:
            repo_app.failing = True
            repo_app.failing_since = now
        else:
            if repo_app.failing:
                repo_app.failing = False

    default_user = get_golab_default_user()

    if metadata_information.get('translatable'):
        translation_url = metadata_information.get('default_translation_url')
        original_messages = metadata_information['default_translations']
        default_metadata = metadata_information['default_metadata']
        for language, translated_messages in metadata_information['original_translations'].iteritems():
            add_full_translation_to_app(user = default_user, app_url = app_url, translation_url = translation_url, 
                                app_metadata = default_metadata,
                                language = language, target = u'ALL', translated_messages = translated_messages, 
                                original_messages = original_messages, from_developer = True)

        namespaces = set([ msg['namespace'] for msg in original_messages.values() if msg['namespace'] ])
        processed_languages = []
        if namespaces:
            pairs = []
            for key, msg in original_messages.iteritems():
                if msg['namespace']:
                    pairs.append({
                        'key' : key,
                        'namespace' : msg['namespace'],
                    })
        
            for language_pack in get_bundles_by_key_namespaces(pairs):
                cur_language = language_pack['language']
                cur_target = language_pack['target']

                if cur_target == 'ALL' and cur_language in metadata_information['original_translations']:
                    # Already processed
                    continue

                processed_languages.append((cur_language, cur_target))
                add_full_translation_to_app(user = default_user, app_url = app_url, translation_url = translation_url,
                                app_metadata = default_metadata,
                                language = cur_language, target = cur_target, translated_messages = {},
                                original_messages = original_messages, from_developer = False)

        db_translation_url = db.session.query(TranslationUrl).filter_by(url = translation_url).first()
        if db_translation_url:
            for translation_bundle in db.session.query(TranslationBundle).filter_by(translation_url = db_translation_url).all():
                if translation_bundle.target == u'ALL' and translation_bundle.language in metadata_information['original_translations']:
                    # Already processed
                    continue
                found = False
                for processed_language, processed_target in processed_languages:
                    if translation_bundle.target == processed_target and translation_bundle.language == processed_language:
                        found = True
                        break

                if found:
                    # Already processed
                    continue

                add_full_translation_to_app(user = default_user, app_url = app_url, translation_url = translation_url, 
                            app_metadata = default_metadata,
                            language = translation_bundle.language, target = translation_bundle.target, translated_messages = None,
                            original_messages = original_messages, from_developer = False)
                   

        translation_percent = retrieve_translations_percent(translation_url, original_messages)
        if repo_app is not None and translation_percent != repo_app.translation_percent:
            repo_app.translation_percent = json.dumps(translation_percent)
    
    try:
        db.session.commit()
    except:
        db.session.rollback()
        raise
コード例 #7
0
def _add_or_update_app(app_url, metadata_information, repo_app_id,
                       force_reload):
    if DEBUG:
        logger.debug("Starting %s" % app_url)
    print("Starting %s" % app_url)

    try:
        repo_app = db.session.query(RepositoryApp).filter_by(
            id=repo_app_id).one()
        initial_contents_hash = repo_app.contents_hash
        initial_downloaded_hash = repo_app.downloaded_hash

        default_user = get_golab_default_user()

        translation_url = metadata_information.get('default_translation_url')
        original_messages = metadata_information['default_translations']
        default_metadata = metadata_information['default_metadata']
        for language, translated_messages in metadata_information[
                'original_translations'].iteritems():
            add_full_translation_to_app(
                user_email=default_user.email,
                app_url=app_url,
                translation_url=translation_url,
                app_metadata=default_metadata,
                language=language,
                target=u'ALL',
                translated_messages=translated_messages,
                original_messages=original_messages,
                from_developer=True)

        namespaces = set([
            msg['namespace'] for msg in original_messages.values()
            if msg['namespace']
        ])
        processed_languages = []
        if namespaces:
            pairs = []
            for key, msg in original_messages.iteritems():
                if msg['namespace']:
                    pairs.append({
                        'key': key,
                        'namespace': msg['namespace'],
                    })

            for language_pack in get_bundles_by_key_namespaces(pairs):
                cur_language = language_pack['language']
                cur_target = language_pack['target']

                if cur_target == 'ALL' and cur_language in metadata_information[
                        'original_translations']:
                    # Already processed
                    continue

                processed_languages.append((cur_language, cur_target))
                add_full_translation_to_app(
                    user_email=default_user.email,
                    app_url=app_url,
                    translation_url=translation_url,
                    app_metadata=default_metadata,
                    language=cur_language,
                    target=cur_target,
                    translated_messages={},
                    original_messages=original_messages,
                    from_developer=False)

        db_translation_url = db.session.query(TranslationUrl).filter_by(
            url=translation_url).first()
        if db_translation_url:
            for translation_bundle in db.session.query(
                    TranslationBundle).filter_by(
                        translation_url=db_translation_url).all():
                if translation_bundle.target == u'ALL' and translation_bundle.language in metadata_information[
                        'original_translations']:
                    # Already processed
                    continue
                found = False
                for processed_language, processed_target in processed_languages:
                    if translation_bundle.target == processed_target and translation_bundle.language == processed_language:
                        found = True
                        break

                if found:
                    # Already processed
                    continue

                add_full_translation_to_app(
                    user_email=default_user.email,
                    app_url=app_url,
                    translation_url=translation_url,
                    app_metadata=default_metadata,
                    language=translation_bundle.language,
                    target=translation_bundle.target,
                    translated_messages=None,
                    original_messages=original_messages,
                    from_developer=False)

        repo_app = db.session.query(RepositoryApp).filter_by(
            id=repo_app_id).one()
        translation_percent = retrieve_translations_percent(
            translation_url, original_messages)
        if translation_percent != repo_app.translation_percent:
            repo_app.translation_percent = json.dumps(translation_percent)

        repo_app.last_processed_contents_hash = initial_contents_hash
        repo_app.last_processed_downloaded_hash = initial_downloaded_hash
        repo_app.last_processed_time = datetime.datetime.utcnow()

        try:
            db.session.commit()
        except:
            import traceback
            traceback.print_exc()
            db.session.rollback()
            raise

        # In the meanwhile, maybe there were changes. Just make 100% sure that the hash is right
        update_content_hash(app_url)
    except:
        import traceback
        traceback.print_exc()
        raise