saner with_my script + more examples in readme
This commit is contained in:
parent
2752bd6fd1
commit
1dda564a9e
4 changed files with 64 additions and 23 deletions
20
README.org
20
README.org
|
@ -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
|
||||
|
|
2
demo.py
2
demo.py
|
@ -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)
|
||||
#
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue