[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 --parallel \ my.browser.export \ my.orgmode \ my.endomondo \ my.github.ghexport \ my.hypothesis \ my.instapaper \ my.pocket \ my.reddit.rexport \ my.reddit.pushshift \ my.stackexchange.stexport \ my.tinder.android \ my.pinboard \ my.arbtt \ my.coding.commits \ my.goodreads \ my.pdfs \ my.smscalls \ my.location.gpslogger \ my.location.via_ip \ 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 \ -p my.tinder.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