Source code for faust.utils.urls
"""URL utilities - Working with URLs."""
from typing import List, Optional, Union
from yarl import URL
[docs]def urllist(arg: Union[URL, str, List[str], List[URL]], *,
default_scheme: str = None) -> List[URL]:
"""Create list of URLs.
You can pass in a comma-separated string, or an actual list
and this will convert that into a list of :class:`yarl.URL` objects.
"""
if not arg:
raise ValueError('URL argument cannot be falsy')
if isinstance(arg, URL):
arg = [arg]
elif isinstance(arg, str):
arg = arg.split(';')
scheme = URL(arg[0]).scheme or default_scheme
return [_ensure_scheme(scheme, URL(u)) for u in arg]
def _ensure_scheme(default_scheme: Optional[str], url: Union[URL]) -> URL:
"""Ensure URL has a default scheme.
An URL like "localhost" will be returned with the default scheme
added, while an URL with existing scheme is returned unmodified.
"""
if default_scheme and not url.scheme:
if url.is_absolute():
return url.with_scheme(default_scheme)
else:
return URL(f'{default_scheme}://{url}')
return url