aboutsummaryrefslogtreecommitdiffstats
path: root/python-packages/json_schemas
diff options
context:
space:
mode:
Diffstat (limited to 'python-packages/json_schemas')
-rwxr-xr-xpython-packages/json_schemas/setup.py11
l---------python-packages/json_schemas/src/zero_ex/json_schemas/schemas1
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/address_schema.json5
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/asset_pairs_request_opts_schema.json8
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/block_param_schema.json11
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/block_range_schema.json8
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/call_data_schema.json27
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/ec_signature_parameter_schema.json5
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/ec_signature_schema.json14
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/eip712_typed_data_schema.json28
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/hex_schema.json5
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/index_filter_values_schema.json7
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/js_number_schema.json5
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/number_schema.json5
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_cancel_schema.json12
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_config_request_schema.json24
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_fill_or_kill_requests_schema.json12
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_fill_requests_schema.json12
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_hash_schema.json5
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_schema.json34
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_watcher_web_socket_request_schema.json52
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_watcher_web_socket_utf8_message_schema.json10
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/orderbook_request_schema.json9
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/orders_request_opts_schema.json19
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/orders_schema.json5
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/paged_request_opts_schema.json8
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/paginated_collection_schema.json10
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_asset_data_pairs_response_schema.json13
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_asset_data_pairs_schema.json12
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_asset_data_trade_info_schema.json11
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_error_response_schema.json21
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_fee_recipients_response_schema.json16
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_order_config_payload_schema.json24
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_order_config_response_schema.json11
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_order_schema.json9
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orderbook_response_schema.json9
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orders_channel_subscribe_payload_schema.json14
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orders_channel_subscribe_schema.json11
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orders_channel_update_response_schema.json11
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orders_response_schema.json13
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orders_schema.json5
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/request_opts_schema.json7
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/signed_order_schema.json12
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/signed_orders_schema.json5
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/token_schema.json11
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/tx_data_schema.json26
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/whole_number_schema.json12
-rw-r--r--python-packages/json_schemas/src/zero_ex/json_schemas/schemas/zero_ex_transaction_schema.json10
-rw-r--r--python-packages/json_schemas/test/test_doctest.py25
-rw-r--r--python-packages/json_schemas/test/test_json_schemas.py5
50 files changed, 616 insertions, 29 deletions
diff --git a/python-packages/json_schemas/setup.py b/python-packages/json_schemas/setup.py
index 7813f101f..389d14591 100755
--- a/python-packages/json_schemas/setup.py
+++ b/python-packages/json_schemas/setup.py
@@ -20,7 +20,7 @@ class TestCommandExtension(TestCommand):
"""Invoke pytest."""
import pytest
- exit(pytest.main())
+ exit(pytest.main(["--doctest-modules"]))
class LintCommand(distutils.command.build_py.build_py):
@@ -41,6 +41,15 @@ class LintCommand(distutils.command.build_py.build_py):
"mypy src test setup.py".split(),
# security issue checker:
"bandit -r src ./setup.py".split(),
+ # HACK: ensure json schemas don't differ from the authoritative
+ # copies: this is a hack. ideally we would symlink to the
+ # authoritative copies, but a problem with setuptools is preventing
+ # it from following symlinks when gathering package_data. see
+ # https://github.com/pypa/setuptools/issues/415.
+ (
+ "diff src/zero_ex/json_schemas/schemas"
+ + " ../../packages/json-schemas/schemas"
+ ).split(),
# general linter:
"pylint src test setup.py".split(),
# pylint takes relatively long to run, so it runs last, to enable
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas
deleted file mode 120000
index b8257372c..000000000
--- a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../packages/json-schemas/schemas/ \ No newline at end of file
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/address_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/address_schema.json
new file mode 100644
index 000000000..0dc02d331
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/address_schema.json
@@ -0,0 +1,5 @@
+{
+ "id": "/addressSchema",
+ "type": "string",
+ "pattern": "^0x[0-9a-f]{40}$"
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/asset_pairs_request_opts_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/asset_pairs_request_opts_schema.json
new file mode 100644
index 000000000..fad0bd371
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/asset_pairs_request_opts_schema.json
@@ -0,0 +1,8 @@
+{
+ "id": "/AssetPairsRequestOptsSchema",
+ "type": "object",
+ "properties": {
+ "assetDataA": { "$ref": "/hexSchema" },
+ "assetDataB": { "$ref": "/hexSchema" }
+ }
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/block_param_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/block_param_schema.json
new file mode 100644
index 000000000..ed4dd1e87
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/block_param_schema.json
@@ -0,0 +1,11 @@
+{
+ "id": "/blockParamSchema",
+ "oneOf": [
+ {
+ "type": "number"
+ },
+ {
+ "enum": ["latest", "earliest", "pending"]
+ }
+ ]
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/block_range_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/block_range_schema.json
new file mode 100644
index 000000000..b14294649
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/block_range_schema.json
@@ -0,0 +1,8 @@
+{
+ "id": "/blockRangeSchema",
+ "properties": {
+ "fromBlock": { "$ref": "/blockParamSchema" },
+ "toBlock": { "$ref": "/blockParamSchema" }
+ },
+ "type": "object"
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/call_data_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/call_data_schema.json
new file mode 100644
index 000000000..e5e6e3282
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/call_data_schema.json
@@ -0,0 +1,27 @@
+{
+ "id": "/callDataSchema",
+ "properties": {
+ "from": { "$ref": "/addressSchema" },
+ "to": { "$ref": "/addressSchema" },
+ "value": {
+ "oneOf": [{ "$ref": "/numberSchema" }, { "$ref": "/jsNumberSchema" }]
+ },
+ "gas": {
+ "oneOf": [{ "$ref": "/numberSchema" }, { "$ref": "/jsNumberSchema" }]
+ },
+ "gasPrice": {
+ "oneOf": [{ "$ref": "/numberSchema" }, { "$ref": "/jsNumberSchema" }]
+ },
+ "data": {
+ "type": "string",
+ "pattern": "^0x[0-9a-f]*$"
+ },
+ "nonce": {
+ "type": "number",
+ "minimum": 0
+ }
+ },
+ "required": [],
+ "type": "object",
+ "additionalProperties": false
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/ec_signature_parameter_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/ec_signature_parameter_schema.json
new file mode 100644
index 000000000..0c08ec240
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/ec_signature_parameter_schema.json
@@ -0,0 +1,5 @@
+{
+ "id": "/ecSignatureParameterSchema",
+ "type": "string",
+ "pattern": "^0[xX][0-9A-Fa-f]{64}$"
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/ec_signature_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/ec_signature_schema.json
new file mode 100644
index 000000000..52ccfe7bb
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/ec_signature_schema.json
@@ -0,0 +1,14 @@
+{
+ "id": "/ecSignatureSchema",
+ "properties": {
+ "v": {
+ "type": "number",
+ "minimum": 27,
+ "maximum": 28
+ },
+ "r": { "$ref": "/ecSignatureParameterSchema" },
+ "s": { "$ref": "/ecSignatureParameterSchema" }
+ },
+ "required": ["v", "r", "s"],
+ "type": "object"
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/eip712_typed_data_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/eip712_typed_data_schema.json
new file mode 100644
index 000000000..8efd6de44
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/eip712_typed_data_schema.json
@@ -0,0 +1,28 @@
+{
+ "id": "/eip712TypedDataSchema",
+ "type": "object",
+ "properties": {
+ "types": {
+ "type": "object",
+ "properties": {
+ "EIP712Domain": { "type": "array" }
+ },
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": { "type": "string" },
+ "type": { "type": "string" }
+ },
+ "required": ["name", "type"]
+ }
+ },
+ "required": ["EIP712Domain"]
+ },
+ "primaryType": { "type": "string" },
+ "domain": { "type": "object" },
+ "message": { "type": "object" }
+ },
+ "required": ["types", "primaryType", "domain", "message"]
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/hex_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/hex_schema.json
new file mode 100644
index 000000000..f37815d5b
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/hex_schema.json
@@ -0,0 +1,5 @@
+{
+ "id": "/hexSchema",
+ "type": "string",
+ "pattern": "^0x(([0-9a-f][0-9a-f])+)?$"
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/index_filter_values_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/index_filter_values_schema.json
new file mode 100644
index 000000000..bec00d79e
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/index_filter_values_schema.json
@@ -0,0 +1,7 @@
+{
+ "id": "/indexFilterValuesSchema",
+ "additionalProperties": {
+ "oneOf": [{ "$ref": "/numberSchema" }, { "$ref": "/addressSchema" }, { "$ref": "/orderHashSchema" }]
+ },
+ "type": "object"
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/js_number_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/js_number_schema.json
new file mode 100644
index 000000000..7df1c4747
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/js_number_schema.json
@@ -0,0 +1,5 @@
+{
+ "id": "/jsNumberSchema",
+ "type": "number",
+ "minimum": 0
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/number_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/number_schema.json
new file mode 100644
index 000000000..a48f3e8cf
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/number_schema.json
@@ -0,0 +1,5 @@
+{
+ "id": "/numberSchema",
+ "type": "string",
+ "pattern": "^\\d+(\\.\\d+)?$"
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_cancel_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_cancel_schema.json
new file mode 100644
index 000000000..8d0999941
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_cancel_schema.json
@@ -0,0 +1,12 @@
+{
+ "id": "/orderCancellationRequestsSchema",
+ "type": "array",
+ "items": {
+ "properties": {
+ "order": { "$ref": "/orderSchema" },
+ "takerTokenCancelAmount": { "$ref": "/wholeNumberSchema" }
+ },
+ "required": ["order", "takerTokenCancelAmount"],
+ "type": "object"
+ }
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_config_request_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_config_request_schema.json
new file mode 100644
index 000000000..19b043e7f
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_config_request_schema.json
@@ -0,0 +1,24 @@
+{
+ "id": "/OrderConfigRequestSchema",
+ "type": "object",
+ "properties": {
+ "makerAddress": { "$ref": "/addressSchema" },
+ "takerAddress": { "$ref": "/addressSchema" },
+ "makerAssetAmount": { "$ref": "/wholeNumberSchema" },
+ "takerAssetAmount": { "$ref": "/wholeNumberSchema" },
+ "makerAssetData": { "$ref": "/hexSchema" },
+ "takerAssetData": { "$ref": "/hexSchema" },
+ "exchangeAddress": { "$ref": "/addressSchema" },
+ "expirationTimeSeconds": { "$ref": "/wholeNumberSchema" }
+ },
+ "required": [
+ "makerAddress",
+ "takerAddress",
+ "makerAssetAmount",
+ "takerAssetAmount",
+ "makerAssetData",
+ "takerAssetData",
+ "exchangeAddress",
+ "expirationTimeSeconds"
+ ]
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_fill_or_kill_requests_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_fill_or_kill_requests_schema.json
new file mode 100644
index 000000000..73bbf20bb
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_fill_or_kill_requests_schema.json
@@ -0,0 +1,12 @@
+{
+ "id": "/orderFillOrKillRequestsSchema",
+ "type": "array",
+ "items": {
+ "properties": {
+ "signedOrder": { "$ref": "/signedOrderSchema" },
+ "fillTakerAmount": { "$ref": "/wholeNumberSchema" }
+ },
+ "required": ["signedOrder", "fillTakerAmount"],
+ "type": "object"
+ }
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_fill_requests_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_fill_requests_schema.json
new file mode 100644
index 000000000..d06fb19a2
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_fill_requests_schema.json
@@ -0,0 +1,12 @@
+{
+ "id": "/orderFillRequestsSchema",
+ "type": "array",
+ "items": {
+ "properties": {
+ "signedOrder": { "$ref": "/signedOrderSchema" },
+ "takerTokenFillAmount": { "$ref": "/wholeNumberSchema" }
+ },
+ "required": ["signedOrder", "takerTokenFillAmount"],
+ "type": "object"
+ }
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_hash_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_hash_schema.json
new file mode 100644
index 000000000..4a770579f
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_hash_schema.json
@@ -0,0 +1,5 @@
+{
+ "id": "/orderHashSchema",
+ "type": "string",
+ "pattern": "^0x[0-9a-fA-F]{64}$"
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_schema.json
new file mode 100644
index 000000000..c70b9e2dd
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_schema.json
@@ -0,0 +1,34 @@
+{
+ "id": "/orderSchema",
+ "properties": {
+ "makerAddress": { "$ref": "/addressSchema" },
+ "takerAddress": { "$ref": "/addressSchema" },
+ "makerFee": { "$ref": "/wholeNumberSchema" },
+ "takerFee": { "$ref": "/wholeNumberSchema" },
+ "senderAddress": { "$ref": "/addressSchema" },
+ "makerAssetAmount": { "$ref": "/wholeNumberSchema" },
+ "takerAssetAmount": { "$ref": "/wholeNumberSchema" },
+ "makerAssetData": { "$ref": "/hexSchema" },
+ "takerAssetData": { "$ref": "/hexSchema" },
+ "salt": { "$ref": "/wholeNumberSchema" },
+ "exchangeAddress": { "$ref": "/addressSchema" },
+ "feeRecipientAddress": { "$ref": "/addressSchema" },
+ "expirationTimeSeconds": { "$ref": "/wholeNumberSchema" }
+ },
+ "required": [
+ "makerAddress",
+ "takerAddress",
+ "makerFee",
+ "takerFee",
+ "senderAddress",
+ "makerAssetAmount",
+ "takerAssetAmount",
+ "makerAssetData",
+ "takerAssetData",
+ "salt",
+ "exchangeAddress",
+ "feeRecipientAddress",
+ "expirationTimeSeconds"
+ ],
+ "type": "object"
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_watcher_web_socket_request_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_watcher_web_socket_request_schema.json
new file mode 100644
index 000000000..b0c419f94
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_watcher_web_socket_request_schema.json
@@ -0,0 +1,52 @@
+{
+ "id": "/orderWatcherWebSocketRequestSchema",
+ "type": "object",
+ "definitions": {
+ "signedOrderParam": {
+ "type": "object",
+ "properties": {
+ "signedOrder": { "$ref": "/signedOrderSchema" }
+ },
+ "required": ["signedOrder"]
+ },
+ "orderHashParam": {
+ "type": "object",
+ "properties": {
+ "orderHash": { "$ref": "/hexSchema" }
+ },
+ "required": ["orderHash"]
+ }
+ },
+ "oneOf": [
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "number" },
+ "jsonrpc": { "type": "string" },
+ "method": { "enum": ["ADD_ORDER"] },
+ "params": { "$ref": "#/definitions/signedOrderParam" }
+ },
+ "required": ["id", "jsonrpc", "method", "params"]
+ },
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "number" },
+ "jsonrpc": { "type": "string" },
+ "method": { "enum": ["REMOVE_ORDER"] },
+ "params": { "$ref": "#/definitions/orderHashParam" }
+ },
+ "required": ["id", "jsonrpc", "method", "params"]
+ },
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "number" },
+ "jsonrpc": { "type": "string" },
+ "method": { "enum": ["GET_STATS"] },
+ "params": {}
+ },
+ "required": ["id", "jsonrpc", "method"]
+ }
+ ]
+} \ No newline at end of file
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_watcher_web_socket_utf8_message_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_watcher_web_socket_utf8_message_schema.json
new file mode 100644
index 000000000..154d6d754
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/order_watcher_web_socket_utf8_message_schema.json
@@ -0,0 +1,10 @@
+{
+ "id": "/orderWatcherWebSocketUtf8MessageSchema",
+ "properties": {
+ "utf8Data": { "type": "string" }
+ },
+ "required": [
+ "utf8Data"
+ ],
+ "type": "object"
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/orderbook_request_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/orderbook_request_schema.json
new file mode 100644
index 000000000..5ce6e8ab0
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/orderbook_request_schema.json
@@ -0,0 +1,9 @@
+{
+ "id": "/OrderbookRequestSchema",
+ "type": "object",
+ "properties": {
+ "baseAssetData": { "$ref": "/hexSchema" },
+ "quoteAssetData": { "$ref": "/hexSchema" }
+ },
+ "required": ["baseAssetData", "quoteAssetData"]
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/orders_request_opts_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/orders_request_opts_schema.json
new file mode 100644
index 000000000..4c1b9b4e9
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/orders_request_opts_schema.json
@@ -0,0 +1,19 @@
+{
+ "id": "/OrdersRequestOptsSchema",
+ "type": "object",
+ "properties": {
+ "makerAssetProxyId": { "$ref": "/hexSchema" },
+ "takerAssetProxyId": { "$ref": "/hexSchema" },
+ "makerAssetAddress": { "$ref": "/addressSchema" },
+ "takerAssetAddress": { "$ref": "/addressSchema" },
+ "exchangeAddress": { "$ref": "/addressSchema" },
+ "senderAddress": { "$ref": "/addressSchema" },
+ "makerAssetData": { "$ref": "/hexSchema" },
+ "takerAssetData": { "$ref": "/hexSchema" },
+ "traderAssetData": { "$ref": "/hexSchema" },
+ "makerAddress": { "$ref": "/addressSchema" },
+ "takerAddress": { "$ref": "/addressSchema" },
+ "traderAddress": { "$ref": "/addressSchema" },
+ "feeRecipientAddress": { "$ref": "/addressSchema" }
+ }
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/orders_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/orders_schema.json
new file mode 100644
index 000000000..1e1c6a875
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/orders_schema.json
@@ -0,0 +1,5 @@
+{
+ "id": "/ordersSchema",
+ "type": "array",
+ "items": { "$ref": "/orderSchema" }
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/paged_request_opts_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/paged_request_opts_schema.json
new file mode 100644
index 000000000..f143c28b0
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/paged_request_opts_schema.json
@@ -0,0 +1,8 @@
+{
+ "id": "/PagedRequestOptsSchema",
+ "type": "object",
+ "properties": {
+ "page": { "type": "number" },
+ "perPage": { "type": "number" }
+ }
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/paginated_collection_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/paginated_collection_schema.json
new file mode 100644
index 000000000..9dcedf5b4
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/paginated_collection_schema.json
@@ -0,0 +1,10 @@
+{
+ "id": "/paginatedCollectionSchema",
+ "type": "object",
+ "properties": {
+ "total": { "type": "number" },
+ "perPage": { "type": "number" },
+ "page": { "type": "number" }
+ },
+ "required": ["total", "perPage", "page"]
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_asset_data_pairs_response_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_asset_data_pairs_response_schema.json
new file mode 100644
index 000000000..d1150d3db
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_asset_data_pairs_response_schema.json
@@ -0,0 +1,13 @@
+{
+ "id": "/relayerApiAssetDataPairsResponseSchema",
+ "type": "object",
+ "allOf": [
+ { "$ref": "/paginatedCollectionSchema" },
+ {
+ "properties": {
+ "records": { "$ref": "/relayerApiAssetDataPairsSchema" }
+ },
+ "required": ["records"]
+ }
+ ]
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_asset_data_pairs_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_asset_data_pairs_schema.json
new file mode 100644
index 000000000..62d4745b8
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_asset_data_pairs_schema.json
@@ -0,0 +1,12 @@
+{
+ "id": "/relayerApiAssetDataPairsSchema",
+ "type": "array",
+ "items": {
+ "properties": {
+ "assetDataA": { "$ref": "/relayerApiAssetDataTradeInfoSchema" },
+ "assetDataB": { "$ref": "/relayerApiAssetDataTradeInfoSchema" }
+ },
+ "required": ["assetDataA", "assetDataB"],
+ "type": "object"
+ }
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_asset_data_trade_info_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_asset_data_trade_info_schema.json
new file mode 100644
index 000000000..e0f274c5d
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_asset_data_trade_info_schema.json
@@ -0,0 +1,11 @@
+{
+ "id": "/relayerApiAssetDataTradeInfoSchema",
+ "type": "object",
+ "properties": {
+ "assetData": { "$ref": "/hexSchema" },
+ "minAmount": { "$ref": "/wholeNumberSchema" },
+ "maxAmount": { "$ref": "/wholeNumberSchema" },
+ "precision": { "type": "number" }
+ },
+ "required": ["assetData"]
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_error_response_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_error_response_schema.json
new file mode 100644
index 000000000..be4659b0b
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_error_response_schema.json
@@ -0,0 +1,21 @@
+{
+ "id": "/relayerApiErrorResponseSchema",
+ "type": "object",
+ "properties": {
+ "code": { "type": "integer", "minimum": 100, "maximum": 103 },
+ "reason": { "type": "string" },
+ "validationErrors": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "field": { "type": "string" },
+ "code": { "type": "integer", "minimum": 1000, "maximum": 1006 },
+ "reason": { "type": "string" }
+ },
+ "required": ["field", "code", "reason"]
+ }
+ }
+ },
+ "required": ["code", "reason"]
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_fee_recipients_response_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_fee_recipients_response_schema.json
new file mode 100644
index 000000000..c73506dbb
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_fee_recipients_response_schema.json
@@ -0,0 +1,16 @@
+{
+ "id": "/relayerApiFeeRecipientsResponseSchema",
+ "type": "object",
+ "allOf": [
+ { "$ref": "/paginatedCollectionSchema" },
+ {
+ "properties": {
+ "records": {
+ "type": "array",
+ "items": { "$ref": "/addressSchema" }
+ }
+ },
+ "required": ["records"]
+ }
+ ]
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_order_config_payload_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_order_config_payload_schema.json
new file mode 100644
index 000000000..f4583fc62
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_order_config_payload_schema.json
@@ -0,0 +1,24 @@
+{
+ "id": "/relayerApiOrderConfigPayloadSchema",
+ "type": "object",
+ "properties": {
+ "makerAddress": { "$ref": "/addressSchema" },
+ "takerAddress": { "$ref": "/addressSchema" },
+ "makerAssetAmount": { "$ref": "/wholeNumberSchema" },
+ "takerAssetAmount": { "$ref": "/wholeNumberSchema" },
+ "makerAssetData": { "$ref": "/hexSchema" },
+ "takerAssetData": { "$ref": "/hexSchema" },
+ "exchangeAddress": { "$ref": "/addressSchema" },
+ "expirationTimeSeconds": { "$ref": "/wholeNumberSchema" }
+ },
+ "required": [
+ "makerAddress",
+ "takerAddress",
+ "makerAssetAmount",
+ "takerAssetAmount",
+ "makerAssetData",
+ "takerAssetData",
+ "exchangeAddress",
+ "expirationTimeSeconds"
+ ]
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_order_config_response_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_order_config_response_schema.json
new file mode 100644
index 000000000..8193861e1
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_order_config_response_schema.json
@@ -0,0 +1,11 @@
+{
+ "id": "/relayerApiOrderConfigResponseSchema",
+ "type": "object",
+ "properties": {
+ "makerFee": { "$ref": "/wholeNumberSchema" },
+ "takerFee": { "$ref": "/wholeNumberSchema" },
+ "feeRecipientAddress": { "$ref": "/addressSchema" },
+ "senderAddress": { "$ref": "/addressSchema" }
+ },
+ "required": ["makerFee", "takerFee", "feeRecipientAddress", "senderAddress"]
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_order_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_order_schema.json
new file mode 100644
index 000000000..e0f6539b9
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_order_schema.json
@@ -0,0 +1,9 @@
+{
+ "id": "/relayerApiOrderSchema",
+ "type": "object",
+ "properties": {
+ "order": { "$ref": "/orderSchema" },
+ "metaData": { "type": "object" }
+ },
+ "required": ["order", "metaData"]
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orderbook_response_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orderbook_response_schema.json
new file mode 100644
index 000000000..b44f2a740
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orderbook_response_schema.json
@@ -0,0 +1,9 @@
+{
+ "id": "/relayerApiOrderbookResponseSchema",
+ "type": "object",
+ "properties": {
+ "bids": { "$ref": "/relayerApiOrdersResponseSchema" },
+ "asks": { "$ref": "/relayerApiOrdersResponseSchema" }
+ },
+ "required": ["bids", "asks"]
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orders_channel_subscribe_payload_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orders_channel_subscribe_payload_schema.json
new file mode 100644
index 000000000..274ef1625
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orders_channel_subscribe_payload_schema.json
@@ -0,0 +1,14 @@
+{
+ "id": "/relayerApiOrdersChannelSubscribePayloadSchema",
+ "type": "object",
+ "properties": {
+ "makerAssetProxyId": { "$ref": "/hexSchema" },
+ "takerAssetProxyId": { "$ref": "/hexSchema" },
+ "networkId": { "type": "number" },
+ "makerAssetAddress": { "$ref": "/addressSchema" },
+ "takerAssetAddress": { "$ref": "/addressSchema" },
+ "makerAssetData": { "$ref": "/hexSchema" },
+ "takerAssetData": { "$ref": "/hexSchema" },
+ "traderAssetData": { "$ref": "/hexSchema" }
+ }
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orders_channel_subscribe_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orders_channel_subscribe_schema.json
new file mode 100644
index 000000000..29561d09f
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orders_channel_subscribe_schema.json
@@ -0,0 +1,11 @@
+{
+ "id": "/relayerApiOrdersChannelSubscribeSchema",
+ "type": "object",
+ "properties": {
+ "type": { "enum": ["subscribe"] },
+ "channel": { "enum": ["orders"] },
+ "requestId": { "type": "string" },
+ "payload": { "$ref": "/relayerApiOrdersChannelSubscribePayloadSchema" }
+ },
+ "required": ["type", "channel", "requestId"]
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orders_channel_update_response_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orders_channel_update_response_schema.json
new file mode 100644
index 000000000..239e7c586
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orders_channel_update_response_schema.json
@@ -0,0 +1,11 @@
+{
+ "id": "/relayerApiOrdersChannelUpdateSchema",
+ "type": "object",
+ "properties": {
+ "type": { "enum": ["update"] },
+ "channel": { "enum": ["orders"] },
+ "requestId": { "type": "string" },
+ "payload": { "$ref": "/relayerApiOrdersSchema" }
+ },
+ "required": ["type", "channel", "requestId"]
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orders_response_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orders_response_schema.json
new file mode 100644
index 000000000..a5023a3fc
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orders_response_schema.json
@@ -0,0 +1,13 @@
+{
+ "id": "/relayerApiOrdersResponseSchema",
+ "type": "object",
+ "allOf": [
+ { "$ref": "/paginatedCollectionSchema" },
+ {
+ "properties": {
+ "records": { "$ref": "/relayerApiOrdersSchema" }
+ },
+ "required": ["records"]
+ }
+ ]
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orders_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orders_schema.json
new file mode 100644
index 000000000..84e75cd04
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/relayer_api_orders_schema.json
@@ -0,0 +1,5 @@
+{
+ "id": "/relayerApiOrdersSchema",
+ "type": "array",
+ "items": { "$ref": "/relayerApiOrderSchema" }
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/request_opts_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/request_opts_schema.json
new file mode 100644
index 000000000..2206f5016
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/request_opts_schema.json
@@ -0,0 +1,7 @@
+{
+ "id": "/RequestOptsSchema",
+ "type": "object",
+ "properties": {
+ "networkId": { "type": "number" }
+ }
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/signed_order_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/signed_order_schema.json
new file mode 100644
index 000000000..137ae4a24
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/signed_order_schema.json
@@ -0,0 +1,12 @@
+{
+ "id": "/signedOrderSchema",
+ "allOf": [
+ { "$ref": "/orderSchema" },
+ {
+ "properties": {
+ "signature": { "$ref": "/hexSchema" }
+ },
+ "required": ["signature"]
+ }
+ ]
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/signed_orders_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/signed_orders_schema.json
new file mode 100644
index 000000000..e7c3a0b6c
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/signed_orders_schema.json
@@ -0,0 +1,5 @@
+{
+ "id": "/signedOrdersSchema",
+ "type": "array",
+ "items": { "$ref": "/signedOrderSchema" }
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/token_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/token_schema.json
new file mode 100644
index 000000000..31e41c4b8
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/token_schema.json
@@ -0,0 +1,11 @@
+{
+ "id": "/tokenSchema",
+ "properties": {
+ "name": { "type": "string" },
+ "symbol": { "type": "string" },
+ "decimals": { "type": "number" },
+ "address": { "$ref": "/addressSchema" }
+ },
+ "required": ["name", "symbol", "decimals", "address"],
+ "type": "object"
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/tx_data_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/tx_data_schema.json
new file mode 100644
index 000000000..8c3daba4e
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/tx_data_schema.json
@@ -0,0 +1,26 @@
+{
+ "id": "/txDataSchema",
+ "properties": {
+ "from": { "$ref": "/addressSchema" },
+ "to": { "$ref": "/addressSchema" },
+ "value": {
+ "oneOf": [{ "$ref": "/numberSchema" }, { "$ref": "/jsNumberSchema" }]
+ },
+ "gas": {
+ "oneOf": [{ "$ref": "/numberSchema" }, { "$ref": "/jsNumberSchema" }]
+ },
+ "gasPrice": {
+ "oneOf": [{ "$ref": "/numberSchema" }, { "$ref": "/jsNumberSchema" }]
+ },
+ "data": {
+ "type": "string",
+ "pattern": "^0x[0-9a-f]*$"
+ },
+ "nonce": {
+ "type": "number",
+ "minimum": 0
+ }
+ },
+ "required": ["from"],
+ "type": "object"
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/whole_number_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/whole_number_schema.json
new file mode 100644
index 000000000..aa469954c
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/whole_number_schema.json
@@ -0,0 +1,12 @@
+{
+ "id": "/wholeNumberSchema",
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^\\d+$"
+ },
+ {
+ "type": "integer"
+ }
+ ]
+}
diff --git a/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/zero_ex_transaction_schema.json b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/zero_ex_transaction_schema.json
new file mode 100644
index 000000000..0c714f14d
--- /dev/null
+++ b/python-packages/json_schemas/src/zero_ex/json_schemas/schemas/zero_ex_transaction_schema.json
@@ -0,0 +1,10 @@
+{
+ "id": "/zeroExTransactionSchema",
+ "properties": {
+ "data": { "$ref": "/hexSchema" },
+ "signerAddress": { "$ref": "/addressSchema" },
+ "salt": { "$ref": "/wholeNumberSchema" }
+ },
+ "required": ["data", "salt", "signerAddress"],
+ "type": "object"
+}
diff --git a/python-packages/json_schemas/test/test_doctest.py b/python-packages/json_schemas/test/test_doctest.py
deleted file mode 100644
index 2aa576422..000000000
--- a/python-packages/json_schemas/test/test_doctest.py
+++ /dev/null
@@ -1,25 +0,0 @@
-"""Exercise doctests for all of our modules."""
-
-from doctest import testmod
-import pkgutil
-import importlib
-
-import zero_ex.json_schemas
-
-
-def test_all_doctests():
- """Gather zero_ex.json_schemas.* modules and doctest them."""
- # json_schemas module
- module = "zero_ex.json_schemas"
- print(module)
- failure_count, _ = testmod(importlib.import_module(module))
- assert failure_count == 0
-
- # any json_schemas.* sub-modules
- for (_, modname, _) in pkgutil.walk_packages(
- path=zero_ex.json_schemas.__path__, prefix="zero_ex.json_schemas"
- ):
- module = importlib.import_module(modname)
- print(module)
- (failure_count, _) = testmod(module)
- assert failure_count == 0
diff --git a/python-packages/json_schemas/test/test_json_schemas.py b/python-packages/json_schemas/test/test_json_schemas.py
index d0e9840b3..1d1efdd12 100644
--- a/python-packages/json_schemas/test/test_json_schemas.py
+++ b/python-packages/json_schemas/test/test_json_schemas.py
@@ -1,6 +1,7 @@
"""Tests of zero_ex.json_schemas"""
+from zero_ex.order_utils import make_empty_order, order_to_jsdict
from zero_ex.json_schemas import _LOCAL_RESOLVER, assert_valid
@@ -33,9 +34,9 @@ def test_assert_valid_caches_resources():
"""
_LOCAL_RESOLVER._remote_cache.cache_clear() # pylint: disable=W0212
- assert_valid(EMPTY_ORDER, "/orderSchema")
+ assert_valid(order_to_jsdict(make_empty_order()), "/orderSchema")
cache_info = (
_LOCAL_RESOLVER._remote_cache.cache_info() # pylint: disable=W0212
)
assert cache_info.currsize == 4
- assert cache_info.hits == 10
+ assert cache_info.hits > 0