mercurial/hgweb/wsgiheaders.py
changeset 43077 687b865b95ad
parent 43076 2372284d9457
child 43503 313e3a279828
equal deleted inserted replaced
43076:2372284d9457 43077:687b865b95ad
    20     """Convenience function to format and return a key=value pair.
    20     """Convenience function to format and return a key=value pair.
    21     This will quote the value if needed or if quote is true.
    21     This will quote the value if needed or if quote is true.
    22     """
    22     """
    23     if value is not None and len(value) > 0:
    23     if value is not None and len(value) > 0:
    24         if quote or tspecials.search(value):
    24         if quote or tspecials.search(value):
    25             value = value.replace('\\', '\\\\').replace('"', r'\"')
    25             value = value.replace(b'\\', b'\\\\').replace(b'"', r'\"')
    26             return '%s="%s"' % (param, value)
    26             return b'%s="%s"' % (param, value)
    27         else:
    27         else:
    28             return '%s=%s' % (param, value)
    28             return b'%s=%s' % (param, value)
    29     else:
    29     else:
    30         return param
    30         return param
    31 
    31 
    32 
    32 
    33 class Headers(object):
    33 class Headers(object):
    34     """Manage a collection of HTTP response headers"""
    34     """Manage a collection of HTTP response headers"""
    35 
    35 
    36     def __init__(self, headers=None):
    36     def __init__(self, headers=None):
    37         headers = headers if headers is not None else []
    37         headers = headers if headers is not None else []
    38         if type(headers) is not list:
    38         if type(headers) is not list:
    39             raise TypeError("Headers must be a list of name/value tuples")
    39             raise TypeError(b"Headers must be a list of name/value tuples")
    40         self._headers = headers
    40         self._headers = headers
    41         if __debug__:
    41         if __debug__:
    42             for k, v in headers:
    42             for k, v in headers:
    43                 self._convert_string_type(k)
    43                 self._convert_string_type(k)
    44                 self._convert_string_type(v)
    44                 self._convert_string_type(v)
   132         return r"%s(%r)" % (self.__class__.__name__, self._headers)
   132         return r"%s(%r)" % (self.__class__.__name__, self._headers)
   133 
   133 
   134     def __str__(self):
   134     def __str__(self):
   135         """str() returns the formatted headers, complete with end line,
   135         """str() returns the formatted headers, complete with end line,
   136         suitable for direct HTTP transmission."""
   136         suitable for direct HTTP transmission."""
   137         return '\r\n'.join(["%s: %s" % kv for kv in self._headers] + ['', ''])
   137         return b'\r\n'.join(
       
   138             [b"%s: %s" % kv for kv in self._headers] + [b'', b'']
       
   139         )
   138 
   140 
   139     def __bytes__(self):
   141     def __bytes__(self):
   140         return str(self).encode('iso-8859-1')
   142         return str(self).encode('iso-8859-1')
   141 
   143 
   142     def setdefault(self, name, value):
   144     def setdefault(self, name, value):
   172             _value = self._convert_string_type(_value)
   174             _value = self._convert_string_type(_value)
   173             parts.append(_value)
   175             parts.append(_value)
   174         for k, v in _params.items():
   176         for k, v in _params.items():
   175             k = self._convert_string_type(k)
   177             k = self._convert_string_type(k)
   176             if v is None:
   178             if v is None:
   177                 parts.append(k.replace('_', '-'))
   179                 parts.append(k.replace(b'_', b'-'))
   178             else:
   180             else:
   179                 v = self._convert_string_type(v)
   181                 v = self._convert_string_type(v)
   180                 parts.append(_formatparam(k.replace('_', '-'), v))
   182                 parts.append(_formatparam(k.replace(b'_', b'-'), v))
   181         self._headers.append(
   183         self._headers.append(
   182             (self._convert_string_type(_name), "; ".join(parts))
   184             (self._convert_string_type(_name), b"; ".join(parts))
   183         )
   185         )