aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fietsboek/__init__.py6
-rw-r--r--fietsboek/config.py8
-rw-r--r--fietsboek/jinja2.py21
3 files changed, 12 insertions, 23 deletions
diff --git a/fietsboek/__init__.py b/fietsboek/__init__.py
index fed720b..423e901 100644
--- a/fietsboek/__init__.py
+++ b/fietsboek/__init__.py
@@ -14,12 +14,14 @@ Content
-------
"""
from pathlib import Path
+from typing import Optional
import importlib_metadata
import redis
from pyramid.config import Configurator
from pyramid.csrf import CookieCSRFStoragePolicy
from pyramid.i18n import default_locale_negotiator
+from pyramid.request import Request
from pyramid.session import SignedCookieSessionFactory
from . import config as mod_config
@@ -31,7 +33,7 @@ from .security import SecurityPolicy
__VERSION__ = importlib_metadata.version("fietsboek")
-def locale_negotiator(request):
+def locale_negotiator(request: Request) -> Optional[str]:
"""Negotiates the right locale to use.
This tries the following:
@@ -43,9 +45,7 @@ def locale_negotiator(request):
.. _Accept-Language: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language
:param request: The request for which to get the language.
- :type request: pyramid.request.Request
:return: The determined locale, or ``None`` if the default should be used.
- :rtype: str
"""
locale = default_locale_negotiator(request)
if locale:
diff --git a/fietsboek/config.py b/fietsboek/config.py
index 54faf39..a5a87a8 100644
--- a/fietsboek/config.py
+++ b/fietsboek/config.py
@@ -242,13 +242,11 @@ class Config(BaseModel):
return hasher.hexdigest()
-def parse(config):
+def parse(config: dict) -> Config:
"""Parses the configuration into a :class:`Config`.
:param config: The configuration dict to parse.
- :type config: dict
:return: The parsed (and validated) configuration.
- :rtype: Config
:raises ValidationError: When the configuration is malformed.
"""
config = config.copy()
@@ -280,7 +278,7 @@ def parse(config):
# Now we can parse the main config
try:
- config = Config.parse_obj(config)
+ parsed_config = Config.parse_obj(config)
except pydantic.ValidationError as validation_error:
errors.append(("configuration", validation_error))
@@ -294,7 +292,7 @@ def parse(config):
for key in keys:
LOGGER.warning("Unknown configuration key: %r", key)
- return config
+ return parsed_config
def _field_name(field):
diff --git a/fietsboek/jinja2.py b/fietsboek/jinja2.py
index 71982e0..a3ca7d8 100644
--- a/fietsboek/jinja2.py
+++ b/fietsboek/jinja2.py
@@ -5,21 +5,20 @@ import json
import jinja2
from babel.dates import format_datetime
from babel.numbers import format_decimal
+from jinja2.runtime import Context
from markupsafe import Markup
+from pyramid.request import Request
@jinja2.pass_context
-def filter_format_decimal(ctx, value):
+def filter_format_decimal(ctx: Context, value: float) -> str:
"""Format a decimal number according to the locale.
This uses the right thousands grouping and the right decimal separator.
:param ctx: The jinja context, passed automatically.
- :type ctx: jinja2.runtime.Context
:param value: The value to format.
- :type value: float
:return: The formatted decimal.
- :rtype: str
"""
request = ctx.get("request")
locale = request.localizer.locale_name
@@ -27,15 +26,12 @@ def filter_format_decimal(ctx, value):
@jinja2.pass_context
-def filter_format_datetime(ctx, value):
+def filter_format_datetime(ctx: Context, value: datetime.datetime) -> str:
"""Format a datetime according to the locale.
:param ctx: The jinja context, passed automatically.
- :type ctx: jinja2.runtime.Context
:param value: The value to format.
- :type value: datetime.datetime
:return: The formatted date.
- :rtype: str
"""
request = ctx.get("request")
locale = request.localizer.locale_name
@@ -43,7 +39,7 @@ def filter_format_datetime(ctx, value):
@jinja2.pass_context
-def filter_local_datetime(ctx, value):
+def filter_local_datetime(ctx: Context, value: datetime.datetime) -> Markup:
"""Format a UTC datetime to show in the user's local timezone.
This is done by embedding the UTC timestamp in the page, such that we can
@@ -53,11 +49,8 @@ def filter_local_datetime(ctx, value):
represent the time in the user's timezone, but in UTC.
:param ctx: The jinja context, passed automatically.
- :type ctx: jinja2.runtime.Context
:param value: The value to format.
- :type value: datetime.datetime
:return: The formatted date.
- :rtype: Markup
"""
# If we get a naive object in, we assume that we got it from the database
# and we have to treat it like a UTC-aware object. This happens when we
@@ -79,16 +72,14 @@ def filter_local_datetime(ctx, value):
)
-def global_embed_tile_layers(request):
+def global_embed_tile_layers(request: Request) -> Markup:
"""Renders the available tile servers for the current user, as a JSON object.
The returned value is wrapped as a :class:`~markupsafe.Markup` so that it
won't get escaped by jinja.
:param request: The Pyramid request.
- :type request: pyramid.request.Request
:return: The available tile servers.
- :rtype: markupsafe.Markup
"""
# pylint: disable=import-outside-toplevel,cyclic-import
from .views import tileproxy