mercurial/templateutil.py
changeset 38285 8d6109b49b31
parent 38284 e72697893c93
child 38286 851fc9d42d6d
equal deleted inserted replaced
38284:e72697893c93 38285:8d6109b49b31
   170         return pycompat.bytestr(self._value)
   170         return pycompat.bytestr(self._value)
   171 
   171 
   172     def tovalue(self, context, mapping):
   172     def tovalue(self, context, mapping):
   173         return self._value
   173         return self._value
   174 
   174 
   175 # stub for representing a date type; may be a real date type that can
   175 class date(wrapped):
   176 # provide a readable string value
   176     """Wrapper for date tuple"""
   177 class date(object):
   177 
   178     pass
   178     def __init__(self, value):
       
   179         # value may be (float, int), but public interface shouldn't support
       
   180         # floating-point timestamp
       
   181         self._unixtime, self._tzoffset = map(int, value)
       
   182 
       
   183     def contains(self, context, mapping, item):
       
   184         raise error.ParseError(_('date is not iterable'))
       
   185 
       
   186     def getmember(self, context, mapping, key):
       
   187         raise error.ParseError(_('date is not a dictionary'))
       
   188 
       
   189     def getmin(self, context, mapping):
       
   190         raise error.ParseError(_('date is not iterable'))
       
   191 
       
   192     def getmax(self, context, mapping):
       
   193         raise error.ParseError(_('date is not iterable'))
       
   194 
       
   195     def itermaps(self, context):
       
   196         raise error.ParseError(_("date is not iterable"))
       
   197 
       
   198     def join(self, context, mapping, sep):
       
   199         raise error.ParseError(_("date is not iterable"))
       
   200 
       
   201     def show(self, context, mapping):
       
   202         return '%d %d' % (self._unixtime, self._tzoffset)
       
   203 
       
   204     def tovalue(self, context, mapping):
       
   205         return (self._unixtime, self._tzoffset)
   179 
   206 
   180 class hybrid(wrapped):
   207 class hybrid(wrapped):
   181     """Wrapper for list or dict to support legacy template
   208     """Wrapper for list or dict to support legacy template
   182 
   209 
   183     This class allows us to handle both:
   210     This class allows us to handle both:
   641     a (unixtime, offset) tuple"""
   668     a (unixtime, offset) tuple"""
   642     thing = evalrawexp(context, mapping, arg)
   669     thing = evalrawexp(context, mapping, arg)
   643     return unwrapdate(context, mapping, thing, err)
   670     return unwrapdate(context, mapping, thing, err)
   644 
   671 
   645 def unwrapdate(context, mapping, thing, err=None):
   672 def unwrapdate(context, mapping, thing, err=None):
       
   673     if isinstance(thing, date):
       
   674         return thing.tovalue(context, mapping)
       
   675     # TODO: update hgweb to not return bare tuple; then just stringify 'thing'
   646     thing = unwrapvalue(context, mapping, thing)
   676     thing = unwrapvalue(context, mapping, thing)
   647     try:
   677     try:
   648         return dateutil.parsedate(thing)
   678         return dateutil.parsedate(thing)
   649     except AttributeError:
   679     except AttributeError:
   650         raise error.ParseError(err or _('not a date tuple nor a string'))
   680         raise error.ParseError(err or _('not a date tuple nor a string'))