Use basedpyright refactor
This commit is contained in:
@@ -1 +1,3 @@
|
||||
from ._base import IndexedList
|
||||
|
||||
__all__ = ["IndexedList"]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user