예제 #1
0
 def assign_new_id(cls, xform):
     from corehq.sql_db.util import new_id_in_same_dbalias
     if xform.is_saved():
         # avoid moving to a separate sharded db
         xform.form_id = new_id_in_same_dbalias(xform.form_id)
     else:
         xform.form_id = six.text_type(uuid.uuid4())
     return xform
예제 #2
0
 def test_same_dbalias_util(self):
     from corehq.sql_db.util import get_db_alias_for_partitioned_doc, new_id_in_same_dbalias
     for i in range(10):
         # test multiple times to test a wider probability
         f1_id = str(uuid4())
         old_db_alias = get_db_alias_for_partitioned_doc(f1_id)
         f2_id = new_id_in_same_dbalias(f1_id)
         new_db_alias = get_db_alias_for_partitioned_doc(f2_id)
         self.assertEqual(new_db_alias, old_db_alias)
예제 #3
0
 def test_same_dbalias_util(self):
     from corehq.sql_db.util import get_db_alias_for_partitioned_doc, new_id_in_same_dbalias
     for i in range(10):
         # test multiple times to test a wider probability
         f1_id = six.text_type(uuid4())
         old_db_alias = get_db_alias_for_partitioned_doc(f1_id)
         f2_id = new_id_in_same_dbalias(f1_id)
         new_db_alias = get_db_alias_for_partitioned_doc(f2_id)
         self.assertEqual(new_db_alias, old_db_alias)
예제 #4
0
 def test_reparent(self):
     metadb = self.db.metadb
     self.db.put(BytesIO(b"content"), meta=new_meta(parent_id="no-change"))
     metas = []
     for name in "abc":
         meta = new_meta(parent_id="old", name=name)
         metas.append(self.db.put(BytesIO(b"content"), meta=meta))
     a, b, c = metas
     new_parent = new_id_in_same_dbalias("old")
     metadb.reparent("old", new_parent)
     self.assertEqual(metadb.get_for_parent("old"), [])
     self.assertEqual(
         [m.id for m in metadb.get_for_parent(new_parent)],
         [m.id for m in metas],
     )
     self.assertEqual(len(metadb.get_for_parent("no-change")), 1)
예제 #5
0
 def test_reparent(self):
     metadb = self.db.metadb
     self.db.put(BytesIO(b"content"), meta=new_meta(parent_id="no-change"))
     metas = []
     for name in "abc":
         meta = new_meta(parent_id="old", name=name)
         metas.append(self.db.put(BytesIO(b"content"), meta=meta))
     a, b, c = metas
     new_parent = new_id_in_same_dbalias("old")
     metadb.reparent("old", new_parent)
     self.assertEqual(metadb.get_for_parent("old"), [])
     self.assertEqual(
         [m.id for m in metadb.get_for_parent(new_parent)],
         [m.id for m in metas],
     )
     self.assertEqual(len(metadb.get_for_parent("no-change")), 1)
예제 #6
0
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
예제 #7
0
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)
        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
예제 #8
0
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
예제 #9
0
 def assign_new_id(cls, xform):
     from corehq.sql_db.util import new_id_in_same_dbalias
     # avoid moving to a separate sharded db
     xform.form_id = new_id_in_same_dbalias(xform.form_id)
     return xform
예제 #10
0
 def assign_new_id(cls, xform):
     from corehq.sql_db.util import new_id_in_same_dbalias
     # avoid moving to a separate sharded db
     xform.form_id = new_id_in_same_dbalias(xform.form_id)
     return xform
예제 #11
0
 def get_new_id(parent_id):
     if parent_id not in deprecated_ids:
         deprecated_ids[parent_id] = new_id_in_same_dbalias(parent_id)
     return deprecated_ids[parent_id]