#!/usr/bin/env python from __future__ import unicode_literals import codecs from io import open import os import re import setuptools from setuptools import setup, find_packages import sys PY2 = sys.version_info[0] == 2 # Borrowed from pip at https://github.com/pypa/pip/blob/62c27dee45625e1b63d1e023b0656310f276e050/setup.py#L11-L15 here = os.path.abspath(os.path.dirname(__file__)) def read(*parts): # intentionally *not* adding an encoding option to open, See: # https://github.com/pypa/virtualenv/issues/201#issuecomment-3145690 with open(os.path.join(here, *parts), 'r') as fp: return fp.read() def get_version(): version_file = read('moto', '__init__.py') version_match = re.search(r'^__version__ = [\'"]([^\'"]*)[\'"]', version_file, re.MULTILINE) if version_match: return version_match.group(1) raise RuntimeError('Unable to find version string.') install_requires = [ "boto>=2.36.0", "boto3>=1.9.201", "botocore>=1.12.201", "requests>=2.5", "xmltodict", "six>1.9", "werkzeug", "pytz", "python-dateutil<3.0.0,>=2.1", "responses>=0.9.0", "MarkupSafe<2.0", # This is a Jinja2 dependency, 2.0.0a1 currently seems broken ] # # Avoid pins where they are not necessary. These pins were introduced by the # following commit for Py2 compatibility. They are not required for non-Py2 # users. # # https://github.com/mpenkov/moto/commit/00134d2df37bb4dcd5f447ef951d383bfec0903c # if PY2: install_requires += [ # # This is an indirect dependency. Version 5.0.0 claims to be for # Py2.6+, but it really isn't. # # https://github.com/jaraco/configparser/issues/51 # "configparser<5.0", "Jinja2<3.0.0,>=2.10.1", "mock<=3.0.5", "more-itertools==5.0.0", "setuptools==44.0.0", "zipp==0.6.0", ] else: install_requires += [ "Jinja2>=2.10.1", "mock", "more-itertools", "setuptools", "zipp", ] _dep_cryptography = "cryptography>=2.3.0" _dep_PyYAML = "PyYAML>=5.1" _dep_python_jose = "python-jose[cryptography]>=3.1.0,<4.0.0" _dep_python_jose_ecdsa_pin = "ecdsa<0.15" # https://github.com/spulec/moto/pull/3263#discussion_r477404984 _dep_docker = "docker>=2.5.1" _dep_jsondiff = "jsondiff>=1.1.2" _dep_aws_xray_sdk = "aws-xray-sdk!=0.96,>=0.93" _dep_idna = "idna<3,>=2.5" _dep_cfn_lint = "cfn-lint>=0.4.0" _dep_sshpubkeys_py2 = "sshpubkeys>=3.1.0,<4.0; python_version<'3'" _dep_sshpubkeys_py3 = "sshpubkeys>=3.1.0; python_version>'3'" all_extra_deps = [ _dep_cryptography, _dep_PyYAML, _dep_python_jose, _dep_python_jose_ecdsa_pin, _dep_docker, _dep_jsondiff, _dep_aws_xray_sdk, _dep_idna, _dep_cfn_lint, _dep_sshpubkeys_py2, _dep_sshpubkeys_py3, ] all_server_deps = all_extra_deps + ['flask'] # TODO: do we want to add ALL services here? # i.e. even those without extra dependencies. # Would be good for future-compatibility, I guess. extras_per_service = { 'acm': [_dep_cryptography], 'awslambda': [_dep_docker], 'batch': [_dep_docker], 'cloudformation': [_dep_PyYAML, _dep_cfn_lint], 'cognitoidp': [_dep_python_jose, _dep_python_jose_ecdsa_pin], "ec2": [_dep_cryptography, _dep_sshpubkeys_py2, _dep_sshpubkeys_py3], 'iam': [_dep_cryptography], 'iotdata': [_dep_jsondiff], 's3': [_dep_cryptography], 'xray': [_dep_aws_xray_sdk], } extras_require = { 'all': all_extra_deps, 'server': all_server_deps, } extras_require.update(extras_per_service) # https://hynek.me/articles/conditional-python-dependencies/ if int(setuptools.__version__.split(".", 1)[0]) < 18: if sys.version_info[0:2] < (3, 3): install_requires.append("backports.tempfile") else: extras_require[":python_version<'3.3'"] = ["backports.tempfile"] setup( name='moto', version=get_version(), description='A library that allows your python tests to easily' ' mock out the boto library', long_description=read('README.md'), long_description_content_type='text/markdown', author='Steve Pulec', author_email='spulec@gmail.com', url='https://github.com/spulec/moto', entry_points={ 'console_scripts': [ 'moto_server = moto.server:main', ], }, packages=find_packages(exclude=("tests", "tests.*")), # Addding all requirements for now until we cut a larger release install_requires=install_requires + all_extra_deps, extras_require=extras_require, include_package_data=True, license="Apache", test_suite="tests", classifiers=[ "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "License :: OSI Approved :: Apache Software License", "Topic :: Software Development :: Testing", ], project_urls={ "Documentation": "http://docs.getmoto.org/en/latest/", }, )