Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
controls = get_column_controls(
url=url, columns=columns, selected_column=column, is_reverse=is_reverse
)
assert controls == [
ColumnControl(
id="username",
text="Username",
url=URL("/"),
is_forward_sorted=False,
is_reverse_sorted=True,
),
ColumnControl(
id="email",
text="Email",
url=URL("/?order=email"),
is_forward_sorted=False,
is_reverse_sorted=False,
),
def test_hidden_password():
u = URL("https://example.org/path/to/somewhere")
assert repr(u) == "URL('https://example.org/path/to/somewhere')"
u = URL("https://username@example.org/path/to/somewhere")
assert repr(u) == "URL('https://username@example.org/path/to/somewhere')"
u = URL("https://username:password@example.org/path/to/somewhere")
assert repr(u) == "URL('https://username:********@example.org/path/to/somewhere')"
def test_url_query_params():
u = URL("https://example.org/path/?page=3")
assert u.query == "page=3"
u = u.include_query_params(page=4)
assert str(u) == "https://example.org/path/?page=4"
u = u.include_query_params(search="testing")
assert str(u) == "https://example.org/path/?page=4&search=testing"
u = u.replace_query_params(order="name")
assert str(u) == "https://example.org/path/?order=name"
u = u.remove_query_params("order")
assert str(u) == "https://example.org/path/"
column, is_reverse = None, False
controls = get_column_controls(url, columns, selected_column=None, is_reverse=False)
assert controls == [
ColumnControl(
id="username",
text="Username",
url=URL("/?order=username"),
is_forward_sorted=False,
is_reverse_sorted=False,
),
ColumnControl(
id="email",
text="Email",
url=URL("/?order=email"),
is_forward_sorted=False,
is_reverse_sorted=False,
),
def test_get_column_controls_no_current_selection():
columns = {"username": "Username", "email": "Email"}
url = URL("/")
column, is_reverse = None, False
controls = get_column_controls(url, columns, selected_column=None, is_reverse=False)
assert controls == [
ColumnControl(
id="username",
text="Username",
url=URL("/?order=username"),
is_forward_sorted=False,
is_reverse_sorted=False,
),
ColumnControl(
id="email",
text="Email",
url=URL("/?order=email"),
verbosity=DEFAULT_VERBOSITY,
):
"""Main handler that returns the requested place"""
verbosity = validate_verbosity(verbosity)
lang = validate_lang(lang)
try:
place = place_from_id(id, type)
except InvalidPlaceId as e:
raise HTTPException(status_code=404, detail=e.message)
except RedirectToPlaceId as e:
path_prefix = request.headers.get("x-forwarded-prefix", "").rstrip("/")
path = request.app.url_path_for("get_place", id=e.target_id)
query = request.url.query
return JSONResponse(
status_code=303,
headers={"location": str(URL(path=f"{path_prefix}{path}", query=query))},
content={"id": e.target_id},
)
log_place_request(place, request.headers)
if settings["BLOCK_COVID_ENABLED"] and settings["COVID19_USE_REDIS_DATASET"]:
background_tasks.add_task(covid19_osm_task)
return place.load_place(lang, verbosity)
full_path, stat_result = await self.lookup_path(path)
if stat_result and stat.S_ISREG(stat_result.st_mode):
# We have a static file to serve.
return self.file_response(full_path, stat_result, scope)
elif stat_result and stat.S_ISDIR(stat_result.st_mode) and self.html:
# We're in HTML mode, and have got a directory URL.
# Check if we have 'index.html' file to serve.
index_path = os.path.join(path, "index.html")
full_path, stat_result = await self.lookup_path(index_path)
if stat_result is not None and stat.S_ISREG(stat_result.st_mode):
if not scope["path"].endswith("/"):
# Directory URLs should redirect to always end in "/".
url = URL(scope=scope)
url = url.replace(path=url.path + "/")
return RedirectResponse(url=url)
return self.file_response(full_path, stat_result, scope)
if self.html:
# Check for '404.html' if we're in HTML mode.
full_path, stat_result = await self.lookup_path("404.html")
if stat_result is not None and stat.S_ISREG(stat_result.st_mode):
return self.file_response(
full_path, stat_result, scope, status_code=404
)
return PlainTextResponse("Not Found", status_code=404)
def make_absolute_url(self, base_url: typing.Union[str, URL]) -> str:
if isinstance(base_url, str):
base_url = URL(base_url)
if self.protocol:
scheme = {
"http": {True: "https", False: "http"},
"websocket": {True: "wss", False: "ws"},
}[self.protocol][base_url.is_secure]
else:
scheme = base_url.scheme
if self.host:
netloc = self.host
else:
netloc = base_url.netloc
path = base_url.path.rstrip("/") + str(self)
return str(URL(scheme=scheme, netloc=netloc, path=path))
is_valid_host = False
found_www_redirect = False
for pattern in self.allowed_hosts:
if host == pattern or (
pattern.startswith("*") and host.endswith(pattern[1:])
):
is_valid_host = True
break
elif "www." + host == pattern:
found_www_redirect = True
if is_valid_host:
await self.app(scope, receive, send)
else:
if found_www_redirect and self.www_redirect:
url = URL(scope=scope)
redirect_url = url.replace(netloc="www." + url.netloc)
response = RedirectResponse(url=str(redirect_url)) # type: Response
else:
response = PlainTextResponse("Invalid host header", status_code=400)
await response(scope, receive, send)
def on_http_request(self, span: Span, scope: Scope) -> None:
"""
Called just before dispatching an incoming HTTP request to the underlying
ASGI app.
"""
assert scope["type"] == "http"
try:
method = scope["method"]
url = URL(scope=scope)
except KeyError:
# Invalid ASGI.
span.set_tag(MANUAL_DROP_KEY)
return
headers = Headers(raw=scope.get("headers", []))
# NOTE: any header set in the future will not be stored in the span.
store_request_headers(headers, span, self.config)
span.resource = f"{method} {url.path}"
span.set_tag(http_tags.METHOD, method)
span.set_tag(http_tags.URL, str(url))
if self.config.get("trace_query_string", False):
span.set_tag(http_tags.QUERY_STRING, url.query)