Пример #1
0
    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)
Пример #2
0
 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)
Пример #3
0
 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])