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"})
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)
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"})
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"})
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)
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
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]"
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
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]"
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
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