Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_invalid_port():
with pytest.raises(ValueError):
URL('http://reader.googlewebsite.com:neverforget')
def test_normalize_with_case():
# from RFC 3986 Section 6.2.2
url1 = URL('example://a/b/c/%7Bfoo%7D')
url2 = URL('eXAMPLE://a/./b/../b/%63/%7bfoo%7d')
assert url1 != url2
url1.normalize()
url2.normalize()
assert url1 == url2
def test_url_copy():
url = URL('http://example.com/foo?bar=baz')
url_copy = URL(url)
assert url == url_copy
def test_netloc_slashes():
# basic sanity checks
url = URL('mailto:mahmoud@hatnote.com')
assert url.scheme == 'mailto'
assert url.to_text() == 'mailto:mahmoud@hatnote.com'
url = URL('http://hatnote.com')
assert url.scheme == 'http'
assert url.to_text() == 'http://hatnote.com'
# test that unrecognized schemes stay consistent with '//'
url = URL('newscheme:a:b:c')
assert url.scheme == 'newscheme'
assert url.to_text() == 'newscheme:a:b:c'
url = URL('newerscheme://a/b/c')
assert url.scheme == 'newerscheme'
assert url.to_text() == 'newerscheme://a/b/c'
# test that reasonable guesses are made
url = URL('git+ftp://gitstub.biz/glyph/lefkowitz')
assert url.scheme == 'git+ftp'
assert url.to_text() == 'git+ftp://gitstub.biz/glyph/lefkowitz'
def test_netloc_slashes():
# basic sanity checks
url = URL('mailto:mahmoud@hatnote.com')
assert url.scheme == 'mailto'
assert url.to_text() == 'mailto:mahmoud@hatnote.com'
url = URL('http://hatnote.com')
assert url.scheme == 'http'
assert url.to_text() == 'http://hatnote.com'
# test that unrecognized schemes stay consistent with '//'
url = URL('newscheme:a:b:c')
assert url.scheme == 'newscheme'
assert url.to_text() == 'newscheme:a:b:c'
url = URL('newerscheme://a/b/c')
assert url.scheme == 'newerscheme'
assert url.to_text() == 'newerscheme://a/b/c'
# test that reasonable guesses are made
url = URL('git+ftp://gitstub.biz/glyph/lefkowitz')
assert url.scheme == 'git+ftp'
assert url.to_text() == 'git+ftp://gitstub.biz/glyph/lefkowitz'
url = URL('what+mailto:freerealestate@enotuniq.org')
assert url.scheme == 'what+mailto'
assert url.to_text() == 'what+mailto:freerealestate@enotuniq.org'
url = URL()
url.scheme = 'ztp'
url.path = '/x/y/z'
assert url.to_text() == 'ztp:/x/y/z'
def test_iri_query():
url = URL(u'http://minerals.mountain.ore/?rock=\N{SHAMROCK}')
assert url.query_params['rock'] == u'\N{SHAMROCK}'
assert url.query_params.to_text(full_quote=True).endswith(u'%E2%98%98')
def test_query_params(test_url):
url_obj = URL(test_url)
if not url_obj.query_params or url_obj.fragment:
return True
qp_text = url_obj.query_params.to_text(full_quote=True)
assert test_url.endswith(qp_text)
def test_quoted_userinfo():
url = URL('http://wikipedia.org')
url.username = u'user'
url.password = u'p@ss'
assert url.to_text(full_quote=True) == 'http://user:p%40ss@wikipedia.org'
url = URL(u'http://beyonc\xe9:b\xe9b@tmp.com')
# assert url.to_text(full_quote=False) == u'http://beyoncé:b%C3%A9b@tmp.com'
assert url.to_text(full_quote=True) == u'http://beyonc%C3%A9:b%C3%A9b@tmp.com'
The newly created :class:`URL` is normalized before being returned.
>>> url = URL('http://boltons.readthedocs.io')
>>> url.navigate('en/latest/')
URL(u'http://boltons.readthedocs.io/en/latest/')
Args:
dest (str): A string or URL object representing the destination
More information can be found in `Section 5 of RFC 3986`_.
.. _Section 5 of RFC 3986: https://tools.ietf.org/html/rfc3986#section-5
"""
orig_dest = None
if not isinstance(dest, URL):
dest, orig_dest = URL(dest), dest
if dest.scheme and dest.host:
# absolute URLs replace everything, but don't make an
# extra copy if we don't have to
return URL(dest) if orig_dest is None else dest
query_params = dest.query_params
if dest.path:
if dest.path.startswith(u'/'): # absolute path
new_path_parts = list(dest.path_parts)
else: # relative path
new_path_parts = self.path_parts[:-1] + dest.path_parts
else:
new_path_parts = list(self.path_parts)
if not query_params:
query_params = self.query_params
def _get_links(self, group, name):
link_list = list(self.get_config(group, name, []))
for link in link_list:
if link['href'] and URL(link['href']).host:
link['is_external'] = True
else:
link['is_external'] = False
return link_list