def add_patch_operation(sql_form): sql_form.track_create(XFormOperationSQL( form=sql_form, user_id=sql_form.user_id, date=datetime.utcnow(), operation="Couch to SQL case patch" ))
def _migrate_form_operations(sql_form, couch_form): for couch_form_op in couch_form.history: sql_form.track_create( XFormOperationSQL(form=sql_form, user_id=couch_form_op.user, date=couch_form_op.date, operation=couch_form_op.operation))
def apply_deprecation(cls, existing_xform, new_xform): existing_xform.state = XFormInstanceSQL.DEPRECATED user_id = (new_xform.auth_context and new_xform.auth_context.get('user_id')) or 'unknown' operation = XFormOperationSQL(user_id=user_id, date=new_xform.edited_on, operation=XFormOperationSQL.EDIT) new_xform.track_create(operation) return existing_xform, new_xform
def test_update_form(self): form = create_form_for_test(DOMAIN) form.user_id = 'user2' operation_date = datetime.utcnow() form.track_create( XFormOperationSQL(user_id='user2', date=operation_date, operation=XFormOperationSQL.EDIT)) FormAccessorSQL.update_form(form) saved_form = FormAccessorSQL.get_form(form.form_id) self.assertEqual('user2', saved_form.user_id) self.assertEqual(1, len(saved_form.history)) self.assertEqual(operation_date, saved_form.history[0].date)
def undo_form_edits(form_tuples, logger): cases_to_rebuild = defaultdict(set) ledgers_to_rebuild = defaultdict(set) operation_date = datetime.utcnow() for live_form, deprecated_form in form_tuples: # undo corehq.form_processor.parsers.form.apply_deprecation case_cache = CaseDbCacheSQL(live_form.domain, load_src="undo_form_edits") live_case_updates = get_case_updates(live_form) deprecated_case_updates = get_case_updates(deprecated_form) case_cache.populate( set(cu.id for cu in live_case_updates) | set(cu.id for cu in deprecated_case_updates)) deprecated_form.form_id = new_id_in_same_dbalias( deprecated_form.form_id) deprecated_form.state = XFormInstanceSQL.NORMAL deprecated_form.orig_id = None deprecated_form.edited_on = None live_form.deprecated_form_id = None live_form.received_on = live_form.edited_on live_form.edited_on = None affected_cases, affected_ledgers = update_case_transactions_for_form( case_cache, live_case_updates, deprecated_case_updates, live_form, deprecated_form) for form in (live_form, deprecated_form): form.track_create( XFormOperationSQL(user_id='system', operation=XFormOperationSQL.UUID_DATA_FIX, date=operation_date)) FormAccessorSQL.update_form(form) logger.log('Form edit undone: {}, {}({})'.format( live_form.form_id, deprecated_form.form_id, deprecated_form.original_form_id)) cases_to_rebuild[live_form.domain].update(affected_cases) ledgers_to_rebuild[live_form.domain].update(affected_ledgers) logger.log('Cases to rebuild: {}'.format(','.join(affected_cases))) logger.log('Ledgers to rebuild: {}'.format(','.join( [l.as_id() for l in affected_ledgers]))) return cases_to_rebuild, ledgers_to_rebuild
def undo_form_edits(forms): cases_to_rebuild = defaultdict(set) operation_date = datetime.utcnow() for form in forms: # undo corehq.form_processor.parsers.form.apply_deprecation if form.is_deprecated: form.form_id = new_id_in_same_dbalias(form.form_id) form.state = XFormInstanceSQL.NORMAL form.orig_id = None form.edited_on = None form.date = operation_date else: form.deprecated_form_id = None form.received_on = form.edited_on form.edited_on = None form.track_create( XFormOperationSQL(user_id='system', operation=XFormOperationSQL.UUID_DATA_FIX)) cases_to_rebuild[form.domain].update(get_case_ids_from_form(form)) form.save() return cases_to_rebuild