aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Schadt <kingdread@gmx.de>2025-12-28 21:04:44 +0100
committerDaniel Schadt <kingdread@gmx.de>2025-12-30 19:16:32 +0100
commitaeab3749f487755001d11c20c714cf6f6d82e53f (patch)
treed65da155a3686e6e093181d3c173bf270c9ed069
parenta6c74f3422a61cdb4814f6daf3b2289a5e8f47aa (diff)
downloadfietsboek-aeab3749f487755001d11c20c714cf6f6d82e53f.tar.gz
fietsboek-aeab3749f487755001d11c20c714cf6f6d82e53f.tar.bz2
fietsboek-aeab3749f487755001d11c20c714cf6f6d82e53f.zip
fix types
-rw-r--r--fietsboek/models/journey.py9
-rw-r--r--fietsboek/models/user.py9
-rw-r--r--fietsboek/views/browse.py2
3 files changed, 11 insertions, 9 deletions
diff --git a/fietsboek/models/journey.py b/fietsboek/models/journey.py
index f726efd..89bf0d2 100644
--- a/fietsboek/models/journey.py
+++ b/fietsboek/models/journey.py
@@ -138,15 +138,16 @@ class Journey(Base):
:param track_ids: The IDs of the tracks that should be in this journey.
"""
session = inspect(self).session
- stmt = delete(journey_track_assoc).where(journey_track_assoc.c.journey_id == self.id)
- session.execute(stmt)
+ assert session is not None, "Can only use set_track_ids() if journey is in a session"
+ del_stmt = delete(journey_track_assoc).where(journey_track_assoc.c.journey_id == self.id)
+ session.execute(del_stmt)
for index, track_id in enumerate(track_ids, 1):
- stmt = insert(journey_track_assoc).values(
+ ins_stmt = insert(journey_track_assoc).values(
journey_id=self.id,
track_id=track_id,
sort_index=index,
)
- session.execute(stmt)
+ session.execute(ins_stmt)
def path(self) -> geo.Path:
"""Returns the concatenated path of all contained tracks."""
diff --git a/fietsboek/models/user.py b/fietsboek/models/user.py
index 6d1a53e..45bc8d5 100644
--- a/fietsboek/models/user.py
+++ b/fietsboek/models/user.py
@@ -6,7 +6,7 @@ import hashlib
import secrets
import uuid
from functools import reduce
-from typing import TYPE_CHECKING, Optional, Self
+from typing import TYPE_CHECKING, Optional
from cryptography.exceptions import InvalidKey
from cryptography.hazmat.primitives.kdf.scrypt import Scrypt
@@ -34,13 +34,14 @@ from sqlalchemy.exc import NoResultFound
from sqlalchemy.orm import Mapped, Session, mapped_column, relationship, with_parent
from sqlalchemy.orm.attributes import flag_dirty
from sqlalchemy.orm.session import object_session
-from sqlalchemy.sql.expression import Selectable
+from sqlalchemy.sql.expression import CompoundSelect
from .meta import Base
if TYPE_CHECKING:
from .comment import Comment
from .track import Track, Upload
+ from .journey import Journey
class PasswordMismatch(Exception):
@@ -140,7 +141,7 @@ class User(Base):
comments: Mapped[list["Comment"]] = relationship(
"Comment", back_populates="author", cascade="all, delete-orphan"
)
- journeys: Mapped[list["models.Journey"]] = relationship(
+ journeys: Mapped[list["Journey"]] = relationship(
"Journey", back_populates="owner",
)
@@ -400,7 +401,7 @@ class User(Base):
return union(*queries)
@staticmethod
- def visible_journeys_query(user: Self | None = None) -> Selectable:
+ def visible_journeys_query(user: Optional["User"] = None) -> CompoundSelect:
# Late import to avoid cycles
# pylint: disable=import-outside-toplevel
from .journey import Journey, Visibility
diff --git a/fietsboek/views/browse.py b/fietsboek/views/browse.py
index 5f8bce4..e2742ad 100644
--- a/fietsboek/views/browse.py
+++ b/fietsboek/views/browse.py
@@ -509,7 +509,7 @@ def browse(request: Request) -> Response:
{
"id": track.id,
"title": track.title,
- "date": track.date.timestamp(),
+ "date": (track.date or datetime.datetime.fromtimestamp(0)).timestamp(),
"length": track.length,
}
for track in tracks