(path)
| 26 | return urllib.parse.quote(unquoted, errors='surrogateescape') |
| 27 | |
| 28 | def normalize_path(path): |
| 29 | path, sep, query = path.partition('?') |
| 30 | path = normalize(path) |
| 31 | if sep: |
| 32 | query = re.sub(r'[^=&]+', lambda m: normalize(m[0]), query) |
| 33 | path += '?' + query |
| 34 | return path |
| 35 | |
| 36 | |
| 37 | class RobotFileParser: |