(url, scheme=None, allow_fragments=True)
| 591 | return result |
| 592 | |
| 593 | def _urlsplit(url, scheme=None, allow_fragments=True): |
| 594 | # Only lstrip url as some applications rely on preserving trailing space. |
| 595 | # (https://url.spec.whatwg.org/#concept-basic-url-parser would strip both) |
| 596 | url = url.lstrip(_WHATWG_C0_CONTROL_OR_SPACE) |
| 597 | for b in _UNSAFE_URL_BYTES_TO_REMOVE: |
| 598 | url = url.replace(b, "") |
| 599 | if scheme is not None: |
| 600 | scheme = scheme.strip(_WHATWG_C0_CONTROL_OR_SPACE) |
| 601 | for b in _UNSAFE_URL_BYTES_TO_REMOVE: |
| 602 | scheme = scheme.replace(b, "") |
| 603 | |
| 604 | allow_fragments = bool(allow_fragments) |
| 605 | netloc = query = fragment = None |
| 606 | i = url.find(':') |
| 607 | if i > 0 and url[0].isascii() and url[0].isalpha(): |
| 608 | for c in url[:i]: |
| 609 | if c not in scheme_chars: |
| 610 | break |
| 611 | else: |
| 612 | scheme, url = url[:i].lower(), url[i+1:] |
| 613 | if url[:2] == '//': |
| 614 | netloc, url = _splitnetloc(url, 2) |
| 615 | if (('[' in netloc and ']' not in netloc) or |
| 616 | (']' in netloc and '[' not in netloc)): |
| 617 | raise ValueError("Invalid IPv6 URL") |
| 618 | if '[' in netloc and ']' in netloc: |
| 619 | _check_bracketed_netloc(netloc) |
| 620 | if allow_fragments and '#' in url: |
| 621 | url, fragment = url.split('#', 1) |
| 622 | if '?' in url: |
| 623 | url, query = url.split('?', 1) |
| 624 | _checknetloc(netloc) |
| 625 | return (scheme, netloc, url, query, fragment) |
| 626 | |
| 627 | def urlunparse(components, *, keep_empty=_UNSPECIFIED): |
| 628 | """Put a parsed URL back together again. This may result in a |
no test coverage detected
searching dependent graphs…