From 135c770dcf7b4166f9478948f4d96722b0f82f5e Mon Sep 17 00:00:00 2001 From: Michael Huang Date: Thu, 1 Oct 2020 10:37:32 -0500 Subject: [PATCH] Changes for pypi release (#44) * Adjustments for pypi release * Remove if else * Fix typo * Revert "Remove if else" This reverts commit 9beb895e56b4e9fa9d9a0b597671486afc84c072. * Restore queue.py * Revert "Restore queue.py" This reverts commit d868475b0059d5d8c1c62132d9d031524e85729b. * Restore event_queue_binary * Restore other stuff * Update README.md * Fix version * Address feedback --- .github/workflows/main.yml | 8 +- Makefile | 20 +- Pipfile | 2 + Pipfile.lock | 316 +++++++++++------- README.md | 32 +- notebooks/market.ipynb | 4 +- pyserum/__init__.py | 8 + {src => pyserum}/_layouts/__init__.py | 0 {src => pyserum}/_layouts/account_flags.py | 0 {src => pyserum}/_layouts/instructions.py | 0 {src => pyserum}/_layouts/market.py | 0 {src => pyserum}/_layouts/open_orders.py | 0 {src => pyserum}/_layouts/queue.py | 0 {src => pyserum}/_layouts/slab.py | 0 {src => pyserum}/connection.py | 0 {src => pyserum}/enums.py | 0 {src => pyserum}/instructions.py | 0 {src => pyserum}/market/__init__.py | 0 {src => pyserum}/market/_internal/__init__.py | 0 {src => pyserum}/market/_internal/queue.py | 6 +- {src => pyserum}/market/_internal/slab.py | 0 {src => pyserum}/market/market.py | 4 +- {src => pyserum}/market/orderbook.py | 2 +- {src => pyserum}/market/state.py | 2 +- {src => pyserum}/market/types.py | 0 {src => pyserum}/open_orders_account.py | 0 pyserum/py.typed | 0 {src => pyserum}/utils.py | 2 +- setup.py | 28 ++ src/__init__.py | 1 - tests/conftest.py | 2 +- tests/integration/test_market.py | 4 +- tests/test_account_flags_layout.py | 2 +- tests/test_instruction_layouts.py | 4 +- tests/test_instructions.py | 4 +- tests/test_market.py | 6 +- tests/test_open_orders_account.py | 2 +- tests/test_queue.py | 2 +- tests/test_slab.py | 4 +- 39 files changed, 289 insertions(+), 176 deletions(-) create mode 100644 pyserum/__init__.py rename {src => pyserum}/_layouts/__init__.py (100%) rename {src => pyserum}/_layouts/account_flags.py (100%) rename {src => pyserum}/_layouts/instructions.py (100%) rename {src => pyserum}/_layouts/market.py (100%) rename {src => pyserum}/_layouts/open_orders.py (100%) rename {src => pyserum}/_layouts/queue.py (100%) rename {src => pyserum}/_layouts/slab.py (100%) rename {src => pyserum}/connection.py (100%) rename {src => pyserum}/enums.py (100%) rename {src => pyserum}/instructions.py (100%) rename {src => pyserum}/market/__init__.py (100%) rename {src => pyserum}/market/_internal/__init__.py (100%) rename {src => pyserum}/market/_internal/queue.py (96%) rename {src => pyserum}/market/_internal/slab.py (100%) rename {src => pyserum}/market/market.py (99%) rename {src => pyserum}/market/orderbook.py (99%) rename {src => pyserum}/market/state.py (98%) rename {src => pyserum}/market/types.py (100%) rename {src => pyserum}/open_orders_account.py (100%) create mode 100644 pyserum/py.typed rename {src => pyserum}/utils.py (94%) delete mode 100644 src/__init__.py diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b7c17b4..8de392e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -35,10 +35,10 @@ jobs: - name: Run linters run: | - pipenv run black --check --diff --line-length=120 setup.py src tests - pipenv run pylint --rcfile=.pylintrc setup.py src tests - pipenv run flake8 setup.py src tests - pipenv run mypy src + pipenv run black --check --diff --line-length=120 setup.py pyserum tests + pipenv run pylint --rcfile=.pylintrc setup.py pyserum tests + pipenv run flake8 setup.py pyserum tests + pipenv run mypy pyserum - name: Run unit tests run: | diff --git a/Makefile b/Makefile index 8aab20b..948a1ac 100644 --- a/Makefile +++ b/Makefile @@ -2,18 +2,28 @@ clean: rm -rf dist build _build __pycache__ *.egg-info format: - pipenv run isort setup.py src tests - pipenv run black --line-length=120 setup.py src tests + pipenv run isort setup.py pyserum tests + pipenv run black --line-length=120 setup.py pyserum tests lint: - pipenv run flake8 setup.py src tests - pipenv run mypy src - pipenv run pylint --rcfile=.pylintrc setup.py src tests + pipenv run flake8 setup.py pyserum tests + pipenv run mypy pyserum + pipenv run pylint --rcfile=.pylintrc setup.py pyserum tests .PHONY: notebook notebook: cd notebooks && PYTHONPATH=../ jupyter notebook +publish: + make clean + python setup.py sdist bdist_wheel + pipenv run twine upload -u serum-community dist/* + +test-publish: + make clean + python setup.py sdist bdist_wheel + pipenv run twine upload -r testpypi -u serum-community dist/* + unit-tests: pipenv run pytest -v -m "not integration" diff --git a/Pipfile b/Pipfile index 9da0f6d..99560ea 100644 --- a/Pipfile +++ b/Pipfile @@ -21,6 +21,8 @@ flake8 = "*" isort = "*" rope = "*" pytest-cov = "*" +twine = "*" +setuptools = "*" [packages] solana = "*" diff --git a/Pipfile.lock b/Pipfile.lock index abe92f7..b7502b0 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "bd38fc4b3f1d2f88a5043a76b2a8083910d4aecb3e13d72887d5b01daa06c85f" + "sha256": "b16e0702ee2af4c8a299cc56792c430548deeec4711d9c1e3007a0fc3c87e892" }, "pipfile-spec": 6, "requires": { @@ -33,36 +33,44 @@ }, "cffi": { "hashes": [ - "sha256:0da50dcbccd7cb7e6c741ab7912b2eff48e85af217d72b57f80ebc616257125e", - "sha256:12a453e03124069b6896107ee133ae3ab04c624bb10683e1ed1c1663df17c13c", - "sha256:15419020b0e812b40d96ec9d369b2bc8109cc3295eac6e013d3261343580cc7e", - "sha256:15a5f59a4808f82d8ec7364cbace851df591c2d43bc76bcbe5c4543a7ddd1bf1", - "sha256:23e44937d7695c27c66a54d793dd4b45889a81b35c0751ba91040fe825ec59c4", - "sha256:29c4688ace466a365b85a51dcc5e3c853c1d283f293dfcc12f7a77e498f160d2", - "sha256:57214fa5430399dffd54f4be37b56fe22cedb2b98862550d43cc085fb698dc2c", - "sha256:577791f948d34d569acb2d1add5831731c59d5a0c50a6d9f629ae1cefd9ca4a0", - "sha256:6539314d84c4d36f28d73adc1b45e9f4ee2a89cdc7e5d2b0a6dbacba31906798", - "sha256:65867d63f0fd1b500fa343d7798fa64e9e681b594e0a07dc934c13e76ee28fb1", - "sha256:672b539db20fef6b03d6f7a14b5825d57c98e4026401fce838849f8de73fe4d4", - "sha256:6843db0343e12e3f52cc58430ad559d850a53684f5b352540ca3f1bc56df0731", - "sha256:7057613efefd36cacabbdbcef010e0a9c20a88fc07eb3e616019ea1692fa5df4", - "sha256:76ada88d62eb24de7051c5157a1a78fd853cca9b91c0713c2e973e4196271d0c", - "sha256:837398c2ec00228679513802e3744d1e8e3cb1204aa6ad408b6aff081e99a487", - "sha256:8662aabfeab00cea149a3d1c2999b0731e70c6b5bac596d95d13f643e76d3d4e", - "sha256:95e9094162fa712f18b4f60896e34b621df99147c2cee216cfa8f022294e8e9f", - "sha256:99cc66b33c418cd579c0f03b77b94263c305c389cb0c6972dac420f24b3bf123", - "sha256:9b219511d8b64d3fa14261963933be34028ea0e57455baf6781fe399c2c3206c", - "sha256:ae8f34d50af2c2154035984b8b5fc5d9ed63f32fe615646ab435b05b132ca91b", - "sha256:b9aa9d8818c2e917fa2c105ad538e222a5bce59777133840b93134022a7ce650", - "sha256:bf44a9a0141a082e89c90e8d785b212a872db793a0080c20f6ae6e2a0ebf82ad", - "sha256:c0b48b98d79cf795b0916c57bebbc6d16bb43b9fc9b8c9f57f4cf05881904c75", - "sha256:da9d3c506f43e220336433dffe643fbfa40096d408cb9b7f2477892f369d5f82", - "sha256:e4082d832e36e7f9b2278bc774886ca8207346b99f278e54c9de4834f17232f7", - "sha256:e4b9b7af398c32e408c00eb4e0d33ced2f9121fd9fb978e6c1b57edd014a7d15", - "sha256:e613514a82539fc48291d01933951a13ae93b6b444a88782480be32245ed4afa", - "sha256:f5033952def24172e60493b68717792e3aebb387a8d186c43c020d9363ee7281" + "sha256:005f2bfe11b6745d726dbb07ace4d53f057de66e336ff92d61b8c7e9c8f4777d", + "sha256:09e96138280241bd355cd585148dec04dbbedb4f46128f340d696eaafc82dd7b", + "sha256:0b1ad452cc824665ddc682400b62c9e4f5b64736a2ba99110712fdee5f2505c4", + "sha256:0ef488305fdce2580c8b2708f22d7785ae222d9825d3094ab073e22e93dfe51f", + "sha256:15f351bed09897fbda218e4db5a3d5c06328862f6198d4fb385f3e14e19decb3", + "sha256:22399ff4870fb4c7ef19fff6eeb20a8bbf15571913c181c78cb361024d574579", + "sha256:23e5d2040367322824605bc29ae8ee9175200b92cb5483ac7d466927a9b3d537", + "sha256:2791f68edc5749024b4722500e86303a10d342527e1e3bcac47f35fbd25b764e", + "sha256:2f9674623ca39c9ebe38afa3da402e9326c245f0f5ceff0623dccdac15023e05", + "sha256:3363e77a6176afb8823b6e06db78c46dbc4c7813b00a41300a4873b6ba63b171", + "sha256:33c6cdc071ba5cd6d96769c8969a0531be2d08c2628a0143a10a7dcffa9719ca", + "sha256:3b8eaf915ddc0709779889c472e553f0d3e8b7bdf62dab764c8921b09bf94522", + "sha256:3cb3e1b9ec43256c4e0f8d2837267a70b0e1ca8c4f456685508ae6106b1f504c", + "sha256:3eeeb0405fd145e714f7633a5173318bd88d8bbfc3dd0a5751f8c4f70ae629bc", + "sha256:44f60519595eaca110f248e5017363d751b12782a6f2bd6a7041cba275215f5d", + "sha256:4d7c26bfc1ea9f92084a1d75e11999e97b62d63128bcc90c3624d07813c52808", + "sha256:529c4ed2e10437c205f38f3691a68be66c39197d01062618c55f74294a4a4828", + "sha256:6642f15ad963b5092d65aed022d033c77763515fdc07095208f15d3563003869", + "sha256:85ba797e1de5b48aa5a8427b6ba62cf69607c18c5d4eb747604b7302f1ec382d", + "sha256:8f0f1e499e4000c4c347a124fa6a27d37608ced4fe9f7d45070563b7c4c370c9", + "sha256:a624fae282e81ad2e4871bdb767e2c914d0539708c0f078b5b355258293c98b0", + "sha256:b0358e6fefc74a16f745afa366acc89f979040e0cbc4eec55ab26ad1f6a9bfbc", + "sha256:bbd2f4dfee1079f76943767fce837ade3087b578aeb9f69aec7857d5bf25db15", + "sha256:bf39a9e19ce7298f1bd6a9758fa99707e9e5b1ebe5e90f2c3913a47bc548747c", + "sha256:c11579638288e53fc94ad60022ff1b67865363e730ee41ad5e6f0a17188b327a", + "sha256:c150eaa3dadbb2b5339675b88d4573c1be3cb6f2c33a6c83387e10cc0bf05bd3", + "sha256:c53af463f4a40de78c58b8b2710ade243c81cbca641e34debf3396a9640d6ec1", + "sha256:cb763ceceae04803adcc4e2d80d611ef201c73da32d8f2722e9d0ab0c7f10768", + "sha256:cc75f58cdaf043fe6a7a6c04b3b5a0e694c6a9e24050967747251fb80d7bce0d", + "sha256:d80998ed59176e8cba74028762fbd9b9153b9afc71ea118e63bbf5d4d0f9552b", + "sha256:de31b5164d44ef4943db155b3e8e17929707cac1e5bd2f363e67a56e3af4af6e", + "sha256:e66399cf0fc07de4dce4f588fc25bfe84a6d1285cc544e67987d22663393926d", + "sha256:f0620511387790860b249b9241c2f13c3a80e21a73e0b861a2df24e9d6f56730", + "sha256:f4eae045e6ab2bb54ca279733fe4eb85f1effda392666308250714e01907f394", + "sha256:f92cdecb618e5fa4658aeb97d5eb3d2f47aa94ac6477c6daf0f306c5a3b9e6b1", + "sha256:f92f789e4f9241cd262ad7a555ca2c648a98178a953af117ef7fad46aa1d5591" ], - "version": "==1.14.2" + "version": "==1.14.3" }, "chardet": { "hashes": [ @@ -131,7 +139,7 @@ "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", "version": "==1.15.0" }, "solana": { @@ -251,36 +259,44 @@ }, "cffi": { "hashes": [ - "sha256:0da50dcbccd7cb7e6c741ab7912b2eff48e85af217d72b57f80ebc616257125e", - "sha256:12a453e03124069b6896107ee133ae3ab04c624bb10683e1ed1c1663df17c13c", - "sha256:15419020b0e812b40d96ec9d369b2bc8109cc3295eac6e013d3261343580cc7e", - "sha256:15a5f59a4808f82d8ec7364cbace851df591c2d43bc76bcbe5c4543a7ddd1bf1", - "sha256:23e44937d7695c27c66a54d793dd4b45889a81b35c0751ba91040fe825ec59c4", - "sha256:29c4688ace466a365b85a51dcc5e3c853c1d283f293dfcc12f7a77e498f160d2", - "sha256:57214fa5430399dffd54f4be37b56fe22cedb2b98862550d43cc085fb698dc2c", - "sha256:577791f948d34d569acb2d1add5831731c59d5a0c50a6d9f629ae1cefd9ca4a0", - "sha256:6539314d84c4d36f28d73adc1b45e9f4ee2a89cdc7e5d2b0a6dbacba31906798", - "sha256:65867d63f0fd1b500fa343d7798fa64e9e681b594e0a07dc934c13e76ee28fb1", - "sha256:672b539db20fef6b03d6f7a14b5825d57c98e4026401fce838849f8de73fe4d4", - "sha256:6843db0343e12e3f52cc58430ad559d850a53684f5b352540ca3f1bc56df0731", - "sha256:7057613efefd36cacabbdbcef010e0a9c20a88fc07eb3e616019ea1692fa5df4", - "sha256:76ada88d62eb24de7051c5157a1a78fd853cca9b91c0713c2e973e4196271d0c", - "sha256:837398c2ec00228679513802e3744d1e8e3cb1204aa6ad408b6aff081e99a487", - "sha256:8662aabfeab00cea149a3d1c2999b0731e70c6b5bac596d95d13f643e76d3d4e", - "sha256:95e9094162fa712f18b4f60896e34b621df99147c2cee216cfa8f022294e8e9f", - "sha256:99cc66b33c418cd579c0f03b77b94263c305c389cb0c6972dac420f24b3bf123", - "sha256:9b219511d8b64d3fa14261963933be34028ea0e57455baf6781fe399c2c3206c", - "sha256:ae8f34d50af2c2154035984b8b5fc5d9ed63f32fe615646ab435b05b132ca91b", - "sha256:b9aa9d8818c2e917fa2c105ad538e222a5bce59777133840b93134022a7ce650", - "sha256:bf44a9a0141a082e89c90e8d785b212a872db793a0080c20f6ae6e2a0ebf82ad", - "sha256:c0b48b98d79cf795b0916c57bebbc6d16bb43b9fc9b8c9f57f4cf05881904c75", - "sha256:da9d3c506f43e220336433dffe643fbfa40096d408cb9b7f2477892f369d5f82", - "sha256:e4082d832e36e7f9b2278bc774886ca8207346b99f278e54c9de4834f17232f7", - "sha256:e4b9b7af398c32e408c00eb4e0d33ced2f9121fd9fb978e6c1b57edd014a7d15", - "sha256:e613514a82539fc48291d01933951a13ae93b6b444a88782480be32245ed4afa", - "sha256:f5033952def24172e60493b68717792e3aebb387a8d186c43c020d9363ee7281" + "sha256:005f2bfe11b6745d726dbb07ace4d53f057de66e336ff92d61b8c7e9c8f4777d", + "sha256:09e96138280241bd355cd585148dec04dbbedb4f46128f340d696eaafc82dd7b", + "sha256:0b1ad452cc824665ddc682400b62c9e4f5b64736a2ba99110712fdee5f2505c4", + "sha256:0ef488305fdce2580c8b2708f22d7785ae222d9825d3094ab073e22e93dfe51f", + "sha256:15f351bed09897fbda218e4db5a3d5c06328862f6198d4fb385f3e14e19decb3", + "sha256:22399ff4870fb4c7ef19fff6eeb20a8bbf15571913c181c78cb361024d574579", + "sha256:23e5d2040367322824605bc29ae8ee9175200b92cb5483ac7d466927a9b3d537", + "sha256:2791f68edc5749024b4722500e86303a10d342527e1e3bcac47f35fbd25b764e", + "sha256:2f9674623ca39c9ebe38afa3da402e9326c245f0f5ceff0623dccdac15023e05", + "sha256:3363e77a6176afb8823b6e06db78c46dbc4c7813b00a41300a4873b6ba63b171", + "sha256:33c6cdc071ba5cd6d96769c8969a0531be2d08c2628a0143a10a7dcffa9719ca", + "sha256:3b8eaf915ddc0709779889c472e553f0d3e8b7bdf62dab764c8921b09bf94522", + "sha256:3cb3e1b9ec43256c4e0f8d2837267a70b0e1ca8c4f456685508ae6106b1f504c", + "sha256:3eeeb0405fd145e714f7633a5173318bd88d8bbfc3dd0a5751f8c4f70ae629bc", + "sha256:44f60519595eaca110f248e5017363d751b12782a6f2bd6a7041cba275215f5d", + "sha256:4d7c26bfc1ea9f92084a1d75e11999e97b62d63128bcc90c3624d07813c52808", + "sha256:529c4ed2e10437c205f38f3691a68be66c39197d01062618c55f74294a4a4828", + "sha256:6642f15ad963b5092d65aed022d033c77763515fdc07095208f15d3563003869", + "sha256:85ba797e1de5b48aa5a8427b6ba62cf69607c18c5d4eb747604b7302f1ec382d", + "sha256:8f0f1e499e4000c4c347a124fa6a27d37608ced4fe9f7d45070563b7c4c370c9", + "sha256:a624fae282e81ad2e4871bdb767e2c914d0539708c0f078b5b355258293c98b0", + "sha256:b0358e6fefc74a16f745afa366acc89f979040e0cbc4eec55ab26ad1f6a9bfbc", + "sha256:bbd2f4dfee1079f76943767fce837ade3087b578aeb9f69aec7857d5bf25db15", + "sha256:bf39a9e19ce7298f1bd6a9758fa99707e9e5b1ebe5e90f2c3913a47bc548747c", + "sha256:c11579638288e53fc94ad60022ff1b67865363e730ee41ad5e6f0a17188b327a", + "sha256:c150eaa3dadbb2b5339675b88d4573c1be3cb6f2c33a6c83387e10cc0bf05bd3", + "sha256:c53af463f4a40de78c58b8b2710ade243c81cbca641e34debf3396a9640d6ec1", + "sha256:cb763ceceae04803adcc4e2d80d611ef201c73da32d8f2722e9d0ab0c7f10768", + "sha256:cc75f58cdaf043fe6a7a6c04b3b5a0e694c6a9e24050967747251fb80d7bce0d", + "sha256:d80998ed59176e8cba74028762fbd9b9153b9afc71ea118e63bbf5d4d0f9552b", + "sha256:de31b5164d44ef4943db155b3e8e17929707cac1e5bd2f363e67a56e3af4af6e", + "sha256:e66399cf0fc07de4dce4f588fc25bfe84a6d1285cc544e67987d22663393926d", + "sha256:f0620511387790860b249b9241c2f13c3a80e21a73e0b861a2df24e9d6f56730", + "sha256:f4eae045e6ab2bb54ca279733fe4eb85f1effda392666308250714e01907f394", + "sha256:f92cdecb618e5fa4658aeb97d5eb3d2f47aa94ac6477c6daf0f306c5a3b9e6b1", + "sha256:f92f789e4f9241cd262ad7a555ca2c648a98178a953af117ef7fad46aa1d5591" ], - "version": "==1.14.2" + "version": "==1.14.3" }, "chardet": { "hashes": [ @@ -297,6 +313,14 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==7.1.2" }, + "colorama": { + "hashes": [ + "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff", + "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==0.4.3" + }, "coverage": { "hashes": [ "sha256:0203acd33d2298e19b57451ebb0bed0ab0c602e5cf5a818591b4918b1f97d516", @@ -352,6 +376,14 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==0.6.0" }, + "docutils": { + "hashes": [ + "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af", + "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==0.16" + }, "entrypoints": { "hashes": [ "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19", @@ -378,11 +410,11 @@ }, "importlib-metadata": { "hashes": [ - "sha256:90bb658cdbbf6d1735b6341ce708fc7024a3e14e99ffdc5783edea9f9b077f83", - "sha256:dc15b2969b4ce36305c51eebe62d418ac7791e9a157911d58bfb1f9ccd8e2070" + "sha256:77a540690e24b0305878c37ffd421785a6f7e53c8b5720d211b211de8d0e95da", + "sha256:cefa1a2f919b866c5beb7c9f7b0ebb4061f30a8a9bf16d609b000e2dfaceb9c3" ], - "markers": "python_version < '3.8'", - "version": "==1.7.0" + "markers": "python_version < '3.8' and python_version < '3.8'", + "version": "==2.0.0" }, "iniconfig": { "hashes": [ @@ -416,11 +448,11 @@ }, "isort": { "hashes": [ - "sha256:171c5f365791073426b5ed3a156c2081a47f88c329161fd28228ff2da4c97ddb", - "sha256:ba91218eee31f1e300ecc079ef0c524cea3fc41bfbb979cbdf5fd3a889e3cfed" + "sha256:36f0c6659b9000597e92618d05b72d4181104cf59472b1c6a039e3783f930c95", + "sha256:ba040c24d20aa302f78f4747df549573ae1eaf8e1084269199154da9c483f07f" ], "index": "pypi", - "version": "==5.5.2" + "version": "==5.5.4" }, "jedi": { "hashes": [ @@ -478,10 +510,10 @@ }, "jupyterlab-pygments": { "hashes": [ - "sha256:19a0ccde7daddec638363cd3d60b63a4f6544c9181d65253317b2fb492a797b9", - "sha256:c9535e5999f29bff90bd0fa423717dcaf247b71fad505d66b17d3217e9021fc5" + "sha256:abfb880fd1561987efaefcb2d2ac75145d2a5d0139b1876d5be806e32f630008", + "sha256:cfcda0873626150932f438eccf0f8bf22bfa92345b814890ab360d666b254146" ], - "version": "==0.1.1" + "version": "==0.1.2" }, "jupyterlab-server": { "hashes": [ @@ -491,6 +523,14 @@ "markers": "python_version >= '3.5'", "version": "==1.2.0" }, + "keyring": { + "hashes": [ + "sha256:4e34ea2fdec90c1c43d6610b5a5fafa1b9097db1802948e90caf5763974b8f8d", + "sha256:9aeadd006a852b78f4b4ef7c7556c2774d2432bbef8ee538a3e9089ac8b11466" + ], + "markers": "python_version >= '3.6'", + "version": "==21.4.0" + }, "lazy-object-proxy": { "hashes": [ "sha256:0c4b206227a8097f05c4dbdd323c50edf81f15db3b8dc064d08c62d37e1a504d", @@ -571,14 +611,6 @@ ], "version": "==0.8.4" }, - "more-itertools": { - "hashes": [ - "sha256:6f83822ae94818eae2612063a5101a7311e68ae8002005b5e05f03fd74a86a20", - "sha256:9b30f12df9393f0d28af9210ff8efe48d10c94f73e5daf886f10c4b0b0b4f03c" - ], - "markers": "python_version >= '3.5'", - "version": "==8.5.0" - }, "mypy": { "hashes": [ "sha256:2c6cde8aa3426c1682d35190b59b71f661237d74b053822ea3d748e2c9578a7c", @@ -616,11 +648,11 @@ }, "nbconvert": { "hashes": [ - "sha256:06c64fd45d4b6424e88eb3bf7e5eb205a0fc8a4c0a69666f0b9a2262c76f59e1", - "sha256:d8490f40368a1324521f8e740a0e341dc40bcd6e6926da64fa64b3a8801f16a3" + "sha256:68335477288aab8a9b9ec03002dce59b4eb1ca967116741ec218a4e78c129efd", + "sha256:d8549f62e739a4d51f275c2932b1783ee5039dde07a2b71de70c0296a42c8394" ], "markers": "python_version >= '3.6'", - "version": "==6.0.3" + "version": "==6.0.6" }, "nbformat": { "hashes": [ @@ -632,11 +664,11 @@ }, "nest-asyncio": { "hashes": [ - "sha256:5773054bbc14579b000236f85bc01ecced7ffd045ec8ca4a9809371ec65a59c8", - "sha256:ea51120725212ef02e5870dd77fc67ba7343fc945e3b9a7ff93384436e043b6a" + "sha256:a4487c4f49f2d11a7bb89a512a6886b6a5045f47097f49815b2851aaa8599cf0", + "sha256:b86c3193abda5b2eeccf8c79894bc71c680369a178f4b068514ac00720b14e01" ], "markers": "python_version >= '3.5'", - "version": "==1.4.0" + "version": "==1.4.1" }, "notebook": { "hashes": [ @@ -690,6 +722,13 @@ ], "version": "==0.7.5" }, + "pkginfo": { + "hashes": [ + "sha256:7424f2c8511c186cd5424bbf31045b77435b37a8d604990b79d4e70d741148bb", + "sha256:a6d9e40ca61ad3ebd0b72fbadd4fba16e4c0e4df0428c041e01e06eb6ee71f32" + ], + "version": "==1.5.0.1" + }, "pluggy": { "hashes": [ "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0", @@ -782,7 +821,7 @@ "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1", "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b" ], - "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2'", "version": "==2.4.7" }, "pyrsistent": { @@ -794,11 +833,11 @@ }, "pytest": { "hashes": [ - "sha256:0e37f61339c4578776e090c3b8f6b16ce4db333889d65d0efb305243ec544b40", - "sha256:c8f57c2a30983f469bf03e68cdfa74dc474ce56b8f280ddcb080dfd91df01043" + "sha256:1cd09785c0a50f9af72220dd12aa78cfa49cbffc356c61eab009ca189e018a33", + "sha256:d010e24666435b39a4cf48740b039885642b6c273a3f77be3e7e03554d2806b7" ], "index": "pypi", - "version": "==6.0.2" + "version": "==6.1.0" }, "pytest-cov": { "hashes": [ @@ -821,7 +860,7 @@ "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c", "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", "version": "==2.8.1" }, "pyzmq": { @@ -855,34 +894,41 @@ "sha256:f1a25a61495b6f7bb986accc5b597a3541d9bd3ef0016f50be16dbb32025b302", "sha256:fa411b1d8f371d3a49d31b0789eb6da2537dadbb2aef74a43aa99a78195c3f76" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", "version": "==19.0.2" }, + "readme-renderer": { + "hashes": [ + "sha256:cbe9db71defedd2428a1589cdc545f9bd98e59297449f69d721ef8f1cfced68d", + "sha256:cc4957a803106e820d05d14f71033092537a22daa4f406dfbdd61177e0936376" + ], + "version": "==26.0" + }, "regex": { "hashes": [ - "sha256:0dc64ee3f33cd7899f79a8d788abfbec168410be356ed9bd30bbd3f0a23a7204", - "sha256:1269fef3167bb52631ad4fa7dd27bf635d5a0790b8e6222065d42e91bede4162", - "sha256:14a53646369157baa0499513f96091eb70382eb50b2c82393d17d7ec81b7b85f", - "sha256:3a3af27a8d23143c49a3420efe5b3f8cf1a48c6fc8bc6856b03f638abc1833bb", - "sha256:46bac5ca10fb748d6c55843a931855e2727a7a22584f302dd9bb1506e69f83f6", - "sha256:4c037fd14c5f4e308b8370b447b469ca10e69427966527edcab07f52d88388f7", - "sha256:51178c738d559a2d1071ce0b0f56e57eb315bcf8f7d4cf127674b533e3101f88", - "sha256:5ea81ea3dbd6767873c611687141ec7b06ed8bab43f68fad5b7be184a920dc99", - "sha256:6961548bba529cac7c07af2fd4d527c5b91bb8fe18995fed6044ac22b3d14644", - "sha256:75aaa27aa521a182824d89e5ab0a1d16ca207318a6b65042b046053cfc8ed07a", - "sha256:7a2dd66d2d4df34fa82c9dc85657c5e019b87932019947faece7983f2089a840", - "sha256:8a51f2c6d1f884e98846a0a9021ff6861bdb98457879f412fdc2b42d14494067", - "sha256:9c568495e35599625f7b999774e29e8d6b01a6fb684d77dee1f56d41b11b40cd", - "sha256:9eddaafb3c48e0900690c1727fba226c4804b8e6127ea409689c3bb492d06de4", - "sha256:bbb332d45b32df41200380fff14712cb6093b61bd142272a10b16778c418e98e", - "sha256:bc3d98f621898b4a9bc7fecc00513eec8f40b5b83913d74ccb445f037d58cd89", - "sha256:c11d6033115dc4887c456565303f540c44197f4fc1a2bfb192224a301534888e", - "sha256:c50a724d136ec10d920661f1442e4a8b010a4fe5aebd65e0c2241ea41dbe93dc", - "sha256:d0a5095d52b90ff38592bbdc2644f17c6d495762edf47d876049cfd2968fbccf", - "sha256:d6cff2276e502b86a25fd10c2a96973fdb45c7a977dca2138d661417f3728341", - "sha256:e46d13f38cfcbb79bfdb2964b0fe12561fe633caf964a77a5f8d4e45fe5d2ef7" + "sha256:088afc8c63e7bd187a3c70a94b9e50ab3f17e1d3f52a32750b5b77dbe99ef5ef", + "sha256:1fe0a41437bbd06063aa184c34804efa886bcc128222e9916310c92cd54c3b4c", + "sha256:41bb65f54bba392643557e617316d0d899ed5b4946dccee1cb6696152b29844b", + "sha256:4318d56bccfe7d43e5addb272406ade7a2274da4b70eb15922a071c58ab0108c", + "sha256:4707f3695b34335afdfb09be3802c87fa0bc27030471dbc082f815f23688bc63", + "sha256:5533a959a1748a5c042a6da71fe9267a908e21eded7a4f373efd23a2cbdb0ecc", + "sha256:5f18875ac23d9aa2f060838e8b79093e8bb2313dbaaa9f54c6d8e52a5df097be", + "sha256:60b0e9e6dc45683e569ec37c55ac20c582973841927a85f2d8a7d20ee80216ab", + "sha256:84e9407db1b2eb368b7ecc283121b5e592c9aaedbe8c78b1a2f1102eb2e21d19", + "sha256:8d69cef61fa50c8133382e61fd97439de1ae623fe943578e477e76a9d9471637", + "sha256:9a02d0ae31d35e1ec12a4ea4d4cca990800f66a917d0fb997b20fbc13f5321fc", + "sha256:9bc13e0d20b97ffb07821aa3e113f9998e84994fe4d159ffa3d3a9d1b805043b", + "sha256:a6f32aea4260dfe0e55dc9733ea162ea38f0ea86aa7d0f77b15beac5bf7b369d", + "sha256:ae91972f8ac958039920ef6e8769277c084971a142ce2b660691793ae44aae6b", + "sha256:c570f6fa14b9c4c8a4924aaad354652366577b4f98213cf76305067144f7b100", + "sha256:d23a18037313714fb3bb5a94434d3151ee4300bae631894b1ac08111abeaa4a3", + "sha256:eaf548d117b6737df379fdd53bdde4f08870e66d7ea653e230477f071f861121", + "sha256:ebbe29186a3d9b0c591e71b7393f1ae08c83cb2d8e517d2a822b8f7ec99dfd8b", + "sha256:eda4771e0ace7f67f58bc5b560e27fb20f32a148cbc993b0c3835970935c2707", + "sha256:f1b3afc574a3db3b25c89161059d857bd4909a1269b0b3cb3c904677c8c4a3f7", + "sha256:f2388013e68e750eaa16ccbea62d4130180c26abb1d8e5d584b9baf69672b30f" ], - "version": "==2020.7.14" + "version": "==2020.9.27" }, "requests": { "hashes": [ @@ -892,6 +938,20 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==2.24.0" }, + "requests-toolbelt": { + "hashes": [ + "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f", + "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0" + ], + "version": "==0.9.1" + }, + "rfc3986": { + "hashes": [ + "sha256:112398da31a3344dc25dbf477d8df6cb34f9278a94fee2625d89e4514be8bb9d", + "sha256:af9147e9aceda37c91a05f4deb128d4b4b49d6b199775fd2d2927768abdc8f50" + ], + "version": "==1.4.0" + }, "rope": { "hashes": [ "sha256:658ad6705f43dcf3d6df379da9486529cf30e02d9ea14c5682aa80eb33b649e1" @@ -911,7 +971,7 @@ "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", "version": "==1.15.0" }, "snowballstemmer": { @@ -923,11 +983,11 @@ }, "terminado": { "hashes": [ - "sha256:7ceea4c1644b0e95588d1d2ba09c5bf365b318c26d0a13ef6a5f2751a2f6efa3", - "sha256:e0eaea25d978d9a8d557f63ef23b0ec81a2f9e22b9dabfe5db4a79d8d38dd7c2" + "sha256:3da72a155b807b01c9e8a5babd214e052a0a45a975751da3521a1c3381ce6d76", + "sha256:c55f025beb06c2e2669f7ba5a04f47bb3304c30c05842d4981d8f0fc9ab3b4e3" ], "markers": "python_version >= '3.6'", - "version": "==0.9.0" + "version": "==0.9.1" }, "testpath": { "hashes": [ @@ -958,6 +1018,14 @@ "markers": "python_version >= '3.5'", "version": "==6.0.4" }, + "tqdm": { + "hashes": [ + "sha256:2dd75fdb764f673b8187643496fcfbeac38348015b665878e582b152f3391cdb", + "sha256:93b7a6a9129fce904f6df4cf3ae7ff431d779be681a95c3344c26f3e6c09abfa" + ], + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1'", + "version": "==4.50.0" + }, "traitlets": { "hashes": [ "sha256:86c9351f94f95de9db8a04ad8e892da299a088a64fd283f9f6f18770ae5eae1b", @@ -966,6 +1034,14 @@ "markers": "python_version >= '3.7'", "version": "==5.0.4" }, + "twine": { + "hashes": [ + "sha256:34352fd52ec3b9d29837e6072d5a2a7c6fe4290e97bba46bb8d478b5c598f7ab", + "sha256:ba9ff477b8d6de0c89dd450e70b2185da190514e91c42cc62f96850025c10472" + ], + "index": "pypi", + "version": "==3.2.0" + }, "typed-ast": { "hashes": [ "sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355", @@ -990,7 +1066,7 @@ "sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4", "sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7" ], - "markers": "python_version < '3.8' and implementation_name == 'cpython'", + "markers": "implementation_name == 'cpython' and python_version < '3.8'", "version": "==1.4.1" }, "typing-extensions": { @@ -1031,11 +1107,11 @@ }, "zipp": { "hashes": [ - "sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b", - "sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96" + "sha256:43f4fa8d8bb313e65d8323a3952ef8756bf40f9a5c3ea7334be23ee4ec8278b6", + "sha256:b52f22895f4cfce194bc8172f3819ee8de7540aa6d873535a8668b730b8b411f" ], "markers": "python_version >= '3.6'", - "version": "==3.1.0" + "version": "==3.2.0" } } } diff --git a/README.md b/README.md index 005b080..2b24320 100644 --- a/README.md +++ b/README.md @@ -9,13 +9,14 @@ Python client library for interacting with the [Project Serum](https://projectse ## Get Started ```python -from src.market import Market +from pyserum.connection import conn +from pyserum.market import Market -endpoint = "https://api.mainnet-beta.solana.com/" -market_address = "CAgAeMD7quTdnr6RPa7JySQpjf3irAmefYNdTb6anemq" # Address for BTC/USDC +cc = conn("https://api.mainnet-beta.solana.com/") +market_address = "5LgJphS6D5zXwUVPU7eCryDBkyta3AidrJ5vjNU6BcGW" # Address for BTC/USDC # Load the given market -market = Market.load(endpoint, market_address, None) +market = Market.load(cc, market_address) asks = market.load_asks() # Show all current ask order print("Ask Orders:") @@ -36,23 +37,6 @@ for bid in bids: The source of truth of the market address can be found [here](https://github.com/project-serum/serum-js/blob/master/src/tokens_and_markets.ts). Feel free to open a PR if the following addresses needs modification or addition. -| Currency Pair | Address | -| :-----------: | :------------------------------------------: | -| MSRM/USDT | H4snTKK9adiU15gP22ErfZYtro3aqR9BTMXiH3AwiUTQ | -| MSRM/USDC | 7kgkDyW7dmyMeP8KFXzbcUZz1R2WHsovDZ7n3ihZuNDS | -| BTC/USDT | 8AcVjMG2LTbpkjNoyq8RwysokqZunkjy3d5JDzxC6BJa | -| BTC/USDC | CAgAeMD7quTdnr6RPa7JySQpjf3irAmefYNdTb6anemq | -| ETH/USDT | HfCZdJ1wfsWKfYP2qyWdXTT5PWAGWFctzFjLH48U1Hsd | -| ETH/USDC | ASKiV944nKg1W9vsf7hf3fTsjawK6DwLwrnB2LH9n61c | -| SRM/USDT | HARFLhSq8nECZk4DVFKvzqXMNMA9a3hjvridGMFizeLa | -| SRM/USDC | 68J6nkWToik6oM9rTatKSR5ibVSykAtzftBUEAvpRsys | -| FTT/USDT | DHDdghmkBhEpReno3tbzBPtsxCt6P3KrMzZvxavTktJt | -| FTT/USDC | FZqrBXz7ADGsmDf1TM9YgysPUfvtG8rJiNUrqDpHc9Au | -| YFI/USDT | 5zu5bTZZvqESAAgFsr12CUMxdQvMrvU9CgvC1GW8vJdf | -| YFI/USDC | FJg9FUtbN3fg3YFbMCFiZKjGh5Bn4gtzxZmtxFzmz9kT | -| LINK/USDT | F5xschQBMpu1gD2q1babYEAVJHR1buj1YazLiXyQNqSW | -| LINK/USDC | 7GZ59DMgJ7D6dfoJTpszPayTRyua9jwcaGJXaRMMF1my | - ## Development ### Setup @@ -75,6 +59,12 @@ pipenv install --dev pipenv shell ``` +### Format + +``` +make format +``` + ### Lint ```sh diff --git a/notebooks/market.ipynb b/notebooks/market.ipynb index d151fef..64bdaeb 100644 --- a/notebooks/market.ipynb +++ b/notebooks/market.ipynb @@ -6,7 +6,7 @@ "metadata": {}, "outputs": [], "source": [ - "from src.market import Market\n", + "from pyserum.market import Market\n", "\n", "market = Market.load(\"https://api.mainnet-beta.solana.com\", \"CAgAeMD7quTdnr6RPa7JySQpjf3irAmefYNdTb6anemq\", None)" ] @@ -46,7 +46,7 @@ "metadata": {}, "outputs": [], "source": [ - "from src.market import Market\n", + "from pyserum.market import Market\n", "\n", "endpoint = \"https://api.mainnet-beta.solana.com/\"\n", "market_address = \"CAgAeMD7quTdnr6RPa7JySQpjf3irAmefYNdTb6anemq\" # Address for BTC/USDC\n", diff --git a/pyserum/__init__.py b/pyserum/__init__.py new file mode 100644 index 0000000..493deaa --- /dev/null +++ b/pyserum/__init__.py @@ -0,0 +1,8 @@ +"""PySerum.""" + +import sys + +__import__("pkg_resources").declare_namespace("pyserum") # type: ignore + +if sys.version_info < (3, 7): + raise EnvironmentError("Python 3.7 or above is required.") diff --git a/src/_layouts/__init__.py b/pyserum/_layouts/__init__.py similarity index 100% rename from src/_layouts/__init__.py rename to pyserum/_layouts/__init__.py diff --git a/src/_layouts/account_flags.py b/pyserum/_layouts/account_flags.py similarity index 100% rename from src/_layouts/account_flags.py rename to pyserum/_layouts/account_flags.py diff --git a/src/_layouts/instructions.py b/pyserum/_layouts/instructions.py similarity index 100% rename from src/_layouts/instructions.py rename to pyserum/_layouts/instructions.py diff --git a/src/_layouts/market.py b/pyserum/_layouts/market.py similarity index 100% rename from src/_layouts/market.py rename to pyserum/_layouts/market.py diff --git a/src/_layouts/open_orders.py b/pyserum/_layouts/open_orders.py similarity index 100% rename from src/_layouts/open_orders.py rename to pyserum/_layouts/open_orders.py diff --git a/src/_layouts/queue.py b/pyserum/_layouts/queue.py similarity index 100% rename from src/_layouts/queue.py rename to pyserum/_layouts/queue.py diff --git a/src/_layouts/slab.py b/pyserum/_layouts/slab.py similarity index 100% rename from src/_layouts/slab.py rename to pyserum/_layouts/slab.py diff --git a/src/connection.py b/pyserum/connection.py similarity index 100% rename from src/connection.py rename to pyserum/connection.py diff --git a/src/enums.py b/pyserum/enums.py similarity index 100% rename from src/enums.py rename to pyserum/enums.py diff --git a/src/instructions.py b/pyserum/instructions.py similarity index 100% rename from src/instructions.py rename to pyserum/instructions.py diff --git a/src/market/__init__.py b/pyserum/market/__init__.py similarity index 100% rename from src/market/__init__.py rename to pyserum/market/__init__.py diff --git a/src/market/_internal/__init__.py b/pyserum/market/_internal/__init__.py similarity index 100% rename from src/market/_internal/__init__.py rename to pyserum/market/_internal/__init__.py diff --git a/src/market/_internal/queue.py b/pyserum/market/_internal/queue.py similarity index 96% rename from src/market/_internal/queue.py rename to pyserum/market/_internal/queue.py index c614ff0..b0ec75c 100644 --- a/src/market/_internal/queue.py +++ b/pyserum/market/_internal/queue.py @@ -35,9 +35,8 @@ def __from_bytes( def __parse_queue_item(buffer: Sequence[int], queue_type: QueueType) -> Union[Event, Request]: - layout = EVENT_LAYOUT if queue_type == QueueType.Event else REQUEST_LAYOUT - parsed_item = layout.parse(buffer) if queue_type == QueueType.Event: # pylint: disable=no-else-return + parsed_item = EVENT_LAYOUT.parse(buffer) parsed_event_flags = parsed_item.event_flags event_flags = EventFlags( fill=parsed_event_flags.fill, @@ -58,6 +57,7 @@ def __parse_queue_item(buffer: Sequence[int], queue_type: QueueType) -> Union[Ev client_order_id=parsed_item.client_order_id, ) else: + parsed_item = REQUEST_LAYOUT.parse(buffer) parsed_request_flags = parsed_item.request_flags request_flags = ReuqestFlags( new_order=parsed_request_flags.new_order, @@ -89,5 +89,5 @@ def decode_request_queue(buffer: bytes, history: Optional[int] = None) -> List[R def decode_event_queue(buffer: bytes, history: Optional[int] = None) -> List[Event]: header, nodes = __from_bytes(buffer, QueueType.Event, history) if not header.account_flags.initialized or not header.account_flags.event_queue: - raise Exception("Invalid events queue, either not initialized or not a request queue.") + raise Exception("Invalid events queue, either not initialized or not a event queue.") return cast(List[Event], nodes) diff --git a/src/market/_internal/slab.py b/pyserum/market/_internal/slab.py similarity index 100% rename from src/market/_internal/slab.py rename to pyserum/market/_internal/slab.py diff --git a/src/market/market.py b/pyserum/market/market.py similarity index 99% rename from src/market/market.py rename to pyserum/market/market.py index 440a2ff..72dcc27 100644 --- a/src/market/market.py +++ b/pyserum/market/market.py @@ -14,8 +14,8 @@ from spl.token.constants import ACCOUNT_LEN, TOKEN_PROGRAM_ID, WRAPPED_SOL_MINT from spl.token.instructions import CloseAccountParams # type: ignore from spl.token.instructions import InitializeAccountParams, close_account, initialize_account -import src.instructions as instructions -import src.market.types as t +import pyserum.instructions as instructions +import pyserum.market.types as t from .._layouts.open_orders import OPEN_ORDERS_LAYOUT from ..enums import OrderType, Side diff --git a/src/market/orderbook.py b/pyserum/market/orderbook.py similarity index 99% rename from src/market/orderbook.py rename to pyserum/market/orderbook.py index 39dc814..62b9738 100644 --- a/src/market/orderbook.py +++ b/pyserum/market/orderbook.py @@ -2,7 +2,7 @@ from __future__ import annotations from typing import Iterable, List, Sequence, Union -import src.market.types as t +import pyserum.market.types as t from ..enums import Side from ._internal.slab import Slab, SlabInnerNode, SlabLeafNode diff --git a/src/market/state.py b/pyserum/market/state.py similarity index 98% rename from src/market/state.py rename to pyserum/market/state.py index d424438..5b3b7eb 100644 --- a/src/market/state.py +++ b/pyserum/market/state.py @@ -7,7 +7,7 @@ from construct import Container, Struct # type: ignore from solana.publickey import PublicKey from solana.rpc.api import Client -from src.utils import get_mint_decimals, load_bytes_data +from pyserum.utils import get_mint_decimals, load_bytes_data from .._layouts.market import MARKET_LAYOUT from .types import AccountFlags diff --git a/src/market/types.py b/pyserum/market/types.py similarity index 100% rename from src/market/types.py rename to pyserum/market/types.py diff --git a/src/open_orders_account.py b/pyserum/open_orders_account.py similarity index 100% rename from src/open_orders_account.py rename to pyserum/open_orders_account.py diff --git a/pyserum/py.typed b/pyserum/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/src/utils.py b/pyserum/utils.py similarity index 94% rename from src/utils.py rename to pyserum/utils.py index 531d25f..a0bbd69 100644 --- a/src/utils.py +++ b/pyserum/utils.py @@ -4,7 +4,7 @@ from solana.publickey import PublicKey from solana.rpc.api import Client from spl.token.constants import WRAPPED_SOL_MINT # type: ignore # TODO: Remove ignore. -from src._layouts.market import MINT_LAYOUT +from pyserum._layouts.market import MINT_LAYOUT def load_bytes_data(addr: PublicKey, conn: Client): diff --git a/setup.py b/setup.py index 3bd0d67..8a76a75 100644 --- a/setup.py +++ b/setup.py @@ -1 +1,29 @@ """setuptools module for PySerum.""" + +from setuptools import find_packages, setup + +setup( + name="pyserum", + version="0.0.1a1", + author="serum-community", + description="""Python client library for interacting with the Project Serum DEX.""", + include_package_data=True, + install_requires=[ + "construct>=2.10.56, <3.0.0", + "solana>=0.3.0, <1.0.0", + ], + python_requires=">=3.7, <4", + license="MIT", + package_data={"pyserum": ["py.typed"]}, + packages=find_packages(exclude=("tests", "test.*")), + url="https://github.com/serum-community/pyserum", + zip_safe=False, # required per mypy + classifiers=[ + "Development Status :: 2 - Pre-Alpha", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + ], +) diff --git a/src/__init__.py b/src/__init__.py deleted file mode 100644 index b285b5a..0000000 --- a/src/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""PySerum.""" diff --git a/tests/conftest.py b/tests/conftest.py index e385761..5665770 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -5,7 +5,7 @@ from solana.account import Account from solana.publickey import PublicKey from solana.rpc.api import Client -from src.connection import conn +from pyserum.connection import conn @pytest.mark.integration diff --git a/tests/integration/test_market.py b/tests/integration/test_market.py index 7cc0c7d..f598d73 100644 --- a/tests/integration/test_market.py +++ b/tests/integration/test_market.py @@ -5,8 +5,8 @@ from solana.account import Account from solana.publickey import PublicKey from solana.rpc.api import Client -from src.enums import OrderType, Side -from src.market import Market +from pyserum.enums import OrderType, Side +from pyserum.market import Market from .utils import confirm_transaction diff --git a/tests/test_account_flags_layout.py b/tests/test_account_flags_layout.py index bfa4c35..a5a9ac5 100644 --- a/tests/test_account_flags_layout.py +++ b/tests/test_account_flags_layout.py @@ -1,6 +1,6 @@ """Tests for account flags layout.""" -from src._layouts.account_flags import ACCOUNT_FLAGS_LAYOUT +from pyserum._layouts.account_flags import ACCOUNT_FLAGS_LAYOUT def default_flags(): diff --git a/tests/test_instruction_layouts.py b/tests/test_instruction_layouts.py index 3de17e5..1a6dcc6 100644 --- a/tests/test_instruction_layouts.py +++ b/tests/test_instruction_layouts.py @@ -1,8 +1,8 @@ """Tests for instruction layouts.""" from solana.publickey import PublicKey -from src._layouts.instructions import _VERSION, INSTRUCTIONS_LAYOUT, InstructionType -from src.enums import OrderType, Side +from pyserum._layouts.instructions import _VERSION, INSTRUCTIONS_LAYOUT, InstructionType +from pyserum.enums import OrderType, Side def assert_parsed_layout(instruction_type, args, raw_bytes): diff --git a/tests/test_instructions.py b/tests/test_instructions.py index 3ac91ac..b6f839d 100644 --- a/tests/test_instructions.py +++ b/tests/test_instructions.py @@ -2,8 +2,8 @@ from solana.publickey import PublicKey -import src.instructions as inlib -from src.enums import OrderType, Side +import pyserum.instructions as inlib +from pyserum.enums import OrderType, Side def test_initialize_market(): diff --git a/tests/test_market.py b/tests/test_market.py index 9aee164..49af6cd 100644 --- a/tests/test_market.py +++ b/tests/test_market.py @@ -4,9 +4,9 @@ import pytest from construct import Container from solana.rpc.api import Client -from src.instructions import DEFAULT_DEX_PROGRAM_ID -from src.market import Market, OrderBook, State -from src.market.types import AccountFlags, Order, OrderInfo +from pyserum.instructions import DEFAULT_DEX_PROGRAM_ID +from pyserum.market import Market, OrderBook, State +from pyserum.market.types import AccountFlags, Order, OrderInfo from .binary_file_path import ASK_ORDER_BIN_PATH diff --git a/tests/test_open_orders_account.py b/tests/test_open_orders_account.py index 5115e88..e7e46d6 100644 --- a/tests/test_open_orders_account.py +++ b/tests/test_open_orders_account.py @@ -3,7 +3,7 @@ import base64 import pytest from solana.publickey import PublicKey -from src.open_orders_account import OPEN_ORDERS_LAYOUT, OpenOrdersAccount +from pyserum.open_orders_account import OPEN_ORDERS_LAYOUT, OpenOrdersAccount from .binary_file_path import OPEN_ORDER_ACCOUNT_BIN_PATH diff --git a/tests/test_queue.py b/tests/test_queue.py index 8965485..3c3ac8c 100644 --- a/tests/test_queue.py +++ b/tests/test_queue.py @@ -1,6 +1,6 @@ import base64 -from src.market._internal.queue import decode_event_queue +from pyserum.market._internal.queue import decode_event_queue from .binary_file_path import EVENT_QUEUE_BIN_PATH diff --git a/tests/test_slab.py b/tests/test_slab.py index 54eef01..d6fde80 100644 --- a/tests/test_slab.py +++ b/tests/test_slab.py @@ -2,8 +2,8 @@ import base64 -from src._layouts.slab import ORDER_BOOK_LAYOUT, SLAB_HEADER_LAYOUT, SLAB_LAYOUT, SLAB_NODE_LAYOUT -from src.market._internal.slab import Slab +from pyserum._layouts.slab import ORDER_BOOK_LAYOUT, SLAB_HEADER_LAYOUT, SLAB_LAYOUT, SLAB_NODE_LAYOUT +from pyserum.market._internal.slab import Slab from .binary_file_path import ASK_ORDER_BIN_PATH