xmlclass/xmlclass.py
changeset 626 ac0a8f6462c3
parent 616 8a60ffcfd70b
child 674 bbffe4110141
equal deleted inserted replaced
625:b7062a7018ec 626:ac0a8f6462c3
  1215                     classmembers[elmtname] = None
  1215                     classmembers[elmtname] = None
  1216             classmembers["set%s" % elmtname] = generateSetMethod(elmtname)
  1216             classmembers["set%s" % elmtname] = generateSetMethod(elmtname)
  1217             classmembers["get%s" % elmtname] = generateGetMethod(elmtname)
  1217             classmembers["get%s" % elmtname] = generateGetMethod(elmtname)
  1218             
  1218             
  1219         classmembers["__init__"] = generateInitMethod(self, classinfos)
  1219         classmembers["__init__"] = generateInitMethod(self, classinfos)
  1220         classmembers["__setattr__"] = generateSetattrMethod(self, classinfos)
       
  1221         classmembers["getStructure"] = generateStructureMethod(classinfos)
  1220         classmembers["getStructure"] = generateStructureMethod(classinfos)
  1222         classmembers["loadXMLTree"] = generateLoadXMLTree(self, classinfos)
  1221         classmembers["loadXMLTree"] = generateLoadXMLTree(self, classinfos)
  1223         classmembers["generateXMLText"] = generateGenerateXMLText(self, classinfos)
  1222         classmembers["generateXMLText"] = generateGenerateXMLText(self, classinfos)
  1224         classmembers["getElementAttributes"] = generateGetElementAttributes(self, classinfos)
  1223         classmembers["getElementAttributes"] = generateGetElementAttributes(self, classinfos)
  1225         classmembers["getElementInfos"] = generateGetElementInfos(self, classinfos)
  1224         classmembers["getElementInfos"] = generateGetElementInfos(self, classinfos)
  1226         classmembers["setElementValue"] = generateSetElementValue(self, classinfos)
  1225         classmembers["setElementValue"] = generateSetElementValue(self, classinfos)
  1227         classmembers["singleLineAttributes"] = True
  1226         classmembers["singleLineAttributes"] = True
  1228         classmembers["compatibility"] = lambda x, y: None
  1227         classmembers["compatibility"] = lambda x, y: None
  1229         
  1228         
  1230         class_definition = classobj(str(classname), bases, classmembers)
  1229         class_definition = classobj(str(classname), bases, classmembers)
       
  1230         setattr(class_definition, "__setattr__", generateSetattrMethod(self, class_definition, classinfos))
  1231         class_infos = {"type": COMPILEDCOMPLEXTYPE,
  1231         class_infos = {"type": COMPILEDCOMPLEXTYPE,
  1232                 "name": classname,
  1232                 "name": classname,
  1233                 "check": generateClassCheckFunction(class_definition),
  1233                 "check": generateClassCheckFunction(class_definition),
  1234                 "initial": generateClassCreateFunction(class_definition),
  1234                 "initial": generateClassCreateFunction(class_definition),
  1235                 "extract": generateClassExtractFunction(class_definition),
  1235                 "extract": generateClassExtractFunction(class_definition),
  1294 
  1294 
  1295 """
  1295 """
  1296 Method that generate the method for loading an xml tree by following the
  1296 Method that generate the method for loading an xml tree by following the
  1297 attributes list defined
  1297 attributes list defined
  1298 """
  1298 """
  1299 def generateSetattrMethod(factory, classinfos):
  1299 def generateSetattrMethod(factory, class_definition, classinfos):
  1300     attributes = dict([(attr["name"], attr) for attr in classinfos["attributes"] if attr["use"] != "prohibited"])
  1300     attributes = dict([(attr["name"], attr) for attr in classinfos["attributes"] if attr["use"] != "prohibited"])
  1301     optional_attributes = dict([(attr["name"], True) for attr in classinfos["attributes"] if attr["use"] == "optional"])
  1301     optional_attributes = dict([(attr["name"], True) for attr in classinfos["attributes"] if attr["use"] == "optional"])
  1302     elements = dict([(element["name"], element) for element in classinfos["elements"]])
  1302     elements = dict([(element["name"], element) for element in classinfos["elements"]])
  1303     
  1303     
  1304     def setattrMethod(self, name, value):
  1304     def setattrMethod(self, name, value):
  1320                 return object.__setattr__(self, name, value)
  1320                 return object.__setattr__(self, name, value)
  1321             else:
  1321             else:
  1322                 raise ValueError("Invalid value for attribute '%s'." % (name))
  1322                 raise ValueError("Invalid value for attribute '%s'." % (name))
  1323         elif classinfos.has_key("base"):
  1323         elif classinfos.has_key("base"):
  1324             return classinfos["base"].__setattr__(self, name, value)
  1324             return classinfos["base"].__setattr__(self, name, value)
  1325         elif self.__class__.__dict__.has_key(name):
  1325         elif class_definition.__dict__.has_key(name):
  1326             return object.__setattr__(self, name, value)
  1326             return object.__setattr__(self, name, value)
  1327         else:
  1327         else:
  1328             raise AttributeError("'%s' can't have an attribute '%s'." % (self.__class__.__name__, name))
  1328             raise AttributeError("'%s' can't have an attribute '%s'." % (self.__class__.__name__, name))
  1329         
  1329         
  1330     return setattrMethod
  1330     return setattrMethod