Example #1
0
def update_unique_ids(app_source):
    from corehq.apps.app_manager.models import form_id_references, jsonpath_update

    app_source = deepcopy(app_source)

    def change_form_unique_id(form):
        unique_id = form['unique_id']
        new_unique_id = random_hex()
        form['unique_id'] = new_unique_id
        if ("%s.xml" % unique_id) in app_source['_attachments']:
            app_source['_attachments'][
                "%s.xml" % new_unique_id] = app_source['_attachments'].pop(
                    "%s.xml" % unique_id)
        return new_unique_id

    # once Application.wrap includes deleting user_registration
    # we can remove this
    if 'user_registration' in app_source:
        del app_source['user_registration']

    id_changes = {}
    for m, module in enumerate(app_source['modules']):
        for f, form in enumerate(module['forms']):
            old_id = form['unique_id']
            new_id = change_form_unique_id(
                app_source['modules'][m]['forms'][f])
            id_changes[old_id] = new_id

    for reference_path in form_id_references:
        for reference in reference_path.find(app_source):
            if reference.value in id_changes:
                jsonpath_update(reference, id_changes[reference.value])

    return app_source
Example #2
0
def update_unique_ids(app_source):
    from corehq.apps.app_manager.models import form_id_references, jsonpath_update

    app_source = deepcopy(app_source)

    def change_form_unique_id(form):
        unique_id = form['unique_id']
        new_unique_id = random_hex()
        form['unique_id'] = new_unique_id
        if ("%s.xml" % unique_id) in app_source['_attachments']:
            app_source['_attachments']["%s.xml" % new_unique_id] = app_source['_attachments'].pop("%s.xml" % unique_id)
        return new_unique_id

    change_form_unique_id(app_source['user_registration'])
    id_changes = {}
    for m, module in enumerate(app_source['modules']):
        for f, form in enumerate(module['forms']):
            old_id = form['unique_id']
            new_id = change_form_unique_id(app_source['modules'][m]['forms'][f])
            id_changes[old_id] = new_id

    for reference_path in form_id_references:
        for reference in reference_path.find(app_source):
            if reference.value in id_changes:
                jsonpath_update(reference, id_changes[reference.value])

    for module in app_source['modules']:
        if module['module_type'] == 'report':
            for report_config in module['report_configs']:
                report_config['uuid'] = random_hex()

    return app_source
Example #3
0
def update_form_unique_ids(app_source, ids_map, update_all=True):
    """
    Accepts an ids_map translating IDs in app_source to the desired replacement
    ID. Form IDs not present in ids_map will be given new random UUIDs.
    """
    from corehq.apps.app_manager.models import form_id_references, jsonpath_update

    app_source = deepcopy(app_source)
    attachments = app_source['_attachments']

    def change_form_unique_id(form, old_id, new_id):
        form['unique_id'] = new_id
        if f"{old_id}.xml" in attachments:
            attachments[f"{new_id}.xml"] = attachments.pop(f"{old_id}.xml")

    # once Application.wrap includes deleting user_registration
    # we can remove this
    if 'user_registration' in app_source:
        del app_source['user_registration']

    new_ids_by_old = {}
    for m, module in enumerate(app_source['modules']):
        for f, form in enumerate(module['forms']):
            old_id = form['unique_id']
            if update_all or old_id in ids_map:
                new_id = ids_map.get(old_id, uuid.uuid4().hex)
                new_ids_by_old[old_id] = new_id
                change_form_unique_id(form, old_id, new_id)

    for reference_path in form_id_references:
        for reference in reference_path.find(app_source):
            if reference.value in new_ids_by_old:
                jsonpath_update(reference, new_ids_by_old[reference.value])

    return app_source
Example #4
0
def update_unique_ids(app_source):
    from corehq.apps.app_manager.models import FormBase, form_id_references, jsonpath_update

    app_source = deepcopy(app_source)

    def change_unique_id(form):
        unique_id = form['unique_id']
        new_unique_id = FormBase.generate_id()
        form['unique_id'] = new_unique_id
        if ("%s.xml" % unique_id) in app_source['_attachments']:
            app_source['_attachments']["%s.xml" % new_unique_id] = app_source['_attachments'].pop("%s.xml" % unique_id)
        return new_unique_id

    change_unique_id(app_source['user_registration'])
    id_changes = {}
    for m, module in enumerate(app_source['modules']):
        for f, form in enumerate(module['forms']):
            old_id = form['unique_id']
            new_id = change_unique_id(app_source['modules'][m]['forms'][f])
            id_changes[old_id] = new_id

    for reference_path in form_id_references:
        for reference in reference_path.find(app_source):
            if reference.value in id_changes:
                jsonpath_update(reference, id_changes[reference.value])

    return app_source
Example #5
0
def update_form_unique_ids(app_source, id_map=None):
    from corehq.apps.app_manager.models import form_id_references, jsonpath_update

    app_source = deepcopy(app_source)

    def change_form_unique_id(form, map):
        unique_id = form['unique_id']
        new_unique_id = map.get(form['xmlns'], random_hex())
        form['unique_id'] = new_unique_id
        if ("%s.xml" % unique_id) in app_source['_attachments']:
            app_source['_attachments']["%s.xml" % new_unique_id] = app_source['_attachments'].pop("%s.xml" % unique_id)
        return new_unique_id

    # once Application.wrap includes deleting user_registration
    # we can remove this
    if 'user_registration' in app_source:
        del app_source['user_registration']

    id_changes = {}
    if id_map is None:
        id_map = {}
    for m, module in enumerate(app_source['modules']):
        for f, form in enumerate(module['forms']):
            old_id = form['unique_id']
            new_id = change_form_unique_id(app_source['modules'][m]['forms'][f], id_map)
            id_changes[old_id] = new_id

    for reference_path in form_id_references:
        for reference in reference_path.find(app_source):
            if reference.value in id_changes:
                jsonpath_update(reference, id_changes[reference.value])

    return app_source
Example #6
0
def update_unique_ids(app_source, id_map=None):
    from corehq.apps.app_manager.models import form_id_references, jsonpath_update

    app_source = deepcopy(app_source)

    def change_form_unique_id(form, map):
        unique_id = form['unique_id']
        new_unique_id = map.get(form['xmlns'], random_hex())
        form['unique_id'] = new_unique_id
        if ("%s.xml" % unique_id) in app_source['_attachments']:
            app_source['_attachments'][
                "%s.xml" % new_unique_id] = app_source['_attachments'].pop(
                    "%s.xml" % unique_id)
        return new_unique_id

    # once Application.wrap includes deleting user_registration
    # we can remove this
    if 'user_registration' in app_source:
        del app_source['user_registration']

    id_changes = {}
    if id_map is None:
        id_map = {}
    for m, module in enumerate(app_source['modules']):
        if module['module_type'] == 'report':
            for config in module['report_configs']:
                config['uuid'] = uuid.uuid4().hex

        for f, form in enumerate(module['forms']):
            old_id = form['unique_id']
            new_id = change_form_unique_id(
                app_source['modules'][m]['forms'][f], id_map)
            id_changes[old_id] = new_id

    for reference_path in form_id_references:
        for reference in reference_path.find(app_source):
            if reference.value in id_changes:
                jsonpath_update(reference, id_changes[reference.value])

    return app_source