from objectparse import ObjectBase def rendercommalist(format, list): "Make contents of list into format with commas between the non-last items and return it" output = "" listlen = len(list) for i in range(listlen): output = output + format % list[i] if i != (listlen-1): output = output + ", " return output def rendertargetcommalist(format, list): "Make contents of list into format with commas between the non-last items and return it" output = "" listlen = len(list) for i in range(listlen): output = output + "" % list[i] output = output + format % list[i] output = output + "" if i != (listlen-1): output = output + ", " return output def rendercommalist2(begin, format, end, list): "Render list as string using format and begin and end as begin and end of string" output = "" if len(list) > 0: output = begin output = output + rendercommalist(format, list) output = output + end return output def checkyesno(data): if data == "yes" or data == "true" or data == "y" or data == "t": return 1,1 elif data == "no" or data == "false" or data == "n" or data == "f": return 1,0 else: return 0,0 class PlantGroup(ObjectBase): """Container to hold plants or other plant lists, and renders itself and contents""" def __init__(self): self.names = [] self.nicknames = [] self.commonnames = [] self.type = "" self.list = [] def getelementattributes(self, name, attrs): "Handle element starts that contain attributes" pass def handledata(self, name, data): "Handle our member elements" if name == "name" or name == "scientificname" or name == "sn": self.names.append(data) if name == "nickname" or name == "nn": self.nicknames.append(data) elif name == "type" or name == "t": self.type = data elif name == "commonname" or name == "cn": self.commonnames.append(data) else: return 0 return 1 def renderself(self): "Render this plant list in html" if self.type != "": print self.type, print rendertargetcommalist("%s", self.names) print rendercommalist2("(", "%s", ")", self.nicknames) def render(self, top=0): "Render this plant list and its contents in html" if not top: print "
  • " self.renderself() print "" print "
  • " def xmlrender(self, top=0): "Render plant list in plantlist XML" if top: print """""" print """""" print "" else: output = "" print output for name in self.names: print "%s" % name for commonname in self.commonnames: print "%s" % commonname for nickname in self.nicknames: print "%s" % nickname for entry in self.list: entry.xmlrender() if top: print "" else: print "" def toprender(self): self.render(1) def xmltoprender(self): self.xmlrender(1) class Plant(ObjectBase): "Holds plant data and renders it" def __init__(self): self.names = [] self.commonnames = [] self.nicknames = [] self.images = [] self.grownotes = [] self.isspontaneous = 0 self.isnonnative = 0 def getelementattributes(self, name, attrs): "Handle element starts that contain attributes" if name == "image" or name=="img": self.images.append(attrs["src"]) else: # print "Unprocessed element with attributes ", name pass def handledata(self, name, data): "Handle our member elements" if name == "name" or name == "scientificname" or name == "sn": self.names.append(data) elif name == "commonname" or name == "cn": self.commonnames.append(data) elif name == "nickname" or name == "nn": self.nicknames.append(data) elif name == "image" or name == "img": self.images.append(data) elif name == "grownote" or name == "grownotes" or name == "gn": self.grownotes.append(data) elif name == "spontaneous": (valid, self.isspontaneous) = checkyesno(data) if not valid: return 0 elif name == "nonnative": (valid, self.isnonnative) = checkyesno(data) if not valid: return 0 else: return 0 return 1 def renderself(self): "Renders this plant in html" numnames = len(self.names) if self.isspontaneous == 1: print "" print rendertargetcommalist("%s", self.names) commonlen = len(self.commonnames) nicklen = len(self.nicknames) size = commonlen + nicklen if size > 0: output = "(" output = output + rendercommalist("%s", self.commonnames) if (commonlen > 0) and (nicklen > 0): output = output + ", " output = output + rendercommalist("\"%s\"", self.nicknames) output = output + ")" print output if self.isspontaneous == 1: print "" numimages = len(self.images) if numimages > 0: output = "[" for imagenum in xrange(numimages): output = output + "%d" % (self.images[imagenum], imagenum+1) if (imagenum != numimages-1): output = output + ", " output = output + "]" print output if len(self.grownotes) > 0: print rendercommalist2("(", "%s", ")", self.grownotes) def render(self): "Render this plant in html as a list item" print "
  • " self.renderself() print "
  • " def xmlrender(self): "Render plant in plantlist XML" output = "" print output for name in self.names: print "%s" % name for commonname in self.commonnames: print "%s" % commonname for nickname in self.nicknames: print "%s" % nickname for note in self.grownotes: print "%s" % note for image in self.images: print "" % image print ""