Esempio n. 1
0
    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
Esempio n. 2
0
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
Esempio n. 3
0
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'))
Esempio n. 5
0
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", ))
Esempio n. 6
0
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"))