158 lines
5.9 KiB
INI
158 lines
5.9 KiB
INI
[tox]
|
|
minversion = 3.5
|
|
# https://github.com/tox-dev/tox/issues/20#issuecomment-247788333
|
|
# hack to prevent .tox from crapping to the project directory
|
|
toxworkdir={env:TOXWORKDIR_BASE:}{toxinidir}/.tox
|
|
|
|
[testenv]
|
|
passenv =
|
|
# useful for tests to know they are running under ci
|
|
CI CI_*
|
|
# respect user's cache dirs to prevent tox from crapping into project dir
|
|
MYPY_CACHE_DIR PYTHONPYCACHEPREFIX
|
|
|
|
|
|
# just the very core tests with minimal dependencies
|
|
[testenv:tests-core]
|
|
commands =
|
|
pip install -e .[testing]
|
|
{envpython} -m pytest \
|
|
tests/core.py \
|
|
tests/sqlite.py \
|
|
tests/get_files.py \
|
|
{posargs}
|
|
|
|
|
|
# todo maybe also have core tests and misc tests? since ideally want them without dependencies
|
|
[testenv:tests-all]
|
|
# deliberately set to nonexistent path to check the fallback logic
|
|
# TODO not sure if need it?
|
|
setenv = MY_CONFIG = nonexistent
|
|
commands =
|
|
pip install -e .[testing]
|
|
|
|
# installed to test my.core.serialize while using simplejson and not orjson
|
|
pip install simplejson
|
|
{envpython} -m pytest \
|
|
tests/serialize_simplejson.py \
|
|
{posargs}
|
|
|
|
pip install cachew
|
|
pip install orjson
|
|
|
|
hpi module install my.location.google
|
|
pip install ijson # optional dependency
|
|
|
|
hpi module install my.time.tz.via_location
|
|
|
|
hpi module install my.calendar.holidays
|
|
|
|
# my.body.weight dep
|
|
hpi module install my.orgmode
|
|
|
|
hpi module install my.coding.commits
|
|
|
|
hpi module install my.pdfs
|
|
|
|
hpi module install my.reddit.rexport
|
|
|
|
{envpython} -m pytest tests \
|
|
# ignore some tests which might take a while to run on ci..
|
|
--ignore tests/takeout.py \
|
|
--ignore tests/extra/polar.py \
|
|
# dont run simplejson compatibility test since orjson is now installed
|
|
--ignore tests/serialize_simplejson.py \
|
|
{posargs}
|
|
|
|
|
|
[testenv:demo]
|
|
commands =
|
|
pip install git+https://github.com/karlicoss/hypexport
|
|
{envpython} ./demo.py
|
|
|
|
|
|
[testenv:mypy-core]
|
|
allowlist_externals = cat
|
|
commands =
|
|
pip install -e .[testing,optional]
|
|
pip install orgparse # used it core.orgmode?
|
|
# todo add tests?
|
|
{envpython} -m mypy --install-types --non-interactive \
|
|
-p my.core \
|
|
--txt-report .coverage.mypy-core \
|
|
--html-report .coverage.mypy-core \
|
|
{posargs}
|
|
cat .coverage.mypy-core/index.txt
|
|
|
|
|
|
# specific modules that are known to be mypy compliant (to avoid false negatives)
|
|
# todo maybe split into separate jobs? need to add comment how to run
|
|
[testenv:mypy-misc]
|
|
commands =
|
|
pip install -e .[testing,optional]
|
|
|
|
hpi module install my.browser.export
|
|
hpi module install my.orgmode
|
|
hpi module install my.endomondo
|
|
hpi module install my.github.ghexport
|
|
hpi module install my.hypothesis
|
|
hpi module install my.instapaper
|
|
hpi module install my.pocket
|
|
hpi module install my.reddit.rexport
|
|
hpi module install my.reddit.pushshift
|
|
hpi module install my.stackexchange.stexport
|
|
hpi module install my.pinboard
|
|
hpi module install my.arbtt
|
|
hpi module install my.coding.commits
|
|
hpi module install my.goodreads
|
|
hpi module install my.pdfs
|
|
hpi module install my.smscalls
|
|
hpi module install my.location.gpslogger
|
|
hpi module install my.location.via_ip
|
|
hpi module install my.google.takeout.parser
|
|
|
|
# todo fuck. -p my.github isn't checking the subpackages?? wtf...
|
|
# guess it wants .pyi file??
|
|
{envpython} -m mypy --install-types --non-interactive \
|
|
-p my.browser \
|
|
-p my.endomondo \
|
|
-p my.github.ghexport \
|
|
-p my.github.gdpr \
|
|
-p my.hypothesis \
|
|
-p my.instapaper \
|
|
-p my.pocket \
|
|
-p my.smscalls \
|
|
-p my.reddit \
|
|
-p my.stackexchange.stexport \
|
|
-p my.pinboard \
|
|
-p my.body.exercise.cardio \
|
|
-p my.body.exercise.cross_trainer \
|
|
-p my.bluemaestro \
|
|
-p my.location.google \
|
|
-p my.location.google_takeout \
|
|
-p my.location.via_ip \
|
|
-p my.location.gpslogger \
|
|
-p my.ip.common \
|
|
-p my.time.tz.via_location \
|
|
-p my.calendar.holidays \
|
|
-p my.arbtt \
|
|
-p my.coding.commits \
|
|
-p my.goodreads \
|
|
-p my.pdfs \
|
|
-p my.bumble.android \
|
|
--txt-report .coverage.mypy-misc \
|
|
--html-report .coverage.mypy-misc \
|
|
{posargs}
|
|
# txt report is a bit more convenient to view on CI
|
|
|
|
# note: this comment doesn't seem relevant anymore, but keeping it in case the issue happens again
|
|
# > ugh ... need to reset HOME, otherwise user's site-packages are somehow leaking into mypy's path...
|
|
# > see https://github.com/python/mypy/blob/f6fb60ef69738cbfe2dfe56c747eca8f03735d8e/mypy/modulefinder.py#L487
|
|
# > this is particularly annoying when user's config is leaking and mypy isn't running against the repository config
|
|
|
|
|
|
# useful flags:
|
|
# * sitepackages = true to inherit user/globally installed packages (default false)
|
|
# * skip_install = true -- not sure when useful? (default false)
|
|
# * -e to run specific subenvironment
|
|
# * pass arguments with -- , e.g. `tox -e tests -- -k some_test_name` to only run one test with pytest
|