aboutsummaryrefslogtreecommitdiffstats
path: root/python-packages/contract_demo/setup.py
diff options
context:
space:
mode:
Diffstat (limited to 'python-packages/contract_demo/setup.py')
-rwxr-xr-xpython-packages/contract_demo/setup.py146
1 files changed, 146 insertions, 0 deletions
diff --git a/python-packages/contract_demo/setup.py b/python-packages/contract_demo/setup.py
new file mode 100755
index 000000000..a7afbd30c
--- /dev/null
+++ b/python-packages/contract_demo/setup.py
@@ -0,0 +1,146 @@
+#!/usr/bin/env python
+
+"""setuptools module for 0x-contract-demo package."""
+
+import distutils.command.build_py
+from distutils.command.clean import clean
+import subprocess # nosec
+from shutil import rmtree
+from os import environ, path
+from sys import argv
+
+from setuptools import setup
+from setuptools.command.test import test as TestCommand
+
+
+class TestCommandExtension(TestCommand):
+ """Run pytest tests."""
+
+ def run_tests(self):
+ """Invoke pytest."""
+ import pytest
+
+ exit(pytest.main())
+
+
+class LintCommand(distutils.command.build_py.build_py):
+ """Custom setuptools command class for running linters."""
+
+ description = "Run linters"
+
+ def run(self):
+ """Run linter shell commands."""
+ lint_commands = [
+ # formatter:
+ "black --line-length 79 --check --diff test setup.py".split(),
+ # style guide checker (formerly pep8):
+ "pycodestyle test setup.py".split(),
+ # docstring style checker:
+ "pydocstyle test setup.py".split(),
+ # static type checker:
+ "mypy test setup.py".split(),
+ # security issue checker:
+ "bandit -r ./setup.py".split(),
+ # general linter:
+ "pylint test setup.py".split(),
+ # pylint takes relatively long to run, so it runs last, to enable
+ # fast failures.
+ ]
+
+ # tell mypy where to find interface stubs for 3rd party libs
+ environ["MYPYPATH"] = path.join(
+ path.dirname(path.realpath(argv[0])), "stubs"
+ )
+
+ 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(".mypy_cache", ignore_errors=True)
+ rmtree(".tox", ignore_errors=True)
+ rmtree(".pytest_cache", ignore_errors=True)
+
+
+class GanacheCommand(distutils.command.build_py.build_py):
+ """Custom command to publish to pypi.org."""
+
+ description = "Run ganache daemon to support tests."
+
+ def run(self):
+ """Run ganache."""
+ cmd_line = "docker run -d -p 8545:8545 0xorg/ganache-cli:2.2.2".split()
+ subprocess.call(cmd_line) # nosec
+
+
+class PublishDocsCommand(distutils.command.build_py.build_py):
+ """Custom command to publish docs to S3."""
+
+ description = (
+ "Publish docs to "
+ + "http://0x-contract-addresses-py.s3-website-us-east-1.amazonaws.com/"
+ )
+
+ def run(self):
+ """Run npm package `discharge` to build & upload docs."""
+ subprocess.check_call("discharge deploy".split()) # nosec
+
+
+setup(
+ name="0x-contract-demo",
+ version="1.0.0",
+ description="Demonstration of calling 0x contracts",
+ url=(
+ "https://github.com/0xProject/0x-monorepo/tree/development"
+ + "/python-packages/contract_demo"
+ ),
+ author="F. Eugene Aumson",
+ author_email="feuGeneA@users.noreply.github.com",
+ cmdclass={
+ "clean": CleanCommandExtension,
+ "lint": LintCommand,
+ "test": TestCommandExtension,
+ "ganache": GanacheCommand,
+ "publish_docs": PublishDocsCommand,
+ },
+ install_requires=[
+ "0x-contract-addresses",
+ "0x-contract-artifacts",
+ "0x-order-utils",
+ "0x-web3", # TEMPORARY! pending resolution of our web3.py PR#1147
+ "mypy_extensions",
+ ],
+ extras_require={
+ "dev": [
+ "bandit",
+ "black",
+ "coverage",
+ "coveralls",
+ "mypy",
+ "mypy_extensions",
+ "pycodestyle",
+ "pydocstyle",
+ "pylint",
+ "pytest",
+ "sphinx",
+ "tox",
+ ]
+ },
+ python_requires=">=3.6, <4",
+ license="Apache 2.0",
+ zip_safe=False, # required per mypy
+ command_options={
+ "build_sphinx": {
+ "source_dir": ("setup.py", "test"),
+ "build_dir": ("setup.py", "build/docs"),
+ }
+ },
+)