Beispiel #1
0
        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
Beispiel #3
0
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)