533 (value, type)) |
533 (value, type)) |
534 return values |
534 return values |
535 return GetModelNameList |
535 return GetModelNameList |
536 |
536 |
537 def GenerateAnyInfos(infos): |
537 def GenerateAnyInfos(infos): |
|
538 |
538 def ExtractAny(tree): |
539 def ExtractAny(tree): |
539 if tree.nodeName in ["#text", "#cdata-section"]: |
540 if infos["namespace"][0] == "##any": |
540 return unicode(unescape(tree.data)) |
541 return tree.xpath("p/text()")[0] |
541 else: |
542 return tree.xpath("ns:p/text()", namespaces={"ns": infos["namespace"][0]})[0] |
542 return tree |
543 |
543 |
544 def GenerateAny(tree, value): |
544 def GenerateAny(value, name=None, indent=0): |
545 if infos["namespace"][0] == "##any": |
545 if isinstance(value, (StringType, UnicodeType)): |
546 p = tree.xpath("p")[0] |
546 try: |
547 else: |
547 value = value.decode("utf-8") |
548 p = tree.xpath("ns:p", namespaces={"ns": infos["namespace"][0]})[0] |
548 except: |
549 p.text = etree.CDATA(value) |
549 pass |
550 |
550 return u'<![CDATA[%s]]>\n' % value |
551 def InitialAny(): |
551 else: |
552 text = etree.CDATA(value) |
552 return value.toprettyxml(indent=" "*indent, encoding="utf-8") |
553 if infos["namespace"][0] == "##any": |
|
554 element_name = "p" |
|
555 else: |
|
556 element_name = "{%s}p" % infos["namespace"][0] |
|
557 return etree.Element(element_name, text) |
553 |
558 |
554 return { |
559 return { |
555 "type": COMPLEXTYPE, |
560 "type": COMPLEXTYPE, |
556 "extract": ExtractAny, |
561 "extract": ExtractAny, |
557 "generate": GenerateAny, |
562 "generate": GenerateAny, |
558 "initial": lambda: "", |
563 "initial": lambda: GenerateAny(""), |
559 "check": lambda x: isinstance(x, (StringType, UnicodeType, minidom.Node)) |
564 "check": lambda x: isinstance(x, (StringType, UnicodeType, etree.ElementBase)) |
560 } |
565 } |
561 |
566 |
562 def GenerateTagInfos(infos): |
567 def GenerateTagInfos(infos): |
563 def ExtractTag(tree): |
568 def ExtractTag(tree): |
564 if len(tree._attrs) > 0: |
569 if len(tree._attrs) > 0: |
655 element_infos = factory.ExtractTypeInfos(sequence_element["name"], name, sequence_element["elmt_type"]) |
660 element_infos = factory.ExtractTypeInfos(sequence_element["name"], name, sequence_element["elmt_type"]) |
656 if element_infos is not None: |
661 if element_infos is not None: |
657 sequence_element["elmt_type"] = element_infos |
662 sequence_element["elmt_type"] = element_infos |
658 elif choice["elmt_type"] == "tag": |
663 elif choice["elmt_type"] == "tag": |
659 choice["elmt_type"] = GenerateTagInfos(choice) |
664 choice["elmt_type"] = GenerateTagInfos(choice) |
|
665 factory.AddToLookupClass(choice["name"], name, DefaultElementClass) |
660 else: |
666 else: |
661 choice_infos = factory.ExtractTypeInfos(choice["name"], name, choice["elmt_type"]) |
667 choice_infos = factory.ExtractTypeInfos(choice["name"], name, choice["elmt_type"]) |
662 if choice_infos is not None: |
668 if choice_infos is not None: |
663 choice["elmt_type"] = choice_infos |
669 choice["elmt_type"] = choice_infos |
664 choices.append((choice["name"], choice)) |
670 choices.append((choice["name"], choice)) |
1082 |
1088 |
1083 def ParseSchema(self): |
1089 def ParseSchema(self): |
1084 pass |
1090 pass |
1085 |
1091 |
1086 def AddEquivalentClass(self, name, base): |
1092 def AddEquivalentClass(self, name, base): |
1087 equivalences = self.EquivalentClassesParent.setdefault(self.etreeNamespaceFormat % name, {}) |
1093 if name != base: |
1088 equivalences[self.etreeNamespaceFormat % base] = True |
1094 equivalences = self.EquivalentClassesParent.setdefault(self.etreeNamespaceFormat % base, {}) |
|
1095 equivalences[self.etreeNamespaceFormat % name] = True |
1089 |
1096 |
1090 def AddToLookupClass(self, name, parent, typeinfos): |
1097 def AddToLookupClass(self, name, parent, typeinfos): |
1091 lookup_name = self.etreeNamespaceFormat % name |
1098 lookup_name = self.etreeNamespaceFormat % name |
1092 if isinstance(typeinfos, (StringType, UnicodeType)): |
1099 if isinstance(typeinfos, (StringType, UnicodeType)): |
1093 self.AddEquivalentClass(name, typeinfos) |
1100 self.AddEquivalentClass(name, typeinfos) |
1127 return infos |
1134 return infos |
1128 elif typeinfos["type"] == COMPLEXTYPE: |
1135 elif typeinfos["type"] == COMPLEXTYPE: |
1129 return self.CreateClass(name, parent, typeinfos) |
1136 return self.CreateClass(name, parent, typeinfos) |
1130 elif typeinfos["type"] == SIMPLETYPE: |
1137 elif typeinfos["type"] == SIMPLETYPE: |
1131 return typeinfos |
1138 return typeinfos |
1132 |
1139 |
|
1140 def GetEquivalentParents(self, parent): |
|
1141 return reduce(lambda x, y: x + y, |
|
1142 [[p] + self.GetEquivalentParents(p) |
|
1143 for p in self.EquivalentClassesParent.get(parent, {}).keys()], []) |
|
1144 |
1133 """ |
1145 """ |
1134 Methods that generates the classes |
1146 Methods that generates the classes |
1135 """ |
1147 """ |
1136 def CreateClasses(self): |
1148 def CreateClasses(self): |
1137 self.ParseSchema() |
1149 self.ParseSchema() |
1164 while len(self.ComputeAfter) > 0: |
1176 while len(self.ComputeAfter) > 0: |
1165 result = self.CreateClass(*self.ComputeAfter.pop(0)) |
1177 result = self.CreateClass(*self.ComputeAfter.pop(0)) |
1166 if result is not None and \ |
1178 if result is not None and \ |
1167 not isinstance(result, (UnicodeType, StringType)): |
1179 not isinstance(result, (UnicodeType, StringType)): |
1168 self.Namespaces[self.TargetNamespace][result["name"]] = result |
1180 self.Namespaces[self.TargetNamespace][result["name"]] = result |
|
1181 |
|
1182 for name, parents in self.ComputedClassesLookUp.iteritems(): |
|
1183 if isinstance(parents, DictType): |
|
1184 computed_classes = parents.items() |
|
1185 elif parents[1] is not None: |
|
1186 computed_classes = [(self.etreeNamespaceFormat % parents[1], parents[0])] |
|
1187 else: |
|
1188 computed_classes = [] |
|
1189 for parent, computed_class in computed_classes: |
|
1190 for equivalent_parent in self.GetEquivalentParents(parent): |
|
1191 if not isinstance(parents, DictType): |
|
1192 parents = dict(computed_classes) |
|
1193 self.ComputedClassesLookUp[name] = parents |
|
1194 parents[equivalent_parent] = computed_class |
|
1195 |
1169 return self.ComputedClasses |
1196 return self.ComputedClasses |
1170 |
1197 |
1171 def CreateClass(self, name, parent, classinfos, baseclass = False): |
1198 def CreateClass(self, name, parent, classinfos, baseclass = False): |
1172 if parent is not None: |
1199 if parent is not None: |
1173 classname = "%s_%s" % (parent, name) |
1200 classname = "%s_%s" % (parent, name) |
1241 classmembers["insert%sbytype" % elmtname] = generateInsertChoiceByTypeMethod(element["maxOccurs"], self, element["choices"]) |
1268 classmembers["insert%sbytype" % elmtname] = generateInsertChoiceByTypeMethod(element["maxOccurs"], self, element["choices"]) |
1242 else: |
1269 else: |
1243 classmembers["set%sbytype" % elmtname] = generateSetChoiceByTypeMethod(self, element["choices"]) |
1270 classmembers["set%sbytype" % elmtname] = generateSetChoiceByTypeMethod(self, element["choices"]) |
1244 infos = GenerateContentInfos(self, name, choices) |
1271 infos = GenerateContentInfos(self, name, choices) |
1245 elif element["type"] == ANY: |
1272 elif element["type"] == ANY: |
1246 elmtname = element["name"] = "text" |
1273 elmtname = element["name"] = "anyText" |
1247 element["minOccurs"] = element["maxOccurs"] = 1 |
1274 element["minOccurs"] = element["maxOccurs"] = 1 |
1248 infos = GenerateAnyInfos(element) |
1275 infos = GenerateAnyInfos(element) |
1249 else: |
1276 else: |
1250 elmtname = element["name"] |
1277 elmtname = element["name"] |
1251 if element["elmt_type"] == "tag": |
1278 if element["elmt_type"] == "tag": |
1252 infos = GenerateTagInfos(element) |
1279 infos = GenerateTagInfos(element) |
|
1280 self.AddToLookupClass(element["name"], name, DefaultElementClass) |
1253 else: |
1281 else: |
1254 infos = self.ExtractTypeInfos(element["name"], name, element["elmt_type"]) |
1282 infos = self.ExtractTypeInfos(element["name"], name, element["elmt_type"]) |
1255 if infos is not None: |
1283 if infos is not None: |
1256 element["elmt_type"] = infos |
1284 element["elmt_type"] = infos |
1257 if element["maxOccurs"] == "unbounded" or element["maxOccurs"] > 1: |
1285 if element["maxOccurs"] == "unbounded" or element["maxOccurs"] > 1: |
1264 classmembers["add%s" % elmtname] = generateAddMethod(elmtname, self, element) |
1292 classmembers["add%s" % elmtname] = generateAddMethod(elmtname, self, element) |
1265 classmembers["delete%s" % elmtname] = generateDeleteMethod(elmtname) |
1293 classmembers["delete%s" % elmtname] = generateDeleteMethod(elmtname) |
1266 classmembers["set%s" % elmtname] = generateSetMethod(elmtname) |
1294 classmembers["set%s" % elmtname] = generateSetMethod(elmtname) |
1267 classmembers["get%s" % elmtname] = generateGetMethod(elmtname) |
1295 classmembers["get%s" % elmtname] = generateGetMethod(elmtname) |
1268 |
1296 |
1269 classmembers["_init"] = generateInitMethod(self, classinfos) |
1297 classmembers["init"] = generateInitMethod(self, classinfos) |
1270 classmembers["getStructure"] = generateStructureMethod(classinfos) |
1298 classmembers["getStructure"] = generateStructureMethod(classinfos) |
1271 classmembers["loadXMLTree"] = generateLoadXMLTree(self, classinfos) |
1299 classmembers["loadXMLTree"] = generateLoadXMLTree(self, classinfos) |
1272 classmembers["generateXMLText"] = generateGenerateXMLText(self, classinfos) |
1300 classmembers["generateXMLText"] = generateGenerateXMLText(self, classinfos) |
1273 classmembers["getElementAttributes"] = generateGetElementAttributes(self, classinfos) |
1301 classmembers["getElementAttributes"] = generateGetElementAttributes(self, classinfos) |
1274 classmembers["getElementInfos"] = generateGetElementInfos(self, classinfos) |
1302 classmembers["getElementInfos"] = generateGetElementInfos(self, classinfos) |
1364 return attribute_infos["attr_type"]["initial"]() |
1392 return attribute_infos["attr_type"]["initial"]() |
1365 |
1393 |
1366 elif elements.has_key(name): |
1394 elif elements.has_key(name): |
1367 element_infos = elements[name] |
1395 element_infos = elements[name] |
1368 element_infos["elmt_type"] = FindTypeInfos(factory, element_infos["elmt_type"]) |
1396 element_infos["elmt_type"] = FindTypeInfos(factory, element_infos["elmt_type"]) |
1369 if name == "content": |
1397 if element_infos["type"] == CHOICE: |
1370 content = self.xpath(element_infos["elmt_type"]["choices_xpath"](), namespaces=factory.NSMAP) |
1398 content = self.xpath(element_infos["elmt_type"]["choices_xpath"](), namespaces=factory.NSMAP) |
1371 if element_infos["maxOccurs"] == "unbounded" or element_infos["maxOccurs"] > 1: |
1399 if element_infos["maxOccurs"] == "unbounded" or element_infos["maxOccurs"] > 1: |
1372 return content |
1400 return content |
1373 elif len(content) > 0: |
1401 elif len(content) > 0: |
1374 return content[0] |
1402 return content[0] |
1375 return None |
1403 return None |
|
1404 elif element_infos["type"] == ANY: |
|
1405 return element_infos["elmt_type"]["extract"](self) |
1376 else: |
1406 else: |
1377 element_name = factory.etreeNamespaceFormat % name |
1407 element_name = factory.etreeNamespaceFormat % name |
1378 if element_infos["maxOccurs"] == "unbounded" or element_infos["maxOccurs"] > 1: |
1408 if element_infos["maxOccurs"] == "unbounded" or element_infos["maxOccurs"] > 1: |
1379 return self.findall(element_name) |
1409 return self.findall(element_name) |
1380 else: |
1410 else: |
1401 attribute_infos = attributes[name] |
1431 attribute_infos = attributes[name] |
1402 attribute_infos["attr_type"] = FindTypeInfos(factory, attribute_infos["attr_type"]) |
1432 attribute_infos["attr_type"] = FindTypeInfos(factory, attribute_infos["attr_type"]) |
1403 if optional_attributes.get(name, False): |
1433 if optional_attributes.get(name, False): |
1404 default = attribute_infos.get("default", None) |
1434 default = attribute_infos.get("default", None) |
1405 if value is None or value == default: |
1435 if value is None or value == default: |
1406 self.attrib.pop(name) |
1436 self.attrib.pop(name, None) |
1407 return |
1437 return |
1408 elif attribute_infos.has_key("fixed"): |
1438 elif attribute_infos.has_key("fixed"): |
1409 return |
1439 return |
1410 return self.set(name, attribute_infos["attr_type"]["generate"](value)) |
1440 return self.set(name, attribute_infos["attr_type"]["generate"](value)) |
1411 |
1441 |
1412 elif elements.has_key(name): |
1442 elif elements.has_key(name): |
1413 element_infos = elements[name] |
1443 element_infos = elements[name] |
1414 element_infos["elmt_type"] = FindTypeInfos(factory, element_infos["elmt_type"]) |
1444 element_infos["elmt_type"] = FindTypeInfos(factory, element_infos["elmt_type"]) |
1415 element_xpath = ("%s:%s" % (factory.TargetNamespace, name) |
1445 if element_infos["type"] == ANY: |
1416 if name != "content" |
1446 element_infos["elmt_type"]["generate"](self, value) |
1417 else elements["content"]["elmt_type"]["choices_xpath"]()) |
|
1418 |
1447 |
1419 for element in self.xpath(element_xpath, namespaces=factory.NSMAP): |
1448 else: |
1420 self.remove(element) |
1449 element_xpath = ("%s:%s" % (factory.TargetNamespace, name) |
1421 |
1450 if name != "content" |
1422 if value is not None: |
1451 else elements["content"]["elmt_type"]["choices_xpath"]()) |
1423 previous_elements_xpath = "|".join(map( |
|
1424 lambda x: "%s:%s" % (factory.TargetNamespace, x) |
|
1425 if x != "content" |
|
1426 else elements["content"]["elmt_type"]["choices_xpath"](), |
|
1427 elements.keys()[elements.keys().index(name)])) |
|
1428 |
1452 |
1429 insertion_point = len(self.xpath(previous_elements_xpath, namespaces=factory.NSMAP)) |
1453 for element in self.xpath(element_xpath, namespaces=factory.NSMAP): |
|
1454 self.remove(element) |
1430 |
1455 |
1431 if not isinstance(value, ListType): |
1456 if value is not None: |
1432 value = [value] |
1457 previous_elements_xpath = "|".join(map( |
|
1458 lambda x: "%s:%s" % (factory.TargetNamespace, x) |
|
1459 if x != "content" |
|
1460 else elements["content"]["elmt_type"]["choices_xpath"](), |
|
1461 elements.keys()[elements.keys().index(name)])) |
1433 |
1462 |
1434 for element in reversed(value): |
1463 insertion_point = len(self.xpath(previous_elements_xpath, namespaces=factory.NSMAP)) |
1435 self.insert(insertion_point, element) |
1464 |
|
1465 if not isinstance(value, ListType): |
|
1466 value = [value] |
|
1467 |
|
1468 for element in reversed(value): |
|
1469 self.insert(insertion_point, element) |
1436 |
1470 |
1437 elif classinfos.has_key("base"): |
1471 elif classinfos.has_key("base"): |
1438 return classinfos["base"].__setattr__(self, name, value) |
1472 return classinfos["base"].__setattr__(self, name, value) |
1439 |
1473 |
1440 elif class_definition.__dict__.has_key(name): |
1474 elif class_definition.__dict__.has_key(name): |
1825 """ |
1859 """ |
1826 def generateInitMethod(factory, classinfos): |
1860 def generateInitMethod(factory, classinfos): |
1827 def initMethod(self): |
1861 def initMethod(self): |
1828 self.extraAttrs = {} |
1862 self.extraAttrs = {} |
1829 if classinfos.has_key("base"): |
1863 if classinfos.has_key("base"): |
1830 classinfos["base"]._init(self) |
1864 classinfos["base"].init(self) |
1831 for attribute in classinfos["attributes"]: |
1865 for attribute in classinfos["attributes"]: |
1832 attribute["attr_type"] = FindTypeInfos(factory, attribute["attr_type"]) |
1866 attribute["attr_type"] = FindTypeInfos(factory, attribute["attr_type"]) |
1833 if attribute["use"] == "required" and self.get(attribute["name"]) is None: |
1867 if attribute["use"] == "required": |
1834 self.set(attribute["name"], attribute["attr_type"]["generate"](attribute["attr_type"]["initial"]())) |
1868 self.set(attribute["name"], attribute["attr_type"]["generate"](attribute["attr_type"]["initial"]())) |
1835 for element in classinfos["elements"]: |
1869 for element in classinfos["elements"]: |
1836 if element["name"] != "content": |
1870 if element["type"] != CHOICE: |
1837 element_name = ( |
1871 element_name = ( |
1838 etree.QName(factory.NSMAP["xhtml"], "p") |
1872 etree.QName(factory.NSMAP["xhtml"], "p") |
1839 if element["type"] == ANY |
1873 if element["type"] == ANY |
1840 else factory.etreeNamespaceFormat % element["name"]) |
1874 else factory.etreeNamespaceFormat % element["name"]) |
1841 if self.find(element_name) is None: |
1875 initial = GetElementInitialValue(factory, element) |
1842 initial = GetElementInitialValue(factory, element) |
1876 if initial is not None: |
1843 if initial is not None: |
1877 for value in initial: |
1844 map(self.append, initial) |
1878 DefaultElementClass.__setattr__(value, "tag", element_name) |
|
1879 value.init() |
|
1880 self.append(value) |
1845 return initMethod |
1881 return initMethod |
1846 |
1882 |
1847 def generateSetMethod(attr): |
1883 def generateSetMethod(attr): |
1848 def setMethod(self, value): |
1884 def setMethod(self, value): |
1849 setattr(self, attr, value) |
1885 setattr(self, attr, value) |
1964 """ |
2000 """ |
1965 This function generate a xml parser from a class factory |
2001 This function generate a xml parser from a class factory |
1966 """ |
2002 """ |
1967 |
2003 |
1968 class DefaultElementClass(etree.ElementBase): |
2004 class DefaultElementClass(etree.ElementBase): |
1969 toto = True |
2005 |
|
2006 def init(self): |
|
2007 pass |
1970 |
2008 |
1971 def getLocalTag(self): |
2009 def getLocalTag(self): |
1972 return etree.QName(self.tag).localname |
2010 return etree.QName(self.tag).localname |
1973 |
2011 |
1974 def tostring(self): |
2012 def tostring(self): |
1975 return etree.tostring(self, pretty_print=True) |
2013 return etree.tostring(self, pretty_print=True) |
1976 |
2014 |
1977 class XMLElementClassLookUp(etree.PythonElementClassLookup): |
2015 class XMLElementClassLookUp(etree.PythonElementClassLookup): |
1978 |
2016 |
1979 def __init__(self, classes, class_equivalence, *args, **kwargs): |
2017 def __init__(self, classes, *args, **kwargs): |
1980 etree.PythonElementClassLookup.__init__(self, *args, **kwargs) |
2018 etree.PythonElementClassLookup.__init__(self, *args, **kwargs) |
1981 self.LookUpClasses = classes |
2019 self.LookUpClasses = classes |
1982 self.ClassEquivalence = class_equivalence |
|
1983 |
2020 |
1984 def GetElementClass(self, element_tag, parent_tag=None, default=DefaultElementClass): |
2021 def GetElementClass(self, element_tag, parent_tag=None, default=DefaultElementClass): |
1985 element_class = self.LookUpClasses.get(element_tag, (default, None)) |
2022 element_class = self.LookUpClasses.get(element_tag, (default, None)) |
1986 if not isinstance(element_class, DictType): |
2023 if not isinstance(element_class, DictType): |
1987 if isinstance(element_class[0], (StringType, UnicodeType)): |
2024 if isinstance(element_class[0], (StringType, UnicodeType)): |
1989 return element_class[0] |
2026 return element_class[0] |
1990 |
2027 |
1991 element_with_parent_class = element_class.get(parent_tag, default) |
2028 element_with_parent_class = element_class.get(parent_tag, default) |
1992 if isinstance(element_with_parent_class, (StringType, UnicodeType)): |
2029 if isinstance(element_with_parent_class, (StringType, UnicodeType)): |
1993 return self.GetElementClass(element_with_parent_class, default=default) |
2030 return self.GetElementClass(element_with_parent_class, default=default) |
1994 elif element_with_parent_class == DefaultElementClass: |
|
1995 for equivalent_parent in self.ClassEquivalence.get(parent_tag, {}).keys(): |
|
1996 return self.GetElementClass(element_tag, equivalent_parent, default) |
|
1997 return element_with_parent_class |
2031 return element_with_parent_class |
1998 |
2032 |
1999 def lookup(self, document, element): |
2033 def lookup(self, document, element): |
2000 parent = element.getparent() |
2034 parent = element.getparent() |
2001 return self.GetElementClass(element.tag, |
2035 return self.GetElementClass(element.tag, |
2020 etree.XMLParser.set_element_class_lookup(self, class_lookup) |
2054 etree.XMLParser.set_element_class_lookup(self, class_lookup) |
2021 self.ClassLookup = class_lookup |
2055 self.ClassLookup = class_lookup |
2022 |
2056 |
2023 def CreateRoot(self): |
2057 def CreateRoot(self): |
2024 if self.BaseClass is not None: |
2058 if self.BaseClass is not None: |
2025 return self.makeelement( |
2059 root = self.makeelement( |
2026 self.DefaultNamespaceFormat % self.BaseClass[0], |
2060 self.DefaultNamespaceFormat % self.BaseClass[0], |
2027 nsmap=self.RootNSMAP) |
2061 nsmap=self.RootNSMAP) |
|
2062 root.init() |
|
2063 return root |
2028 return None |
2064 return None |
2029 |
2065 |
2030 def GetElementClass(self, element_tag, parent_tag=None): |
2066 def GetElementClass(self, element_tag, parent_tag=None): |
2031 return self.ClassLookup.GetElementClass( |
2067 return self.ClassLookup.GetElementClass( |
2032 self.DefaultNamespaceFormat % element_tag, |
2068 self.DefaultNamespaceFormat % element_tag, |
2035 None) |
2071 None) |
2036 |
2072 |
2037 def CreateElement(self, element_tag, parent_tag=None): |
2073 def CreateElement(self, element_tag, parent_tag=None): |
2038 new_element = self.GetElementClass(element_tag, parent_tag)() |
2074 new_element = self.GetElementClass(element_tag, parent_tag)() |
2039 DefaultElementClass.__setattr__(new_element, "tag", self.DefaultNamespaceFormat % element_tag) |
2075 DefaultElementClass.__setattr__(new_element, "tag", self.DefaultNamespaceFormat % element_tag) |
|
2076 new_element.init() |
2040 return new_element |
2077 return new_element |
2041 |
2078 |
2042 def GenerateParser(factory, xsdstring): |
2079 def GenerateParser(factory, xsdstring): |
2043 ComputedClasses = factory.CreateClasses() |
2080 ComputedClasses = factory.CreateClasses() |
2044 if factory.FileName is not None and len(ComputedClasses) == 1: |
2081 if factory.FileName is not None and len(ComputedClasses) == 1: |
2052 factory.NSMAP, |
2089 factory.NSMAP, |
2053 factory.etreeNamespaceFormat, |
2090 factory.etreeNamespaceFormat, |
2054 BaseClass[0] if len(BaseClass) == 1 else None, |
2091 BaseClass[0] if len(BaseClass) == 1 else None, |
2055 schema = etree.XMLSchema(etree.fromstring(xsdstring)), |
2092 schema = etree.XMLSchema(etree.fromstring(xsdstring)), |
2056 strip_cdata = False, remove_blank_text=True) |
2093 strip_cdata = False, remove_blank_text=True) |
2057 class_lookup = XMLElementClassLookUp(factory.ComputedClassesLookUp, factory.EquivalentClassesParent) |
2094 class_lookup = XMLElementClassLookUp(factory.ComputedClassesLookUp) |
2058 parser.set_element_class_lookup(class_lookup) |
2095 parser.set_element_class_lookup(class_lookup) |
|
2096 |
2059 return parser |
2097 return parser |
2060 |
2098 |
2061 def UpdateXMLClassGlobals(classes): |
2099 def UpdateXMLClassGlobals(classes): |
2062 globals().update(classes) |
2100 globals().update(classes) |
2063 |
2101 |