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 ""
for entry in self.list:
entry.render()
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 ""