get things working like tasks

This commit is contained in:
jpt 2025-05-03 14:06:02 -05:00
parent 5de9914341
commit 968ae1d18a
5 changed files with 25 additions and 12 deletions

View File

@ -1,4 +1,3 @@
from datetime import datetime
from peewee import fn from peewee import fn
from peewee import Case, Value from peewee import Case, Value
from ..db import db, Thing from ..db import db, Thing
@ -29,7 +28,9 @@ def update_thing(
**kwargs, **kwargs,
) -> Thing: ) -> Thing:
with db.atomic(): with db.atomic():
query = Thing.update(data=kwargs).where(Thing.id == item_id) thing = Thing.get_by_id(item_id)
new_data = thing.data | kwargs
query = Thing.update(data=new_data).where(Thing.id == item_id)
query.execute() query.execute()
thing = Thing.get_by_id(item_id) thing = Thing.get_by_id(item_id)
return thing return thing
@ -61,7 +62,7 @@ def _parse_sort_string(sort_string):
) )
sort_expressions.append(order_case.desc() if is_desc else order_case.asc()) sort_expressions.append(order_case.desc() if is_desc else order_case.asc())
elif field_type == "date": elif field_type == "date":
expr = fn.COALESCE(Thing.data[field_name], datetime(3000, 12, 31)) expr = fn.COALESCE(Thing.data[field_name], "3000-01-01")
sort_expressions.append(expr.desc() if is_desc else expr) sort_expressions.append(expr.desc() if is_desc else expr)
else: else:
field_expr = Thing.data[field_name] field_expr = Thing.data[field_name]

View File

@ -38,7 +38,7 @@ class Thing(BaseModel):
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
self.updated_at = datetime.now() self.updated_at = datetime.now()
return super(Task, self).save(*args, **kwargs) return super(Thing, self).save(*args, **kwargs)

View File

@ -69,7 +69,9 @@ class EnumColumnConfig(TableColumnConfig):
class DateColumnConfig(TableColumnConfig): class DateColumnConfig(TableColumnConfig):
def preprocess(self, val): def preprocess(self, val):
try: try:
return datetime.datetime.strptime(val, "%Y-%m-%d") # ensure it parses, return as string
datetime.datetime.strptime(val, "%Y-%m-%d")
return val
except ValueError: except ValueError:
raise NotifyValidationError("Invalid date format. Use YYYY-MM-DD") raise NotifyValidationError("Invalid date format. Use YYYY-MM-DD")

View File

@ -15,7 +15,7 @@ from ..utils import (
) )
from .keymodal import KeyModal from .keymodal import KeyModal
from .modals import ConfirmModal from .modals import ConfirmModal
from .columns import get_col_cls from .columns import get_col_cls, NotifyValidationError
@ -135,7 +135,11 @@ class TableEditor(App):
row = [] row = []
for col in self.table_config: for col in self.table_config:
# TODO: decide how this should work once things is done
try:
val = getattr(item, col.field) val = getattr(item, col.field)
except AttributeError:
val = item.data[col.field]
display_val = col.format_for_display(val) display_val = col.format_for_display(val)
row.append(display_val) row.append(display_val)

View File

@ -39,17 +39,23 @@ def get_color_enum(value: str, enum: dict[str, dict]) -> str:
def get_colored_date(date: datetime.date) -> str: def get_colored_date(date: datetime.date) -> str:
if not isinstance(date, datetime.date): if isinstance(date, datetime.date):
return "" as_date = date
as_str = date.strftime("%Y-%m-%d") as_str = date.strftime("%Y-%m-%d")
elif isinstance(date, str):
as_date = datetime.datetime.strptime(date, "%Y-%m-%d").date()
as_str = as_date.strftime("%Y-%m-%d")
else:
return "~bad~"
if as_str in SPECIAL_DATES_DISPLAY: if as_str in SPECIAL_DATES_DISPLAY:
return SPECIAL_DATES_DISPLAY[as_str] return SPECIAL_DATES_DISPLAY[as_str]
today = datetime.date.today() today = datetime.date.today()
if date.date() < today: if as_date < today:
return f"[#eeeeee on #dd1111]{as_str}[/]" return f"[#eeeeee on #dd1111]{as_str}[/]"
else: else:
# Calculate weeks into future # Calculate weeks into future
delta = date.date() - today delta = as_date - today
weeks = delta.days // 7 weeks = delta.days // 7
colors = [ colors = [