# Additional pip requirements file for pywbem develop.
#
# The order of packages is significant, because pip processes them in the order
# of appearance.

# Make sure that the minimum versions required in this file are also the
# versions defined in minimum-constraints.txt.


# Direct dependencies:

# Unit test (imports into testcases):
unittest2>=1.1.0
# pytest 5.0.0 has removed support for Python < 3.5
# pytest 4.3.1 solves an issue on Python 3 with minimum package levels
pytest>=3.0.7,<3.3.0; python_version == '2.6'
pytest>=4.3.1,<5.0.0; python_version > '2.6' and python_version < '3.5'
pytest>=4.3.1; python_version >= '3.5'
# testfixtures 6.0.0 no longer supports py26 and fails on py26 with syntax error
testfixtures>=4.3.3,<6.0.0; python_version == '2.6'
testfixtures>=6.9.0; python_version > '2.6'
httpretty>=0.8.14,<0.9.1; python_version == '2.6'
httpretty>=0.9.5; python_version > '2.6'
# lxml 4.4.0 removed Python 3.4 support.
# lxml 4.4.1 added Python 3.8 support. However, while providing binary wheel
#   files, it did not register Python 3.8 as a supported version in the
#   package metadata on Pypi. A fix for that is expected for the next lxml
#   version after 4.4.2 (See https://bugs.launchpad.net/lxml/+bug/1854465
#   and https://github.com/lxml/lxml/pull/291). Before that, pip 19.3.1
#   is required to properly deal with this inconsistency (see issue #1980).
lxml>=4.2.4,<4.3.0; python_version == '2.6'
lxml>=4.2.4; python_version == '2.7'
lxml>=4.2.4,<4.4.0; python_version == '3.4'
lxml>=4.2.4; python_version >= '3.5' and python_version <= '3.7'
lxml>=4.4.1; python_version >= '3.8'
# Note: requests 2.19.1 has a security issue that is fixed in 2.20.0. However,
#       requests 2.20.0 has dropped support for Python 2.6.
requests>=2.19.1; python_version == '2.6'
requests>=2.20.1; python_version > '2.6'
decorator>=4.0.11
yamlordereddictloader>=0.4.0
funcsigs>=1.0.2

# Indirect dependencies that are needed due to version pinning
PyYAML==3.11; python_version == '2.6'  # yaml package, used by yamlordereddictloader
PyYAML>=3.13; python_version >= '2.7'  # yaml package, used by yamlordereddictloader

# Coverage reporting (no imports, invoked via coveralls script).
# Make sure the Python version matches the one used in .travis.yml.
coverage>=4.5.3; python_version == '3.8'
python-coveralls>=2.9.2; python_version == '3.8'

# Safety CI by pyup.io
safety>=1.8.4

# Unit test (no imports, invoked via py.test script):

pytest-cov>=2.4.0,<2.6.0; python_version == '2.6'
pytest-cov>=2.4.0; python_version >= '2.7'

# Tox
tox>=2.0.0

# Sphinx (no imports, invoked via sphinx-build script, issues on py26):
Sphinx>=1.7.6,<2.0.0; python_version >= '2.7' and python_version < '3.5'  # BSD
Sphinx>=1.7.6,<2.0.0; python_version >= '3.5'  # BSD
# TODO: On py3.5+, Sphinx currently fails, see issue
#       https://github.com/sphinx-doc/sphinx/issues/6246. Therefore, Sphinx has
#       been pinned to below 2.0.0 also for py3.5+.
sphinx-git>=10.1.1; python_version >= '2.7'
GitPython>=2.1.1; python_version >= '2.7'
sphinxcontrib-fulltoc>=1.2.0; python_version >= '2.7'

# PyLint (no imports, invoked via pylint script)
# Pylint requires astroid
# Pylint 1.x supports py2.7 and py3.4/5/6 but not py3.7+
# Pylint 2.x supports py3.4+
pylint>=1.6.4,<2.0.0; python_version == '2.7'
pylint>=2.2.2; python_version >= '3.4'
astroid>=1.4.9,<2.0.0; python_version == '2.7'
astroid>=2.1.0; python_version >= '3.4'

# Flake8 (no imports, invoked via flake8 script):
flake8>=2.6.2,<3.0.0; python_version == '2.6'
flake8>=3.7.0; python_version > '2.6'

# Twine (no imports, invoked via twine script):
twine>=1.8.1; python_version >= '2.7'

# Jupyter Notebook (no imports, invoked via jupyter script, some deps do not support py26):
# The jupyter package is not installed on Python 3.4 on Windows, because its
# (indirectly) dependent pywin32 package is not available on Pypi for
# Python 3.4.
jupyter>=1.0.0; python_version >= '2.7' and (python_version != '3.4' or sys_platform != 'win32')

# Pywin32 is used (at least?) by jupyter.
# Pywin32 version 226 needs to be excluded, see issue #1946.
# Pywin32 version 222 is inconsistent in its 32-bit/64-bit support on py37
# Pywin32 version 225+ provides wheel files for py38, but does not advertise
# py38 on Pypi. That causes pywin32==225 to fail but pywin32>=225 to work.
pywin32>=222,!=226; sys_platform == 'win32' and python_version <= '3.6'
pywin32>=223,!=226; sys_platform == 'win32' and python_version == '3.7'
# TODO: Re-enable once pywin32 fixes its Python version advertising on Pypi
#       (see issue #1975).
# pywin32>=225,!=226; sys_platform == 'win32' and python_version >= '3.8'

# The tornado package is used by ipykernel which is used by jupyter.
# Tornado 5.0.0 and 5.0.1 rejects installation if the Python ssl module
# does not have certain symbols required by Tornado. This issue exists for
# example with Python 2.7.6 on Ubuntu 14.04, but not with Python 2.7.5 on
# RHEL 7.4. This can be checked with:
#   python -c "import ssl; ssl.SSLContext; ssl.create_default_context; ssl.match_hostname"
# Other projects have the same issue:
#   https://github.com/floydhub/dl-docker/issues/84
# The following is a circumvention of this issue that nails the tornado
# version to below 5.0 on Python 2.
# TODO: Follow up on resolution of this issue.
tornado<5.0; python_version <= '2.7'

# Table output formatter used by the manual performance tests to display
# timing results
tabulate >= 0.8.3

# Performance profiling tools
pyinstrument >=3.0.1

# Pinning typed-ast to <1.4.0 for Python 3.4 because it started removing
# Python 3.4 support.
# Requiring typed-ast>=1.4.0 for Python 3.8 since it addresses compile errors
# with missing pgenheaders.h and duplicate definition of a struct.
typed-ast>=1.3.0,<1.4.0; python_version == '3.4'
typed-ast>=1.3.0; python_version > '3.4' and python_version < '3.8'
typed-ast>=1.4.0; python_version >= '3.8'

# Used for xml comparisons in unit test
FormEncode>=1.3.1

# Indirect dependencies are no longer specified here, but for testing with a
# minimum version, they are listed in the minimum-constraints.txt file.
