# All configuration for plugins and other utils is defined here.
# Read more about `setup.cfg`:
# https://docs.python.org/3/distutils/configfile.html


[flake8]
# flake8 configuration:
# https://flake8.pycqa.org/en/latest/user/configuration.html
format = wemake
show-source = True
statistics = False
doctests = True
enable-extensions = G

# darglint configuration:
# https://github.com/terrencepreilly/darglint
strictness = long
docstring-style = numpy

# Flake plugins:
max-line-length = 80
max-complexity = 6

# Excluding some directories:
exclude = .git,__pycache__,.venv,.eggs,*.egg

# Disable some pydocstyle checks:
ignore = D100, D104, D106, D401, X100, W504, RST303, RST304, DAR103, DAR203

# Docs: https://github.com/snoack/flake8-per-file-ignores
# You can completely or partially disable our custom checks,
# to do so you have to ignore `WPS` letters for all python files:
per-file-ignores =
  # Allow `__init__.py` with logic for configuration:
  server/settings/*.py: WPS226, WPS407, WPS412, WPS432
  # Allow to have magic numbers inside migrations and wrong module names:
  server/*/migrations/*.py: WPS102, WPS114, WPS432
  # Enable `assert` keyword and magic numbers for tests:
  tests/*.py: S101, WPS432


[isort]
# isort configuration:
# https://github.com/timothycrosley/isort/wiki/isort-Settings
include_trailing_comma = true
use_parentheses = true
# See https://github.com/timothycrosley/isort#multi-line-output-modes
multi_line_output = 3
line_length = 80


[tool:pytest]
# pytest configuration:
# https://docs.pytest.org/en/stable/customize.html

# pytest-django configuration:
# https://pytest-django.readthedocs.io/en/latest/
DJANGO_SETTINGS_MODULE = server.settings

# Timeout for tests, so they can not take longer
# than this amount of seconds.
# You should adjust this value to be as low as possible.
# Configuration:
# https://pypi.org/project/pytest-timeout/
timeout = 5

# Directories that are not visited by pytest collector:
norecursedirs = *.egg .eggs dist build docs .tox .git __pycache__

# You will need to measure your tests speed with `-n auto` and without it,
# so you can see whether it gives you any performance gain, or just gives
# you an overhead. See `docs/template/development-process.rst`.
addopts =
  --strict-markers
  --strict-config
  --doctest-modules
  --fail-on-template-vars
  --dup-fixtures
  # Output:
  --tb=short
  # Parallelism:
  # -n auto
  # --boxed
  # Coverage:
  --cov=server
  --cov=tests
  --cov-branch
  --cov-report=term-missing:skip-covered
  --cov-report=html
  --cov-fail-under=100


[coverage:run]
# Coverage configuration:
# https://coverage.readthedocs.io/en/latest/config.html
plugins =
    # Docs: https://github.com/nedbat/django_coverage_plugin
    django_coverage_plugin


[mypy]
# Mypy configuration:
# https://mypy.readthedocs.io/en/latest/config_file.html
allow_redefinition = False
check_untyped_defs = True
disallow_untyped_decorators = True
disallow_any_explicit = True
disallow_any_generics = True
disallow_untyped_calls = True
ignore_errors = False
ignore_missing_imports = True
implicit_reexport = False
local_partial_types = True
strict_optional = True
strict_equality = True
no_implicit_optional = True
warn_unused_ignores = True
warn_redundant_casts = True
warn_unused_configs = True
warn_unreachable = True
warn_no_return = True

plugins =
  mypy_django_plugin.main

[mypy.plugins.django-stubs]
django_settings_module = server.settings

[mypy-server.apps.*.migrations.*]
# Django migrations should not produce any errors:
ignore_errors = True

[mypy-server.apps.*.models]
# FIXME: remove this line, when `django-stubs` will stop
# using `Any` inside.
disallow_any_explicit = False


[doc8]
# doc8 configuration:
# https://github.com/pycqa/doc8
ignore-path = docs/_build
max-line-length = 80
sphinx = True
