def update_sync_log_with_checks(sync_log, xform, cases, case_db, case_id_blacklist=None): assert case_db is not None from casexml.apps.case.xform import CaseProcessingConfig case_id_blacklist = case_id_blacklist or [] try: sync_log.update_phone_lists(xform, cases) except SyncLogAssertionError as e: if e.case_id and e.case_id not in case_id_blacklist: form_ids = get_case_xform_ids(e.case_id) case_id_blacklist.append(e.case_id) for form_id in form_ids: if form_id != xform._id: form = XFormInstance.get(form_id) if form.doc_type == 'XFormInstance': from casexml.apps.case.xform import process_cases_with_casedb process_cases_with_casedb( [form], case_db, CaseProcessingConfig( strict_asserts=True, case_id_blacklist=case_id_blacklist ) ) updated_log = get_properly_wrapped_sync_log(sync_log._id) update_sync_log_with_checks(updated_log, xform, cases, case_db, case_id_blacklist=case_id_blacklist)
def update_sync_log_with_checks(sync_log, xform, cases, case_id_blacklist=None): from casexml.apps.case.xform import CaseProcessingConfig case_id_blacklist = case_id_blacklist or [] try: sync_log.update_phone_lists(xform, cases) except SyncLogAssertionError, e: if e.case_id and e.case_id not in case_id_blacklist: form_ids = get_case_xform_ids(e.case_id) case_id_blacklist.append(e.case_id) for form_id in form_ids: if form_id != xform._id: form = XFormInstance.get(form_id) if form.doc_type in ['XFormInstance', 'XFormError']: reprocess_form_cases( form, CaseProcessingConfig( strict_asserts=True, case_id_blacklist=case_id_blacklist)) updated_log = SyncLog.get(sync_log._id) update_sync_log_with_checks(updated_log, xform, cases, case_id_blacklist=case_id_blacklist)
False, 'SyncLogAssertionError raised while updating phone lists', { 'form_id': xform.form_id, 'cases': [case.case_id for case in cases] }) if e.case_id and e.case_id not in case_id_blacklist: form_ids = get_case_xform_ids(e.case_id) case_id_blacklist.append(e.case_id) for form_id in form_ids: if form_id != xform._id: form = XFormInstance.get(form_id) if form.doc_type == 'XFormInstance': from casexml.apps.case.xform import process_cases_with_casedb process_cases_with_casedb( [form], case_db, CaseProcessingConfig( strict_asserts=True, case_id_blacklist=case_id_blacklist)) updated_log = get_properly_wrapped_sync_log(sync_log._id) update_sync_log_with_checks(updated_log, xform, cases, case_db, case_id_blacklist=case_id_blacklist) def get_indexed_cases(domain, case_ids): """ Given a base list of cases, gets all wrapped cases that they reference (parent cases). """