Use basedpyright refactor

This commit is contained in:
marc
2025-03-22 23:06:34 +01:00
parent ac54453b7f
commit 2f7c7c2429
41 changed files with 480 additions and 381 deletions

View File

@@ -1 +1,3 @@
from ._base import IndexedList
__all__ = ["IndexedList"]

View File

@@ -1,16 +1,19 @@
import dataclasses
from typing import Optional, TypeVar
from typing import TypeVar
from typing_extensions import override
@dataclasses.dataclass
class WithId:
id: Optional[int]
id: int | None
T = TypeVar("T", bound=WithId)
class IndexedList(list[T]):
@override
def append(self, _item: T) -> None:
if _item.id is None:
_item.id = max((i.id or 0 for i in self), default=0) + 1

View File

@@ -1,6 +1,6 @@
import dataclasses
from collections.abc import Iterator
from typing import Optional, Self
from typing import Self
from folkugat_web.model.temes import Tema
from folkugat_web.utils import groupby
@@ -8,17 +8,17 @@ from folkugat_web.utils import groupby
@dataclasses.dataclass
class PlaylistEntry:
id: Optional[int]
id: int | None
session_id: int
set_id: int
tema_id: Optional[int]
tema_id: int | None
@dataclasses.dataclass
class TemaInSet:
id: Optional[int]
tema_id: Optional[int]
tema: Optional[Tema]
id: int | None
tema_id: int | None
tema: Tema | None
def to_playlist_entry(self, session_id: int, set_id: int) -> PlaylistEntry:
return PlaylistEntry(
@@ -38,7 +38,7 @@ class Set:
id: int
temes: list[TemaInSet]
def to_playlist_entries(self, session_id) -> Iterator[PlaylistEntry]:
def to_playlist_entries(self, session_id: int) -> Iterator[PlaylistEntry]:
for tema_in_set in self.temes:
yield tema_in_set.to_playlist_entry(
session_id=session_id,

View File

@@ -1,4 +1,8 @@
import dataclasses
from collections.abc import Iterable
from typing import Self
NGrams = dict[int, list[str]]
@dataclasses.dataclass(order=True)
@@ -7,13 +11,14 @@ class SearchMatch:
ngram: str
@classmethod
def combine_matches(cls, matches):
def combine_matches(cls, matches: Iterable[Self]) -> Self:
ngrams, distances = zip(*((match.ngram, match.distance) for match in matches))
return cls(
ngram=', '.join(ngrams),
distance=sum(distances)/len(distances)
distance=sum(distances)/len(distances)
)
@dataclasses.dataclass
class QueryResult:
id: int

View File

@@ -1,7 +1,6 @@
import dataclasses
import datetime
import enum
from typing import Optional
DEFAULT_START_TIME = datetime.time(20, 30)
DEFAULT_END_TIME = datetime.time(22, 30)
@@ -9,13 +8,13 @@ DEFAULT_END_TIME = datetime.time(22, 30)
@dataclasses.dataclass
class SessionVenue:
name: Optional[str] = None
url: Optional[str] = None
name: str | None = None
url: str | None = None
@dataclasses.dataclass
class Session:
id: Optional[int] = None
id: int | None = None
date: datetime.date = dataclasses.field(default_factory=datetime.date.today)
start_time: datetime.time = DEFAULT_START_TIME
end_time: datetime.time = DEFAULT_END_TIME

View File

@@ -1,10 +1,9 @@
from __future__ import annotations
import dataclasses
import datetime
import enum
from abc import abstractmethod
from typing import Generic, Optional, Protocol, TypeVar
from typing import Generic, Protocol, TypeVar
class Comparable(Protocol):
@@ -30,12 +29,12 @@ T = TypeVar("T", bound=Comparable)
@dataclasses.dataclass
class Range(Generic[T]):
gt: Optional[T] = None
gte: Optional[T] = None
lt: Optional[T] = None
lte: Optional[T] = None
gt: T | None = None
gte: T | None = None
lt: T | None = None
lte: T | None = None
def lower_bound(self) -> Optional[tuple[T, bool]]:
def lower_bound(self) -> tuple[T, bool] | None:
if self.gt is None and self.gte is None:
return None
elif self.gt is not None and self.gte is not None:
@@ -47,7 +46,7 @@ class Range(Generic[T]):
elif self.gte is not None:
return self.gte, True
def upper_bound(self) -> Optional[tuple[T, bool]]:
def upper_bound(self) -> tuple[T, bool] | None:
if self.lt is None and self.lte is None:
return None
elif self.lt is not None and self.lte is not None:

View File

@@ -1,14 +1,14 @@
import dataclasses
import datetime
import enum
from typing import Optional
from typing import Self
from folkugat_web.model.search import NGrams
from folkugat_web.model.sessions import Session
from folkugat_web.services import ngrams
from ._base import IndexedList, WithId
NGrams = dict[int, list[str]]
class ContentType(enum.Enum):
PARTITURA = "partitura"
@@ -28,7 +28,7 @@ class LinkType(enum.Enum):
@dataclasses.dataclass
class Link(WithId):
content_type: ContentType
link_type: Optional[LinkType]
link_type: LinkType | None
url: str
title: str = ""
@@ -93,7 +93,7 @@ class Lyrics(WithId):
)
@classmethod
def from_dict(cls, d):
def from_dict(cls, d) -> Self:
return cls(
id=d["id"],
title=d["title"],
@@ -103,7 +103,7 @@ class Lyrics(WithId):
@dataclasses.dataclass
class Tema:
id: Optional[int] = None
id: int | None = None
# Info
title: str = ""
properties: IndexedList[Property] = dataclasses.field(default_factory=IndexedList)
@@ -116,6 +116,8 @@ class Tema:
# Other info
modification_date: datetime.datetime = dataclasses.field(default_factory=datetime.datetime.now)
creation_date: datetime.datetime = dataclasses.field(default_factory=datetime.datetime.now)
# Stats
played: list[Session] = dataclasses.field(default_factory=list)
def compute_ngrams(self):
self.ngrams = ngrams.get_text_ngrams(self.title, *self.alternatives)
@@ -124,5 +126,5 @@ class Tema:
self.compute_ngrams()
return self
def score(self) -> Optional[Link]:
def score(self) -> Link | None:
return next(filter(lambda l: l.content_type is ContentType.PARTITURA and l.url.startswith('/'), self.links), None)