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))}