""" Instapaper bookmarks, highlights and annotations """ from datetime import datetime import json from pathlib import Path from typing import NamedTuple, Optional, List, Dict, Iterator, Tuple from collections import OrderedDict import pytz from .common import group_by_key, PathIsh, get_files # TODO need to make configurable? # TODO wonder if could autodetect from promnesia somehow.. # tbh, seems like venvs would be suited well for that.. import mycfg.repos.instapexport.dal as dal # TODO FIXME remove that stuff _export_path: Optional[Path] = None def configure(*, export_path: Optional[PathIsh]=None) -> None: if export_path is not None: global _export_path _export_path = Path(export_path) def _get_files(): export_path = _export_path if export_path is None: # fallback to mycfg from mycfg import paths export_path = paths.instapaper.export_path return get_files(export_path, glob='*.json') def get_dal() -> dal.DAL: return dal.DAL(_get_files()) # TODO meh, come up with better name... class HighlightWithBm(NamedTuple): highlight: dal.Highlight bookmark: dal.Bookmark def iter_highlights(**kwargs) -> Iterator[HighlightWithBm]: # meh... dl = get_dal() hls = dl.highlights() bms = dl.bookmarks() for _, h in hls.items(): yield HighlightWithBm(highlight=h, bookmark=bms[h.bid]) # def get_highlights(**kwargs) -> List[Highlight]: # return list(iter_highlights(**kwargs)) def get_pages(): return get_dal().pages() def get_todos() -> Iterator[HighlightWithBm]: def is_todo(hl: HighlightWithBm): h = hl.highlight note = h.note or '' note = note.lstrip().lower() return note.startswith('todo') return filter(is_todo, iter_highlights()) def test_get_todos(): for t in get_todos(): print(t) def main(): for h in get_todos(): print(h)