mercurial/templatefilters.py
changeset 50928 d718eddf01d9
parent 50609 90945014f4e4
equal deleted inserted replaced
50927:7a8ea1397816 50928:d718eddf01d9
   337         return b'"%s"' % encoding.jsonescape(obj, paranoid=paranoid)
   337         return b'"%s"' % encoding.jsonescape(obj, paranoid=paranoid)
   338     elif isinstance(obj, type(u'')):
   338     elif isinstance(obj, type(u'')):
   339         raise error.ProgrammingError(
   339         raise error.ProgrammingError(
   340             b'Mercurial only does output with bytes: %r' % obj
   340             b'Mercurial only does output with bytes: %r' % obj
   341         )
   341         )
   342     elif util.safehasattr(obj, 'keys'):
   342     elif hasattr(obj, 'keys'):
   343         out = [
   343         out = [
   344             b'"%s": %s'
   344             b'"%s": %s'
   345             % (encoding.jsonescape(k, paranoid=paranoid), json(v, paranoid))
   345             % (encoding.jsonescape(k, paranoid=paranoid), json(v, paranoid))
   346             for k, v in sorted(obj.items())
   346             for k, v in sorted(obj.items())
   347         ]
   347         ]
   348         return b'{' + b', '.join(out) + b'}'
   348         return b'{' + b', '.join(out) + b'}'
   349     elif util.safehasattr(obj, '__iter__'):
   349     elif hasattr(obj, '__iter__'):
   350         out = [json(i, paranoid) for i in obj]
   350         out = [json(i, paranoid) for i in obj]
   351         return b'[' + b', '.join(out) + b']'
   351         return b'[' + b', '.join(out) + b']'
   352     raise error.ProgrammingError(b'cannot encode %r' % obj)
   352     raise error.ProgrammingError(b'cannot encode %r' % obj)
   353 
   353 
   354 
   354