httpaste/src/httpaste/helper/url.py

54 lines
No EOL
1.1 KiB
Python

from typing import Optional
from urllib.parse import urlparse, parse_qs
def url_query_string(fields:dict):
return '&'.join([f'{k}={v}' for k,v in fields.items()])
def url_append_query_param(url:str, name: str, value:str):
urlcomps = urlparse(url)
q = parse_qs(urlcomps.query)
q[name] = value
qs = url_query_string(q)
return urlcomps._replace(query=qs).geturl()
def url_upgrade_to_https(url: str, port: Optional[int] = 443):
urlcomps = urlparse(url)
urlcomps = urlcomps._replace(scheme='https')
if url != urlcomps.geturl():
hostname = urlcomps.netloc.rsplit(':', 1)[0]
if port != 443:
netloc = ':'.join((hostname, str(port)))
else:
netloc = hostname
urlcomps = urlcomps._replace(netloc=netloc)
return urlcomps.geturl()
def url_has_tld(url:str, tld:str):
urlcomps = urlparse(url)
hostname = urlcomps.netloc.rsplit(':', 1)[0]
hostname_levels = hostname.rsplit('.', 1)
if len(hostname_levels) > 1 and hostname_levels[-1:][0] == tld:
return True
return False