mirror of https://github.com/zulip/zulip.git
32 lines
1.3 KiB
Python
32 lines
1.3 KiB
Python
import urllib
|
|
from typing import List
|
|
|
|
from zerver.models import Realm, Stream
|
|
|
|
def hash_util_encode(string: str) -> str:
|
|
# Do the same encoding operation as hash_util.encodeHashComponent on the
|
|
# frontend.
|
|
# `safe` has a default value of "/", but we want those encoded, too.
|
|
return urllib.parse.quote(
|
|
string.encode("utf-8"), safe=b"").replace(".", "%2E").replace("%", ".")
|
|
|
|
def encode_stream(stream_id: int, stream_name: str) -> str:
|
|
# We encode streams for urls as something like 99-Verona.
|
|
stream_name = stream_name.replace(' ', '-')
|
|
return str(stream_id) + '-' + hash_util_encode(stream_name)
|
|
|
|
def pm_narrow_url(realm: Realm, participants: List[str]) -> str:
|
|
participants.sort()
|
|
base_url = "%s/#narrow/pm-with/" % (realm.uri,)
|
|
return base_url + hash_util_encode(",".join(participants))
|
|
|
|
def stream_narrow_url(realm: Realm, stream: Stream) -> str:
|
|
base_url = "%s/#narrow/stream/" % (realm.uri,)
|
|
return base_url + encode_stream(stream.id, stream.name)
|
|
|
|
def topic_narrow_url(realm: Realm, stream: Stream, topic: str) -> str:
|
|
base_url = "%s/#narrow/stream/" % (realm.uri,)
|
|
return "%s%s/topic/%s" % (base_url,
|
|
encode_stream(stream.id, stream.name),
|
|
hash_util_encode(topic))
|