コード例 #1
0
ファイル: api.py プロジェクト: go-lab/appcomposer
def bundle_update(language, target):
    if language == 'en_ALL':
        # Don't allow to translate texts in English
        return jsonify(result="error")

    app_url = request.values.get('app_url')
    try:
        request_data = request.get_json(force=True, silent=True) or {}
    except ValueError:
        request_data = {}
    key = request_data.get("key")
    value = request_data.get("value")

    if key is None or value is None:
        return jsonify(**{"result": "error"})

    user = current_golab_user()

    translation_url, original_messages, metadata = extract_local_translations_url(
        app_url, force_local_cache=True)
    translated_messages = {key: value}

    add_full_translation_to_app(user.email,
                                app_url,
                                translation_url,
                                metadata,
                                language,
                                target,
                                translated_messages,
                                original_messages,
                                from_developer=False)
    from appcomposer.translator.tasks import task_synchronize_single_app
    task_synchronize_single_app.delay("update", app_url)

    return jsonify(**{"result": "success"})
コード例 #2
0
ファイル: views.py プロジェクト: iasinDev/appcomposer
def translation_upload():
    default_language = _guess_default_language()
    if default_language:
        form = UploadForm(language = default_language)
    else:
        form = UploadForm()

    if form.validate_on_submit():
        errors = False
        app_url = form.url.data

        try:
            translation_url, original_messages, metadata = extract_local_translations_url(app_url)
        except Exception as e:
            traceback.print_exc()
            form.url.errors = [unicode(e)]
            errors = True

        xml_contents = form.opensocial_xml.data.read()
        if isinstance(xml_contents, str):
            xml_contents = unicode(xml_contents, 'utf8')
        try:
            translated_messages, metadata = extract_messages_from_translation(xml_contents)
        except Exception as e:
            traceback.print_exc()
            form.opensocial_xml.errors = [unicode(e)]
            errors = True
        
        if not errors:
            language = form.language.data
            target = form.target.data
            add_full_translation_to_app(current_golab_user(), app_url, translation_url, metadata, language, target, translated_messages, original_messages, from_developer = False)
            flash("Contents successfully added")

    return render_template('translator/translations_upload.html', form=form)
コード例 #3
0
ファイル: api.py プロジェクト: go-lab/appcomposer
def bundle_update(language, target):
    if language == 'en_ALL':
        # Don't allow to translate texts in English
        return jsonify(result="error")

    app_url = request.values.get('app_url')
    try:
        request_data = request.get_json(force=True, silent=True) or {}
    except ValueError:
        request_data = {}
    key = request_data.get("key")
    value = request_data.get("value")

    if key is None or value is None:
        return jsonify(**{"result": "error"})

    user = current_golab_user()

    translation_url, original_messages, metadata = extract_local_translations_url(app_url, force_local_cache = True)
    translated_messages = { key : value }

    add_full_translation_to_app(user.email, app_url, translation_url, metadata, language, target, translated_messages, original_messages, from_developer = False)
    from appcomposer.translator.tasks import task_synchronize_single_app
    task_synchronize_single_app.delay("update", app_url)

    return jsonify(**{"result": "success"})
コード例 #4
0
ファイル: views.py プロジェクト: iasinDev/appcomposer
def bundle_update(language, target):
    app_url = request.values.get('app_url')
    key = request.values.get("key")
    value = request.values.get("value")

    if key is None or value is None:
        return jsonify(**{"result": "error"})

    user = current_golab_user()
    translation_url, original_messages, metadata = extract_local_translations_url(app_url, force_local_cache = True)
    translated_messages = { key : value }

    add_full_translation_to_app(user, app_url, translation_url, metadata, language, target, translated_messages, original_messages, from_developer = False)

    return jsonify(**{"result": "success"})
コード例 #5
0
ファイル: dev.py プロジェクト: go-lab/appcomposer
def translation_upload():
    default_language = guess_default_language()
    if default_language:
        form = UploadForm(language = default_language)
    else:
        form = UploadForm()

    if form.validate_on_submit():
        errors = False
        app_url = form.url.data

        try:
            translation_url, original_messages, metadata = extract_local_translations_url(app_url)
        except Exception as e:
            traceback.print_exc()
            form.url.errors = [unicode(e)]
            errors = True

        xml_contents = form.opensocial_xml.data.read()
        if isinstance(xml_contents, str):
            xml_contents = unicode(xml_contents, 'utf8')
        try:
            translated_messages, metadata = extract_messages_from_translation(translation_url, xml_contents)
        except Exception as e:
            traceback.print_exc()
            form.opensocial_xml.errors = [unicode(e)]
            errors = True
        
        if not errors:
            language = form.language.data
            target = form.target.data
            add_full_translation_to_app(current_golab_user().email, app_url, translation_url, metadata, language, target, translated_messages, original_messages, from_developer = False)
            from appcomposer.translator.tasks import synchronize_apps_cache_wrapper
            synchronize_apps_cache_wrapper.delay("upload")
            flash("Contents successfully added")

    return render_template('translator/translations_upload.html', form=form)
コード例 #6
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
コード例 #7
0
    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'])

        if translated_messages is None or len(translated_messages) == 0:
            print "Skipping empty"
            continue

        from_developer = False

        translation_url, original_messages = extract_local_translations_url(app_url, force_local_cache = True)

        add_full_translation_to_app(user, app_url, translation_url, language, target, translated_messages, original_messages, from_developer)
        print "[done]"

コード例 #8
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
コード例 #9
0
    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'])

        if translated_messages is None or len(translated_messages) == 0:
            print "Skipping empty"
            continue

        from_developer = False

        translation_url, original_messages = extract_local_translations_url(
            app_url, force_local_cache=True)

        add_full_translation_to_app(user, app_url, translation_url, language,
                                    target, translated_messages,
                                    original_messages, from_developer)
        print "[done]"
コード例 #10
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
コード例 #11
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