示例#1
0
 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
示例#2
0
 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
示例#3
0
 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
示例#4
0
 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
示例#5
0
 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)
示例#6
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)
示例#7
0
 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)
示例#8
0
 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)
示例#9
0
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
示例#10
0
 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)
示例#11
0
 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)
示例#12
0
 def setUp(self):
     self.f1 = FormDef.from_file( get_file("data/versioning/base.xsd") )
示例#13
0
 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