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!
|
But it works for me so hopefully that would help you if you're struggling!
|
||||||
|
|
||||||
* Setting up
|
* 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~.
|
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.
|
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
|
** =with_my= helper script
|
||||||
Next, point =with_my= script to your private configuration:
|
Next, point =with_my= script to your private configuration:
|
||||||
|
|
||||||
|
|
||||||
#+begin_src bash
|
#+begin_src bash
|
||||||
cp with_my.example with_my
|
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
|
#+end_src
|
||||||
|
|
||||||
|
It's also convenient to put =with_my= somewhere in your system path so you can run it from anywhere.
|
||||||
|
|
||||||
** Dependencies
|
** Dependencies
|
||||||
Dependencies are different for specific modules you're planning to use, so it's hard to specify.
|
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.
|
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.
|
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
|
#+begin_src bash
|
||||||
with_my python3 -c 'import my.books.kobo as kobo; print(kobo.get_todos())'
|
with_my python3 -c 'import my.books.kobo as kobo; print(kobo.get_todos())'
|
||||||
#+end_src
|
#+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
|
* Linting
|
||||||
|
|
2
demo.py
2
demo.py
|
@ -37,7 +37,7 @@ def run():
|
||||||
|
|
||||||
my_configuration_root = abspath('my_repo/my_configuration_template')
|
my_configuration_root = abspath('my_repo/my_configuration_template')
|
||||||
# edit the config and set path to private configuration
|
# 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)
|
Path(with_my).write_text(my)
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
# TODO just eval setup file to populate paths etc?
|
# TODO just eval setup file to populate paths etc?
|
||||||
# TODO note sure if it would
|
# TODO note sure if it would
|
||||||
import my_configuration
|
|
||||||
|
|
||||||
|
|
||||||
# TODO maybe just import everything?
|
# TODO maybe just import everything?
|
||||||
# TODO how to make it mypy friendly? maybe defensive import? or mypy config? or interface file?
|
# 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
|
with_my python3 -c 'import my.books.kobo as kobo; print(kobo.get_todos())'
|
||||||
# it can also be directory containing my_configuration package with __init__.py inside etc.
|
|
||||||
MY_CONFIGURATION_DIR=
|
Feel free to use your preferred way of managing these packages otherwise.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
if [[ -n "${PYTHONPATH:=}" ]]; then
|
###### set this v
|
||||||
PREV=":$PYTHONPATH"
|
|
||||||
else
|
|
||||||
PREV=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
MY_DIR="$(dirname "$(readlink -f "$0")")"
|
# can be empty if you're not planning to use modules that use private configuration
|
||||||
export PYTHONPATH="$MY_CONFIGURATION_DIR:$MY_DIR""$PREV"
|
# 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