def explode_cases(request, domain, template="hqcase/explode_cases.html"): if request.method == 'POST': user_id = request.POST['user_id'] user = CommCareUser.get_by_user_id(user_id, domain) factor = request.POST.get('factor', '2') try: factor = int(factor) except ValueError: messages.error(request, 'factor must be an int; was: %s' % factor) else: keys = [[domain, owner_id, False] for owner_id in user.get_owner_ids()] for case in CommCareCase.view('hqcase/by_owner', keys=keys, include_docs=True, reduce=False ): for i in range(factor - 1): new_case_id = uuid.uuid4().hex case_block, attachments = make_creating_casexml(case, new_case_id) submit_case_blocks(case_block, domain, attachments=attachments) messages.success(request, "All of %s's cases were exploded by a factor of %d" % (user.raw_username, factor)) return render(request, template, { 'domain': domain, 'users': CommCareUser.by_domain(domain), })
def test_make_creating_casexml(self): for input, files, output in TESTS: with mock_fetch_case_attachment(input.case_id, files): case_block, attachments = make_creating_casexml(input, "new-case-abc123") self.assertXmlEqual(case_block, output) self.assertDictEqual( {key: value.read() for key, value in attachments.items()}, {value: open(value).read() for key, value in files.items()}, )
def test_make_creating_casexml(self): for input, files, output in TESTS: with mock_fetch_case_attachment(input.case_id, files): case_block, attachments = make_creating_casexml( 'mock-domain', input, 'new-case-abc123') self.assertXmlEqual(case_block, output) self.assertDictEqual( {key: value.read() for key, value in attachments.items()}, {value: open(value).read() for key, value in files.items()} )
def submit_case(case, new_case_id, domain, new_parent_ids=dict()): case_block, attachments = make_creating_casexml(case, new_case_id, new_parent_ids) submit_case_blocks(case_block, domain, attachments=attachments)