From 3dcf77ed53db5cd9fa81294b565a9f417376a5b1 Mon Sep 17 00:00:00 2001 From: haxscramper Date: Mon, 18 Mar 2024 23:56:42 +0400 Subject: [PATCH] py: bookmark import progress --- .../import_alxreader_bookmarks.py | 18 +++++++++++---- .../py_scriptutils/rich_utils.py | 22 +++++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/scripts/py_cli/py_cli/scratch_scripts/import_alxreader_bookmarks.py b/scripts/py_cli/py_cli/scratch_scripts/import_alxreader_bookmarks.py index 4b45f907b..602ba3211 100644 --- a/scripts/py_cli/py_cli/scratch_scripts/import_alxreader_bookmarks.py +++ b/scripts/py_cli/py_cli/scratch_scripts/import_alxreader_bookmarks.py @@ -17,6 +17,7 @@ from sqlalchemy.orm import declarative_base, sessionmaker, Session from sqlalchemy import Column, select from datetime import datetime +from py_scriptutils.rich_utils import render_rich_pprint CAT = Path(__file__).name @@ -37,10 +38,12 @@ class BookmarkRecord(BaseModel, extra="forbid"): book: str text: str dateadd: datetime - datelast: datetime + dateedit: datetime + Base = declarative_base() + class Bookmarks(Base): __tablename__ = "bookmarks" id = IdColumn() @@ -89,8 +92,9 @@ def get_bookmarks(session: Session) -> List[BookmarkRecord]: ) for item in session.execute(expr).mappings(): - log(CAT).info(item) - result.append(BookmarkRecord(**item)) + result.append( + BookmarkRecord.model_validate( + {k: item[k] for k in BookmarkRecord.model_fields})) return result @@ -109,7 +113,13 @@ def cli(ctx: click.Context, config: str, **kwargs) -> None: # node = parseCachedFile(opts., opts.cachedir) engine = open_sqlite(opts.infile) session = sessionmaker()(bind=engine) - get_bookmarks(session) + bookmarks = get_bookmarks(session) + + for it in bookmarks[:5]: + log(CAT).info("\n" + render_rich_pprint( + it, + max_string=80, + )) if __name__ == "__main__": diff --git a/scripts/py_scriptutils/py_scriptutils/rich_utils.py b/scripts/py_scriptutils/py_scriptutils/rich_utils.py index 5bb9c2e5a..edc7ba9c0 100644 --- a/scripts/py_scriptutils/py_scriptutils/rich_utils.py +++ b/scripts/py_scriptutils/py_scriptutils/rich_utils.py @@ -1,4 +1,5 @@ from rich.console import Console +from rich.pretty import pprint def render_rich(it) -> str: @@ -7,3 +8,24 @@ def render_rich(it) -> str: console.print(it) return capture.get() + + +def render_rich_pprint( + obj, + width: int = 80, + color: bool = True, + max_string: int | None = None, +) -> str: + + console = Console(record=True, width=width, force_terminal=color) + + pprint( + obj, + console=console, + indent_guides=False, + max_length=width, + max_string=max_string, + ) + + return console.export_text() +