xmlclass/xmlclass.py
changeset 1837 c507c363625e
parent 1832 0f1081928d65
child 1846 14b40afccd69
equal deleted inserted replaced
1836:d42b6cf00fa6 1837:c507c363625e
    55     text.data = value
    55     text.data = value
    56     attr.childNodes[0] = text
    56     attr.childNodes[0] = text
    57     node._attrs[name] = attr
    57     node._attrs[name] = attr
    58 
    58 
    59 
    59 
    60 """
    60 # Regular expression models for checking all kind of
    61 Regular expression models for checking all kind of string values defined in XML
    61 # string values defined in XML standard
    62 standard
    62 
    63 """
       
    64 Name_model = re.compile('([a-zA-Z_\:][\w\.\-\:]*)$')
    63 Name_model = re.compile('([a-zA-Z_\:][\w\.\-\:]*)$')
    65 Names_model = re.compile('([a-zA-Z_\:][\w\.\-\:]*(?: [a-zA-Z_\:][\w\.\-\:]*)*)$')
    64 Names_model = re.compile('([a-zA-Z_\:][\w\.\-\:]*(?: [a-zA-Z_\:][\w\.\-\:]*)*)$')
    66 NMToken_model = re.compile('([\w\.\-\:]*)$')
    65 NMToken_model = re.compile('([\w\.\-\:]*)$')
    67 NMTokens_model = re.compile('([\w\.\-\:]*(?: [\w\.\-\:]*)*)$')
    66 NMTokens_model = re.compile('([\w\.\-\:]*(?: [\w\.\-\:]*)*)$')
    68 QName_model = re.compile('((?:[a-zA-Z_][\w]*:)?[a-zA-Z_][\w]*)$')
    67 QName_model = re.compile('((?:[a-zA-Z_][\w]*:)?[a-zA-Z_][\w]*)$')
  1009     def GetEquivalentParents(self, parent):
  1008     def GetEquivalentParents(self, parent):
  1010         return reduce(lambda x, y: x + y,
  1009         return reduce(lambda x, y: x + y,
  1011                       [[p] + self.GetEquivalentParents(p)
  1010                       [[p] + self.GetEquivalentParents(p)
  1012                        for p in self.EquivalentClassesParent.get(parent, {}).keys()], [])
  1011                        for p in self.EquivalentClassesParent.get(parent, {}).keys()], [])
  1013 
  1012 
  1014     """
       
  1015     Methods that generates the classes
       
  1016     """
       
  1017     def CreateClasses(self):
  1013     def CreateClasses(self):
       
  1014         """
       
  1015         Method that generates the classes
       
  1016         """
  1018         self.ParseSchema()
  1017         self.ParseSchema()
  1019         for name, infos in self.Namespaces[self.TargetNamespace].items():
  1018         for name, infos in self.Namespaces[self.TargetNamespace].items():
  1020             if infos["type"] == ELEMENT:
  1019             if infos["type"] == ELEMENT:
  1021                 if not isinstance(infos["elmt_type"], (UnicodeType, StringType)) and \
  1020                 if not isinstance(infos["elmt_type"], (UnicodeType, StringType)) and \
  1022                    infos["elmt_type"]["type"] == COMPLEXTYPE:
  1021                    infos["elmt_type"]["type"] == COMPLEXTYPE:
  1185         self.AddToLookupClass(name, parent, class_definition)
  1184         self.AddToLookupClass(name, parent, class_definition)
  1186         self.AddToLookupClass(classname, None, class_definition)
  1185         self.AddToLookupClass(classname, None, class_definition)
  1187 
  1186 
  1188         return class_infos
  1187         return class_infos
  1189 
  1188 
  1190     """
       
  1191     Methods that print the classes generated
       
  1192     """
       
  1193     def PrintClasses(self):
  1189     def PrintClasses(self):
       
  1190         """
       
  1191         Method that print the classes generated
       
  1192         """
  1194         items = self.ComputedClasses.items()
  1193         items = self.ComputedClasses.items()
  1195         items.sort()
  1194         items.sort()
  1196         if self.FileName is not None:
  1195         if self.FileName is not None:
  1197             for filename, classes in items:
  1196             for filename, classes in items:
  1198                 print("File '%s':" % filename)
  1197                 print("File '%s':" % filename)
  1723     def countMethod(self):
  1722     def countMethod(self):
  1724         return len(getattr(self, attr))
  1723         return len(getattr(self, attr))
  1725     return countMethod
  1724     return countMethod
  1726 
  1725 
  1727 
  1726 
  1728 """
       
  1729 This function generate a xml parser from a class factory
       
  1730 """
       
  1731 
       
  1732 NAMESPACE_PATTERN = re.compile("xmlns(?:\:[^\=]*)?=\"[^\"]*\" ")
  1727 NAMESPACE_PATTERN = re.compile("xmlns(?:\:[^\=]*)?=\"[^\"]*\" ")
  1733 
  1728 
  1734 
  1729 
  1735 class DefaultElementClass(etree.ElementBase):
  1730 class DefaultElementClass(etree.ElementBase):
  1736 
  1731 
  1843         new_element._init_()
  1838         new_element._init_()
  1844         return new_element
  1839         return new_element
  1845 
  1840 
  1846 
  1841 
  1847 def GenerateParser(factory, xsdstring):
  1842 def GenerateParser(factory, xsdstring):
       
  1843     """
       
  1844     This function generate a xml parser from a class factory
       
  1845     """
       
  1846 
  1848     ComputedClasses = factory.CreateClasses()
  1847     ComputedClasses = factory.CreateClasses()
  1849 
  1848 
  1850     if factory.FileName is not None:
  1849     if factory.FileName is not None:
  1851         ComputedClasses = ComputedClasses[factory.FileName]
  1850         ComputedClasses = ComputedClasses[factory.FileName]
  1852     BaseClass = [(name, XSDclass) for name, XSDclass in ComputedClasses.items() if XSDclass.IsBaseClass]
  1851     BaseClass = [(name, XSDclass) for name, XSDclass in ComputedClasses.items() if XSDclass.IsBaseClass]