def handle(self, *app_labels, **options): form, domain = self.get_form_and_domain(**options) manager = XFormManager() if form: print "Migrating Single form: %s." % form manager.repost_schema(form) return if domain: forms = FormDefModel.objects.filter(domain=domain) else: print "Migrating ALL forms." forms = FormDefModel.objects.order_by("domain__name").all() if not forms: print "Whoops. Nothing to migrate. Are you sure you registered forms here?" return current_domain = forms[0].domain print "Migrating forms in %s" % current_domain for form in forms: if form.domain != current_domain: current_domain = form.domain print "Migrating forms in %s" % current_domain print "Migrating %s" % form manager.repost_schema(form)
def testRepostingPreservesRelations(self): """Testing reposting entire schemas with linked objects.""" form = create_xsd_and_populate("data/pf_followup.xsd", "data/pf_followup_1.xml", self.domain) # add some linked objects - one and two levels deep, and track them clear_case_data() fid1 = FormIdentifier.objects.create(form=form, identity_column="id") fid2 = FormIdentifier.objects.create(form=form, identity_column="meta_username") case = Case.objects.create(name="somecase", domain=self.domain) cfid11 = CaseFormIdentifier.objects.create(form_identifier=fid1, case=case, sequence_id=1, form_type="follow") cfid12 = CaseFormIdentifier.objects.create(form_identifier=fid1, case=case, sequence_id=2, form_type="follow") cfid13 = CaseFormIdentifier.objects.create(form_identifier=fid2, case=case, sequence_id=3, form_type="follow") self.assertEqual(3, CaseFormIdentifier.objects.count()) self.assertEqual(2, FormIdentifier.objects.count()) self.assertEqual(1, Case.objects.count()) # repost manager = XFormManager() new_form = manager.repost_schema(form) self.assertEqual(1, FormDefModel.objects.count()) # make sure the counts are still correct self.assertEqual(3, CaseFormIdentifier.objects.count()) self.assertEqual(2, FormIdentifier.objects.count()) self.assertEqual(1, Case.objects.count()) # load up the new objects by unique charateristics (NOT ids) newfid1 = FormIdentifier.objects.get(identity_column="id") newfid2 = FormIdentifier.objects.get(identity_column="meta_username") newcfid11 = CaseFormIdentifier.objects.get(sequence_id=1) newcfid12 = CaseFormIdentifier.objects.get(sequence_id=2) newcfid13 = CaseFormIdentifier.objects.get(sequence_id=3) # make sure relationships are the same (with new objs) but not ids self.assertEqual(new_form, newfid1.form) self.assertEqual(new_form, newfid2.form) self.assertNotEqual(fid1.id, newfid1.id) self.assertNotEqual(fid2.id, newfid2.id) self.assertEqual(newcfid11.form_identifier, newfid1) self.assertEqual(newcfid11.case, case) self.assertEqual(newcfid12.form_identifier, newfid1) self.assertEqual(newcfid12.case, case) self.assertEqual(newcfid13.form_identifier, newfid2) self.assertEqual(newcfid13.case, case) self.assertNotEqual(newcfid11.id, cfid11.id) self.assertNotEqual(newcfid12.id, cfid12.id) self.assertNotEqual(newcfid13.id, cfid13.id)
def testRepostingPreservesData(self): """Testing reposting entire schemas.""" form = create_xsd_and_populate("data/pf_followup.xsd", "data/pf_followup_1.xml", self.domain) original_id = form.id populate("data/pf_followup_2.xml", self.domain) # sanity checks to make sure things are behaving normally self.assertEqual(1, FormDefModel.objects.count()) self.assertEqual(2, Metadata.objects.count()) original_meta_ids = [meta.id for meta in Metadata.objects.all()] cursor = connection.cursor() cursor.execute("SELECT count(*) FROM schema_basicdomain_pathfinder_pathfinder_cc_follow_0_0_2a") self.assertEqual(2, cursor.fetchone()[0]) # repost - numbers should be the same, but the ids should all be different manager = XFormManager() new_form = manager.repost_schema(form) self.assertEqual(1, FormDefModel.objects.count()) # compare basic form properties for field in FormDefModel._meta.fields: if field.name not in ("id", "xsd_file_location", "element"): self.assertEqual(getattr(form, field.name), getattr(new_form, field.name), "Field %s was not successfully migrated. Previous value: %s, new value: %s" \ % (field.name, getattr(form, field.name), getattr(new_form, field.name))) # check metadata self.assertEqual(2, Metadata.objects.count()) self.assertNotEqual(original_id, new_form.id) for meta in Metadata.objects.all(): self.assertFalse(meta.id in original_meta_ids) # check parsed data cursor = connection.cursor() cursor.execute("SELECT count(*) FROM schema_basicdomain_pathfinder_pathfinder_cc_follow_0_0_2a") self.assertEqual(2, cursor.fetchone()[0])