| 104 | |
| 105 | |
| 106 | def parse_header(header): |
| 107 | header_split = [] |
| 108 | current = '' |
| 109 | current_quote = None |
| 110 | for char in header: |
| 111 | if char == '"' or char == "'": |
| 112 | if current_quote is None: |
| 113 | current_quote = char |
| 114 | elif current_quote == char: |
| 115 | current_quote = None |
| 116 | elif char == ';' and current_quote is None: |
| 117 | if current: |
| 118 | header_split.append(current) |
| 119 | current = '' |
| 120 | continue |
| 121 | |
| 122 | current += char |
| 123 | |
| 124 | if current: |
| 125 | header_split.append(current) |
| 126 | |
| 127 | main_value = header_split[0] |
| 128 | if ':' in main_value: |
| 129 | main_value = main_value[main_value.index(':') + 1:] |
| 130 | main_value = string_utils.unwrap_quotes(main_value.strip()) |
| 131 | |
| 132 | sub_headers = header_split[1:] |
| 133 | sub_headers_dict = {} |
| 134 | for sub_header in sub_headers: |
| 135 | split = sub_header.split('=', 1) |
| 136 | |
| 137 | if len(split) > 1: |
| 138 | key = split[0].strip() |
| 139 | value = unwrap_quotes(split[1].strip()) |
| 140 | else: |
| 141 | key = sub_header.strip() |
| 142 | value = '' |
| 143 | |
| 144 | sub_headers_dict[key] = value |
| 145 | |
| 146 | return main_value, sub_headers_dict |
| 147 | |
| 148 | |
| 149 | separate_io_loop = None |