saner with_my script + more examples in readme

This commit is contained in:
Dima Gerasimov 2019-10-12 01:22:14 +01:00
parent 2752bd6fd1
commit 1dda564a9e
4 changed files with 64 additions and 23 deletions

View file

@ -8,7 +8,9 @@ This might not necessarily be convenient for you to use, perhaps it's more of a
But it works for me so hopefully that would help you if you're struggling!
* Setting up
** =my_configuration= package for private paths/repositores
** =my_configuration= package for private paths/repositores (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 ~my_configuration~.
You can see example in ~my_configuration_template~. You can copy it somewhere else and modify to your needs.
@ -55,24 +57,32 @@ That way you get easy imports (e.g. =import my_configuration.repos.hypexport.mod
** =with_my= helper script
Next, point =with_my= script to your private configuration:
#+begin_src bash
cp with_my.example with_my
vim with_my # specify path to your my_configuration:
vim with_my # specify path to your my_configuration (if you want to use it)
#+end_src
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 and then install missing packages via ~pip install --user~, should be fairly straighforward.
* Usage example
* 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
#+begin_src bash
with_my python3 -c 'import my.books.kobo as kobo; print(kobo.get_todos())'
#+end_src
Also read/run [[./demo.py][demo.py]] for a full demonstration of setting up Hypothesis.
- if you have [[https://github.com/karlicoss/orger][orger]] installed, you can use its Polar module to render all highlights as org-mode file as easy as:
#+begin_src bash
with_my orger/modules/polar.py --to polar.org
#+end_src
- read/run [[./demo.py][demo.py]] for a full demonstration of setting up Hypothesis (it uses public annotations data from Github)
* Linting

View file

@ -37,7 +37,7 @@ def run():
my_configuration_root = abspath('my_repo/my_configuration_template')
# edit the config and set path to private configuration
my = Path(with_my).read_text().replace('MY_CONFIGURATION_DIR=', 'MY_CONFIGURATION_DIR=' + str(my_configuration_root))
my = Path(with_my).read_text().replace("MY_CONFIGURATION_DIR = ''", "MY_CONFIGURATION_DIR = '{}'".format(my_configuration_root))
Path(with_my).write_text(my)
#

View file

@ -1,9 +1,12 @@
# TODO just eval setup file to populate paths etc?
# TODO note sure if it would
import my_configuration
# TODO maybe just import everything?
# TODO how to make it mypy friendly? maybe defensive import? or mypy config? or interface file?
paths = my_configuration.paths # type: ignore
try:
import my_configuration
paths = my_configuration.paths # type: ignore
except ImportError:
import warnings
warnings.warn("my_configuration package isn't found! That might result in issues")

View file

@ -1,20 +1,48 @@
#!/bin/bash -eu
#!/usr/bin/env python3
"""
This file is used for specifying pathes for 'my' package and potentially private configuration.
E.g. so you can run something like:
# set path to directory containing my_configuration.py file here
# it can also be directory containing my_configuration package with __init__.py inside etc.
MY_CONFIGURATION_DIR=
with_my python3 -c 'import my.books.kobo as kobo; print(kobo.get_todos())'
Feel free to use your preferred way of managing these packages otherwise.
"""
if [[ -n "${PYTHONPATH:=}" ]]; then
PREV=":$PYTHONPATH"
else
PREV=""
fi
###### set this v
MY_DIR="$(dirname "$(readlink -f "$0")")"
export PYTHONPATH="$MY_CONFIGURATION_DIR:$MY_DIR""$PREV"
# can be empty if you're not planning to use modules that use private configuration
# otherwise see readme to learn how to set it
MY_CONFIGURATION_DIR = ''
# TODO wonder why py.typed file in my_configuration didn't help?
export MYPYPATH="$MY_CONFIGURATION_DIR:$MY_DIR"
######
exec "$@"
# you shouldn't have the need to modify rest; but let me know if you miss anything!
from pathlib import Path
# directory where 'my' package is present
MY_DIR = str(Path(__file__).absolute().parent)
if __name__ == '__main__':
import os
import sys
def upd(envvar, path):
if len(path) == 0:
return
val = os.environ.get(envvar, '')
if val == '':
val = path
else:
val = val + ':' + path
os.environ[envvar] = val
# TODO wonder why py.typed file in my_configuration didn't help?
for v in ['MYPYPATH', 'PYTHONPATH']:
upd(v, MY_DIR)
upd(v, MY_CONFIGURATION_DIR)
rest = sys.argv[1:]
os.execvp(rest[0], rest)