markdown: Replace hyperlink requirement with urllib.parse.

The previous code only worked by accident and hyperlink 20.0.0 breaks
it.

>>> hyperlink.parse("example.com").replace(scheme="https")
DecodedURL(url=URL.from_text('https:example.com'))

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg 2020-09-12 19:46:59 -07:00 committed by Tim Abbott
parent f39d4cf1f0
commit dfab09b17d
5 changed files with 10 additions and 12 deletions

View File

@ -18,7 +18,6 @@ Jinja2
Markdown
importlib-metadata;python_version<"3.8" # for Markdown
Pygments
hyperlink
jsx-lexer
# Needed for manage.py

View File

@ -368,7 +368,7 @@ hyperframe==3.2.0 \
hyperlink==19.0.0 \
--hash=sha256:4288e34705da077fada1111a24a0aa08bb1e76699c9ce49876af722441845654 \
--hash=sha256:ab4a308feb039b04f855a020a6eda3b18ca5a68e6d8f8c899cbe9e653721d04f \
# via -r requirements/common.in, twisted
# via twisted
idna==2.8 \
--hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \
--hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c \

View File

@ -257,14 +257,10 @@ hyperframe==3.2.0 \
--hash=sha256:05f0e063e117c16fcdd13c12c93a4424a2c40668abfac3bb419a10f57698204e \
--hash=sha256:4dcab11967482d400853b396d042038e4c492a15a5d2f57259e2b5f89a32f755 \
# via h2, hyper
hyperlink==19.0.0 \
--hash=sha256:4288e34705da077fada1111a24a0aa08bb1e76699c9ce49876af722441845654 \
--hash=sha256:ab4a308feb039b04f855a020a6eda3b18ca5a68e6d8f8c899cbe9e653721d04f \
# via -r requirements/common.in
idna==2.8 \
--hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \
--hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c \
# via hyperlink, requests
# via requests
ijson==3.1.post0 \
--hash=sha256:07cd88c9224392726128673fea7a90276746d3bf56d11635e3457769eda6295a \
--hash=sha256:0ae656f3ca3bd833dc548583f13ba205eaee7c15d27496091549de4523931e00 \

View File

@ -44,4 +44,4 @@ API_FEATURE_LEVEL = 32
# historical commits sharing the same major version, in which case a
# minor version bump suffices.
PROVISION_VERSION = '102.0'
PROVISION_VERSION = '103.0'

View File

@ -26,6 +26,7 @@ from typing import (
Union,
)
from typing.re import Match, Pattern
from urllib.parse import urlsplit
from xml.etree import ElementTree as etree
from xml.etree.ElementTree import Element, SubElement
@ -36,7 +37,6 @@ import markdown
import requests
from django.conf import settings
from django.db.models import Q
from hyperlink import parse
from markdown.extensions import codehilite, nl2br, sane_lists, tables
from typing_extensions import TypedDict
@ -2077,9 +2077,12 @@ def topic_links(realm_filters_key: int, topic_name: str) -> List[str]:
link_match = re.match(get_web_link_regex(), sub_string)
if link_match:
url = link_match.group('url')
url_object = parse(url)
if not url_object.scheme:
url = url_object.replace(scheme='https').to_text()
result = urlsplit(url)
if not result.scheme:
if not result.netloc:
i = (result.path + "/").index("/")
result = result._replace(netloc=result.path[:i], path=result.path[i:])
url = result._replace(scheme="https").geturl()
matches.append(url)
return matches