diff options
| -rw-r--r-- | fietsboek/alembic/versions/20251019_90b39fdf6e4b.py | 3 | ||||
| -rw-r--r-- | fietsboek/convert.py | 16 | ||||
| -rw-r--r-- | fietsboek/geo.py | 27 | ||||
| -rw-r--r-- | fietsboek/models/track.py | 28 | ||||
| -rw-r--r-- | fietsboek/trackmap.py | 3 | ||||
| -rw-r--r-- | fietsboek/transformers/__init__.py | 1 | ||||
| -rw-r--r-- | fietsboek/transformers/breaks.py | 2 | ||||
| -rw-r--r-- | fietsboek/transformers/elevation.py | 2 | ||||
| -rw-r--r-- | fietsboek/views/admin.py | 2 | ||||
| -rw-r--r-- | fietsboek/views/browse.py | 1 | ||||
| -rw-r--r-- | fietsboek/views/profile.py | 9 |
11 files changed, 43 insertions, 51 deletions
diff --git a/fietsboek/alembic/versions/20251019_90b39fdf6e4b.py b/fietsboek/alembic/versions/20251019_90b39fdf6e4b.py index 1213ebf..0192920 100644 --- a/fietsboek/alembic/versions/20251019_90b39fdf6e4b.py +++ b/fietsboek/alembic/versions/20251019_90b39fdf6e4b.py @@ -5,9 +5,8 @@ Revises: 2ebe1bf66430 Create Date: 2025-10-19 20:17:12.562653 """ -from alembic import op import sqlalchemy as sa - +from alembic import op # revision identifiers, used by Alembic. revision = '90b39fdf6e4b' diff --git a/fietsboek/convert.py b/fietsboek/convert.py index d0d1a19..9cd3297 100644 --- a/fietsboek/convert.py +++ b/fietsboek/convert.py @@ -1,4 +1,5 @@ """Conversion functions to convert between various recording formats.""" + import datetime from typing import Optional @@ -68,6 +69,7 @@ def from_gpx(data: bytes) -> Track: :param data: The input bytes. :return: The converted structure. """ + # pylint: disable=too-many-locals gpx = gpxpy.parse(data) points = [] start_time = None @@ -82,12 +84,14 @@ def from_gpx(data: bytes) -> Track: time_offset = (point.time - start_time).total_seconds() else: time_offset = 0 - points.append(geo.Point( - longitude=point.longitude, - latitude=point.latitude, - elevation=point.elevation or 0.0, - time_offset=time_offset, - )) + points.append( + geo.Point( + longitude=point.longitude, + latitude=point.latitude, + elevation=point.elevation or 0.0, + time_offset=time_offset, + ) + ) timezone = util.guess_gpx_timezone(gpx) date = gpx.time or gpx.get_time_bounds().start_time or datetime.datetime.now() diff --git a/fietsboek/geo.py b/fietsboek/geo.py index 51bfff0..c0a10e7 100644 --- a/fietsboek/geo.py +++ b/fietsboek/geo.py @@ -1,8 +1,8 @@ """This module implements GPS related functionality.""" + from dataclasses import dataclass from itertools import islice -from math import sqrt, sin, cos, radians - +from math import cos, radians, sin, sqrt # WGS-84 equatorial radius, also called the semi-major axis. # https://en.wikipedia.org/wiki/Earth_radius @@ -17,6 +17,7 @@ MOVING_THRESHOLD = 1.1 @dataclass class MovementData: """Movement statistics for a path.""" + # pylint: disable=too-many-instance-attributes duration: float = 0.0 @@ -47,6 +48,7 @@ class MovementData: @dataclass(slots=True) class Point: """A GPS point, represented as longitude/latitude/elevation.""" + longitude: float latitude: float elevation: float @@ -71,12 +73,9 @@ class Point: # and for most GPS point differences that we encounter it should be # enough. radicand = ( - r_1**2 + - r_2**2 - - 2 * r_1 * r_2 * ( - sin(t_1) * sin(t_2) * cos(p_1 - p_2) + - cos(t_1) * cos(t_2) - ) + r_1**2 + + r_2**2 + - 2 * r_1 * r_2 * (sin(t_1) * sin(t_2) * cos(p_1 - p_2) + cos(t_1) * cos(t_2)) ) if radicand < 0.0: return 0.0 @@ -101,23 +100,15 @@ class Point: # circle curvature, it allows us to take the elevation into account, # and for most GPS point differences that we encounter it should be # enough. - radicand = ( - 2 * r**2 * ( - 1 - - ( - sin(t_1) * sin(t_2) * cos(p_1 - p_2) + - cos(t_1) * cos(t_2) - ) - ) - ) + radicand = 2 * r**2 * (1 - (sin(t_1) * sin(t_2) * cos(p_1 - p_2) + cos(t_1) * cos(t_2))) if radicand < 0.0: return 0.0 return sqrt(radicand) - class Path: """A GPS path, that is a series of GPS points.""" + # pylint: disable=too-few-public-methods def __init__(self, points: list[Point]): diff --git a/fietsboek/models/track.py b/fietsboek/models/track.py index ed20a07..0b75ce6 100644 --- a/fietsboek/models/track.py +++ b/fietsboek/models/track.py @@ -12,6 +12,8 @@ example all cached data to be re-computed without interfering with the other meta information. """ +# pylint: disable=too-many-lines + import datetime import enum import gzip @@ -158,6 +160,7 @@ class Waypoint(Base): Waypoints can have a name and description set. They exist outside of the actual route. """ + # pylint: disable=too-few-public-methods __tablename__ = "waypoints" id = Column(Integer, primary_key=True) @@ -173,6 +176,7 @@ class Waypoint(Base): class TrackPoint(Base): """A track point represents a single GPS point along a path.""" + # pylint: disable=too-few-public-methods __tablename__ = "track_points" track_id = Column(Integer, ForeignKey("tracks.id"), primary_key=True) @@ -282,10 +286,10 @@ class Track(Base): owner: Mapped["models.User"] = relationship("User", back_populates="tracks") points: Mapped[list["TrackPoint"]] = relationship( - "TrackPoint", back_populates="track", cascade="all, delete-orphan", + "TrackPoint", back_populates="track", cascade="all, delete-orphan" ) waypoints: Mapped[list["Waypoint"]] = relationship( - "Waypoint", back_populates="track", cascade="all, delete-orphan", + "Waypoint", back_populates="track", cascade="all, delete-orphan" ) cache: Mapped[Optional["TrackCache"]] = relationship( "TrackCache", back_populates="track", uselist=False, cascade="all, delete-orphan" @@ -390,9 +394,9 @@ class Track(Base): :return: The GPS path of this track. """ - return geo.Path([ - point.to_geo_point() for point in sorted(self.points, key=lambda p: p.index) - ]) + return geo.Path( + [point.to_geo_point() for point in sorted(self.points, key=lambda p: p.index)] + ) def gpx_xml(self) -> bytes: """Returns an XML representation of this track. @@ -404,12 +408,14 @@ class Track(Base): gpx.name = self.title segment = gpxpy.gpx.GPXTrackSegment() for point in self.path().points: - segment.points.append(gpxpy.gpx.GPXTrackPoint( - latitude=point.latitude, - longitude=point.longitude, - elevation=point.elevation, - time=self.date + datetime.timedelta(seconds=point.time_offset), - )) + segment.points.append( + gpxpy.gpx.GPXTrackPoint( + latitude=point.latitude, + longitude=point.longitude, + elevation=point.elevation, + time=self.date + datetime.timedelta(seconds=point.time_offset), + ) + ) track = gpxpy.gpx.GPXTrack() track.segments.append(segment) gpx.tracks.append(track) diff --git a/fietsboek/trackmap.py b/fietsboek/trackmap.py index a850051..9854211 100644 --- a/fietsboek/trackmap.py +++ b/fietsboek/trackmap.py @@ -111,8 +111,7 @@ class TrackMapRenderer: def _draw_lines(self, image, zoom, start_x, start_y): coords = ( - to_web_mercator(point.latitude, point.longitude, zoom) - for point in self.track.points + to_web_mercator(point.latitude, point.longitude, zoom) for point in self.track.points ) coords = [(x - start_x, y - start_y) for x, y in coords] diff --git a/fietsboek/transformers/__init__.py b/fietsboek/transformers/__init__.py index d9c533b..097fbaf 100644 --- a/fietsboek/transformers/__init__.py +++ b/fietsboek/transformers/__init__.py @@ -13,7 +13,6 @@ from abc import ABC, abstractmethod from collections.abc import Mapping from typing import Literal, NamedTuple, TypeVar -from gpxpy.gpx import GPX from pydantic import BaseModel from pyramid.i18n import TranslationString from pyramid.request import Request diff --git a/fietsboek/transformers/breaks.py b/fietsboek/transformers/breaks.py index f1279a0..1072eef 100644 --- a/fietsboek/transformers/breaks.py +++ b/fietsboek/transformers/breaks.py @@ -4,8 +4,8 @@ import datetime from pyramid.i18n import TranslationString -from . import Parameters, Transformer from .. import geo +from . import Parameters, Transformer _ = TranslationString diff --git a/fietsboek/transformers/elevation.py b/fietsboek/transformers/elevation.py index 25b4a50..27683bb 100644 --- a/fietsboek/transformers/elevation.py +++ b/fietsboek/transformers/elevation.py @@ -5,8 +5,8 @@ from itertools import islice, zip_longest from pyramid.i18n import TranslationString -from . import Parameters, Transformer from .. import geo +from . import Parameters, Transformer _ = TranslationString diff --git a/fietsboek/views/admin.py b/fietsboek/views/admin.py index 14e4306..0442a32 100644 --- a/fietsboek/views/admin.py +++ b/fietsboek/views/admin.py @@ -49,7 +49,7 @@ def _get_size_breakdown(dbsession, data_manager): result = dbsession.execute(query).scalar_one() breakdown.track_data += result elif dialect == "postgresql": - query = text(f"""SELECT pg_relation_size('track_points');""") + query = text("""SELECT pg_relation_size('track_points');""") result = dbsession.execute(query).scalar_one() breakdown.track_data += result diff --git a/fietsboek/views/browse.py b/fietsboek/views/browse.py index c024828..68d1416 100644 --- a/fietsboek/views/browse.py +++ b/fietsboek/views/browse.py @@ -17,7 +17,6 @@ from sqlalchemy.orm import Session, aliased from sqlalchemy.sql import Select from .. import models, util -from ..data import DataManager from ..models.track import TrackType, TrackWithMetadata TRACKS_PER_PAGE = 20 diff --git a/fietsboek/views/profile.py b/fietsboek/views/profile.py index 544373b..d8ca386 100644 --- a/fietsboek/views/profile.py +++ b/fietsboek/views/profile.py @@ -14,7 +14,7 @@ from sqlalchemy import select from sqlalchemy.orm import aliased from .. import models, util -from ..data import DataManager, UserDataDir +from ..data import UserDataDir from ..models.track import TrackType, TrackWithMetadata from ..summaries import CumulativeStats, Summary @@ -132,7 +132,6 @@ def profile_calendar(request: Request) -> dict: data["user"] = request.context data["calendar_rows"] = calendar_rows( request.dbsession, - request.data_manager, request.context, date.year, date.month, @@ -161,7 +160,6 @@ def profile_calendar_ym(request: Request) -> dict: data["user"] = request.context data["calendar_rows"] = calendar_rows( request.dbsession, - request.data_manager, request.context, date.year, date.month, @@ -200,7 +198,6 @@ def cell_style(tracks: list[TrackWithMetadata]) -> str: def calendar_rows( dbsession: "sqlalchemy.orm.session.Session", - data_manager: DataManager, user: models.User, year: int, month: int, @@ -222,9 +219,7 @@ def calendar_rows( # Step 1: Retrieve all tracks query = user.all_tracks_query() query = select(aliased(models.Track, query)).where(query.c.type == TrackType.ORGANIC) - tracks = [ - TrackWithMetadata(track) for track in dbsession.execute(query).scalars() - ] + tracks = [TrackWithMetadata(track) for track in dbsession.execute(query).scalars()] # Step 2: Build the calendar days = [] |
