[tool:pytest] # do not litter the working directory cache_dir = /tmp/pytest_cache # slightly more verbose output console_output_style = count addopts = # show all skipped/failed/xfailed tests in the summary except passed -ra --strict-config # record coverage in these two packages --cov=beets --cov=beetsplug # save xml for coverage upload --cov-report=xml:.reports/coverage.xml # save html files for local dev use --cov-report=html:.reports/html # record coverage across logical branches --cov-branch # show which tests cover specific lines in the code (available in HTML) --cov-context=test [coverage:run] data_file = .reports/coverage/data branch = true relative_files = true [coverage:report] precision = 2 skip_empty = true show_missing = true exclude_lines = pragma: no cover if TYPE_CHECKING if typing.TYPE_CHECKING raise AssertionError raise NotImplementedError [coverage:html] show_contexts = true [flake8] min-version = 3.6 accept-encodings = utf-8 max-line-length = 88 docstring-convention = google # errors we ignore; see https://www.flake8rules.com/ for more info ignore = # pycodestyle errors # continuation line under-indented for hanging indent E121, # closing bracket does not match indentation of opening bracket's line E123, # continuation line over-indented for hanging indent E126, # multiple spaces after non-arithmetic operators (for vertical alignment) E241, # expected 2 blank lines after end of function or class E305, # do not assign a lambda expression, use a def E731, # do not use variables name 'I', 'O', or 'l' E741, # pycodestyle warnings: line breaks around binary operators W503, W504, # mccabe errors: function is too complex C901, # Exception subclasses should be named with an Error suffix N818, # Exclude rules for black compatibility E203, E704, per-file-ignores = ./beet:D ./docs/conf.py:D ./extra/release.py:D ./beetsplug/duplicates.py:D ./beetsplug/bpm.py:D ./beetsplug/autobpm.py:D ./beetsplug/convert.py:D ./beetsplug/info.py:D ./beetsplug/parentwork.py:D ./beetsplug/deezer.py:D ./beetsplug/smartplaylist.py:D ./beetsplug/absubmit.py:D ./beetsplug/subsonicupdate.py:D ./beetsplug/fromfilename.py:D ./beetsplug/mpdstats.py:D ./beetsplug/gmusic.py:D ./beetsplug/subsonicplaylist.py:D ./beetsplug/rewrite.py:D ./beetsplug/hook.py:D ./beetsplug/playlist.py:D ./beetsplug/ftintitle.py:D ./beetsplug/bpd/gstplayer.py:D ./beetsplug/bpd/__init__.py:D ./beetsplug/scrub.py:D ./beetsplug/sonosupdate.py:D ./beetsplug/embyupdate.py:D ./beetsplug/plexupdate.py:D ./beetsplug/mbsync.py:D ./beetsplug/lyrics.py:D ./beetsplug/inline.py:D ./beetsplug/freedesktop.py:D ./beetsplug/acousticbrainz.py:D ./beetsplug/beatport.py:D ./beetsplug/cue.py:D ./beetsplug/thumbnails.py:D ./beetsplug/random.py:D ./beetsplug/loadext.py:D ./beetsplug/replaygain.py:D ./beetsplug/export.py:D ./beetsplug/fuzzy.py:D ./beetsplug/importadded.py:D ./beetsplug/web/__init__.py:D ./beetsplug/bucket.py:D ./beetsplug/the.py:D ./beetsplug/ihate.py:D ./beetsplug/bench.py:D ./beetsplug/permissions.py:D ./beetsplug/spotify.py:D ./beetsplug/lastgenre/__init__.py:D ./beetsplug/limit.py:D ./beetsplug/mbcollection.py:D ./beetsplug/metasync/amarok.py:D ./beetsplug/metasync/itunes.py:D ./beetsplug/metasync/__init__.py:D ./beetsplug/importfeeds.py:D ./beetsplug/kodiupdate.py:D ./beetsplug/zero.py:D ./beetsplug/bpsync.py:D ./beetsplug/__init__.py:D ./beetsplug/edit.py:D ./beetsplug/types.py:D ./beetsplug/embedart.py:D ./beetsplug/mpdupdate.py:D ./beetsplug/ipfs.py:D ./beetsplug/discogs.py:D ./beetsplug/chroma.py:D ./beetsplug/fish.py:D ./beetsplug/missing.py:D ./beetsplug/fetchart.py:D ./beetsplug/mbsubmit.py:D ./beetsplug/filefilter.py:D ./beetsplug/badfiles.py:D ./beetsplug/play.py:D ./beetsplug/keyfinder.py:D ./beetsplug/unimported.py:D ./beetsplug/lastimport.py:D ./test/*:D ./setup.py:D ./beets/ui/__init__.py:D ./beets/ui/commands.py:D ./beets/autotag/mb.py:D ./beets/autotag/hooks.py:D ./beets/autotag/__init__.py:D ./beets/autotag/match.py:D ./beets/__main__.py:D ./beets/importer.py:D ./beets/plugins.py:D ./beets/test/*:D ./beets/util/bluelet.py:D ./beets/util/enumeration.py:D ./beets/util/artresizer.py:D ./beets/util/functemplate.py:D ./beets/util/confit.py:D ./beets/util/pipeline.py:D ./beets/util/hidden.py:D ./beets/util/__init__.py:D ./beets/library.py:D ./beets/random.py:D ./beets/art.py:D ./beets/logging.py:D ./beets/vfs.py:D ./beets/__init__.py:D ./beets/dbcore/query.py:D ./beets/dbcore/db.py:D ./beets/dbcore/__init__.py:D ./beets/dbcore/queryparse.py:D ./beets/dbcore/types.py:D ./beets/mediafile.py:D [mypy] files = beets,beetsplug,test,extra,docs allow_any_generics = false # FIXME: Would be better to actually type the libraries (if under our control), # or write our own stubs. For now, silence errors ignore_missing_imports = true