Improve documentation for some modules

This commit is contained in:
Dima Gerasimov 2020-05-17 21:56:58 +01:00
parent c07ea0a600
commit 2a9fd54c12
7 changed files with 198 additions and 66 deletions

View file

@ -1,26 +1,63 @@
"""
[[https://hypothes.is][Hypothes.is]] highlights and annotations
"""
from .common import get_files
from .error import Res, sort_res_by
from dataclasses import dataclass
from typing import Optional
import my.config.repos.hypexport.dal as hypexport
from my.config import hypothesis as config
from .core import Paths, PathIsh
###
from my.config import hypothesis as user_config
@dataclass
class hypothesis(user_config):
'''
Uses [[https://github.com/karlicoss/hypexport][hypexport]] outputs
'''
# paths[s]/glob to the exported JSON data
export_path: Paths
# path to a local clone of hypexport
# alternatively, you can put the repository (or a symlink) in $MY_CONFIG/repos/hypexport
hypexport : Optional[PathIsh] = None
@property
def dal_module(self):
rpath = self.hypexport
if rpath is not None:
from .cfg import set_repo
set_repo('hypexport', rpath)
import my.config.repos.hypexport.dal as dal
return dal
from .core.cfg import make_config
config = make_config(hypothesis)
from typing import TYPE_CHECKING
if TYPE_CHECKING:
import my.config.repos.hypexport.dal as dal
else:
dal = config.dal_module
############################
from typing import List
from .core.error import Res, sort_res_by
Highlight = dal.Highlight
Page = dal.Page
# TODO weird. not sure why e.g. from dal import Highlight doesn't work..
Highlight = hypexport.Highlight
Page = hypexport.Page
def _dal() -> dal.DAL:
from .core import get_files
sources = get_files(config.export_path)
return dal.DAL(sources)
# TODO eh. not sure if I should rename everything to dao/DAO or not...
def _dal() -> hypexport.DAL:
sources = get_files(config.export_path, '*.json')
return hypexport.DAL(sources)
def highlights() -> List[Res[Highlight]]:
@ -32,12 +69,6 @@ def pages() -> List[Res[Page]]:
return sort_res_by(_dal().pages(), key=lambda h: h.created)
# TODO move to side tests?
def test():
list(pages())
list(highlights())
def _main():
for page in get_pages():
print(page)

View file

@ -1,18 +1,58 @@
"""
Instapaper bookmarks, highlights and annotations
[[https://www.instapaper.com][Instapaper]] bookmarks, highlights and annotations
"""
from .common import get_files
from dataclasses import dataclass
from typing import Optional
from .core import Paths, PathIsh
from my.config import instapaper as user_config
from my.config import instapaper as config
import my.config.repos.instapexport.dal as dal
@dataclass
class instapaper(user_config):
'''
Uses [[https://github.com/karlicoss/instapexport][instapexport]] outputs.
'''
# path[s]/glob to the exported JSON data
export_path : Paths
# path to a local clone of instapexport
# alternatively, you can put the repository (or a symlink) in $MY_CONFIG/repos/instapexport
instapexport: Optional[PathIsh] = None
@property
def dal_module(self):
rpath = self.instapexport
if rpath is not None:
from .cfg import set_repo
set_repo('instapexport', rpath)
import my.config.repos.instapexport.dal as dal
return dal
from .core.cfg import make_config
config = make_config(instapaper)
from typing import TYPE_CHECKING
if TYPE_CHECKING:
import my.config.repos.instapexport.dal as dal
else:
dal = config.dal_module
############################
Highlight = dal.Highlight
Bookmark = dal.Bookmark
Bookmark = dal.Bookmark
Page = dal.Page
def inputs():
from typing import Sequence, Iterable
from pathlib import Path
from .core import get_files
def inputs() -> Sequence[Path]:
return get_files(config.export_path)
@ -20,9 +60,8 @@ def _dal() -> dal.DAL:
return dal.DAL(inputs())
def pages():
def pages() -> Iterable[Page]:
return _dal().pages()
get_pages = pages # todo also deprecate..
# TODO dunno, move this to private?
@ -30,3 +69,6 @@ def is_todo(hl: Highlight) -> bool:
note = hl.note or ''
note = note.lstrip().lower()
return note.startswith('todo')
get_pages = pages # todo also deprecate..

View file

@ -1,7 +1,5 @@
"""
Reddit data: saved items/comments/upvotes/etc.
Uses [[https://github.com/karlicoss/rexport][rexport]] output.
"""
from typing import Optional
@ -13,20 +11,26 @@ from dataclasses import dataclass
@dataclass
class reddit(uconfig):
export_path: Paths # path[s]/glob to the exported data
rexport : Optional[PathIsh] = None # path to a local clone of rexport
'''
Uses [[https://github.com/karlicoss/rexport][rexport]] output.
'''
# path[s]/glob to the exported JSON data
export_path: Paths
# path to a local clone of rexport
# alternatively, you can put the repository (or a symlink) in $MY_CONFIG/repos/rexport
rexport : Optional[PathIsh] = None
@property
def rexport_module(self) -> ModuleType:
# todo return Type[rexport]??
# todo ModuleIsh?
def dal_module(self) -> ModuleType:
rpath = self.rexport
if rpath is not None:
from my.cfg import set_repo
from .cfg import set_repo
set_repo('rexport', rpath)
import my.config.repos.rexport.dal as m
return m
import my.config.repos.rexport.dal as dal
return dal
from .core.cfg import make_config, Attrs
@ -43,15 +47,16 @@ config = make_config(reddit, migration=migration)
from typing import TYPE_CHECKING
if TYPE_CHECKING:
# TODO not sure what is the right way to handle this..
import my.config.repos.rexport.dal as rexport
import my.config.repos.rexport.dal as dal
else:
# TODO ugh. this would import too early
# but on the other hand we do want to bring the objects into the scope for easier imports, etc. ugh!
# ok, fair enough I suppose. It makes sense to configure something before using it. can always figure it out later..
# maybe, the config could dynamically detect change and reimport itself? dunno.
rexport = config.rexport_module
dal = config.dal_module
###
############################
from typing import List, Sequence, Mapping, Iterator
from .core.common import mcachew, get_files, LazyLogger, make_dict
@ -70,35 +75,35 @@ def inputs() -> Sequence[Path]:
return tuple(res)
Sid = rexport.Sid
Save = rexport.Save
Comment = rexport.Comment
Submission = rexport.Submission
Upvote = rexport.Upvote
Sid = dal.Sid
Save = dal.Save
Comment = dal.Comment
Submission = dal.Submission
Upvote = dal.Upvote
def dal() -> rexport.DAL:
return rexport.DAL(inputs())
def _dal() -> dal.DAL:
return dal.DAL(inputs())
@mcachew(hashf=lambda: inputs())
def saved() -> Iterator[Save]:
return dal().saved()
return _dal().saved()
@mcachew(hashf=lambda: inputs())
def comments() -> Iterator[Comment]:
return dal().comments()
return _dal().comments()
@mcachew(hashf=lambda: inputs())
def submissions() -> Iterator[Submission]:
return dal().submissions()
return _dal().submissions()
@mcachew(hashf=lambda: inputs())
def upvoted() -> Iterator[Upvote]:
return dal().upvoted()
return _dal().upvoted()
### the rest of the file is some elaborate attempt of restoring favorite/unfavorite times
@ -151,7 +156,7 @@ def _get_state(bfile: Path) -> Dict[Sid, SaveWithDt]:
bdt = _get_bdate(bfile)
saves = [SaveWithDt(save, bdt) for save in rexport.DAL([bfile]).saved()]
saves = [SaveWithDt(save, bdt) for save in dal.DAL([bfile]).saved()]
return make_dict(
sorted(saves, key=lambda p: p.save.created),
key=lambda s: s.save.sid,