From ef83e73a3664192fe98021d6258a1ac1d430a759 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Mon, 11 Dec 2023 19:02:19 +0100 Subject: [PATCH] make linter happy --- src/c3nav/api/ninja.py | 2 +- src/c3nav/api/schema.py | 3 ++- src/c3nav/api/utils.py | 2 +- src/c3nav/asgi.py | 6 +++--- src/c3nav/editor/api/base.py | 3 ++- src/c3nav/editor/api/endpoints.py | 4 ++-- src/c3nav/editor/api/geometries.py | 8 ++++++-- src/c3nav/editor/views/base.py | 6 +++--- src/c3nav/mapdata/models/update.py | 2 +- src/c3nav/mapdata/render/renderdata.py | 3 ++- src/c3nav/mapdata/render/renderer.py | 4 ++-- src/c3nav/mapdata/schemas/model_base.py | 4 ++-- src/c3nav/mapdata/utils/cache/package.py | 2 +- src/c3nav/mapdata/utils/geometry.py | 1 - src/c3nav/routing/api/positioning.py | 3 ++- src/c3nav/routing/api/routing.py | 1 - src/c3nav/routing/locator.py | 2 +- src/c3nav/tileserver/wsgi.py | 1 - 18 files changed, 31 insertions(+), 26 deletions(-) diff --git a/src/c3nav/api/ninja.py b/src/c3nav/api/ninja.py index 7971e19e..97629b00 100644 --- a/src/c3nav/api/ninja.py +++ b/src/c3nav/api/ninja.py @@ -48,7 +48,7 @@ We provide two API documentation viewers: * [Swagger](/api/v2/?swagger): less good, but has a built-in API client We recommend reading the documentation using Redoc, and either using the Code examples provided next to each request, -or switching to swagger if you want an in-browser API client. +or switching to swagger if you want an in-browser API client. """.strip() diff --git a/src/c3nav/api/schema.py b/src/c3nav/api/schema.py index c3b4c7ce..649c78c8 100644 --- a/src/c3nav/api/schema.py +++ b/src/c3nav/api/schema.py @@ -76,9 +76,10 @@ GeometrySchema = Annotated[ Discriminator("type"), ] + class AnyGeometrySchema(Schema): """ A GeoJSON Geometry """ type: NonEmptyStr - coordinates: Any \ No newline at end of file + coordinates: Any diff --git a/src/c3nav/api/utils.py b/src/c3nav/api/utils.py index 28efdfdb..bbe5d7a3 100644 --- a/src/c3nav/api/utils.py +++ b/src/c3nav/api/utils.py @@ -12,7 +12,7 @@ def get_api_post_data(request): try: data = request.json_body except AttributeError: - pass # todo fix this raise ParseError('Invalid JSON.') + pass # todo fix this raise ParseError('Invalid JSON.') return data return request.POST diff --git a/src/c3nav/asgi.py b/src/c3nav/asgi.py index b86703b9..e2722abe 100644 --- a/src/c3nav/asgi.py +++ b/src/c3nav/asgi.py @@ -10,8 +10,8 @@ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "c3nav.settings") os.environ.setdefault("C3NAV_CONN_MAX_AGE", "0") django_asgi = get_asgi_application() -from c3nav.control.middleware import UserPermissionsChannelMiddleware -from c3nav.urls import websocket_urlpatterns +from c3nav.control.middleware import UserPermissionsChannelMiddleware # noqa +from c3nav.urls import websocket_urlpatterns # noqa application = ProtocolTypeRouter({ "http": django_asgi, @@ -39,6 +39,6 @@ with suppress(ImportError): app=StaticFiles(directory=settings.STATIC_ROOT, follow_symlink=True), name='static', ), - Mount(path='/',app=django_asgi), + Mount(path='/', app=django_asgi), ]), }) diff --git a/src/c3nav/editor/api/base.py b/src/c3nav/editor/api/base.py index 69c1c428..ac6355bc 100644 --- a/src/c3nav/editor/api/base.py +++ b/src/c3nav/editor/api/base.py @@ -9,6 +9,7 @@ def api_etag_with_update_cache_key(permissions=True, etag_func=AccessPermission. def inner_wrapper(func): func = api_etag(permissions=permissions, etag_func=etag_func, base_mapdata=base_mapdata)(func) + @wraps(func) def inner_wrapped_func(request, *args, **kwargs): try: @@ -27,4 +28,4 @@ def api_etag_with_update_cache_key(permissions=True, etag_func=AccessPermission. return func(request, *args, **kwargs) return inner_wrapped_func - return inner_wrapper \ No newline at end of file + return inner_wrapper diff --git a/src/c3nav/editor/api/endpoints.py b/src/c3nav/editor/api/endpoints.py index e5bdca4f..78493592 100644 --- a/src/c3nav/editor/api/endpoints.py +++ b/src/c3nav/editor/api/endpoints.py @@ -116,7 +116,7 @@ def resolve_editor_path_api(request, path): response={200: dict, **API404.dict(), **auth_permission_responses}, openapi_extra={"security": [{"APIKeyAuth": ["editor_access"]}]}) @api_etag() # todo: correct? -def view_as_api(request, path: str): +def get_view_as_api(request, path: str): """ get editor views rendered as JSON instead of HTML. `path` is the path after /editor/. @@ -138,7 +138,7 @@ def view_as_api(request, path: str): response={200: dict, **API404.dict(), **auth_permission_responses}, openapi_extra={"security": [{"APIKeyAuth": ["editor_access", "write"]}]}) @api_etag() # todo: correct? -def view_as_api(request, path: str): +def post_view_as_api(request, path: str): """ get editor views rendered as JSON instead of HTML. `path` is the path after /editor/. diff --git a/src/c3nav/editor/api/geometries.py b/src/c3nav/editor/api/geometries.py index 509cf47d..4c2d1909 100644 --- a/src/c3nav/editor/api/geometries.py +++ b/src/c3nav/editor/api/geometries.py @@ -1,6 +1,6 @@ from dataclasses import dataclass from itertools import chain -from typing import Sequence +from typing import TYPE_CHECKING, Sequence from django.db.models import Prefetch, Q from shapely import prepared @@ -55,6 +55,10 @@ def _get_geometries_for_one_level(level): return results +if TYPE_CHECKING: + from c3nav.mapdata.models import Level + + @dataclass(slots=True) class LevelsForLevel: levels: Sequence[int] # IDs of all levels to render for this level, in order, including the level itself @@ -270,7 +274,7 @@ def get_space_geometries_result(request, space_id: int, update_cache_key: str, u graph_edges = request.changeset.wrap_model('GraphEdge').objects.all() space_graphnodes_ids = tuple(node.pk for node in space_graph_nodes) graph_edges = graph_edges.filter(Q(from_node__pk__in=space_graphnodes_ids) | - Q(to_node__pk__in=space_graphnodes_ids)) + Q(to_node__pk__in=space_graphnodes_ids)) graph_edges = graph_edges.select_related('from_node', 'to_node', 'waytype').only( 'from_node__geometry', 'to_node__geometry', 'waytype__color' ) diff --git a/src/c3nav/editor/views/base.py b/src/c3nav/editor/views/base.py index 44117e64..6c447764 100644 --- a/src/c3nav/editor/views/base.py +++ b/src/c3nav/editor/views/base.py @@ -270,9 +270,9 @@ def call_api_hybrid_view_for_api(func, request, *args, **kwargs): # todo: fix this # api_response = APIResponse(result, status=response.status_code) - if request.method == 'GET': - response.add_headers(api_response) - return api_response + # if request.method == 'GET': + # response.add_headers(api_response) + # return api_response elif isinstance(response, HttpResponse) and response.status_code in (304, 412): # 304 Not Modified, 412 Precondition Failed return response diff --git a/src/c3nav/mapdata/models/update.py b/src/c3nav/mapdata/models/update.py index ea3759b0..0a58d767 100644 --- a/src/c3nav/mapdata/models/update.py +++ b/src/c3nav/mapdata/models/update.py @@ -183,7 +183,7 @@ class MapUpdate(models.Model): logger.info('Rebuilding locator...') from c3nav.routing.locator import Locator - locator = Locator.rebuild(new_updates[-1].to_tuple, router) + Locator.rebuild(new_updates[-1].to_tuple, router) for new_update in reversed(new_updates): new_update.processed = True diff --git a/src/c3nav/mapdata/render/renderdata.py b/src/c3nav/mapdata/render/renderdata.py index 0bec09af..c95d1532 100644 --- a/src/c3nav/mapdata/render/renderdata.py +++ b/src/c3nav/mapdata/render/renderdata.py @@ -101,7 +101,8 @@ class LevelRenderData: if coords: last_interpolator = NearestNDInterpolator(np.vstack(coords), np.vstack(values)) else: - last_interpolator = NearestNDInterpolator(np.array([[0, 0]]), np.array([float(render_level.base_altitude)])) + last_interpolator = NearestNDInterpolator(np.array([[0, 0]]), + np.array([float(render_level.base_altitude)])) """ second pass, forward to create the LevelRenderData for each level diff --git a/src/c3nav/mapdata/render/renderer.py b/src/c3nav/mapdata/render/renderer.py index cb1215fd..79ee92ec 100644 --- a/src/c3nav/mapdata/render/renderer.py +++ b/src/c3nav/mapdata/render/renderer.py @@ -99,8 +99,8 @@ class MapRenderer: geometry = altitudearea.geometry.difference(crop_areas) if not_full_levels: geometry = geometry.filter(bottom=False) - engine.add_geometry(geometry, altitude=altitudearea.altitude, fill=FillAttribs(RENDER_COLOR_GROUND_FILL), - category='ground', item=i) + engine.add_geometry(geometry, altitude=altitudearea.altitude, + fill=FillAttribs(RENDER_COLOR_GROUND_FILL), category='ground', item=i) j = 0 for (order, color), areas in altitudearea.colors.items(): diff --git a/src/c3nav/mapdata/schemas/model_base.py b/src/c3nav/mapdata/schemas/model_base.py index 078c9cd5..3d12752d 100644 --- a/src/c3nav/mapdata/schemas/model_base.py +++ b/src/c3nav/mapdata/schemas/model_base.py @@ -16,7 +16,7 @@ def schema_description(schema): def schema_definition(schema): - return ("- **"+re.sub(r"([a-z])([A-Z])", r"\1 \2", schema.__name__.removesuffix("Schema")) +"**: " + + return ("- **"+re.sub(r"([a-z])([A-Z])", r"\1 \2", schema.__name__.removesuffix("Schema")) + "**: " + schema_description(schema).split("\n")[0].strip()) @@ -163,7 +163,7 @@ class SpecificLocationSchema(LocationSchema): Annotated[list[PositiveInt], APIField( title="array of location IDs", description="for categories that have `single` set to `false`. can be an empty array.", - example=[1,4,5], + example=[1, 4, 5], )], Annotated[PositiveInt, APIField( title="one location ID", diff --git a/src/c3nav/mapdata/utils/cache/package.py b/src/c3nav/mapdata/utils/cache/package.py index 1ae37390..4bdcd96a 100644 --- a/src/c3nav/mapdata/utils/cache/package.py +++ b/src/c3nav/mapdata/utils/cache/package.py @@ -108,7 +108,7 @@ class CachePackage: return cls(bounds, levels) @classmethod - def open(cls, package:Optional[str | os.PathLike] = None) -> Self: + def open(cls, package: Optional[str | os.PathLike] = None) -> Self: if package is None: from django.conf import settings package = settings.CACHE_ROOT / 'package.tar' diff --git a/src/c3nav/mapdata/utils/geometry.py b/src/c3nav/mapdata/utils/geometry.py index ec9dd510..5e210ab0 100644 --- a/src/c3nav/mapdata/utils/geometry.py +++ b/src/c3nav/mapdata/utils/geometry.py @@ -1,4 +1,3 @@ -import json import math from collections import deque, namedtuple from itertools import chain diff --git a/src/c3nav/routing/api/positioning.py b/src/c3nav/routing/api/positioning.py index 36f8aabd..7f9c06f6 100644 --- a/src/c3nav/routing/api/positioning.py +++ b/src/c3nav/routing/api/positioning.py @@ -37,7 +37,8 @@ class PositioningResult(Schema): response={200: PositioningResult, **auth_responses}) def get_position(request, parameters: LocateRequestSchema): try: - location = Locator.load().locate(parameters.dict()["peers"], permissions=AccessPermission.get_for_request(request)) + location = Locator.load().locate(parameters.dict()["peers"], + permissions=AccessPermission.get_for_request(request)) if location is not None: # todo: this will overload us probably, group these increment_cache_key('apistats__locate__%s' % location.pk) diff --git a/src/c3nav/routing/api/routing.py b/src/c3nav/routing/api/routing.py index e5747a19..60744284 100644 --- a/src/c3nav/routing/api/routing.py +++ b/src/c3nav/routing/api/routing.py @@ -306,4 +306,3 @@ def get_route_options_form(request): if option["name"].startswith("waytype_"): option["name"] = "way_types."+data["name"].removeprefix("waytype_") return data - diff --git a/src/c3nav/routing/locator.py b/src/c3nav/routing/locator.py index 272d9291..d85c6fe6 100644 --- a/src/c3nav/routing/locator.py +++ b/src/c3nav/routing/locator.py @@ -60,7 +60,7 @@ class LocatorPoint: class Locator: peers: list[LocatorPeer] = field(default_factory=list) peer_lookup: dict[BSSID, int] = field(default_factory=dict) - xyz: np.array = field(default_factory=(lambda : np.empty((0,)))) + xyz: np.array = field(default_factory=(lambda: np.empty((0,)))) spaces: dict[int, "LocatorSpace"] = field(default_factory=dict) @classmethod diff --git a/src/c3nav/tileserver/wsgi.py b/src/c3nav/tileserver/wsgi.py index eda4492c..989934e3 100644 --- a/src/c3nav/tileserver/wsgi.py +++ b/src/c3nav/tileserver/wsgi.py @@ -1,6 +1,5 @@ import base64 import logging -import multiprocessing import os import pickle import re