aboutsummaryrefslogblamecommitdiffstats
path: root/python-packages/order_utils/setup.py
blob: ba11fb3497f858411a4bb82651502457db8aba10 (plain) (tree)
































































                                                                              

                                                    




























































                                                                          
"""setuptools module for order_utils package."""

import subprocess  # nosec
from shutil import rmtree
from os import path, remove, walk

from distutils.command.clean import clean  # type: ignore
from setuptools import setup  # type: ignore
import setuptools.command.build_py  # type: ignore
from setuptools.command.test import test as TestCommand  # type: ignore


class TestCommandExtension(TestCommand):
    """Run pytest tests."""

    def run_tests(self):
        """Invoke pytest."""
        import pytest  # type: ignore

        pytest.main()


# pylint: disable=too-many-ancestors
class LintCommand(setuptools.command.build_py.build_py):
    """Custom setuptools command class for running linters."""

    def run(self):
        """Run linter shell commands."""
        lint_commands = [
            # formatter:
            "black --line-length 79 --check --diff src test setup.py".split(),
            # style guide checker (formerly pep8):
            "pycodestyle src test setup.py".split(),
            # docstring style checker:
            "pydocstyle src test setup.py".split(),
            # static type checker:
            "mypy src setup.py".split(),
            # security issue checker:
            "bandit -r src ./setup.py".split(),
            # general linter:
            "pylint src test setup.py".split(),
            # pylint takes relatively long to run, so it runs last, to enable
            # fast failures.
        ]
        for lint_command in lint_commands:
            print(
                "Running lint command `", " ".join(lint_command).strip(), "`"
            )
            subprocess.check_call(lint_command)  # nosec


class CleanCommandExtension(clean):
    """Custom command to do custom cleanup."""

    def run(self):
        """Run the regular clean, followed by our custom commands."""
        super().run()
        rmtree("build", ignore_errors=True)
        rmtree(".mypy_cache", ignore_errors=True)
        rmtree(".tox", ignore_errors=True)
        rmtree(".pytest_cache", ignore_errors=True)
        rmtree("src/order_utils.egg-info", ignore_errors=True)
        # delete all .pyc files
        for root, _, files in walk("."):
            for file in files:
                (_, extension) = path.splitext(file)
                if extension == '.pyc':
                    remove(path.join(root, file))


setup(
    name="order_utils",
    version="1.0.0",
    description="Order utilities for 0x applications",
    author="F. Eugene Aumson",
    cmdclass={
        "clean": CleanCommandExtension,
        "lint": LintCommand,
        "test": TestCommandExtension,
    },
    include_package_data=True,
    install_requires=["web3"],
    extras_require={
        "dev": [
            "bandit",
            "black",
            "coverage",
            "coveralls",
            "mypy",
            "pycodestyle",
            "pydocstyle",
            "pylint",
            "pytest",
            "sphinx",
            "tox",
        ]
    },
    python_requires=">=3.6, <4",
    package_data={"zero_ex.order_utils": ["py.typed"]},
    package_dir={"": "src"},
    license="Apache 2.0",
    keywords=(
        "ethereum cryptocurrency 0x decentralized blockchain dex exchange"
    ),
    packages=["zero_ex.order_utils"],
    classifiers=[
        "Development Status :: 1 - Planning",
        "Intended Audience :: Developers",
        "Intended Audience :: Financial and Insurance Industry",
        "License :: OSI Approved :: Apache Software License",
        "Natural Language :: English",
        "Operating System :: OS Independent",
        "Programming Language :: Python",
        "Programming Language :: Python :: 3 :: Only",
        "Programming Language :: Python :: 3.6",
        "Programming Language :: Python :: 3.7",
        "Topic :: Office/Business :: Financial",
        "Topic :: Software Development :: Libraries",
        "Topic :: Utilities",
    ],
    zip_safe=False,
    command_options={
        "build_sphinx": {
            "source_dir": ("setup.py", "src"),
            "build_dir": ("setup.py", "build/docs"),
        }
    },
)