Compare commits
No commits in common. "4ed319e22e844483578be1597e86816693e15a4d" and "fe5be1115bf5bd54f47acf3546d4dd34453576c0" have entirely different histories.
4ed319e22e
...
fe5be1115b
@ -1,12 +1,10 @@
|
||||
import typer
|
||||
import httpx
|
||||
import lxml.html
|
||||
import sqlite3
|
||||
from typing_extensions import Annotated
|
||||
from .db import initialize_db
|
||||
from .tui.things import run as things_tui
|
||||
|
||||
# from .tui.overview import run as overview_tui
|
||||
#from .tui.overview import run as overview_tui
|
||||
from .tui.recurring import run as recurring_tui
|
||||
from .controller.things import add_thing
|
||||
|
||||
@ -42,7 +40,6 @@ def new(
|
||||
add_thing(name, category, due)
|
||||
typer.echo("Created new thing!")
|
||||
|
||||
|
||||
@app.command()
|
||||
def table(
|
||||
view: Annotated[str, typer.Option("-v", "--view", help="saved view")] = "default",
|
||||
@ -63,23 +60,5 @@ def overview():
|
||||
overview_tui()
|
||||
|
||||
|
||||
@app.command()
|
||||
def backup(backup_path: str):
|
||||
"""
|
||||
Perform a SQLite backup using the .backup dot command
|
||||
"""
|
||||
from tt.db import db
|
||||
|
||||
conn = db.connection()
|
||||
|
||||
backup_conn = None
|
||||
try:
|
||||
backup_conn = sqlite3.connect(backup_path)
|
||||
conn.backup(backup_conn)
|
||||
finally:
|
||||
if backup_conn:
|
||||
backup_conn.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
app()
|
||||
|
@ -19,7 +19,6 @@ from xdg_base_dirs import xdg_config_home
|
||||
|
||||
_raw_config = None
|
||||
|
||||
|
||||
def _load_config():
|
||||
global _raw_config
|
||||
if not _raw_config:
|
||||
@ -36,7 +35,6 @@ def get_enum(name):
|
||||
|
||||
raise ValueError(f"no such enum! {name}")
|
||||
|
||||
|
||||
def get_view(name):
|
||||
for view in _load_config().get("views", []):
|
||||
if view["name"] == name:
|
||||
@ -44,7 +42,6 @@ def get_view(name):
|
||||
|
||||
raise ValueError(f"no such view! {name}")
|
||||
|
||||
|
||||
def get_column(name):
|
||||
if name in ("id", "type"):
|
||||
return {"field_name": name, "display_name": name, "read_only": True}
|
||||
@ -55,7 +52,6 @@ def get_column(name):
|
||||
|
||||
raise ValueError(f"no such column! {name}")
|
||||
|
||||
|
||||
# Valid statuses & projects are read dynamically from the user's config.
|
||||
STATUSES = get_enum("status")
|
||||
PROJECTS = get_enum("projects")
|
||||
|
@ -1,8 +1,10 @@
|
||||
|
||||
SPECIAL_DATES_PIECES = {
|
||||
"future": (3000, 1, 1),
|
||||
"unclassified": (1999, 1, 1),
|
||||
"future": (3000,1,1),
|
||||
"unclassified": (1999,1,1),
|
||||
}
|
||||
SPECIAL_DATES_DISPLAY = {
|
||||
"3000-01-01": "[#333333]future[/]",
|
||||
"1999-01-01": "[#cccccc]unclassified[/]",
|
||||
}
|
||||
|
||||
|
@ -17,7 +17,9 @@ def add_thing(
|
||||
Returns the created Thing instance.
|
||||
"""
|
||||
with db.atomic():
|
||||
thing = Thing.create(type=type, data=kwargs)
|
||||
thing = Thing.create(
|
||||
type=type, data=kwargs
|
||||
)
|
||||
return thing
|
||||
|
||||
|
||||
@ -78,7 +80,7 @@ def get_things(
|
||||
|
||||
if search_text:
|
||||
# TODO: which fields are searchable should by dynamic
|
||||
query = query.where(fn.Lower(Thing.data["text"]).contains(search_text.lower()))
|
||||
query = query.where(fn.Lower(Thing.data['text']).contains(search_text.lower()))
|
||||
|
||||
for param, val in filters.items():
|
||||
if val is not None:
|
||||
|
@ -5,7 +5,6 @@ from ..utils import (
|
||||
)
|
||||
from .modals import ChoiceModal, DateModal
|
||||
|
||||
|
||||
class NotifyValidationError(Exception):
|
||||
"""will notify and continue if raised"""
|
||||
|
||||
@ -83,6 +82,7 @@ class DateColumnConfig(TableColumnConfig):
|
||||
app.push_screen(DateModal(current_value), app.apply_change)
|
||||
|
||||
|
||||
|
||||
def get_col_cls(field_type):
|
||||
return {
|
||||
"text": TableColumnConfig,
|
||||
|
@ -18,6 +18,7 @@ from .modals import ConfirmModal
|
||||
from .columns import get_col_cls, NotifyValidationError
|
||||
|
||||
|
||||
|
||||
class TableEditor(App):
|
||||
CSS = """
|
||||
#footer {
|
||||
@ -224,10 +225,7 @@ class TableEditor(App):
|
||||
current_value = self.table.get_cell_at(
|
||||
(self.table.cursor_row, 1) # assumes col 1 is name
|
||||
)
|
||||
self.push_screen(
|
||||
ConfirmModal(f"delete [green]{current_value}[/]?"),
|
||||
self._delete_item_callback,
|
||||
)
|
||||
self.push_screen(ConfirmModal(f"delete [green]{current_value}[/]?"), self._delete_item_callback)
|
||||
|
||||
def _delete_item_callback(self, confirm):
|
||||
if confirm and self.table.cursor_column == 0:
|
||||
|
@ -92,25 +92,20 @@ class ChoiceModal(ModalScreen):
|
||||
+ get_color_enum(e.value, self._enum),
|
||||
classes="selected" if idx == self.sel_idx else "",
|
||||
)
|
||||
yield Label(
|
||||
"""(h/j/k/l) move (0-9) quick select
|
||||
(enter) confirm (esc) quit""",
|
||||
classes="hints",
|
||||
)
|
||||
yield Label("""(h/j/k/l) move (0-9) quick select
|
||||
(enter) confirm (esc) quit""", classes="hints")
|
||||
|
||||
def _move_cursor(self, dir):
|
||||
labels = self.query(Label)
|
||||
# reset old
|
||||
labels[self.sel_idx].update(
|
||||
f" {self.sel_idx} "
|
||||
+ get_color_enum(self.enum_by_idx[self.sel_idx], self._enum)
|
||||
f" {self.sel_idx} " + get_color_enum(self.enum_by_idx[self.sel_idx], self._enum)
|
||||
)
|
||||
# move cursor
|
||||
self.sel_idx = (self.sel_idx + dir) % len(self._enum)
|
||||
# reset new
|
||||
labels[self.sel_idx].update(
|
||||
f"> {self.sel_idx} "
|
||||
+ get_color_enum(self.enum_by_idx[self.sel_idx], self._enum)
|
||||
f"> {self.sel_idx} " + get_color_enum(self.enum_by_idx[self.sel_idx], self._enum)
|
||||
)
|
||||
|
||||
def action_cursor_down(self):
|
||||
|
@ -7,9 +7,7 @@ from ..controller.generators import (
|
||||
update_generator,
|
||||
generate_needed_things,
|
||||
)
|
||||
from .editor import (
|
||||
TableEditor,
|
||||
)
|
||||
from .editor import ( TableEditor, )
|
||||
|
||||
|
||||
class GenEditor(TableEditor):
|
||||
|
@ -8,6 +8,7 @@ from .editor import TableEditor
|
||||
|
||||
|
||||
class ThingTable(TableEditor):
|
||||
|
||||
# BINDINGS = [
|
||||
# # saved views
|
||||
# ("ctrl+s", "save_view", "save current view"),
|
||||
@ -66,7 +67,6 @@ class ThingTable(TableEditor):
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def run(default_view):
|
||||
app = ThingTable(default_view)
|
||||
app.run()
|
||||
|
Loading…
Reference in New Issue
Block a user