def get_formdef_from_schema_file(self, xsd_file_location): g = open( xsd_file_location ,"r") formdef = FormDef(g) formdef.force_to_valid() g.close() self.formdef = formdef return formdef
def get_formdef_from_schema_file(self, xsd_file_location): g = open( xsd_file_location ,"r") formdef = FormDef(g) formdef.force_to_valid() stripped_formdef = self._strip_meta_def( formdef ) g.close() self.formdef = formdef return stripped_formdef
def testBadVersions(self): """ Test very deep form definition created and data saved """ fin = open( get_file("data/bad_version.xsd"), 'r' ) formdef = FormDef(fin) fin.close() try: formdef.validate() self.fail("Should raise a version error") except FormDef.FormDefError, e: pass
def validate_schema(self, file_name): """validate schema Returns a tuple (is_valid, error) is_valid - True if valid, False if not error - Relevant validation error """ fout = open(file_name, 'r') formdef = FormDef(fout) fout.close() try: formdef.validate() except FormDef.FormDefError, e: return False, e
def testAddAndRemove(self): """ testAddAndRemove """ self.f1 = FormDef.from_file( get_file("data/versioning/base.xsd") ) f2 = FormDef.from_file( get_file("data/versioning/field_added.xsd") ) diff = self.f1.get_differences(f2) self.assertFalse(diff.is_empty()) self.assertTrue(len(diff.fields_added)==3) self.assertTrue(len(diff.fields_changed)==0) self.assertTrue(len(diff.fields_removed)==0) diff = f2.get_differences(self.f1) self.assertFalse(diff.is_empty()) self.assertTrue(len(diff.fields_added)==0) self.assertTrue(len(diff.fields_removed)==3) self.assertTrue(len(diff.fields_changed)==0)
def to_formdef(self): """Convert this FormDefModel to a FormDef object.""" if self.xsd_file_location is None: # I wonder if we should really fail this hard... raise IOError("Schema for form %s could not be found on the file system." % \ self.target_namespace) return FormDef.from_file(self.xsd_file_location)
def testChangeType(self): """ testChangeType """ f2 = FormDef.from_file( get_file("data/versioning/field_changed_type.xsd") ) diff = self.f1.get_differences(f2) self.assertFalse(diff.is_empty()) self.assertTrue(len(diff.fields_added)==0) self.assertTrue(len(diff.fields_removed)==0) self.assertTrue(len(diff.fields_changed)==3)
def testChangeNodeRepeats(self): """ testChangeNodeRepeats """ # make repeatable f1 = FormDef.from_file( get_file("data/versioning/repeats.xsd") ) f2 = FormDef.from_file( get_file("data/versioning/field_changed_repeatable_node.xsd") ) diff = f1.get_differences(f2) self.assertFalse(diff.is_empty()) self.assertTrue(len(diff.fields_added)==0) self.assertTrue(len(diff.fields_removed)==0) # when the parent becomes repeatable, both parent and child have changed self.assertTrue(len(diff.fields_changed)==2) # make not repeatable diff = f2.get_differences(f1) self.assertFalse(diff.is_empty()) self.assertTrue(len(diff.fields_added)==0) self.assertTrue(len(diff.fields_removed)==0) # when the parent becomes repeatable, both parent and child have changed self.assertTrue(len(diff.fields_changed)==2)
def validate_xml(xml_body, display_name="your xform", do_hq_validation=True): """Validates an xform from the raw text, and takes in a display name to use in throwing erros. Returns the generated FormDef or thows an exception on failure.""" output, errorstream, has_error = form_translate(xml_body) if has_error: raise Exception("Could not convert xform (%s) to schema. Your error is %s" % (display_name, errorstream)) # if no errors, we should have a valid schema in the output # check the meta block, by creating a formdef object and inspecting it formdef = FormDef(StringIO(output)) if not formdef: raise Exception("Could not get a valid form definition from the xml file: %s" % display_name) if do_hq_validation: #formdef.validate() throws errors on poor validation formdef.validate() # if we made it here we're all good return formdef
def testChangeLeafRepeats(self): """ testChangeLeafRepeats """ # make repeatable f2 = FormDef.from_file( get_file("data/versioning/field_changed_repeatable_leaf.xsd") ) diff = self.f1.get_differences(f2) self.assertFalse(diff.is_empty()) self.assertTrue(len(diff.fields_added)==0) self.assertTrue(len(diff.fields_removed)==0) self.assertTrue(len(diff.fields_changed)==1) # make not repeatable diff = f2.get_differences(self.f1) self.assertFalse(diff.is_empty()) self.assertTrue(len(diff.fields_added)==0) self.assertTrue(len(diff.fields_removed)==0) self.assertTrue(len(diff.fields_changed)==1)
def testChangeEnumAddAndRemove(self): """ testChangeEnumAddAndRemove """ f2 = FormDef.from_file( get_file("data/versioning/field_changed_enum.xsd") ) diff = self.f1.get_differences(f2) self.assertFalse(diff.is_empty()) self.assertTrue(len(diff.fields_added)==0) self.assertTrue(len(diff.fields_changed)==0) self.assertTrue(len(diff.fields_removed)==0) self.assertTrue(len(diff.types_changed)==1) diff = f2.get_differences(self.f1) self.assertFalse(diff.is_empty()) self.assertTrue(len(diff.fields_added)==0) self.assertTrue(len(diff.fields_changed)==0) self.assertTrue(len(diff.fields_removed)==0) self.assertTrue(len(diff.types_changed)==1)
def setUp(self): self.f1 = FormDef.from_file( get_file("data/versioning/base.xsd") )
def _get_basic_formdef(self, name="a name", xpath = "xpath", child_elements=[], allowable_values=[], type="type", is_repeatable=False, types={}, version=1, uiversion=1, target_namespace="uri://my_xmlns"): """Make a formdef, with as many or as few custom parameters as you want""" to_return = FormDef() to_return.name = name to_return.xpath = xpath to_return.child_elements = child_elements to_return.allowable_values = allowable_values to_return.type = type to_return.is_repeatable = is_repeatable to_return.types = types to_return.version = version to_return.uiversion = uiversion to_return.target_namespace = target_namespace return to_return