HPI/my/materialistic.py
2020-02-24 17:30:58 +01:00

56 lines
1.2 KiB
Python

"""
Module for Materialistic app for Hackernews
https://play.google.com/store/apps/details?id=io.github.hidroh.materialistic
"""
from datetime import datetime
from typing import Any, Dict, Iterator, NamedTuple
import pytz
import dataset # type: ignore
from .common import get_files
from mycfg import paths
Row = Dict[str, Any]
class Saved(NamedTuple):
row: Row
@property
def when(self) -> datetime:
ts = int(self.row['time']) / 1000
return datetime.fromtimestamp(ts, tz=pytz.utc)
@property
def uid(self) -> str:
return self.row['itemid']
@property
def url(self) -> str:
return self.row['url']
@property
def title(self) -> str:
return self.row['title']
@property
def hackernews_link(self) -> str:
return f'https://news.ycombinator.com/item?id={self.uid}'
def _last_export():
return max(get_files(paths.materialistic.export_path, glob='*.db'))
def raw() -> Iterator[Row]:
db = dataset.connect('sqlite:///' + str(_last_export))
st = db['saved']
# TODO wonder if it's 'save time'?
yield from st.all(order_by='time')
def saves() -> Iterator[Saved]:
yield from map(Saved, raw())