Human Programming Interface 🧑👽🤖
Find a file
2020-01-07 08:23:03 +00:00
.circleci Use tox 2019-12-19 20:14:26 +00:00
my Fix highlights retrieving 2020-01-07 08:23:03 +00:00
mycfg_template/mycfg Rename my_configuration to mycfg for brevity 2019-12-19 20:14:26 +00:00
.gitignore Merge remote-tracking branch 'rsq/master' 2019-11-27 12:10:02 +00:00
.projectile initial 2017-07-29 13:55:26 +01:00
demo.py fix hypothesis demo 2019-12-21 23:41:37 +00:00
LICENSE Create LICENSE 2019-09-17 23:07:53 +04:00
misc.org Rename my_configuration to mycfg for brevity 2019-12-19 20:14:26 +00:00
README.org update readme 2019-12-19 20:14:26 +00:00
setup.py Use tox 2019-12-19 20:14:26 +00:00
TODO.org update readme 2019-12-19 20:14:26 +00:00
tox.ini Use tox 2019-12-19 20:14:26 +00:00
with_my.example Use tox 2019-12-19 20:14:26 +00:00

https://circleci.com/gh/karlicoss/my/tree/master.svg?style=svg

Python interface into my life.

In short, this package provides programmatic access to my personal data and knowledge. Gory details of getting data, parsing, etc. are abstracted away and you get nice and familiar Python objects. It makes it easier to access, work with, analyze and combine data and leverage on existing libraries for data analysis like Pandas, Matplotlib, etc.

This particular setup might not necessarily be most convenient for you to use, perhaps it's more of a concept of how you can organize, access and use personal data. But it definitely works for me, so hopefully that would help you and serve as as source of inspiration.

The readme is more of a setup manual, I'm writing about motivation and specific usecases here. Short example to give you an idea: "which subreddits I find most interesting?"

  from my.reddit import get_saves
  from collections import Counter
  saves = get_saves()
  return Counter(s.subreddit for s in saves).most_common(3)
orgmode 46
AskReddit 31
QuantifiedSelf 30

Setting up

mycfg package for private paths/repositories (optional)

If you're not planning to use private configuration (some modules don't need it) you can skip straight to the next step. Still, I'd recommend you to read anyway.

First you need to tell the package where to look for your data and external repositories, which is done though a separate (private) package named mycfg.

You can see example in mycfg_template. You can copy it somewhere else and modify to your needs.

Some explanations:

d mycfg_template/
d mycfg_template/mycfg
f mycfg_template/mycfg/__init__.py
  ---
  class paths:
      """
      Feel free to remove this if you don't need it/add your own custom settings and use them
      """
      class hypothesis:
          export_path = '/tmp/my_demo/backups/hypothesis'
  ---
d mycfg_template/mycfg/repos
l mycfg_template/mycfg/repos/hypexport -> /tmp/my_demo/hypothesis_repo

As you can see, generally you specify fixed paths (e.g. to backup directory) in __init__.py. Feel free to add other files as well though to organize better, it's a real python package after all!

Some things (e.g. links to external packages like hypexport) are specified as normal symlinks in repos directory. That way you get easy imports (e.g. import mycfg.repos.hypexport.model) and proper IDE integration.

with_my helper script

Next, point with_my script to your private configuration:

cp with_my.example with_my
vim with_my # specify path to your mycfg (if you want to use it)

It's also convenient to put with_my somewhere in your system path so you can run it from anywhere.

Dependencies

Dependencies are different for specific modules you're planning to use, so it's hard to specify. Generally you can just try using the module and then install missing packages via pip install --user, should be fairly straightforward.

Usage examples

If you run your script with with_my wrapper, you'd have my in PYTHONPATH which gives you access to your data from within the script.

  • accessing Kobo books
  with_my python3 -c 'import my.books.kobo as kobo; print(kobo.get_todos())'
  • if you have orger installed, you can use its modules to get Org-mode representations of your data. For instance, rendering Polar highlights as org-mode file as easy as:
with_my orger/modules/polar.py --to polar.org
  • read/run demo.py for a full demonstration of setting up Hypothesis (it uses public annotations data from Github)

Linting

# see https://github.com/python/mypy/issues/1645 for --namespace-packages explanation
with_my mypy --namespace-packages my

or, set up as mypy.ini file:

[mypy]
mypy_path=/path/to/mycfg_dir