#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

[tox]
envlist = py27,py36,py37,py38,py39
skipsdist = True
minversion = ${TOX_VERSION}
skip_missing_interpreters = True
skip_install = True

[testenv]
commands = flake8 --count --show-source \
  ${CMAKE_SOURCE_DIR}/python \
  ${CMAKE_SOURCE_DIR}/console \
  ${CMAKE_SOURCE_DIR}/docs \
  ${CMAKE_SOURCE_DIR}/tests \
  ${CMAKE_SOURCE_DIR}/tools \
  ${CMAKE_SOURCE_DIR}/tools/qdstat \
  ${CMAKE_SOURCE_DIR}/tools/qdmanage
deps = hacking>=1.1.0

[testenv:py27]
basepython = python2.7

[testenv:py36]
basepython = python3.6

[testenv:py37]
basepython = python3.7

[testenv:py38]
basepython = python3.8

[testenv:py39]
basepython = python3.9

[flake8]
# TODO(DISPATCH-1974) decrease the limit
max-line-length = 464

# TODO(DISPATCH-1974) re-enable all these warnings
ignore =
    # H238: old style class declaration, use new style (inherit from `object`)
    H238,
    # E704 multiple statements on one line (def)
    E704,
    # E241 multiple spaces after ','
    E241,
    # E203 whitespace before ':'
    E203,
    # H101: Use TODO(NAME)
    H101,
    # H202: assertRaises Exception too broad
    H202,
    # H401: docstring should not start with a space
    H401,
    # H403: multi line docstrings should end on a new line
    H403,
    # H404: multi line docstring should start without a leading new line
    H404,
    # H405: multi line docstring summary not separated with an empty line
    H405,
    # E265 block comment should start with '# '
    E265,
    # E266 too many leading '#' for block comment
    E266,
    # E221 multiple spaces before operator
    E221,
    # E222 multiple spaces after operator
    E222,
    # do not use bare 'except'
    E722,
    # H201: no 'except:' at least use 'except Exception:'
    H201,
    # H104: File contains nothing but comments
    H104,
    # H301: one import per line
    H301,
    # H306: imports not in alphabetical order
    H306,
    # F811 redefinition of unused 'Timeout' from line 29
    F811,
    # E712 comparison to True should be 'if cond is not True:' or 'if not cond:'
    # E712 comparison to False should be 'if cond is False:' or 'if not cond:'
    E712,
    # E402 module level import not at top of file
    E402,
    # may be undefined, or defined from star imports: datetime
    F405,
    # ambiguous variable name 'l'
    E741,
    # local variable 'int_nodes' is assigned to but never used
    F841,
    # TODO(DISPATCH-1974) decide which of these two warnings we want disabled
    #  _transport.py:908:21: W503 line break before binary operator
    #  _transport.py:907:56: W504 line break after binary operator
    W503,
    W504,

exclude =
    # TODO(DISPATCH-1974) generated by gRPC tooling
    friendship_pb2.py,
    friendship_pb2_grpc.py,

[pytest]
# https://github.com/pytest-dev/pytest/blob/main/src/_pytest/junitxml.py
# do not filter test file names
python_files = *.py
