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
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
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
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
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
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