def _traverse(obj, country_code): if isinstance(obj, dict): if _is_this_a_lang_object(obj): new_obj = {} for key, val in obj.items(): if key == "base": new_obj.update({key: val}) else: new_key = iso6392_to_iso6393(key, country_code) new_obj.update({new_key: val}) value = new_obj elif "lang" in obj: iso_code = obj["lang"] new_iso_code = iso6392_to_iso6393(iso_code, country_code) obj["lang"] = new_iso_code value = obj else: value = {k: _traverse(v, country_code) for k, v in obj.items()} elif isinstance(obj, list): value = [_traverse(elem, country_code) for elem in obj] else: value = obj return value
def _base_migrate_to_version_11_2(json_flow, country_code): if "base_language" in json_flow and json_flow["base_language"] != "base": iso_code = json_flow["base_language"] new_iso_code = iso6392_to_iso6393(iso_code, country_code) json_flow["base_language"] = new_iso_code return json_flow
def _base_migrate_to_version_11_2(json_flow, country_code): if 'base_language' in json_flow and json_flow['base_language'] != 'base': iso_code = json_flow['base_language'] new_iso_code = iso6392_to_iso6393(iso_code, country_code) json_flow['base_language'] = new_iso_code return json_flow
def migrate_language(language_qs): with transaction.atomic(): for language in language_qs.only('org__country__name', 'iso_code', 'name').iterator(): try: country_code = language.org.get_country_code() except AttributeError: country_code = None new_iso_code = iso6392_to_iso6393(language.iso_code, country_code=country_code) new_lang_name = get_language_name(new_iso_code) if new_lang_name is None: raise ValueError('(lang_id={}) Cannot get language name for iso_code: {}'.format( language.id, new_iso_code )) if new_iso_code != language.iso_code or new_lang_name != language.name: print( 'Updated: language_id=', language.id, 'org__country', country_code, 'old_iso_code=', language.iso_code, '=> new_iso_code=', new_iso_code, 'old_name=', language.name, '=> new_lang_name', new_lang_name ) language.iso_code = new_iso_code language.name = new_lang_name language.save(update_fields=('name', 'iso_code'))
def migrate_language(contact_qs): with transaction.atomic(): # if we define exact fields that are used it improves the execution speed # the execution was 'blocked' by Python while it was loading 30+ fields from db relations # and two of those fields are large binary blobs - geometry for contact in contact_qs.only("org__country__name", "language").iterator(): try: country_code = contact.org.get_country_code() except AttributeError: country_code = None new_language = iso6392_to_iso6393(contact.language, country_code=country_code) if new_language != contact.language: print( "Updated: contact_id=", contact.id, "org__country__name", country_code, "old_lang=", contact.language, "=> new_lang=", new_language, ) contact.language = new_language contact.save(update_fields=("language", ))
def migrate_event_languages(apps, schema_editor): from temba.campaigns.models import CampaignEvent events = CampaignEvent.objects.filter(event_type='M', is_active=True).select_related('campaign__org') total = len(events) for idx, event in enumerate(CampaignEvent.objects.filter(event_type='M', is_active=True).select_related('campaign__org')): messages = {} for lang, message in six.iteritems(event.message): if lang != 'base': new_lang = iso6392_to_iso6393(lang, country_code=event.campaign.org.get_country_code()) messages[new_lang] = message else: messages[lang] = message if idx % 1000 == 0: print("On event %d of %d" % (idx, total)) event.message = messages event.save(update_fields=('message',))
def migrate_language(language_qs): with transaction.atomic(): for language in language_qs.only("org__country__name", "iso_code", "name").iterator(): try: country_code = language.org.get_country_code() except AttributeError: country_code = None new_iso_code = iso6392_to_iso6393(language.iso_code, country_code=country_code) new_lang_name = get_language_name(new_iso_code) if new_lang_name is None: raise ValueError( "(lang_id={}) Cannot get language name for iso_code: {}". format(language.id, new_iso_code)) if new_iso_code != language.iso_code or new_lang_name != language.name: print( "Updated: language_id=", language.id, "org__country", country_code, "old_iso_code=", language.iso_code, "=> new_iso_code=", new_iso_code, "old_name=", language.name, "=> new_lang_name", new_lang_name, ) language.iso_code = new_iso_code language.name = new_lang_name language.save(update_fields=("name", "iso_code"))