terom@50: """ terom@50: Miscellaneous things terom@50: """ terom@50: terom@50: import datetime terom@50: terom@51: from qmsk.web.urltree import URLType terom@51: terom@51: class URLChannelName (URLType) : terom@50: """ terom@51: Handle LogChannel names in URLs. Deals with instances of LogChannel terom@50: """ terom@50: terom@51: def __init__ (self, channels) : terom@50: """ terom@51: Use the given { name -> LogChannel } dict terom@51: """ terom@51: terom@51: self.channels = channels terom@51: terom@51: def parse (self, chan_name) : terom@51: """ terom@51: chan_name -> LogChannel terom@51: """ terom@51: terom@51: return self.channels[chan_name] terom@51: terom@51: def build (self, chan) : terom@51: """ terom@51: LogChannel -> chan_name terom@51: """ terom@51: terom@51: return chan.id terom@51: terom@51: class URLFormatterName (URLType) : terom@51: """ terom@51: Handle LogFormatter names in URLs. Note that they evaluate into the LogFormatter class itself, not an terom@51: instance, although build requiers an instance terom@51: """ terom@51: terom@51: def __init__ (self, formatters) : terom@51: """ terom@51: Use the given { name -> class LogFormatter } dict terom@51: """ terom@51: terom@51: self.formatters = formatters terom@51: terom@51: def parse (self, fmt_name) : terom@51: """ terom@51: fmt_name -> class LogFormatter terom@51: """ terom@51: terom@51: return self.formatters[fmt_name] terom@51: terom@51: def build (self, fmt) : terom@51: """ terom@51: LogFormatter -> fmt_name terom@51: """ terom@51: terom@51: return fmt.name terom@51: terom@51: class URLDateType (URLType) : terom@51: """ terom@51: Handle dates in URLs as naive datetime objects (with indeterminate time info) terom@51: """ terom@51: terom@51: def __init__ (self, date_fmt="%Y-%m-%d") : terom@51: """ terom@51: Format/parse dates using the given format terom@51: """ terom@51: terom@51: self.date_fmt = date_fmt terom@51: terom@51: def parse (self, date_str) : terom@51: """ terom@51: date_str -> naive datetime.datetime terom@50: """ terom@50: terom@51: return datetime.datetime.strptime(date_str, self.date_fmt) terom@50: terom@51: def build (self, date) : terom@51: """ terom@51: datetime.date -> date_str terom@51: """ terom@50: terom@51: return date.strftime(self.date_fmt) terom@50: