From 9f35f0f69b3e766845c903d8946fc92eae82e8d3 Mon Sep 17 00:00:00 2001 From: Dima Gerasimov Date: Fri, 8 Nov 2019 00:23:39 +0000 Subject: [PATCH] move pocket provider from orger demo --- my/pocket.py | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 my/pocket.py diff --git a/my/pocket.py b/my/pocket.py new file mode 100644 index 0000000..a055448 --- /dev/null +++ b/my/pocket.py @@ -0,0 +1,48 @@ +from datetime import datetime +from pathlib import Path +from typing import NamedTuple, Sequence, Any + +class Highlight(NamedTuple): + json: Any + + @property + def text(self) -> str: + return self.json['quote'] + + @property + def created(self) -> datetime: + return datetime.strptime(self.json['created_at'], '%Y-%m-%d %H:%M:%S') + + +class Article(NamedTuple): + json: Any + + @property + def url(self) -> str: + return self.json['given_url'] + + @property + def title(self) -> str: + return self.json['given_title'] + + @property + def pocket_link(self) -> str: + return 'https://app.getpocket.com/read/' + self.json['item_id'] + + @property + def added(self) -> datetime: + return datetime.fromtimestamp(int(self.json['time_added'])) + + @property + def highlights(self) -> Sequence[Highlight]: + raw = self.json.get('annotations', []) + return list(map(Highlight, raw)) + + # TODO add tags? + + +# TODO integrate with my_configuration +def get_articles(json_path: Path) -> Sequence[Article]: + import json + raw = json.loads(json_path.read_text())['list'] + return list(map(Article, raw.values()))