xmlclass/xmlclass.py
changeset 1768 691083b5682a
parent 1767 c74815729afd
child 1773 38fde37c3766
equal deleted inserted replaced
1767:c74815729afd 1768:691083b5682a
  1002         elif typeinfos["type"] == SIMPLETYPE:
  1002         elif typeinfos["type"] == SIMPLETYPE:
  1003             return typeinfos
  1003             return typeinfos
  1004 
  1004 
  1005     def GetEquivalentParents(self, parent):
  1005     def GetEquivalentParents(self, parent):
  1006         return reduce(lambda x, y: x + y,
  1006         return reduce(lambda x, y: x + y,
  1007             [[p] + self.GetEquivalentParents(p)
  1007                       [[p] + self.GetEquivalentParents(p)
  1008              for p in self.EquivalentClassesParent.get(parent, {}).keys()], [])
  1008                        for p in self.EquivalentClassesParent.get(parent, {}).keys()], [])
  1009 
  1009 
  1010     """
  1010     """
  1011     Methods that generates the classes
  1011     Methods that generates the classes
  1012     """
  1012     """
  1013     def CreateClasses(self):
  1013     def CreateClasses(self):
  1308                 element_name = factory.etreeNamespaceFormat % name
  1308                 element_name = factory.etreeNamespaceFormat % name
  1309                 if element_infos["maxOccurs"] == "unbounded" or element_infos["maxOccurs"] > 1:
  1309                 if element_infos["maxOccurs"] == "unbounded" or element_infos["maxOccurs"] > 1:
  1310                     values = self.findall(element_name)
  1310                     values = self.findall(element_name)
  1311                     if element_infos["elmt_type"]["type"] == SIMPLETYPE:
  1311                     if element_infos["elmt_type"]["type"] == SIMPLETYPE:
  1312                         return map(lambda value:
  1312                         return map(lambda value:
  1313                             element_infos["elmt_type"]["extract"](value.text, extract=False),
  1313                                    element_infos["elmt_type"]["extract"](value.text, extract=False),
  1314                             values)
  1314                                    values)
  1315                     return values
  1315                     return values
  1316                 else:
  1316                 else:
  1317                     value = self.find(element_name)
  1317                     value = self.find(element_name)
  1318                     if element_infos["elmt_type"]["type"] == SIMPLETYPE:
  1318                     if element_infos["elmt_type"]["type"] == SIMPLETYPE:
  1319                         return element_infos["elmt_type"]["extract"](value.text, extract=False)
  1319                         return element_infos["elmt_type"]["extract"](value.text, extract=False)
  1419         attr_list = []
  1419         attr_list = []
  1420         if "base" in classinfos:
  1420         if "base" in classinfos:
  1421             attr_list.extend(classinfos["base"].getElementAttributes(self))
  1421             attr_list.extend(classinfos["base"].getElementAttributes(self))
  1422         for attr in classinfos["attributes"]:
  1422         for attr in classinfos["attributes"]:
  1423             if attr["use"] != "prohibited":
  1423             if attr["use"] != "prohibited":
  1424                 attr_params = {"name": attr["name"], "use": attr["use"],
  1424                 attr_params = {
       
  1425                     "name": attr["name"],
       
  1426                     "use": attr["use"],
  1425                     "type": gettypeinfos(attr["attr_type"]["basename"], attr["attr_type"]["facets"]),
  1427                     "type": gettypeinfos(attr["attr_type"]["basename"], attr["attr_type"]["facets"]),
  1426                     "value": getattr(self, attr["name"], "")}
  1428                     "value": getattr(self, attr["name"], "")}
  1427                 attr_list.append(attr_params)
  1429                 attr_list.append(attr_params)
  1428         return attr_list
  1430         return attr_list
  1429     return getElementAttributes
  1431     return getElementAttributes
  1485                     else:
  1487                     else:
  1486                         value = self.content.getLocalTag()
  1488                         value = self.content.getLocalTag()
  1487                         if self.content is not None:
  1489                         if self.content is not None:
  1488                             children.extend(self.content.getElementInfos(value)["children"])
  1490                             children.extend(self.content.getElementInfos(value)["children"])
  1489                 elif element["elmt_type"]["type"] == SIMPLETYPE:
  1491                 elif element["elmt_type"]["type"] == SIMPLETYPE:
  1490                     children.append({"name": element_name, "require": element["minOccurs"] != 0,
  1492                     children.append({
       
  1493                         "name": element_name,
       
  1494                         "require": element["minOccurs"] != 0,
  1491                         "type": gettypeinfos(element["elmt_type"]["basename"],
  1495                         "type": gettypeinfos(element["elmt_type"]["basename"],
  1492                                              element["elmt_type"]["facets"]),
  1496                                              element["elmt_type"]["facets"]),
  1493                         "value": getattr(self, element_name, None)})
  1497                         "value": getattr(self, element_name, None)})
  1494                 else:
  1498                 else:
  1495                     instance = getattr(self, element_name, None)
  1499                     instance = getattr(self, element_name, None)
  1513                 if attributes[parts[0]]["attr_type"]["basename"] == "boolean":
  1517                 if attributes[parts[0]]["attr_type"]["basename"] == "boolean":
  1514                     setattr(self, parts[0], value)
  1518                     setattr(self, parts[0], value)
  1515                 elif attributes[parts[0]]["use"] == "optional" and value == "":
  1519                 elif attributes[parts[0]]["use"] == "optional" and value == "":
  1516                     if "default" in attributes[parts[0]]:
  1520                     if "default" in attributes[parts[0]]:
  1517                         setattr(self, parts[0],
  1521                         setattr(self, parts[0],
  1518                             attributes[parts[0]]["attr_type"]["extract"](
  1522                                 attributes[parts[0]]["attr_type"]["extract"](
  1519                                 attributes[parts[0]]["default"], False))
  1523                                     attributes[parts[0]]["default"], False))
  1520                     else:
  1524                     else:
  1521                         setattr(self, parts[0], None)
  1525                         setattr(self, parts[0], None)
  1522                 else:
  1526                 else:
  1523                     setattr(self, parts[0], attributes[parts[0]]["attr_type"]["extract"](value, False))
  1527                     setattr(self, parts[0], attributes[parts[0]]["attr_type"]["extract"](value, False))
  1524             elif parts[0] in elements:
  1528             elif parts[0] in elements:
  1755             return self.GetElementClass(element_with_parent_class, default=default)
  1759             return self.GetElementClass(element_with_parent_class, default=default)
  1756         return element_with_parent_class
  1760         return element_with_parent_class
  1757 
  1761 
  1758     def lookup(self, document, element):
  1762     def lookup(self, document, element):
  1759         parent = element.getparent()
  1763         parent = element.getparent()
  1760         element_class = self.GetElementClass(element.tag,
  1764         element_class = self.GetElementClass(
  1761             parent.tag if parent is not None else None)
  1765             element.tag, parent.tag if parent is not None else None)
  1762         if isinstance(element_class, ListType):
  1766         if isinstance(element_class, ListType):
  1763             children = "".join([
  1767             children = "".join([
  1764                 "%s " % etree.QName(child.tag).localname
  1768                 "%s " % etree.QName(child.tag).localname
  1765                 for child in element])
  1769                 for child in element])
  1766             for possible_class in element_class:
  1770             for possible_class in element_class: