555 "generate": GenerateAny, |
555 "generate": GenerateAny, |
556 "initial": lambda: "", |
556 "initial": lambda: "", |
557 "check": lambda x: isinstance(x, (StringType, UnicodeType, minidom.Node)) |
557 "check": lambda x: isinstance(x, (StringType, UnicodeType, minidom.Node)) |
558 } |
558 } |
559 |
559 |
560 def GenerateTagInfos(name): |
560 def GenerateTagInfos(infos): |
561 def ExtractTag(tree): |
561 def ExtractTag(tree): |
562 if len(tree._attrs) > 0: |
562 if len(tree._attrs) > 0: |
563 raise ValueError("\"%s\" musn't have attributes!" % name) |
563 raise ValueError("\"%s\" musn't have attributes!" % infos["name"]) |
564 if len(tree.childNodes) > 0: |
564 if len(tree.childNodes) > 0: |
565 raise ValueError("\"%s\" musn't have children!" % name) |
565 raise ValueError("\"%s\" musn't have children!" % infos["name"]) |
566 return None |
566 if infos["minOccurs"] == 0: |
|
567 return True |
|
568 else: |
|
569 return None |
567 |
570 |
568 def GenerateTag(value, name=None, indent=0): |
571 def GenerateTag(value, name=None, indent=0): |
569 if name is not None: |
572 if name is not None and not (infos["minOccurs"] == 0 and value is None): |
570 ind1, ind2 = getIndent(indent, name) |
573 ind1, ind2 = getIndent(indent, name) |
571 return ind1 + "<%s/>\n" % name |
574 return ind1 + "<%s/>\n" % name |
572 else: |
575 else: |
573 return "" |
576 return "" |
574 |
577 |
575 return { |
578 return { |
576 "type": TAG, |
579 "type": TAG, |
577 "extract": ExtractTag, |
580 "extract": ExtractTag, |
578 "generate": GenerateTag, |
581 "generate": GenerateTag, |
579 "initial": lambda: None, |
582 "initial": lambda: None, |
580 "check": lambda x: x == None |
583 "check": lambda x: x == None or infos["minOccurs"] == 0 and value == True |
581 } |
584 } |
582 |
585 |
583 def FindTypeInfos(factory, infos): |
586 def FindTypeInfos(factory, infos): |
584 if isinstance(infos, (UnicodeType, StringType)): |
587 if isinstance(infos, (UnicodeType, StringType)): |
585 namespace, name = DecomposeQualifiedName(infos) |
588 namespace, name = DecomposeQualifiedName(infos) |
643 if sequence_element["type"] != CHOICE: |
646 if sequence_element["type"] != CHOICE: |
644 element_infos = factory.ExtractTypeInfos(sequence_element["name"], name, sequence_element["elmt_type"]) |
647 element_infos = factory.ExtractTypeInfos(sequence_element["name"], name, sequence_element["elmt_type"]) |
645 if element_infos is not None: |
648 if element_infos is not None: |
646 sequence_element["elmt_type"] = element_infos |
649 sequence_element["elmt_type"] = element_infos |
647 elif choice["elmt_type"] == "tag": |
650 elif choice["elmt_type"] == "tag": |
648 choice["elmt_type"] = GenerateTagInfos(choice["name"]) |
651 choice["elmt_type"] = GenerateTagInfos(choice) |
649 else: |
652 else: |
650 choice_infos = factory.ExtractTypeInfos(choice["name"], name, choice["elmt_type"]) |
653 choice_infos = factory.ExtractTypeInfos(choice["name"], name, choice["elmt_type"]) |
651 if choice_infos is not None: |
654 if choice_infos is not None: |
652 choice["elmt_type"] = choice_infos |
655 choice["elmt_type"] = choice_infos |
653 choices.append((choice["name"], choice)) |
656 choices.append((choice["name"], choice)) |
1187 elmtname = element["name"] = "text" |
1190 elmtname = element["name"] = "text" |
1188 element["minOccurs"] = element["maxOccurs"] = 1 |
1191 element["minOccurs"] = element["maxOccurs"] = 1 |
1189 infos = GenerateAnyInfos(element) |
1192 infos = GenerateAnyInfos(element) |
1190 else: |
1193 else: |
1191 elmtname = element["name"] |
1194 elmtname = element["name"] |
1192 infos = self.ExtractTypeInfos(element["name"], name, element["elmt_type"]) |
1195 if element["elmt_type"] == "tag": |
|
1196 infos = GenerateTagInfos(element) |
|
1197 else: |
|
1198 infos = self.ExtractTypeInfos(element["name"], name, element["elmt_type"]) |
1193 if infos is not None: |
1199 if infos is not None: |
1194 element["elmt_type"] = infos |
1200 element["elmt_type"] = infos |
1195 if element["maxOccurs"] == "unbounded" or element["maxOccurs"] > 1: |
1201 if element["maxOccurs"] == "unbounded" or element["maxOccurs"] > 1: |
1196 classmembers[elmtname] = [] |
1202 classmembers[elmtname] = [] |
1197 classmembers["append%s" % elmtname] = generateAppendMethod(elmtname, element["maxOccurs"], self, element) |
1203 classmembers["append%s" % elmtname] = generateAppendMethod(elmtname, element["maxOccurs"], self, element) |