550 classmembers["set"+attrname] = generateSetMethod(attr, value_type) |
550 classmembers["set"+attrname] = generateSetMethod(attr, value_type) |
551 classmembers["get"+attrname] = generateGetMethod(attr) |
551 classmembers["get"+attrname] = generateGetMethod(attr) |
552 classmembers["__init__"] = generateInitMethod(bases, initialValues) |
552 classmembers["__init__"] = generateInitMethod(bases, initialValues) |
553 classmembers["loadXMLTree"] = generateLoadXMLTree(bases, members, self.ComputedClasses) |
553 classmembers["loadXMLTree"] = generateLoadXMLTree(bases, members, self.ComputedClasses) |
554 classmembers["generateXMLText"] = generateGenerateXMLText(bases, members) |
554 classmembers["generateXMLText"] = generateGenerateXMLText(bases, members) |
555 classmembers["getElementAttributes"] = generateGetElementAttributes(bases, members, self.ComputedClasses) |
555 classmembers["getElementAttributes"] = generateGetElementAttributes(members, self.ComputedClasses) |
|
556 classmembers["getElementInfos"] = generateGetElementInfos(members, self.ComputedClasses) |
|
557 classmembers["setElementValue"] = generateSetElementValue(members) |
556 classmembers["singleLineAttributes"] = True |
558 classmembers["singleLineAttributes"] = True |
557 |
559 |
558 self.ComputedClasses[classname] = classobj(classname, bases, classmembers) |
560 self.ComputedClasses[classname] = classobj(classname, bases, classmembers) |
559 |
561 |
560 def MarkUsedClasses(self, classname): |
562 def MarkUsedClasses(self, classname): |
833 attr_params["value"] = getattr(self, attr, "") |
835 attr_params["value"] = getattr(self, attr, "") |
834 attr_params["type"] = values[0][4:] |
836 attr_params["type"] = values[0][4:] |
835 attr_list.append(attr_params) |
837 attr_list.append(attr_params) |
836 return attr_list |
838 return attr_list |
837 return getElementAttributes |
839 return getElementAttributes |
838 |
840 |
|
841 def generateGetElementInfos(members, classes): |
|
842 def getElementInfos(self, name, path = None): |
|
843 attr_type = "element" |
|
844 value = None |
|
845 children = [] |
|
846 if "enum" in members: |
|
847 attr_type = self.getValidValues() |
|
848 value = self.value |
|
849 elif "limit" in members: |
|
850 attr_type = {"min" : None, "max" : None} |
|
851 if "min" in members: |
|
852 attr_type["min"] = members["min"] |
|
853 if "max" in members: |
|
854 attr_type["max"] = members["max"] |
|
855 value = self.value |
|
856 elif path: |
|
857 if "choice_content" in members: |
|
858 return self.content["value"].getElementInfos(self.content["name"], path) |
|
859 elif "multichoice_content" not in members: |
|
860 parts = path.split(".", 1) |
|
861 if parts[0] in members: |
|
862 values = members[parts[0]] |
|
863 if values[1] == "attribute" and len(parts) == 1: |
|
864 attr = getattr(self, parts[0], None) |
|
865 if attr != None: |
|
866 if values[0].startswith("cls:"): |
|
867 return attr.getElementInfos(parts[0]) |
|
868 else: |
|
869 attr_type = values[0][4:] |
|
870 value = getattr(self, attr, "") |
|
871 elif values[1] == "element": |
|
872 attr = getattr(self, parts[0], None) |
|
873 if attr != None: |
|
874 if len(parts) == 1: |
|
875 return attr.getElementInfos(parts[0]) |
|
876 else: |
|
877 return attr.getElementInfos(parts[0], parts[1]) |
|
878 else: |
|
879 for attr, values in members.items(): |
|
880 if attr == "order": |
|
881 pass |
|
882 elif attr == "choice_content": |
|
883 attr_type = self.getChoices().items() |
|
884 value = self.content["name"] |
|
885 children.extend(self.content["value"].getElementInfos(self.content["name"])["children"]) |
|
886 elif attr == "multichoice_content": |
|
887 for element_infos in self.content: |
|
888 children.append(element_infos["value"].getElementInfos(element_infos["name"])) |
|
889 elif values[1] == "attribute" and not values[0].startswith("cls:"): |
|
890 children.append({"name" : attr, "value" : getattr(self, attr, ""), "type" : values[0][4:], "children" : []}) |
|
891 else: |
|
892 element = getattr(self, attr, None) |
|
893 if not element: |
|
894 element = classes[values[0][4:]]() |
|
895 children.append(element.getElementInfos(attr)) |
|
896 return {"name" : name, "type" : attr_type, "value" : value, "children" : children} |
|
897 return getElementInfos |
|
898 |
|
899 def generateSetElementValue(members): |
|
900 def setElementValue(self, path, value): |
|
901 if "enum" in members or "limit" in members: |
|
902 if not path: |
|
903 self.setValue(value) |
|
904 elif "choice_content" in members: |
|
905 if path: |
|
906 self.content["value"].setElementValue(path, value) |
|
907 else: |
|
908 self.addContent(value) |
|
909 else: |
|
910 parts = path.split(".", 1) |
|
911 if parts[0] in members: |
|
912 values = members[parts[0]] |
|
913 if values[1] == "attribute" and len(parts) == 1: |
|
914 attr = getattr(self, parts[0], None) |
|
915 if attr != None: |
|
916 if values[0].startswith("cls:"): |
|
917 attr.setElementValue(None, value) |
|
918 elif values[0][4:] == "boolean": |
|
919 setattr(self, parts[0], value) |
|
920 else: |
|
921 setattr(self, parts[0], GetComputedValue(values[0], value)) |
|
922 elif values[1] == "element": |
|
923 attr = getattr(self, parts[0], None) |
|
924 if attr != None: |
|
925 if len(parts) == 1: |
|
926 attr.setElementValue(None, value) |
|
927 else: |
|
928 attr.setElementValue(parts[1], value) |
|
929 return setElementValue |
|
930 |
839 """ |
931 """ |
840 Methods that generates the different methods for setting and getting the attributes |
932 Methods that generates the different methods for setting and getting the attributes |
841 """ |
933 """ |
842 def generateInitMethod(bases, members): |
934 def generateInitMethod(bases, members): |
843 def initMethod(self): |
935 def initMethod(self): |