emmental/emmental/db/years.py

55 lines
1.8 KiB
Python

# Copyright 2022 (c) Anna Schumaker.
"""A custom Gio.ListModel for managing individual years."""
import sqlite3
from gi.repository import GObject
from . import playlist
class Year(playlist.Playlist):
"""Our custom Year object."""
year = GObject.Property(type=int)
@property
def primary_key(self) -> int:
"""Get this year's primary key."""
return self.year
@GObject.Property(type=playlist.Playlist)
def parent(self) -> playlist.Playlist | None:
"""Get this Year's parent playlist."""
return self.table.sql.decades.lookup(self.year)
class Table(playlist.Table):
"""Our Year Table."""
def do_construct(self, **kwargs) -> Year:
"""Construct a new Year playlist."""
return Year(**kwargs)
def do_get_sort_key(self, year: Year) -> tuple:
"""Get the sort key for a specific year."""
return year.year
def do_sql_delete(self, year: Year) -> sqlite3.Cursor:
"""Delete a year."""
return self.sql("DELETE FROM years WHERE year=?", year.year)
def do_sql_glob(self, glob: str) -> sqlite3.Cursor:
"""Search for years matching the search text."""
return self.sql("SELECT year FROM years_view WHERE name GLOB ?", glob)
def do_sql_insert(self, year: int) -> sqlite3.Cursor | None:
"""Create a new Year playlist."""
if self.sql("INSERT INTO years (year) VALUES (?)", year):
return self.sql("SELECT * FROM years_view WHERE year=?", year)
def do_sql_select_all(self) -> sqlite3.Cursor:
"""Load Years from the database."""
return self.sql("SELECT * FROM years_view")
def do_sql_select_one(self, year: int) -> sqlite3.Cursor:
"""Look up a year."""
return self.sql("SELECT year FROM years WHERE year=?", year)