class TagTimeKey(TimeKey): def __init__(self, tag, minutes=each10minutes, name='tagtime'): self.minutes = IIBTree([(i, 1) for i in minutes]) self.tag = tag self.name = name def __call__(self, objectId, instance, *arg, **kw): tag = self.tag.query(instance.context) if not tag: return () tag = time.localtime(tag) minute = tag[4] if not (self.minutes.has_key(-1) or self.minutes.has_key(minute)): minute = self.minutes.maxKey(minute) try: minute2 = self.minutes.minKey(minute+1) time2 = time.mktime(tag[:4] + (minute2, 0, 0, 0, 0)) except ValueError: time2 = time.mktime(tag[:4] + (0, 0, 0, 0, 0)) + 3600 if time2 < time.time(): return {'%s:%s'%(self.name, self.tag.name): time2} return {'%s:%s'%(self.name, self.tag.name): time.mktime(tag[:4] + (minute, 0, 0, 0, 0))}
class TimeKey(object): interface.implements(ITimeKey) def __init__(self, hours=eachHour, minutes=each0minute, name='time'): self.hours = IIBTree([(i, 1) for i in hours]) self.minutes = IIBTree([(i, 1) for i in minutes]) self.name = name def __call__(self, *args, **kw): now = time.localtime() minute = now[4] if not (self.minutes.has_key(-1) or self.minutes.has_key(minute)): minute = self.minutes.maxKey(minute) hour = now[3] if not (self.hours.has_key(-1) or self.hours.has_key(hour)): hour = self.hours.maxKey(hour) return {self.name: time.mktime(now[:3] + (hour, minute, 0, 0, 0, 0))}