HPI/my/instapaper.py
2020-02-26 16:32:03 +01:00

80 lines
1.9 KiB
Python

"""
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)