#!/usr/bin/env python3
#
# Copyright 2022 The Fuchsia Authors
#
# Licensed 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.

from setuptools import setup, find_packages

install_requires = [
    "backoff",
    "future>=0.16.0",  # Future needs to have a newer version that contains urllib.
    "mobly==1.12.0",
    "pyyaml>=5.1",
    "retry",

	'bokeh; python_version>="3.8"',
	'bokeh<2.5; python_version>="3.7" and python_version<"3.8"',
	'bokeh<2.4; python_version>="3.6" and python_version<"3.7"',
	'bokeh<1.5; python_version>="3" and python_version<"3.6"',

	# Android
    "requests",
    "Monsoon",
    "paramiko[ed25519]",
    "pylibftdi",
    "pyserial",
    "scapy",

    'scipy; python_version>="3.8"',
	'scipy<1.8; python_version>="3.7" and python_version<"3.8"',
	'scipy<1.6; python_version>="3.6" and python_version<"3.7"',
	'scipy<1.5; python_version>="3" and python_version<"3.6"',

    'numpy; python_version>="3.8"',
	'numpy<1.22; python_version>="3.7" and python_version<"3.8"',
	'numpy<1.20; python_version>="3.6" and python_version<"3.7"',
	'numpy<1.19; python_version>="3" and python_version<"3.6"',

	# Fuchsia
    "usbinfo",  # flash
    "zeroconf", # mdns
]

setup(name='antlion',
      version='0.1',
      description='On-device Fuchsia connectivity testing',
      license='Apache-2.0',
      packages=find_packages(
		where='src',
	  ),
	  package_dir={"": "src"},
      include_package_data=True,
      tests_require=['pytest'],
      install_requires=install_requires,
      extras_require={
          'dev': ['shiv', 'yapf', 'toml'],
          'digital_loggers_pdu': ['dlipower'],
      })
