80 lines
1.9 KiB
Python
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)
|