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))
Exemple #3
0
 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
Exemple #4
0
    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