129 lines
4.0 KiB
Python
129 lines
4.0 KiB
Python
"""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"),
|
|
}
|
|
},
|
|
)
|