コード例 #1
0
ファイル: api.py プロジェクト: go-lab/appcomposer
def api_languages():
    ordered_dict = OrderedDict()
    languages = list(obtain_languages().iteritems())
    languages.sort(lambda x1, x2: cmp(x1[1], x2[1]))
    for lang_code, lang_name in languages:
        if not lang_code.startswith('en_'):
            ordered_dict[lang_code] = lang_name
    resp = make_response(json.dumps(ordered_dict, indent=4))
    resp.content_type = 'application/json'
    return resp
コード例 #2
0
ファイル: api.py プロジェクト: go-lab/appcomposer
def api_languages():
    ordered_dict = OrderedDict()
    languages = list(obtain_languages().iteritems())
    languages.sort(lambda x1, x2 : cmp(x1[1], x2[1]))
    for lang_code, lang_name in languages:
        if not lang_code.startswith('en_'):
            ordered_dict[lang_code] = lang_name
    resp = make_response(json.dumps(ordered_dict, indent = 4))
    resp.content_type = 'application/json'
    return resp
コード例 #3
0
ファイル: main.py プロジェクト: go-lab/appcomposer
def select_translations():
    app_url = request.args.get('app_url')
    language = request.args.get('lang')
    target = request.args.get('target')

    if app_url and language and target:
        return redirect(url_for('translator_api.api_translate', app_url = app_url, language = language, target = target))

    targets = obtain_groups()
    languages = list(obtain_languages().iteritems())
    languages.sort(lambda x1, x2 : cmp(x1[1], x2[1]))
    return render_template("translator/select_translations.html", targets = targets, languages = languages)
コード例 #4
0
def select_translations():
    app_url = request.args.get('app_url')
    language = request.args.get('lang')
    target = request.args.get('target')

    if app_url and language and target:
        return redirect(
            url_for('translator_api.api_translate',
                    app_url=app_url,
                    language=language,
                    target=target))

    targets = obtain_groups()
    languages = list(obtain_languages().iteritems())
    languages.sort(lambda x1, x2: cmp(x1[1], x2[1]))
    return render_template("translator/select_translations.html",
                           targets=targets,
                           languages=languages)
コード例 #5
0
ファイル: api.py プロジェクト: go-lab/appcomposer
def api_languages_default():
    languages = list(obtain_languages().iteritems())
    languages.sort(lambda x1, x2: cmp(x1[1], x2[1]))
    list_of_languages = []
    for lang_code, lang_name in languages:
        if lang_code.startswith('all'):
            continue
        list_of_languages.append({
            'name': lang_name,
            'code': '_'.join(lang_code.split('_')[:2])
        })
    contents = {
        'default': (guess_default_language() or 'en').split('_')[0],
        'languages': list_of_languages,
    }
    resp = make_response(json.dumps(contents, indent=4))
    resp.content_type = 'application/json'
    return resp
コード例 #6
0
ファイル: api.py プロジェクト: go-lab/appcomposer
def api_languages_default():
    languages = list(obtain_languages().iteritems())
    languages.sort(lambda x1, x2 : cmp(x1[1], x2[1]))
    list_of_languages = []
    for lang_code, lang_name in languages:
        if lang_code.startswith('all'):
            continue
        list_of_languages.append({
            'name': lang_name,
            'code': '_'.join(lang_code.split('_')[:2])
        })
    contents = {
        'default': (guess_default_language() or 'en').split('_')[0],
        'languages': list_of_languages,
    }
    resp = make_response(json.dumps(contents, indent = 4))
    resp.content_type = 'application/json'
    return resp
コード例 #7
0
ファイル: dev.py プロジェクト: go-lab/appcomposer
def supported_languages_human():
    languages = sorted([ (name, code) for name, code in LANGUAGES_PER_NAME.items() if not '_' in code ], lambda (name1, code1), (name2, code2) : cmp(name1, name2))
    visible_languages = [ key.split('_')[0] for key in obtain_languages().keys() ]
    return render_template("translator/supported_languages.html", languages=languages, wrong=WRONG_LANGUAGES_PER_CORRECT_NAME, visible_languages=visible_languages)
コード例 #8
0
ファイル: dev.py プロジェクト: go-lab/appcomposer
def supported_languages():
    languages = sorted([ (name, code) for name, code in LANGUAGES_PER_NAME.items() if not '_' in code ], lambda (name1, code1), (name2, code2) : cmp(name1, name2))
    visible_languages = [ key.split('_')[0] for key in obtain_languages().keys() ]
    return jsonify(languages=languages, golab_languages=visible_languages, mappings=WRONG_LANGUAGES_PER_CORRECT_NAME)
コード例 #9
0
ファイル: dev.py プロジェクト: go-lab/appcomposer
def translation_changes():
    try:
        r = requests.get("https://www.golabz.eu/rest/labs/retrieve.json")
        r.raise_for_status()
        labs = r.json()
    except:
        return "Error accessing https://www.golabz.eu/rest/labs/retrieve.json", 500

    from appcomposer.translator.tasks import GOLAB_REPO
    repository_apps = db.session.query(RepositoryApp).filter_by(repository=GOLAB_REPO).filter(RepositoryApp.app_link.like('https://www.golabz.eu/lab%'), or_(RepositoryApp.translation_percent != None, RepositoryApp.original_translations != None)).all()
    automatic_urls = {}
    for translated_app in db.session.query(TranslatedApp).filter(TranslatedApp.url.in_([ repo_app.url for repo_app in repository_apps ])).all():
        automatic_urls[translated_app.url] = translated_app.translation_url.automatic

    repository_apps_by_external_id = defaultdict(list) # {
        # id: [ repository_app1, repository_app2, repository_app3 ... ]
    # }
    for repository_app in repository_apps:
        external_id = repository_app.external_id.split('-')[0]
        repository_apps_by_external_id[external_id].append(repository_app)

    threshold = request.args.get('threshold', 100 * LANGUAGE_THRESHOLD)
    try:
        threshold = float(threshold)
    except (ValueError, TypeError):
        threshold = 100 * LANGUAGE_THRESHOLD
    threshold = threshold / 100.0

    show_names = request.args.get('show_names', 'false').lower() == 'true'
    show_urls = request.args.get('show_urls', 'false').lower() == 'true'
    show_total = request.args.get('show_total', 'false').lower() == 'true'

    changes = {
        # If there is a change (removal, addition), it lists it like this:
        # identifier: [ lang1, lang2, lang3 ] 
    }
    total_changes = {
        # If there is an addition, it lists it like this:
        # identifier: {
        #     'additions' : [lang1, lang2]
        #     'subtractions' : [lang3, lang4]
        # }
    }
    visible_languages = [ key.split('_')[0] for key in obtain_languages().keys() ]
    for lab in labs:
        external_id = lab.get('id')
        appcomposer_languages = set()
        for repo_app in repository_apps_by_external_id.get(external_id, []):
            # If it is not automatic we should not count it (only the original translations)
            if automatic_urls.get(repo_app.url, True):
                translation_percent = json.loads(repo_app.translation_percent or "{}")
                for lang, value in translation_percent.items():
                    if value >= threshold:
                        # lang should be 'en'; not 'en_ALL_ALL'
                        lang = lang.split('_')[0]
                        appcomposer_languages.add(lang)

            for lang in (repo_app.original_translations or '').split(','):
                if lang:
                    lang = lang.split('_')[0]
                    if lang in visible_languages:
                        appcomposer_languages.add(lang)

        lab_languages = lab.get('lab_languages', [])
        golabz_languages = set()
        for language in lab_languages:
            # If the language is in WRONG_LANGUAGES, take it; otherwise keep it
            language = WRONG_LANGUAGES.get(language, language)
            if language in LANGUAGES_PER_NAME:
                lang_code = LANGUAGES_PER_NAME[language]
                golabz_languages.add(lang_code)

        # If there are changes and there are appcomposer languages
        if len(appcomposer_languages) > 0:
            additions = appcomposer_languages - golabz_languages
            subtractions = golabz_languages - appcomposer_languages
            if subtractions or additions:
                identifier = external_id
                if show_urls:
                    repo_apps = repository_apps_by_external_id.get(external_id, [])
                    if repo_apps:
                        identifier = repo_apps[0].app_link

                elif show_names:
                    repo_apps = repository_apps_by_external_id.get(external_id, [])
                    if repo_apps:
                        identifier = repo_apps[0].name
                
                total_changes[identifier] = {}
                if subtractions:
                    total_changes[identifier]['subtractions'] = list(subtractions)
                if additions:
                    total_changes[identifier]['additions'] = list(additions)
                changes[identifier] = []
                for lang_code in appcomposer_languages:
                    display_name = LANGUAGE_NAMES_PER_CODE.get(lang_code, lang_code)
                    display_name = WRONG_LANGUAGES_PER_CORRECT_NAME.get(display_name, [ display_name ])[0]
                    changes[identifier].append(display_name)
                changes[identifier] = sort_languages(changes[identifier])
    response = dict(changes=changes)
    if show_total:
        response['total_changes'] = total_changes
    return jsonify(**response)
コード例 #10
0
ファイル: dev.py プロジェクト: go-lab/appcomposer
                    display_name = LANGUAGE_NAMES_PER_CODE.get(lang_code, lang_code)
                    display_name = WRONG_LANGUAGES_PER_CORRECT_NAME.get(display_name, [ display_name ])[0]
                    changes[identifier].append(display_name)
                changes[identifier] = sort_languages(changes[identifier])
    response = dict(changes=changes)
    if show_total:
        response['total_changes'] = total_changes
    return jsonify(**response)

TARGET_CHOICES = []
TARGETS = obtain_groups()
for target_code in sorted(TARGETS):
    TARGET_CHOICES.append((target_code, TARGETS[target_code]))

LANGUAGE_CHOICES = []
LANGUAGES = obtain_languages()
for lang_code in sorted(LANGUAGES):
    LANGUAGE_CHOICES.append((lang_code, LANGUAGES[lang_code]))

class UploadForm(Form):
    url = URLField(u"App URL", validators=[url(), required()])
    language = Select2Field(u"Language", choices = LANGUAGE_CHOICES, validators = [ required() ])
    target = Select2Field(u"Target age", choices = TARGET_CHOICES, validators = [ required() ], default = "ALL")
    opensocial_xml = FileField(u'OpenSocial XML file', validators = [required()])

@translator_dev_blueprint.route('/upload/', methods = ('GET', 'POST'))
@requires_golab_login
def translation_upload():
    default_language = guess_default_language()
    if default_language:
        form = UploadForm(language = default_language)