Source code for cherrypy.lib.headers

"""headers."""


[docs] def _parse_param(s): while s[:1] == ';': s = s[1:] end = s.find(';') while end > 0 and (s.count('"', 0, end) - s.count('\\"', 0, end)) % 2: end = s.find(';', end + 1) if end < 0: end = len(s) f = s[:end] yield f.strip() s = s[end:]
[docs] def parse_header(line): """Parse a Content-type like header. Return the main content-type and a dictionary of options. Copied from removed stdlib cgi module. See `cherrypy/cherrypy#2014 (comment) <https://github.com/cherrypy/cherrypy/issues/2014#issuecomment-1883774891>`_ for background. """ parts = _parse_param(';' + line) key = parts.__next__() pdict = {} for p in parts: i = p.find('=') if i >= 0: name = p[:i].strip().lower() value = p[i + 1:].strip() if len(value) >= 2 and value[0] == value[-1] == '"': value = value[1:-1] value = value.replace('\\\\', '\\').replace('\\"', '"') pdict[name] = value return key, pdict