Migrate Python libraries to v3 (#2284)
* .gitignore migrations/0x_ganache_snapshot * .gitignore new-ish Python contract wrappers These should have been added back when we started generating these wrappers. * rm superfluous contract artifact in Python package All of the contract artifacts were removed from the Python package recently, because now they're copied from the monorepo/packages area as an automated build step. Somehow this one artifact slipped through the cracks. * Eliminate circular dependency This was preventing the Exchange wrapper from ever importing its validator! * Improve output of monorepo-level parallel script - Capture stderr (and have it included in stdout) so that it doesn't leak onto the console for commands that didn't actually fail. - Include all error output in the Exception object (eliminate print statement). * Silence new versions of linters Newer versions care about this stuff. Old versions didn't, and we don't either. * Support Rich Reverts via Web3.py middleware * Fix bug in generated wrappers' bytes handling `bytes.fromhex(bytes.decode('utf-8')` is just plain wrong. It would work for some cases, but is not working when trying to fill orders with the latest Exchange contract. * Migrate to Exchange v3 * Fix typo in DevUtils documentation * Include new contracts in docs * Re-enable Python checks in CI * Accept strings for bytes * Fix CircleCI build artifacts for gen'd python I swear the previous way was working before, but it wasn't working now, so this fixes it. * Accept a provider OR a Web3 object In various places. This allows the caller to install middleware (which in web3.py is installed on a Web3 object, not on a provider) before executing any RPC calls, which is important for the case where one wants to produce signatures locally before submitting to a remote node. * wrapper base: don't assume there are accounts * Eliminate some inline linter directives * make CHANGELOGs be REVERSE chronological * Update CHANGELOG entries and bump version numbers * @0x/contract-addresses: Put addr's in JSON, not TS This allows easier consumption by other languages. (Specifically, it eliminates the overhead of keeping the Python addresses package in sync with the TypeScript one.) * sra_client.py: incl. docker in `./setup.py clean` * sra_client.py: Migrate to protocol v3 Removed script that existed only to exclude runs of sra_client builds (parallel_without_sra_client). Now `parallel` is used by CI, re-including sra_client in CI checks. * abi-gen/templates/Py: clarify if/else logic In response to https://github.com/0xProject/0x-monorepo/pull/2284#discussion_r342200906 * sra_client.py: Update CHANGELOG and bump version * contract_addresses/setup.py: rm unnecessary rm * json_schemas.py: corrections to dev dependencies * In tests against deployment, also run doctests * contract_wrappers example: rm xtra Order attribute Thanks to @steveklebanoff for catching this. https://github.com/0xProject/0x-monorepo/pull/2284#pullrequestreview-312065368
This commit is contained in:
@@ -1,2 +1,2 @@
|
||||
"""0x Python API."""
|
||||
__import__("pkg_resources").declare_namespace(__name__)
|
||||
__import__("pkg_resources").declare_namespace(__name__) # type: ignore
|
||||
|
@@ -60,36 +60,38 @@ def assert_valid(data: Mapping, schema_id: str) -> None:
|
||||
Raises an exception if validation fails.
|
||||
|
||||
>>> from zero_ex.json_schemas import assert_valid
|
||||
>>> from zero_ex.contract_addresses import NETWORK_TO_ADDRESSES, NetworkId
|
||||
>>> from zero_ex.contract_wrappers.exchange.types import (
|
||||
... Order, order_to_jsdict
|
||||
... )
|
||||
>>> from zero_ex.order_utils import asset_data_utils
|
||||
>>> from zero_ex.contract_addresses import network_to_addresses, NetworkId
|
||||
>>> from eth_utils import remove_0x_prefix
|
||||
>>> import random
|
||||
>>> from datetime import datetime, timedelta
|
||||
>>> example_order = Order(
|
||||
... makerAddress='0x5409ed021d9299bf6814279a6a1411a7e866a631',
|
||||
... takerAddress='0x0000000000000000000000000000000000000000',
|
||||
... senderAddress='0x0000000000000000000000000000000000000000',
|
||||
... exchangeAddress='0x4f833a24e1f95d70f028921e27040ca56e09ab0b',
|
||||
... feeRecipientAddress='0x0000000000000000000000000000000000000000',
|
||||
... makerAssetData=asset_data_utils.encode_erc20(
|
||||
... NETWORK_TO_ADDRESSES[NetworkId.MAINNET].zrx_token
|
||||
... ),
|
||||
... takerAssetData=asset_data_utils.encode_erc20(
|
||||
... NETWORK_TO_ADDRESSES[NetworkId.MAINNET].ether_token
|
||||
... ),
|
||||
... salt=random.randint(1, 100000000000000000),
|
||||
... makerFee=0,
|
||||
... takerFee=0,
|
||||
... makerAssetAmount=1000000000000000000,
|
||||
... takerAssetAmount=500000000000000000000,
|
||||
... expirationTimeSeconds=round(
|
||||
... (datetime.utcnow() + timedelta(days=1)).timestamp()
|
||||
... )
|
||||
>>> assert_valid(
|
||||
... {'makerAddress': '0x5409ed021d9299bf6814279a6a1411a7e866a631',
|
||||
... 'takerAddress': '0x0000000000000000000000000000000000000000',
|
||||
... 'senderAddress': '0x0000000000000000000000000000000000000000',
|
||||
... 'exchangeAddress': '0x4f833a24e1f95d70f028921e27040ca56e09ab0b',
|
||||
... 'feeRecipientAddress': (
|
||||
... '0x0000000000000000000000000000000000000000'
|
||||
... ),
|
||||
... 'makerAssetData': (
|
||||
... network_to_addresses(NetworkId.MAINNET).zrx_token
|
||||
... ),
|
||||
... 'takerAssetData': (
|
||||
... network_to_addresses(NetworkId.MAINNET).ether_token
|
||||
... ),
|
||||
... 'salt': random.randint(1, 100000000000000000),
|
||||
... 'makerFee': 0,
|
||||
... 'makerFeeAssetData': '0x' + '00'*20,
|
||||
... 'takerFee': 0,
|
||||
... 'takerFeeAssetData': '0x' + '00'*20,
|
||||
... 'makerAssetAmount': 1000000000000000000,
|
||||
... 'takerAssetAmount': 500000000000000000000,
|
||||
... 'expirationTimeSeconds': round(
|
||||
... (datetime.utcnow() + timedelta(days=1)).timestamp()
|
||||
... ),
|
||||
... 'chainId': 50
|
||||
... },
|
||||
... "/orderSchema"
|
||||
... )
|
||||
>>> assert_valid(order_to_jsdict(example_order), "/orderSchema")
|
||||
"""
|
||||
_, schema = _LOCAL_RESOLVER.resolve(schema_id)
|
||||
jsonschema.validate(data, schema, resolver=_LOCAL_RESOLVER)
|
||||
|
Reference in New Issue
Block a user