aboutsummaryrefslogtreecommitdiffstats
path: root/python-packages/contract_demo/setup.py
diff options
context:
space:
mode:
authorF. Eugene Aumson <feuGeneA@users.noreply.github.com>2019-01-09 22:58:29 +0800
committerGitHub <noreply@github.com>2019-01-09 22:58:29 +0800
commitaa5af04447dfae24731557c6beead55bd8ff99a9 (patch)
tree1ffcc631ab078c88f85e2ab2b708f5d91b731cea /python-packages/contract_demo/setup.py
parent5b7eff217e9c8d09d64ff8721d7a16e1df8a7c58 (diff)
downloaddexon-sol-tools-aa5af04447dfae24731557c6beead55bd8ff99a9.tar
dexon-sol-tools-aa5af04447dfae24731557c6beead55bd8ff99a9.tar.gz
dexon-sol-tools-aa5af04447dfae24731557c6beead55bd8ff99a9.tar.bz2
dexon-sol-tools-aa5af04447dfae24731557c6beead55bd8ff99a9.tar.lz
dexon-sol-tools-aa5af04447dfae24731557c6beead55bd8ff99a9.tar.xz
dexon-sol-tools-aa5af04447dfae24731557c6beead55bd8ff99a9.tar.zst
dexon-sol-tools-aa5af04447dfae24731557c6beead55bd8ff99a9.zip
Python contract demo, with lots of refactoring (#1485)
* Refine Order for Web3 compat. & add conversions Changed some of the fields in the Order class so that it can be passed to our contracts via Web3. Added conversion utilities so that an Order can be easily converted to and from a JSON-compatible dict (specifically by encoding/decoding the `bytes` fields), to facilitate validation against the JSON schema. Also modified JSON order schema to accept integers in addition to stringified integers. * Fixes for json_schemas Has-types indicator file, py.typed, was not being included in package. Schemas were not being properly gathered into package installation. * Add test/demo of Exchange.getOrderInfo() * web3 bug workaround * Fix problem packaging contract artifacts * Move contract addresses to their own package * Move contract artifacts to their own package * Add scripts to install, test & lint all components * prettierignore files in local python dev env * Correct missing coverage analysis for sra_client * CI cache lint: don't save, re-use from test-python * tag hacks as hacks * correct merge mistake * remove local strip_0x() in favor of eth_utils * remove json schemas from old order_utils location * correct merge mistake * doctest json schemas via command-line, not code
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"),
+ }
+ },
+)