def runTest(self): # Generate an XML file first. days = {} for f in range(20): curtime = datetime.datetime(2005, 6, f + 1, 0, 0, 0, 0, tz.LocalTimezone()) day = Day(curtime) day.set_weight(100) for i in range(20): food = Food("Testfood " + str(i)) food.quantity = 10 + i food.energy = 100 * i food.time = curtime day.add_food(food) days[curtime.ctime()] = day gen = ConsumerDBGenerator() gen.generate(XML_FILE, days) # Now read. db = ConsumerDB() self.parser.setContentHandler(db) self.parser.parse(XML_FILE) assert len(db.getDays()) == 20 os.remove(XML_FILE)
class ConsumerDB(saxutils.DefaultHandler): def __init__(self, from_time = None, to_time = None): self.search_from_time = from_time self.search_to_time = to_time self.days = {} def startElement(self, name, attrs): self.cur_val = "" if name == "day": date = attrs.get("date", None) date = xml.utils.iso8601.parse(date) if self.search_from_time and date < self.search_from_time: return if self.search_to_time and date > self.search_to_time: return date = datetime.date.fromtimestamp(date) self.cur_day = Day(date) elif name == "food": ftime = attrs.get("time", None) ftime = xml.utils.iso8601.parse(ftime) if self.search_from_time and ftime < self.search_from_time: return if self.search_to_time and ftime > self.search_to_time: return self.cur_food = Food(attrs.get("name", None)) time = datetime.datetime.fromtimestamp(ftime, tz.LocalTimezone()) self.cur_food.set_time(time) def characters(self, chr): self.cur_val = self.cur_val + chr def endElement(self, name): if name == "day": self.days[self.cur_day.date.ctime()] = self.cur_day elif name == "food": self.cur_day.add_food(self.cur_food) elif name == "weight": self.cur_day.set_weight(atof(self.cur_val)) elif name == "quantity": self.cur_food.quantity = atof(self.cur_val) elif name == "energy": self.cur_food.energy = atoi(self.cur_val) def getDays(self): return self.days
class ConsumerDB(saxutils.DefaultHandler): def __init__(self, from_time=None, to_time=None): self.search_from_time = from_time self.search_to_time = to_time self.days = {} def startElement(self, name, attrs): self.cur_val = "" if name == "day": date = attrs.get("date", None) date = xml.utils.iso8601.parse(date) if self.search_from_time and date < self.search_from_time: return if self.search_to_time and date > self.search_to_time: return date = datetime.date.fromtimestamp(date) self.cur_day = Day(date) elif name == "food": ftime = attrs.get("time", None) ftime = xml.utils.iso8601.parse(ftime) if self.search_from_time and ftime < self.search_from_time: return if self.search_to_time and ftime > self.search_to_time: return self.cur_food = Food(attrs.get("name", None)) time = datetime.datetime.fromtimestamp(ftime, tz.LocalTimezone()) self.cur_food.set_time(time) def characters(self, chr): self.cur_val = self.cur_val + chr def endElement(self, name): if name == "day": self.days[self.cur_day.date.ctime()] = self.cur_day elif name == "food": self.cur_day.add_food(self.cur_food) elif name == "weight": self.cur_day.set_weight(atof(self.cur_val)) elif name == "quantity": self.cur_food.quantity = atof(self.cur_val) elif name == "energy": self.cur_food.energy = atoi(self.cur_val) def getDays(self): return self.days
def runTest(self): # Generate an XML file first. days = {} for f in range(20): curtime = datetime.datetime(2005, 6, f + 1, 0, 0, 0, 0, tz.LocalTimezone()) day = Day(curtime) day.set_weight(100) for i in range(20): food = Food("Testfood " + str(i)) food.quantity = 10 + i food.energy = 100 * i food.time = curtime day.add_food(food) days[curtime.ctime()] = day gen = ConsumerDBGenerator(); gen.generate(XML_FILE, days) # Now read. db = ConsumerDB() self.parser.setContentHandler(db) self.parser.parse(XML_FILE) assert len(db.getDays()) == 20 os.remove(XML_FILE)