diff --git a/.gitignore b/.gitignore index 3522179..fdcc64c 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,5 @@ venv.bak/ # other .vscode/ + +.master.json \ No newline at end of file diff --git a/docs/account.md b/docs/account.md new file mode 100644 index 0000000..e0e8ef5 --- /dev/null +++ b/docs/account.md @@ -0,0 +1 @@ +::: pyokx.account.Account \ No newline at end of file diff --git a/docs/assets/images/get-pos.png b/docs/assets/images/get-pos.png new file mode 100644 index 0000000..65a71a8 Binary files /dev/null and b/docs/assets/images/get-pos.png differ diff --git a/docs/block_trading.md b/docs/block_trading.md new file mode 100644 index 0000000..a020702 --- /dev/null +++ b/docs/block_trading.md @@ -0,0 +1 @@ +::: pyokx.block_trading.Blocktrading \ No newline at end of file diff --git a/docs/convert.md b/docs/convert.md new file mode 100644 index 0000000..cd4bdae --- /dev/null +++ b/docs/convert.md @@ -0,0 +1 @@ +::: pyokx.convert.Convert \ No newline at end of file diff --git a/docs/copy_trading.md b/docs/copy_trading.md new file mode 100644 index 0000000..6e769dd --- /dev/null +++ b/docs/copy_trading.md @@ -0,0 +1 @@ +::: pyokx.copy_trading.CopyTrading \ No newline at end of file diff --git a/docs/earn.md b/docs/earn.md new file mode 100644 index 0000000..b931371 --- /dev/null +++ b/docs/earn.md @@ -0,0 +1 @@ +::: pyokx.earn.Earn \ No newline at end of file diff --git a/docs/funding.md b/docs/funding.md new file mode 100644 index 0000000..36f0ea1 --- /dev/null +++ b/docs/funding.md @@ -0,0 +1 @@ +::: pyokx.funding.Funding \ No newline at end of file diff --git a/docs/grid_trading.md b/docs/grid_trading.md new file mode 100644 index 0000000..831afeb --- /dev/null +++ b/docs/grid_trading.md @@ -0,0 +1 @@ +::: pyokx.grid_trading.GridTrading \ No newline at end of file diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..23eb5b7 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,130 @@ +# pyokx +[![Downloads](https://pepy.tech/badge/pyokx)](https://pepy.tech/project/pyokx) +![Tests](https://github.com/nicelgueta/pyokx/actions/workflows/pyokx.yml/badge.svg) +## Installation + +```shell +pip install pyokx +``` + +## Introduction + +pyokx is a completely unofficial python API wrapper developed to interact with the OKX V5 API. +It's unique insofar as that it has been developed by scraping the API documentation to dynamically generate python code to provide an intuitive +pythonic interface for exact same API. This idea essentially is to avoid the need to create separate documentation for this wrapper and instead you can simply refer to the official OKX docs for API usage. + +It's used by creating a base client instance to make and receive requests and passing that client to each API class (`APIComponent`), which has been dynamically generated from the API docs. + + +**Let's start with an example.** + +Let's say we want to check all current positions. + +Check out the docs for get balance here: https://www.okx.com/docs-v5/en/#rest-api-account-get-positions + +We can see the endpoint belongs to the Account API and needs to be called with 3 parameters: + +![OKX-docs](assets/images/get-pos.png) + +In pyokx, you can see the method signature for the Account class is exactly the same: +```python +def get_positions( + self, + instType: str = None, + instId: str = None, + posId: str = None, + use_proxy: bool = False, + ) -> APIReturn: +``` + +So this can be easily implemented like so: + +1. Create `.env` file that contains your API information: +``` + KEY = replace_your_key_here + SECRET = replace_your_secret_here + PASSPHRASE = replace_your_passphrase_here +``` + +2. Read API information from `.env` and create the base client: +```python +import os + +# python-dotenv should have been installed from the dependencies +from dotenv import load_dotenv +from pyokx import OKXClient, Account + +# read information from .env file +load_dotenv() + +# create the base client: +client = OKXClient( + key = os.getenv('KEY'), + secret = os.getenv('SECRET'), + passphrase = os.getenv('PASSPHRASE'), +) +... +``` + +3. Now you can create Account object and call endpoints +```python +... +# create a component for the Account API by passing the client dependency +account = Account(client) + +# get positions +api_response = account.get_positions() + +# you can convert to a pandas dataframe to make it more readable +df_response = api_response.to_df() +print(df_response) + +# or you can get the raw response +raw_response = api_response.response +print(raw_response) +``` + +That simple. + +______ + + +## Key features + +### APIReturn + +This is essentially a wrapper around the response that is returned from every endpoint. This is to provide some useful helper methods such as dataframe conversion. + +### Proxies + +As is common with a lot of exchange APIs, for calls that require authentication (usually account/trade-related), it is strongly encouraged to limit your API key to a select list IP addresses to protect your account. On some systems this may require routing traffic through a forward proxy. pyokx supports this pattern by allowing you to pass the necessary proxies to the base client and you can trigger this behaviour by setting the `use_proxy` parameter to `True`. +For example: +```python +proxies = { + "http": "http://your-proxy-server.com", + "https": "https://your-proxy-server.com", +} +client = OKXClient( + key="key", + secret="secret", + passphrase="passphrase", + proxies=proxies +) + +# trigger the use of the proxy server with use_proxy +account = Account(client) +api_response = account.get_positions(use_proxy=True) + +``` + +## Development progress + +**It's still a very early version - so issues, feature requests and bugs are very welcome!** + +- [x] REST API implementation. +- [x] Fix pythonic naming conventions when API names contain special characters +- [x] Enhance documentation +- [ ] Websocket API implementation. + +## Disclaimer +> NB. pyokx is totally unofficial and is in no way affiliated with OKEX Crypto exchange and simply exists as a helpful wrapper to interact with the V5 API. \ No newline at end of file diff --git a/docs/market_data.md b/docs/market_data.md new file mode 100644 index 0000000..4d4cb7e --- /dev/null +++ b/docs/market_data.md @@ -0,0 +1 @@ +::: pyokx.market_data.MarketData \ No newline at end of file diff --git a/docs/public_data.md b/docs/public_data.md new file mode 100644 index 0000000..5cb7a92 --- /dev/null +++ b/docs/public_data.md @@ -0,0 +1 @@ +::: pyokx.public_data.PublicData \ No newline at end of file diff --git a/docs/recurring_buy.md b/docs/recurring_buy.md new file mode 100644 index 0000000..1437ff6 --- /dev/null +++ b/docs/recurring_buy.md @@ -0,0 +1 @@ +::: pyokx.recurring_buy.RecurringBuy \ No newline at end of file diff --git a/docs/savings.md b/docs/savings.md new file mode 100644 index 0000000..66c9e6a --- /dev/null +++ b/docs/savings.md @@ -0,0 +1 @@ +::: pyokx.savings.Savings \ No newline at end of file diff --git a/docs/status.md b/docs/status.md new file mode 100644 index 0000000..a5a3419 --- /dev/null +++ b/docs/status.md @@ -0,0 +1 @@ +::: pyokx.status.Status \ No newline at end of file diff --git a/docs/subaccount.md b/docs/subaccount.md new file mode 100644 index 0000000..2f9378d --- /dev/null +++ b/docs/subaccount.md @@ -0,0 +1 @@ +::: pyokx.subaccount.Subaccount \ No newline at end of file diff --git a/docs/trade.md b/docs/trade.md new file mode 100644 index 0000000..55221cb --- /dev/null +++ b/docs/trade.md @@ -0,0 +1 @@ +::: pyokx.trade.Trade \ No newline at end of file diff --git a/docs/trading_data.md b/docs/trading_data.md new file mode 100644 index 0000000..d2c182d --- /dev/null +++ b/docs/trading_data.md @@ -0,0 +1 @@ +::: pyokx.trading_data.TradingData \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..2174aa1 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,73 @@ +edit_uri: edit/main/docs/ +markdown_extensions: +- admonition +- attr_list +- codehilite +- md_in_html +- meta +- pymdownx.highlight: + use_pygments: true +- pymdownx.superfences +- pymdownx.tabbed +nav: +- Home: index.md +- API Reference: + - public_data.md + - grid_trading.md + - block_trading.md + - trading_data.md + - status.md + - savings.md + - earn.md + - funding.md + - recurring_buy.md + - subaccount.md + - trade.md + - market_data.md + - convert.md + - account.md + - copy_trading.md +plugins: +- search +- mkdocstrings: + handlers: + python: + rendering: + heading_level: 2 + show_bases: true + show_category_heading: true + show_object_full_path: false + show_root_heading: true + show_source: false +repo_url: https://github.com/nicelgueta/pyokx +site_name: pyokx +theme: + favicon: img/favicon.ico + font: + code: Source Code Pro + text: Inter + icon: + repo: fontawesome/brands/github + name: material + palette: + - media: (prefers-color-scheme) + toggle: + icon: material/brightness-auto + name: Switch to light mode + - accent: black + media: '(prefers-color-scheme: light)' + primary: black + scheme: default + toggle: + icon: material/weather-sunny + name: Switch to dark mode + - accent: black + media: '(prefers-color-scheme: dark)' + primary: black + scheme: slate + toggle: + icon: material/weather-night + name: Switch to light mode +watch: +- pyokx/ +- README.md diff --git a/poetry.lock b/poetry.lock index f498f9d..282ad9c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,3 +1,5 @@ +# This file is automatically @generated by Poetry and should not be changed by hand. + [[package]] name = "appnope" version = "0.1.3" @@ -5,6 +7,10 @@ description = "Disable App Nap on macOS >= 10.9" category = "dev" optional = false python-versions = "*" +files = [ + {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, + {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, +] [[package]] name = "asttokens" @@ -13,6 +19,10 @@ description = "Annotate AST trees with source code positions" category = "dev" optional = false python-versions = "*" +files = [ + {file = "asttokens-2.0.5-py2.py3-none-any.whl", hash = "sha256:0844691e88552595a6f4a4281a9f7f79b8dd45ca4ccea82e5e05b4bbdb76705c"}, + {file = "asttokens-2.0.5.tar.gz", hash = "sha256:9a54c114f02c7a9480d56550932546a3f1fe71d8a02f1bc7ccd0ee3ee35cf4d5"}, +] [package.dependencies] six = "*" @@ -27,6 +37,9 @@ description = "Atomic file writes." category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, +] [[package]] name = "attrs" @@ -35,12 +48,16 @@ description = "Classes Without Boilerplate" category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, + {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, +] [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] -docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] +dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "six", "sphinx", "sphinx-notfound-page", "zope.interface"] +docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] +tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "six", "zope.interface"] +tests-no-zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "six"] [[package]] name = "autoflake" @@ -49,6 +66,9 @@ description = "Removes unused imports and unused variables" category = "dev" optional = false python-versions = "*" +files = [ + {file = "autoflake-1.4.tar.gz", hash = "sha256:61a353012cff6ab94ca062823d1fb2f692c4acda51c76ff83a8d77915fba51ea"}, +] [package.dependencies] pyflakes = ">=1.1.0" @@ -60,6 +80,10 @@ description = "Specifications for callback functions passed in to an API" category = "dev" optional = false python-versions = "*" +files = [ + {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, + {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, +] [[package]] name = "beautifulsoup4" @@ -68,6 +92,10 @@ description = "Screen-scraping library" category = "dev" optional = false python-versions = ">=3.6.0" +files = [ + {file = "beautifulsoup4-4.11.1-py3-none-any.whl", hash = "sha256:58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30"}, + {file = "beautifulsoup4-4.11.1.tar.gz", hash = "sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693"}, +] [package.dependencies] soupsieve = ">1.2" @@ -83,6 +111,31 @@ description = "The uncompromising code formatter." category = "dev" optional = false python-versions = ">=3.6.2" +files = [ + {file = "black-22.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f586c26118bc6e714ec58c09df0157fe2d9ee195c764f630eb0d8e7ccce72e69"}, + {file = "black-22.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b270a168d69edb8b7ed32c193ef10fd27844e5c60852039599f9184460ce0807"}, + {file = "black-22.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6797f58943fceb1c461fb572edbe828d811e719c24e03375fd25170ada53825e"}, + {file = "black-22.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c85928b9d5f83b23cee7d0efcb310172412fbf7cb9d9ce963bd67fd141781def"}, + {file = "black-22.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f6fe02afde060bbeef044af7996f335fbe90b039ccf3f5eb8f16df8b20f77666"}, + {file = "black-22.6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cfaf3895a9634e882bf9d2363fed5af8888802d670f58b279b0bece00e9a872d"}, + {file = "black-22.6.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94783f636bca89f11eb5d50437e8e17fbc6a929a628d82304c80fa9cd945f256"}, + {file = "black-22.6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2ea29072e954a4d55a2ff58971b83365eba5d3d357352a07a7a4df0d95f51c78"}, + {file = "black-22.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e439798f819d49ba1c0bd9664427a05aab79bfba777a6db94fd4e56fae0cb849"}, + {file = "black-22.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:187d96c5e713f441a5829e77120c269b6514418f4513a390b0499b0987f2ff1c"}, + {file = "black-22.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:074458dc2f6e0d3dab7928d4417bb6957bb834434516f21514138437accdbe90"}, + {file = "black-22.6.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a218d7e5856f91d20f04e931b6f16d15356db1c846ee55f01bac297a705ca24f"}, + {file = "black-22.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:568ac3c465b1c8b34b61cd7a4e349e93f91abf0f9371eda1cf87194663ab684e"}, + {file = "black-22.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6c1734ab264b8f7929cef8ae5f900b85d579e6cbfde09d7387da8f04771b51c6"}, + {file = "black-22.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9a3ac16efe9ec7d7381ddebcc022119794872abce99475345c5a61aa18c45ad"}, + {file = "black-22.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:b9fd45787ba8aa3f5e0a0a98920c1012c884622c6c920dbe98dbd05bc7c70fbf"}, + {file = "black-22.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7ba9be198ecca5031cd78745780d65a3f75a34b2ff9be5837045dce55db83d1c"}, + {file = "black-22.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a3db5b6409b96d9bd543323b23ef32a1a2b06416d525d27e0f67e74f1446c8f2"}, + {file = "black-22.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:560558527e52ce8afba936fcce93a7411ab40c7d5fe8c2463e279e843c0328ee"}, + {file = "black-22.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b154e6bbde1e79ea3260c4b40c0b7b3109ffcdf7bc4ebf8859169a6af72cd70b"}, + {file = "black-22.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:4af5bc0e1f96be5ae9bd7aaec219c901a94d6caa2484c21983d043371c733fc4"}, + {file = "black-22.6.0-py3-none-any.whl", hash = "sha256:ac609cf8ef5e7115ddd07d85d988d074ed00e10fbc3445aee393e70164a2219c"}, + {file = "black-22.6.0.tar.gz", hash = "sha256:6c6d39e28aed379aec40da1c65434c77d75e65bb59a1e1c283de545fb4e7c6c9"}, +] [package.dependencies] click = ">=8.0.0" @@ -105,6 +158,9 @@ description = "Dummy package for Beautiful Soup" category = "dev" optional = false python-versions = "*" +files = [ + {file = "bs4-0.0.1.tar.gz", hash = "sha256:36ecea1fd7cc5c0c6e4a1ff075df26d50da647b75376626cc186e2212886dd3a"}, +] [package.dependencies] beautifulsoup4 = "*" @@ -116,6 +172,10 @@ description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, + {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"}, +] [[package]] name = "cffi" @@ -124,6 +184,72 @@ description = "Foreign Function Interface for Python calling C code." category = "dev" optional = false python-versions = "*" +files = [ + {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, +] [package.dependencies] pycparser = "*" @@ -135,9 +261,13 @@ description = "The Real First Universal Charset Detector. Open, modern and activ category = "main" optional = false python-versions = ">=3.6.0" +files = [ + {file = "charset-normalizer-2.1.0.tar.gz", hash = "sha256:575e708016ff3a5e3681541cb9d79312c416835686d054a23accb873b254f413"}, + {file = "charset_normalizer-2.1.0-py3-none-any.whl", hash = "sha256:5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5"}, +] [package.extras] -unicode_backport = ["unicodedata2"] +unicode-backport = ["unicodedata2"] [[package]] name = "click" @@ -146,6 +276,10 @@ description = "Composable command line interface toolkit" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} @@ -157,6 +291,10 @@ description = "Cross-platform colored terminal text." category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, + {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, +] [[package]] name = "coverage" @@ -165,6 +303,49 @@ description = "Code coverage measurement for Python" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "coverage-6.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f50d3a822947572496ea922ee7825becd8e3ae6fbd2400cd8236b7d64b17f285"}, + {file = "coverage-6.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d5191d53afbe5b6059895fa7f58223d3751c42b8101fb3ce767e1a0b1a1d8f87"}, + {file = "coverage-6.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04010af3c06ce2bfeb3b1e4e05d136f88d88c25f76cd4faff5d1fd84d11581ea"}, + {file = "coverage-6.4.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6630d8d943644ea62132789940ca97d05fac83f73186eaf0930ffa715fbdab6b"}, + {file = "coverage-6.4.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05de0762c1caed4a162b3e305f36cf20a548ff4da0be6766ad5c870704be3660"}, + {file = "coverage-6.4.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e3a41aad5919613483aad9ebd53336905cab1bd6788afd3995c2a972d89d795"}, + {file = "coverage-6.4.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a2738ba1ee544d6f294278cfb6de2dc1f9a737a780469b5366e662a218f806c3"}, + {file = "coverage-6.4.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a0d2df4227f645a879010461df2cea6b7e3fb5a97d7eafa210f7fb60345af9e8"}, + {file = "coverage-6.4.3-cp310-cp310-win32.whl", hash = "sha256:73a10939dc345460ca0655356a470dd3de9759919186a82383c87b6eb315faf2"}, + {file = "coverage-6.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:53c8edd3b83a4ddba3d8c506f1359401e7770b30f2188f15c17a338adf5a14db"}, + {file = "coverage-6.4.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f1eda5cae434282712e40b42aaf590b773382afc3642786ac3ed39053973f61f"}, + {file = "coverage-6.4.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59fc88bc13e30f25167e807b8cad3c41b7218ef4473a20c86fd98a7968733083"}, + {file = "coverage-6.4.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d75314b00825d70e1e34b07396e23f47ed1d4feedc0122748f9f6bd31a544840"}, + {file = "coverage-6.4.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52f8b9fcf3c5e427d51bbab1fb92b575a9a9235d516f175b24712bcd4b5be917"}, + {file = "coverage-6.4.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5a559aab40c716de80c7212295d0dc96bc1b6c719371c20dd18c5187c3155518"}, + {file = "coverage-6.4.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:306788fd019bb90e9cbb83d3f3c6becad1c048dd432af24f8320cf38ac085684"}, + {file = "coverage-6.4.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:920a734fe3d311ca01883b4a19aa386c97b82b69fbc023458899cff0a0d621b9"}, + {file = "coverage-6.4.3-cp37-cp37m-win32.whl", hash = "sha256:ab9ef0187d6c62b09dec83a84a3b94f71f9690784c84fd762fb3cf2d2b44c914"}, + {file = "coverage-6.4.3-cp37-cp37m-win_amd64.whl", hash = "sha256:39ebd8e120cb77a06ee3d5fc26f9732670d1c397d7cd3acf02f6f62693b89b80"}, + {file = "coverage-6.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc698580216050b5f4a34d2cdd2838b429c53314f1c4835fab7338200a8396f2"}, + {file = "coverage-6.4.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:877ee5478fd78e100362aed56db47ccc5f23f6e7bb035a8896855f4c3e49bc9b"}, + {file = "coverage-6.4.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:555a498999c44f5287cc95500486cd0d4f021af9162982cbe504d4cb388f73b5"}, + {file = "coverage-6.4.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eff095a5aac7011fdb51a2c82a8fae9ec5211577f4b764e1e59cfa27ceeb1b59"}, + {file = "coverage-6.4.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5de1e9335e2569974e20df0ce31493d315a830d7987e71a24a2a335a8d8459d3"}, + {file = "coverage-6.4.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7856ea39059d75f822ff0df3a51ea6d76307c897048bdec3aad1377e4e9dca20"}, + {file = "coverage-6.4.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:411fdd9f4203afd93b056c0868c8f9e5e16813e765de962f27e4e5798356a052"}, + {file = "coverage-6.4.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cdf7b83f04a313a21afb1f8730fe4dd09577fefc53bbdfececf78b2006f4268e"}, + {file = "coverage-6.4.3-cp38-cp38-win32.whl", hash = "sha256:ab2b1a89d2bc7647622e9eaf06128a5b5451dccf7c242deaa31420b055716481"}, + {file = "coverage-6.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:0e34247274bde982bbc613894d33f9e36358179db2ed231dd101c48dd298e7b0"}, + {file = "coverage-6.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b104b6b1827d6a22483c469e3983a204bcf9c6bf7544bf90362c4654ebc2edf3"}, + {file = "coverage-6.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:adf1a0d272633b21d645dd6e02e3293429c1141c7d65a58e4cbcd592d53b8e01"}, + {file = "coverage-6.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff9832434a9193fbd716fbe05f9276484e18d26cc4cf850853594bb322807ac3"}, + {file = "coverage-6.4.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:923f9084d7e1d31b5f74c92396b05b18921ed01ee5350402b561a79dce3ea48d"}, + {file = "coverage-6.4.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d64304acf79766e650f7acb81d263a3ea6e2d0d04c5172b7189180ff2c023c"}, + {file = "coverage-6.4.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:fc294de50941d3da66a09dca06e206297709332050973eca17040278cb0918ff"}, + {file = "coverage-6.4.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a42eaaae772f14a5194f181740a67bfd48e8806394b8c67aa4399e09d0d6b5db"}, + {file = "coverage-6.4.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4822327b35cb032ff16af3bec27f73985448f08e874146b5b101e0e558b613dd"}, + {file = "coverage-6.4.3-cp39-cp39-win32.whl", hash = "sha256:f217850ac0e046ede611312703423767ca032a7b952b5257efac963942c055de"}, + {file = "coverage-6.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:0a84376e4fd13cebce2c0ef8c2f037929c8307fb94af1e5dbe50272a1c651b5d"}, + {file = "coverage-6.4.3-pp36.pp37.pp38-none-any.whl", hash = "sha256:068d6f2a893af838291b8809c876973d885543411ea460f3e6886ac0ee941732"}, + {file = "coverage-6.4.3.tar.gz", hash = "sha256:ec2ae1f398e5aca655b7084392d23e80efb31f7a660d2eecf569fb9f79b3fb94"}, +] [package.dependencies] tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} @@ -179,6 +360,26 @@ description = "An implementation of the Debug Adapter Protocol for Python" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "debugpy-1.6.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:77a47d596ce8c69673d5f0c9876a80cb5a6cbc964f3b31b2d44683c7c01b6634"}, + {file = "debugpy-1.6.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:726e5cc0ed5bc63e821dc371d88ddae5cba85e2ad207bf5fefc808b29421cb4c"}, + {file = "debugpy-1.6.2-cp310-cp310-win32.whl", hash = "sha256:9809bd1cdc0026fab711e280e0cb5d8f89ae5f4f74701aba5bda9a20a6afb567"}, + {file = "debugpy-1.6.2-cp310-cp310-win_amd64.whl", hash = "sha256:40741d4bbf59baca1e97a5123514afcc036423caae5f24db23a865c0b4167c34"}, + {file = "debugpy-1.6.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:67749e972213c395647a8798cc8377646e581e1fe97d0b1b7607e6b112ae4511"}, + {file = "debugpy-1.6.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e3c43d650a1e5fa7110af380fb59061bcba1e7348c00237e7473c55ae499b96"}, + {file = "debugpy-1.6.2-cp37-cp37m-win32.whl", hash = "sha256:9e572c2ac3dd93f3f1a038a9226e7cc0d7326b8d345c9b9ce6fbf9cb9822e314"}, + {file = "debugpy-1.6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:ac5d9e625d291a041ff3eaf65bdb816eb79a5b204cf9f1ffaf9617c0eadf96fa"}, + {file = "debugpy-1.6.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:9f72435bc9a2026a35a41221beff853dd4b6b17567ba9b9d349ee9512eb71ce6"}, + {file = "debugpy-1.6.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aaf579de5ecd02634d601d7cf5b6baae5f5bab89a55ef78e0904d766ef477729"}, + {file = "debugpy-1.6.2-cp38-cp38-win32.whl", hash = "sha256:0984086a670f46c75b5046b39a55f34e4120bee78928ac4c3c7f1c7b8be1d8be"}, + {file = "debugpy-1.6.2-cp38-cp38-win_amd64.whl", hash = "sha256:19337bb8ff87da2535ac00ea3877ceaf40ff3c681421d1a96ab4d67dad031a16"}, + {file = "debugpy-1.6.2-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:163f282287ce68b00a51e9dcd7ad461ef288d740dcb3a2f22c01c62f31b62696"}, + {file = "debugpy-1.6.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4909bb2f8e5c8fe33d6ec5b7764100b494289252ebe94ec7838b30467435f1cb"}, + {file = "debugpy-1.6.2-cp39-cp39-win32.whl", hash = "sha256:3b4657d3cd20aa454b62a70040524d3e785efc9a8488d16cd0e6caeb7b2a3f07"}, + {file = "debugpy-1.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:79d9ac34542b830a7954ab111ad8a4c790f1f836b895d03223aea4216b739208"}, + {file = "debugpy-1.6.2-py2.py3-none-any.whl", hash = "sha256:0bfdcf261f97a603d7ef7ab6972cdf7136201fde93d19bf3f917d0d2e43a5694"}, + {file = "debugpy-1.6.2.zip", hash = "sha256:e6047272e97a11aa6898138c1c88c8cf61838deeb2a4f0a74e63bb567f8dafc6"}, +] [[package]] name = "decorator" @@ -187,6 +388,10 @@ description = "Decorators for Humans" category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] [[package]] name = "entrypoints" @@ -195,6 +400,10 @@ description = "Discover and load entry points from installed packages." category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"}, + {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"}, +] [[package]] name = "executing" @@ -203,6 +412,46 @@ description = "Get the currently executing AST node of a frame, and other inform category = "dev" optional = false python-versions = "*" +files = [ + {file = "executing-0.8.3-py2.py3-none-any.whl", hash = "sha256:d1eef132db1b83649a3905ca6dd8897f71ac6f8cac79a7e58a1a09cf137546c9"}, + {file = "executing-0.8.3.tar.gz", hash = "sha256:c6554e21c6b060590a6d3be4b82fb78f8f0194d809de5ea7df1c093763311501"}, +] + +[[package]] +name = "ghp-import" +version = "2.1.0" +description = "Copy your docs directly to the gh-pages branch." +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, + {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, +] + +[package.dependencies] +python-dateutil = ">=2.8.1" + +[package.extras] +dev = ["flake8", "markdown", "twine", "wheel"] + +[[package]] +name = "griffe" +version = "0.27.1" +description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "griffe-0.27.1-py3-none-any.whl", hash = "sha256:867008786a17532ec529cbf58cee7c4f131b85d61f38691c2046b1883f7be253"}, + {file = "griffe-0.27.1.tar.gz", hash = "sha256:f213e87f99bf3b76d2d4da999d5a38c2ec01b9a6ce3660c5ab52b663d785edba"}, +] + +[package.dependencies] +colorama = ">=0.4" + +[package.extras] +async = ["aiofiles (>=0.7,<1.0)"] [[package]] name = "html5lib" @@ -211,16 +460,20 @@ description = "HTML parser based on the WHATWG HTML specification" category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"}, + {file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"}, +] [package.dependencies] six = ">=1.9" webencodings = "*" [package.extras] -lxml = ["lxml"] -genshi = ["genshi"] +all = ["chardet (>=2.2)", "genshi", "lxml"] chardet = ["chardet (>=2.2)"] -all = ["lxml", "chardet (>=2.2)", "genshi"] +genshi = ["genshi"] +lxml = ["lxml"] [[package]] name = "idna" @@ -229,6 +482,30 @@ description = "Internationalized Domain Names in Applications (IDNA)" category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, + {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, +] + +[[package]] +name = "importlib-metadata" +version = "6.6.0" +description = "Read metadata from Python packages" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "importlib_metadata-6.6.0-py3-none-any.whl", hash = "sha256:43dd286a2cd8995d5eaef7fee2066340423b818ed3fd70adf0bad5f1fac53fed"}, + {file = "importlib_metadata-6.6.0.tar.gz", hash = "sha256:92501cdf9cc66ebd3e612f1b4f0c0765dfa42f0fa38ffb319b6bd84dd675d705"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] [[package]] name = "iniconfig" @@ -237,6 +514,10 @@ description = "iniconfig: brain-dead simple config-ini parsing" category = "dev" optional = false python-versions = "*" +files = [ + {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, + {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, +] [[package]] name = "ipykernel" @@ -245,6 +526,10 @@ description = "IPython Kernel for Jupyter" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "ipykernel-6.15.1-py3-none-any.whl", hash = "sha256:d8969c5b23b0e453a23166da5a669c954db399789293fcb03fec5cb25367e43c"}, + {file = "ipykernel-6.15.1.tar.gz", hash = "sha256:37acc3254caa8a0dafcddddc8dc863a60ad1b46487b68aee361d9a15bda98112"}, +] [package.dependencies] appnope = {version = "*", markers = "platform_system == \"Darwin\""} @@ -260,7 +545,7 @@ tornado = ">=6.1" traitlets = ">=5.1.0" [package.extras] -test = ["flaky", "ipyparallel", "pre-commit", "pytest-cov", "pytest-timeout", "pytest (>=6.0)"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=6.0)", "pytest-cov", "pytest-timeout"] [[package]] name = "ipython" @@ -269,6 +554,10 @@ description = "IPython: Productive Interactive Computing" category = "dev" optional = false python-versions = ">=3.8" +files = [ + {file = "ipython-8.4.0-py3-none-any.whl", hash = "sha256:7ca74052a38fa25fe9bedf52da0be7d3fdd2fb027c3b778ea78dfe8c212937d1"}, + {file = "ipython-8.4.0.tar.gz", hash = "sha256:f2db3a10254241d9b447232cec8b424847f338d9d36f9a577a6192c332a46abd"}, +] [package.dependencies] appnope = {version = "*", markers = "sys_platform == \"darwin\""} @@ -281,11 +570,12 @@ pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} pickleshare = "*" prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" pygments = ">=2.4.0" +setuptools = ">=18.5" stack-data = "*" traitlets = ">=5" [package.extras] -all = ["black", "Sphinx (>=1.3)", "ipykernel", "nbconvert", "nbformat", "ipywidgets", "notebook", "ipyparallel", "qtconsole", "pytest (<7.1)", "pytest-asyncio", "testpath", "curio", "matplotlib (!=3.2.0)", "numpy (>=1.19)", "pandas", "trio"] +all = ["Sphinx (>=1.3)", "black", "curio", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.19)", "pandas", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "testpath", "trio"] black = ["black"] doc = ["Sphinx (>=1.3)"] kernel = ["ipykernel"] @@ -295,7 +585,7 @@ notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] test = ["pytest (<7.1)", "pytest-asyncio", "testpath"] -test_extra = ["pytest (<7.1)", "pytest-asyncio", "testpath", "curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.19)", "pandas", "trio"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.19)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"] [[package]] name = "jedi" @@ -304,6 +594,10 @@ description = "An autocompletion tool for Python that can be used for text edito category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "jedi-0.18.1-py2.py3-none-any.whl", hash = "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d"}, + {file = "jedi-0.18.1.tar.gz", hash = "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab"}, +] [package.dependencies] parso = ">=0.8.0,<0.9.0" @@ -312,6 +606,24 @@ parso = ">=0.8.0,<0.9.0" qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<7.0.0)"] +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + [[package]] name = "jupyter-client" version = "7.3.4" @@ -319,6 +631,10 @@ description = "Jupyter protocol implementation and client libraries" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "jupyter_client-7.3.4-py3-none-any.whl", hash = "sha256:17d74b0d0a7b24f1c8c527b24fcf4607c56bee542ffe8e3418e50b21e514b621"}, + {file = "jupyter_client-7.3.4.tar.gz", hash = "sha256:aa9a6c32054b290374f95f73bb0cae91455c58dfb84f65c8591912b8f65e6d56"}, +] [package.dependencies] entrypoints = "*" @@ -330,7 +646,7 @@ tornado = ">=6.0" traitlets = "*" [package.extras] -doc = ["ipykernel", "myst-parser", "sphinx-rtd-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt"] +doc = ["ipykernel", "myst-parser", "sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] test = ["codecov", "coverage", "ipykernel (>=6.5)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"] [[package]] @@ -340,6 +656,10 @@ description = "Jupyter core package. A base package on which Jupyter projects re category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "jupyter_core-4.11.1-py3-none-any.whl", hash = "sha256:715e22bb6cc7db3718fddfac1f69f1c7e899ca00e42bdfd4bf3705452b9fd84a"}, + {file = "jupyter_core-4.11.1.tar.gz", hash = "sha256:2e5f244d44894c4154d06aeae3419dd7f1b0ef4494dc5584929b398c61cfd314"}, +] [package.dependencies] pywin32 = {version = ">=1.0", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} @@ -355,13 +675,17 @@ description = "Python logging made (stupidly) simple" category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "loguru-0.6.0-py3-none-any.whl", hash = "sha256:4e2414d534a2ab57573365b3e6d0234dfb1d84b68b7f3b948e6fb743860a77c3"}, + {file = "loguru-0.6.0.tar.gz", hash = "sha256:066bd06758d0a513e9836fd9c6b5a75bfb3fd36841f4b996bc60b547a309d41c"}, +] [package.dependencies] colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} [package.extras] -dev = ["colorama (>=0.3.4)", "docutils (==0.16)", "flake8 (>=3.7.7)", "tox (>=3.9.0)", "pytest (>=4.6.2)", "pytest-cov (>=2.7.1)", "black (>=19.10b0)", "isort (>=5.1.1)", "Sphinx (>=4.1.1)", "sphinx-autobuild (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)"] +dev = ["Sphinx (>=4.1.1)", "black (>=19.10b0)", "colorama (>=0.3.4)", "docutils (==0.16)", "flake8 (>=3.7.7)", "isort (>=5.1.1)", "pytest (>=4.6.2)", "pytest-cov (>=2.7.1)", "sphinx-autobuild (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)", "tox (>=3.9.0)"] [[package]] name = "lxml" @@ -370,13 +694,163 @@ description = "Powerful and Pythonic XML processing library combining libxml2/li category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" +files = [ + {file = "lxml-4.9.1-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:98cafc618614d72b02185ac583c6f7796202062c41d2eeecdf07820bad3295ed"}, + {file = "lxml-4.9.1-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c62e8dd9754b7debda0c5ba59d34509c4688f853588d75b53c3791983faa96fc"}, + {file = "lxml-4.9.1-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21fb3d24ab430fc538a96e9fbb9b150029914805d551deeac7d7822f64631dfc"}, + {file = "lxml-4.9.1-cp27-cp27m-win32.whl", hash = "sha256:86e92728ef3fc842c50a5cb1d5ba2bc66db7da08a7af53fb3da79e202d1b2cd3"}, + {file = "lxml-4.9.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4cfbe42c686f33944e12f45a27d25a492cc0e43e1dc1da5d6a87cbcaf2e95627"}, + {file = "lxml-4.9.1-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dad7b164905d3e534883281c050180afcf1e230c3d4a54e8038aa5cfcf312b84"}, + {file = "lxml-4.9.1-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a614e4afed58c14254e67862456d212c4dcceebab2eaa44d627c2ca04bf86837"}, + {file = "lxml-4.9.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f9ced82717c7ec65a67667bb05865ffe38af0e835cdd78728f1209c8fffe0cad"}, + {file = "lxml-4.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:d9fc0bf3ff86c17348dfc5d322f627d78273eba545db865c3cd14b3f19e57fa5"}, + {file = "lxml-4.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e5f66bdf0976ec667fc4594d2812a00b07ed14d1b44259d19a41ae3fff99f2b8"}, + {file = "lxml-4.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fe17d10b97fdf58155f858606bddb4e037b805a60ae023c009f760d8361a4eb8"}, + {file = "lxml-4.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8caf4d16b31961e964c62194ea3e26a0e9561cdf72eecb1781458b67ec83423d"}, + {file = "lxml-4.9.1-cp310-cp310-win32.whl", hash = "sha256:4780677767dd52b99f0af1f123bc2c22873d30b474aa0e2fc3fe5e02217687c7"}, + {file = "lxml-4.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:b122a188cd292c4d2fcd78d04f863b789ef43aa129b233d7c9004de08693728b"}, + {file = "lxml-4.9.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:be9eb06489bc975c38706902cbc6888f39e946b81383abc2838d186f0e8b6a9d"}, + {file = "lxml-4.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:f1be258c4d3dc609e654a1dc59d37b17d7fef05df912c01fc2e15eb43a9735f3"}, + {file = "lxml-4.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:927a9dd016d6033bc12e0bf5dee1dde140235fc8d0d51099353c76081c03dc29"}, + {file = "lxml-4.9.1-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9232b09f5efee6a495a99ae6824881940d6447debe272ea400c02e3b68aad85d"}, + {file = "lxml-4.9.1-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:04da965dfebb5dac2619cb90fcf93efdb35b3c6994fea58a157a834f2f94b318"}, + {file = "lxml-4.9.1-cp35-cp35m-win32.whl", hash = "sha256:4d5bae0a37af799207140652a700f21a85946f107a199bcb06720b13a4f1f0b7"}, + {file = "lxml-4.9.1-cp35-cp35m-win_amd64.whl", hash = "sha256:4878e667ebabe9b65e785ac8da4d48886fe81193a84bbe49f12acff8f7a383a4"}, + {file = "lxml-4.9.1-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:1355755b62c28950f9ce123c7a41460ed9743c699905cbe664a5bcc5c9c7c7fb"}, + {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:bcaa1c495ce623966d9fc8a187da80082334236a2a1c7e141763ffaf7a405067"}, + {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6eafc048ea3f1b3c136c71a86db393be36b5b3d9c87b1c25204e7d397cee9536"}, + {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:13c90064b224e10c14dcdf8086688d3f0e612db53766e7478d7754703295c7c8"}, + {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206a51077773c6c5d2ce1991327cda719063a47adc02bd703c56a662cdb6c58b"}, + {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e8f0c9d65da595cfe91713bc1222af9ecabd37971762cb830dea2fc3b3bb2acf"}, + {file = "lxml-4.9.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8f0a4d179c9a941eb80c3a63cdb495e539e064f8054230844dcf2fcb812b71d3"}, + {file = "lxml-4.9.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:830c88747dce8a3e7525defa68afd742b4580df6aa2fdd6f0855481e3994d391"}, + {file = "lxml-4.9.1-cp36-cp36m-win32.whl", hash = "sha256:1e1cf47774373777936c5aabad489fef7b1c087dcd1f426b621fda9dcc12994e"}, + {file = "lxml-4.9.1-cp36-cp36m-win_amd64.whl", hash = "sha256:5974895115737a74a00b321e339b9c3f45c20275d226398ae79ac008d908bff7"}, + {file = "lxml-4.9.1-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:1423631e3d51008871299525b541413c9b6c6423593e89f9c4cfbe8460afc0a2"}, + {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:2aaf6a0a6465d39b5ca69688fce82d20088c1838534982996ec46633dc7ad6cc"}, + {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:9f36de4cd0c262dd9927886cc2305aa3f2210db437aa4fed3fb4940b8bf4592c"}, + {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae06c1e4bc60ee076292e582a7512f304abdf6c70db59b56745cca1684f875a4"}, + {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:57e4d637258703d14171b54203fd6822fda218c6c2658a7d30816b10995f29f3"}, + {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6d279033bf614953c3fc4a0aa9ac33a21e8044ca72d4fa8b9273fe75359d5cca"}, + {file = "lxml-4.9.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a60f90bba4c37962cbf210f0188ecca87daafdf60271f4c6948606e4dabf8785"}, + {file = "lxml-4.9.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6ca2264f341dd81e41f3fffecec6e446aa2121e0b8d026fb5130e02de1402785"}, + {file = "lxml-4.9.1-cp37-cp37m-win32.whl", hash = "sha256:27e590352c76156f50f538dbcebd1925317a0f70540f7dc8c97d2931c595783a"}, + {file = "lxml-4.9.1-cp37-cp37m-win_amd64.whl", hash = "sha256:eea5d6443b093e1545ad0210e6cf27f920482bfcf5c77cdc8596aec73523bb7e"}, + {file = "lxml-4.9.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:f05251bbc2145349b8d0b77c0d4e5f3b228418807b1ee27cefb11f69ed3d233b"}, + {file = "lxml-4.9.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:487c8e61d7acc50b8be82bda8c8d21d20e133c3cbf41bd8ad7eb1aaeb3f07c97"}, + {file = "lxml-4.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d1a92d8e90b286d491e5626af53afef2ba04da33e82e30744795c71880eaa21"}, + {file = "lxml-4.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:b570da8cd0012f4af9fa76a5635cd31f707473e65a5a335b186069d5c7121ff2"}, + {file = "lxml-4.9.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ef87fca280fb15342726bd5f980f6faf8b84a5287fcc2d4962ea8af88b35130"}, + {file = "lxml-4.9.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:93e414e3206779ef41e5ff2448067213febf260ba747fc65389a3ddaa3fb8715"}, + {file = "lxml-4.9.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6653071f4f9bac46fbc30f3c7838b0e9063ee335908c5d61fb7a4a86c8fd2036"}, + {file = "lxml-4.9.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:32a73c53783becdb7eaf75a2a1525ea8e49379fb7248c3eeefb9412123536387"}, + {file = "lxml-4.9.1-cp38-cp38-win32.whl", hash = "sha256:1a7c59c6ffd6ef5db362b798f350e24ab2cfa5700d53ac6681918f314a4d3b94"}, + {file = "lxml-4.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:1436cf0063bba7888e43f1ba8d58824f085410ea2025befe81150aceb123e345"}, + {file = "lxml-4.9.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:4beea0f31491bc086991b97517b9683e5cfb369205dac0148ef685ac12a20a67"}, + {file = "lxml-4.9.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:41fb58868b816c202e8881fd0f179a4644ce6e7cbbb248ef0283a34b73ec73bb"}, + {file = "lxml-4.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:bd34f6d1810d9354dc7e35158aa6cc33456be7706df4420819af6ed966e85448"}, + {file = "lxml-4.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:edffbe3c510d8f4bf8640e02ca019e48a9b72357318383ca60e3330c23aaffc7"}, + {file = "lxml-4.9.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6d949f53ad4fc7cf02c44d6678e7ff05ec5f5552b235b9e136bd52e9bf730b91"}, + {file = "lxml-4.9.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:079b68f197c796e42aa80b1f739f058dcee796dc725cc9a1be0cdb08fc45b000"}, + {file = "lxml-4.9.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9c3a88d20e4fe4a2a4a84bf439a5ac9c9aba400b85244c63a1ab7088f85d9d25"}, + {file = "lxml-4.9.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4e285b5f2bf321fc0857b491b5028c5f276ec0c873b985d58d7748ece1d770dd"}, + {file = "lxml-4.9.1-cp39-cp39-win32.whl", hash = "sha256:ef72013e20dd5ba86a8ae1aed7f56f31d3374189aa8b433e7b12ad182c0d2dfb"}, + {file = "lxml-4.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:10d2017f9150248563bb579cd0d07c61c58da85c922b780060dcc9a3aa9f432d"}, + {file = "lxml-4.9.1-pp37-pypy37_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0538747a9d7827ce3e16a8fdd201a99e661c7dee3c96c885d8ecba3c35d1032c"}, + {file = "lxml-4.9.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0645e934e940107e2fdbe7c5b6fb8ec6232444260752598bc4d09511bd056c0b"}, + {file = "lxml-4.9.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6daa662aba22ef3258934105be2dd9afa5bb45748f4f702a3b39a5bf53a1f4dc"}, + {file = "lxml-4.9.1-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:603a464c2e67d8a546ddaa206d98e3246e5db05594b97db844c2f0a1af37cf5b"}, + {file = "lxml-4.9.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c4b2e0559b68455c085fb0f6178e9752c4be3bba104d6e881eb5573b399d1eb2"}, + {file = "lxml-4.9.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0f3f0059891d3254c7b5fb935330d6db38d6519ecd238ca4fce93c234b4a0f73"}, + {file = "lxml-4.9.1-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c852b1530083a620cb0de5f3cd6826f19862bafeaf77586f1aef326e49d95f0c"}, + {file = "lxml-4.9.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:287605bede6bd36e930577c5925fcea17cb30453d96a7b4c63c14a257118dbb9"}, + {file = "lxml-4.9.1.tar.gz", hash = "sha256:fe749b052bb7233fe5d072fcb549221a8cb1a16725c47c37e42b0b9cb3ff2c3f"}, +] [package.extras] cssselect = ["cssselect (>=0.7)"] html5 = ["html5lib"] -htmlsoup = ["beautifulsoup4"] +htmlsoup = ["BeautifulSoup4"] source = ["Cython (>=0.29.7)"] +[[package]] +name = "markdown" +version = "3.3.7" +description = "Python implementation of Markdown." +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "Markdown-3.3.7-py3-none-any.whl", hash = "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621"}, + {file = "Markdown-3.3.7.tar.gz", hash = "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} + +[package.extras] +testing = ["coverage", "pyyaml"] + +[[package]] +name = "markupsafe" +version = "2.1.2" +description = "Safely add untrusted strings to HTML/XML markup." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, + {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, +] + [[package]] name = "matplotlib-inline" version = "0.1.3" @@ -384,35 +858,206 @@ description = "Inline Matplotlib backend for Jupyter" category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "matplotlib-inline-0.1.3.tar.gz", hash = "sha256:a04bfba22e0d1395479f866853ec1ee28eea1485c1d69a6faf00dc3e24ff34ee"}, + {file = "matplotlib_inline-0.1.3-py3-none-any.whl", hash = "sha256:aed605ba3b72462d64d475a21a9296f400a19c4f74a31b59103d2a99ffd5aa5c"}, +] [package.dependencies] traitlets = "*" +[[package]] +name = "mergedeep" +version = "1.3.4" +description = "A deep merge function for 🐍." +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, + {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, +] + +[[package]] +name = "mkdocs" +version = "1.4.2" +description = "Project documentation with Markdown." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs-1.4.2-py3-none-any.whl", hash = "sha256:c8856a832c1e56702577023cd64cc5f84948280c1c0fcc6af4cd39006ea6aa8c"}, + {file = "mkdocs-1.4.2.tar.gz", hash = "sha256:8947af423a6d0facf41ea1195b8e1e8c85ad94ac95ae307fe11232e0424b11c5"}, +] + +[package.dependencies] +click = ">=7.0" +colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} +ghp-import = ">=1.0" +importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} +jinja2 = ">=2.11.1" +markdown = ">=3.2.1,<3.4" +mergedeep = ">=1.3.4" +packaging = ">=20.5" +pyyaml = ">=5.1" +pyyaml-env-tag = ">=0.1" +watchdog = ">=2.0" + +[package.extras] +i18n = ["babel (>=2.9.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] + +[[package]] +name = "mkdocs-autorefs" +version = "0.4.1" +description = "Automatically link across pages in MkDocs." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs-autorefs-0.4.1.tar.gz", hash = "sha256:70748a7bd025f9ecd6d6feeba8ba63f8e891a1af55f48e366d6d6e78493aba84"}, + {file = "mkdocs_autorefs-0.4.1-py3-none-any.whl", hash = "sha256:a2248a9501b29dc0cc8ba4c09f4f47ff121945f6ce33d760f145d6f89d313f5b"}, +] + +[package.dependencies] +Markdown = ">=3.3" +mkdocs = ">=1.1" + +[[package]] +name = "mkdocs-material" +version = "9.1.8" +description = "Documentation that simply works" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs_material-9.1.8-py3-none-any.whl", hash = "sha256:ac76e31bf52b2742c08a9d6629d64878f32dda5c949cd371082e25106c9be7dd"}, + {file = "mkdocs_material-9.1.8.tar.gz", hash = "sha256:616ef98fc143b3ec8c559e2fec85f32103d2093e9c88333964d93105ea2d670b"}, +] + +[package.dependencies] +colorama = ">=0.4" +jinja2 = ">=3.0" +markdown = ">=3.2" +mkdocs = ">=1.4.2" +mkdocs-material-extensions = ">=1.1" +pygments = ">=2.14" +pymdown-extensions = ">=9.9.1" +regex = ">=2022.4.24" +requests = ">=2.26" + +[[package]] +name = "mkdocs-material-extensions" +version = "1.1.1" +description = "Extension pack for Python Markdown and MkDocs Material." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs_material_extensions-1.1.1-py3-none-any.whl", hash = "sha256:e41d9f38e4798b6617ad98ca8f7f1157b1e4385ac1459ca1e4ea219b556df945"}, + {file = "mkdocs_material_extensions-1.1.1.tar.gz", hash = "sha256:9c003da71e2cc2493d910237448c672e00cefc800d3d6ae93d2fc69979e3bd93"}, +] + +[[package]] +name = "mkdocstrings" +version = "0.21.2" +description = "Automatic documentation from sources, for MkDocs." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocstrings-0.21.2-py3-none-any.whl", hash = "sha256:949ef8da92df9d692ca07be50616459a6b536083a25520fd54b00e8814ce019b"}, + {file = "mkdocstrings-0.21.2.tar.gz", hash = "sha256:304e56a2e90595708a38a13a278e538a67ad82052dd5c8b71f77a604a4f3d911"}, +] + +[package.dependencies] +Jinja2 = ">=2.11.1" +Markdown = ">=3.3" +MarkupSafe = ">=1.1" +mkdocs = ">=1.2" +mkdocs-autorefs = ">=0.3.1" +pymdown-extensions = ">=6.3" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.10\""} + +[package.extras] +crystal = ["mkdocstrings-crystal (>=0.3.4)"] +python = ["mkdocstrings-python (>=0.5.2)"] +python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] + +[[package]] +name = "mkdocstrings-python" +version = "0.9.0" +description = "A Python handler for mkdocstrings." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocstrings-python-0.9.0.tar.gz", hash = "sha256:da0a54d7d46523a25a5227f0ecc74b491291bd9d36fc71445bfb0ea64283e287"}, + {file = "mkdocstrings_python-0.9.0-py3-none-any.whl", hash = "sha256:00e02b5d3d444f9abdec2398f9ba0c73e15deab78685f793f5801fd4d62a5b6f"}, +] + +[package.dependencies] +griffe = ">=0.24" +mkdocstrings = ">=0.20" + [[package]] name = "mypy" -version = "0.950" +version = "1.3.0" description = "Optional static typing for Python" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "mypy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c1eb485cea53f4f5284e5baf92902cd0088b24984f4209e25981cc359d64448d"}, + {file = "mypy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4c99c3ecf223cf2952638da9cd82793d8f3c0c5fa8b6ae2b2d9ed1e1ff51ba85"}, + {file = "mypy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:550a8b3a19bb6589679a7c3c31f64312e7ff482a816c96e0cecec9ad3a7564dd"}, + {file = "mypy-1.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cbc07246253b9e3d7d74c9ff948cd0fd7a71afcc2b77c7f0a59c26e9395cb152"}, + {file = "mypy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:a22435632710a4fcf8acf86cbd0d69f68ac389a3892cb23fbad176d1cddaf228"}, + {file = "mypy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6e33bb8b2613614a33dff70565f4c803f889ebd2f859466e42b46e1df76018dd"}, + {file = "mypy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7d23370d2a6b7a71dc65d1266f9a34e4cde9e8e21511322415db4b26f46f6b8c"}, + {file = "mypy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:658fe7b674769a0770d4b26cb4d6f005e88a442fe82446f020be8e5f5efb2fae"}, + {file = "mypy-1.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6e42d29e324cdda61daaec2336c42512e59c7c375340bd202efa1fe0f7b8f8ca"}, + {file = "mypy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:d0b6c62206e04061e27009481cb0ec966f7d6172b5b936f3ead3d74f29fe3dcf"}, + {file = "mypy-1.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:76ec771e2342f1b558c36d49900dfe81d140361dd0d2df6cd71b3db1be155409"}, + {file = "mypy-1.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc95f8386314272bbc817026f8ce8f4f0d2ef7ae44f947c4664efac9adec929"}, + {file = "mypy-1.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:faff86aa10c1aa4a10e1a301de160f3d8fc8703b88c7e98de46b531ff1276a9a"}, + {file = "mypy-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:8c5979d0deb27e0f4479bee18ea0f83732a893e81b78e62e2dda3e7e518c92ee"}, + {file = "mypy-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c5d2cc54175bab47011b09688b418db71403aefad07cbcd62d44010543fc143f"}, + {file = "mypy-1.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:87df44954c31d86df96c8bd6e80dfcd773473e877ac6176a8e29898bfb3501cb"}, + {file = "mypy-1.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:473117e310febe632ddf10e745a355714e771ffe534f06db40702775056614c4"}, + {file = "mypy-1.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:74bc9b6e0e79808bf8678d7678b2ae3736ea72d56eede3820bd3849823e7f305"}, + {file = "mypy-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:44797d031a41516fcf5cbfa652265bb994e53e51994c1bd649ffcd0c3a7eccbf"}, + {file = "mypy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ddae0f39ca146972ff6bb4399f3b2943884a774b8771ea0a8f50e971f5ea5ba8"}, + {file = "mypy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c4c42c60a8103ead4c1c060ac3cdd3ff01e18fddce6f1016e08939647a0e703"}, + {file = "mypy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e86c2c6852f62f8f2b24cb7a613ebe8e0c7dc1402c61d36a609174f63e0ff017"}, + {file = "mypy-1.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f9dca1e257d4cc129517779226753dbefb4f2266c4eaad610fc15c6a7e14283e"}, + {file = "mypy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:95d8d31a7713510685b05fbb18d6ac287a56c8f6554d88c19e73f724a445448a"}, + {file = "mypy-1.3.0-py3-none-any.whl", hash = "sha256:a8763e72d5d9574d45ce5881962bc8e9046bf7b375b0abf031f3e6811732a897"}, + {file = "mypy-1.3.0.tar.gz", hash = "sha256:e1f4d16e296f5135624b34e8fb741eb0eadedca90862405b1f1fde2040b9bd11"}, +] [package.dependencies] -mypy-extensions = ">=0.4.3" +mypy-extensions = ">=1.0.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typing-extensions = ">=3.10" [package.extras] dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] python2 = ["typed-ast (>=1.4.0,<2)"] reports = ["lxml"] [[package]] name = "mypy-extensions" -version = "0.4.3" -description = "Experimental type system extensions for programs checked with the mypy typechecker." +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] [[package]] name = "nest-asyncio" @@ -421,6 +1066,10 @@ description = "Patch asyncio to allow nested event loops" category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "nest_asyncio-1.5.5-py3-none-any.whl", hash = "sha256:b98e3ec1b246135e4642eceffa5a6c23a3ab12c82ff816a92c612d68205813b2"}, + {file = "nest_asyncio-1.5.5.tar.gz", hash = "sha256:e442291cd942698be619823a17a86a5759eabe1f8613084790de189fe9e16d65"}, +] [[package]] name = "numpy" @@ -429,6 +1078,30 @@ description = "NumPy is the fundamental package for array computing with Python. category = "main" optional = false python-versions = ">=3.8" +files = [ + {file = "numpy-1.23.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b15c3f1ed08df4980e02cc79ee058b788a3d0bef2fb3c9ca90bb8cbd5b8a3a04"}, + {file = "numpy-1.23.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ce242162015b7e88092dccd0e854548c0926b75c7924a3495e02c6067aba1f5"}, + {file = "numpy-1.23.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0d7447679ae9a7124385ccf0ea990bb85bb869cef217e2ea6c844b6a6855073"}, + {file = "numpy-1.23.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3119daed207e9410eaf57dcf9591fdc68045f60483d94956bee0bfdcba790953"}, + {file = "numpy-1.23.1-cp310-cp310-win32.whl", hash = "sha256:3ab67966c8d45d55a2bdf40701536af6443763907086c0a6d1232688e27e5447"}, + {file = "numpy-1.23.1-cp310-cp310-win_amd64.whl", hash = "sha256:1865fdf51446839ca3fffaab172461f2b781163f6f395f1aed256b1ddc253622"}, + {file = "numpy-1.23.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:aeba539285dcf0a1ba755945865ec61240ede5432df41d6e29fab305f4384db2"}, + {file = "numpy-1.23.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7e8229f3687cdadba2c4faef39204feb51ef7c1a9b669247d49a24f3e2e1617c"}, + {file = "numpy-1.23.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68b69f52e6545af010b76516f5daaef6173e73353e3295c5cb9f96c35d755641"}, + {file = "numpy-1.23.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1408c3527a74a0209c781ac82bde2182b0f0bf54dea6e6a363fe0cc4488a7ce7"}, + {file = "numpy-1.23.1-cp38-cp38-win32.whl", hash = "sha256:47f10ab202fe4d8495ff484b5561c65dd59177949ca07975663f4494f7269e3e"}, + {file = "numpy-1.23.1-cp38-cp38-win_amd64.whl", hash = "sha256:37e5ebebb0eb54c5b4a9b04e6f3018e16b8ef257d26c8945925ba8105008e645"}, + {file = "numpy-1.23.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:173f28921b15d341afadf6c3898a34f20a0569e4ad5435297ba262ee8941e77b"}, + {file = "numpy-1.23.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:876f60de09734fbcb4e27a97c9a286b51284df1326b1ac5f1bf0ad3678236b22"}, + {file = "numpy-1.23.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35590b9c33c0f1c9732b3231bb6a72d1e4f77872390c47d50a615686ae7ed3fd"}, + {file = "numpy-1.23.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a35c4e64dfca659fe4d0f1421fc0f05b8ed1ca8c46fb73d9e5a7f175f85696bb"}, + {file = "numpy-1.23.1-cp39-cp39-win32.whl", hash = "sha256:c2f91f88230042a130ceb1b496932aa717dcbd665350beb821534c5c7e15881c"}, + {file = "numpy-1.23.1-cp39-cp39-win_amd64.whl", hash = "sha256:37ece2bd095e9781a7156852e43d18044fd0d742934833335599c583618181b9"}, + {file = "numpy-1.23.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8002574a6b46ac3b5739a003b5233376aeac5163e5dcd43dd7ad062f3e186129"}, + {file = "numpy-1.23.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d732d17b8a9061540a10fda5bfeabca5785700ab5469a5e9b93aca5e2d3a5fb"}, + {file = "numpy-1.23.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:55df0f7483b822855af67e38fb3a526e787adf189383b4934305565d71c4b148"}, + {file = "numpy-1.23.1.tar.gz", hash = "sha256:d748ef349bfef2e1194b59da37ed5a29c19ea8d7e6342019921ba2ba4fd8b624"}, +] [[package]] name = "packaging" @@ -437,6 +1110,10 @@ description = "Core utilities for Python packages" category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, +] [package.dependencies] pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" @@ -448,6 +1125,29 @@ description = "Powerful data structures for data analysis, time series, and stat category = "main" optional = false python-versions = ">=3.8" +files = [ + {file = "pandas-1.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d51674ed8e2551ef7773820ef5dab9322be0828629f2cbf8d1fc31a0c4fed640"}, + {file = "pandas-1.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:16ad23db55efcc93fa878f7837267973b61ea85d244fc5ff0ccbcfa5638706c5"}, + {file = "pandas-1.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:958a0588149190c22cdebbc0797e01972950c927a11a900fe6c2296f207b1d6f"}, + {file = "pandas-1.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e48fbb64165cda451c06a0f9e4c7a16b534fcabd32546d531b3c240ce2844112"}, + {file = "pandas-1.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f803320c9da732cc79210d7e8cc5c8019aad512589c910c66529eb1b1818230"}, + {file = "pandas-1.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:2893e923472a5e090c2d5e8db83e8f907364ec048572084c7d10ef93546be6d1"}, + {file = "pandas-1.4.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:24ea75f47bbd5574675dae21d51779a4948715416413b30614c1e8b480909f81"}, + {file = "pandas-1.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d5ebc990bd34f4ac3c73a2724c2dcc9ee7bf1ce6cf08e87bb25c6ad33507e318"}, + {file = "pandas-1.4.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d6c0106415ff1a10c326c49bc5dd9ea8b9897a6ca0c8688eb9c30ddec49535ef"}, + {file = "pandas-1.4.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78b00429161ccb0da252229bcda8010b445c4bf924e721265bec5a6e96a92e92"}, + {file = "pandas-1.4.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dfbf16b1ea4f4d0ee11084d9c026340514d1d30270eaa82a9f1297b6c8ecbf0"}, + {file = "pandas-1.4.3-cp38-cp38-win32.whl", hash = "sha256:48350592665ea3cbcd07efc8c12ff12d89be09cd47231c7925e3b8afada9d50d"}, + {file = "pandas-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:605d572126eb4ab2eadf5c59d5d69f0608df2bf7bcad5c5880a47a20a0699e3e"}, + {file = "pandas-1.4.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a3924692160e3d847e18702bb048dc38e0e13411d2b503fecb1adf0fcf950ba4"}, + {file = "pandas-1.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:07238a58d7cbc8a004855ade7b75bbd22c0db4b0ffccc721556bab8a095515f6"}, + {file = "pandas-1.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:755679c49460bd0d2f837ab99f0a26948e68fa0718b7e42afbabd074d945bf84"}, + {file = "pandas-1.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41fc406e374590a3d492325b889a2686b31e7a7780bec83db2512988550dadbf"}, + {file = "pandas-1.4.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d9382f72a4f0e93909feece6fef5500e838ce1c355a581b3d8f259839f2ea76"}, + {file = "pandas-1.4.3-cp39-cp39-win32.whl", hash = "sha256:0daf876dba6c622154b2e6741f29e87161f844e64f84801554f879d27ba63c0d"}, + {file = "pandas-1.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:721a3dd2f06ef942f83a819c0f3f6a648b2830b191a72bbe9451bcd49c3bd42e"}, + {file = "pandas-1.4.3.tar.gz", hash = "sha256:2ff7788468e75917574f080cd4681b27e1a7bf36461fe968b49a87b5a54d007c"}, +] [package.dependencies] numpy = [ @@ -469,6 +1169,10 @@ description = "A Python Parser" category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, + {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, +] [package.extras] qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] @@ -481,6 +1185,10 @@ description = "Utility library for gitignore style pattern matching of file path category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ + {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, + {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, +] [[package]] name = "pexpect" @@ -489,6 +1197,10 @@ description = "Pexpect allows easy control of interactive console applications." category = "dev" optional = false python-versions = "*" +files = [ + {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, + {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, +] [package.dependencies] ptyprocess = ">=0.5" @@ -500,6 +1212,10 @@ description = "Tiny 'shelve'-like database with concurrency support" category = "dev" optional = false python-versions = "*" +files = [ + {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, + {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, +] [[package]] name = "platformdirs" @@ -508,10 +1224,14 @@ description = "A small Python module for determining appropriate platform-specif category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, + {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, +] [package.extras] -docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] -test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] +docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx (>=4)", "sphinx-autodoc-typehints (>=1.12)"] +test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] [[package]] name = "pluggy" @@ -520,6 +1240,10 @@ description = "plugin and hook calling mechanisms for python" category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, + {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, +] [package.extras] dev = ["pre-commit", "tox"] @@ -532,6 +1256,10 @@ description = "Library for building powerful interactive command lines in Python category = "dev" optional = false python-versions = ">=3.6.2" +files = [ + {file = "prompt_toolkit-3.0.30-py3-none-any.whl", hash = "sha256:d8916d3f62a7b67ab353a952ce4ced6a1d2587dfe9ef8ebc30dd7c386751f289"}, + {file = "prompt_toolkit-3.0.30.tar.gz", hash = "sha256:859b283c50bde45f5f97829f77a4674d1c1fcd88539364f1b28a37805cfd89c0"}, +] [package.dependencies] wcwidth = "*" @@ -543,9 +1271,43 @@ description = "Cross-platform lib for process and system monitoring in Python." category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "psutil-5.9.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:799759d809c31aab5fe4579e50addf84565e71c1dc9f1c31258f159ff70d3f87"}, + {file = "psutil-5.9.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9272167b5f5fbfe16945be3db475b3ce8d792386907e673a209da686176552af"}, + {file = "psutil-5.9.1-cp27-cp27m-win32.whl", hash = "sha256:0904727e0b0a038830b019551cf3204dd48ef5c6868adc776e06e93d615fc5fc"}, + {file = "psutil-5.9.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e7e10454cb1ab62cc6ce776e1c135a64045a11ec4c6d254d3f7689c16eb3efd2"}, + {file = "psutil-5.9.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:56960b9e8edcca1456f8c86a196f0c3d8e3e361320071c93378d41445ffd28b0"}, + {file = "psutil-5.9.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:44d1826150d49ffd62035785a9e2c56afcea66e55b43b8b630d7706276e87f22"}, + {file = "psutil-5.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7be9d7f5b0d206f0bbc3794b8e16fb7dbc53ec9e40bbe8787c6f2d38efcf6c9"}, + {file = "psutil-5.9.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd9246e4cdd5b554a2ddd97c157e292ac11ef3e7af25ac56b08b455c829dca8"}, + {file = "psutil-5.9.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29a442e25fab1f4d05e2655bb1b8ab6887981838d22effa2396d584b740194de"}, + {file = "psutil-5.9.1-cp310-cp310-win32.whl", hash = "sha256:20b27771b077dcaa0de1de3ad52d22538fe101f9946d6dc7869e6f694f079329"}, + {file = "psutil-5.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:58678bbadae12e0db55186dc58f2888839228ac9f41cc7848853539b70490021"}, + {file = "psutil-5.9.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:3a76ad658641172d9c6e593de6fe248ddde825b5866464c3b2ee26c35da9d237"}, + {file = "psutil-5.9.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a6a11e48cb93a5fa606306493f439b4aa7c56cb03fc9ace7f6bfa21aaf07c453"}, + {file = "psutil-5.9.1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:068935df39055bf27a29824b95c801c7a5130f118b806eee663cad28dca97685"}, + {file = "psutil-5.9.1-cp36-cp36m-win32.whl", hash = "sha256:0f15a19a05f39a09327345bc279c1ba4a8cfb0172cc0d3c7f7d16c813b2e7d36"}, + {file = "psutil-5.9.1-cp36-cp36m-win_amd64.whl", hash = "sha256:db417f0865f90bdc07fa30e1aadc69b6f4cad7f86324b02aa842034efe8d8c4d"}, + {file = "psutil-5.9.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:91c7ff2a40c373d0cc9121d54bc5f31c4fa09c346528e6a08d1845bce5771ffc"}, + {file = "psutil-5.9.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fea896b54f3a4ae6f790ac1d017101252c93f6fe075d0e7571543510f11d2676"}, + {file = "psutil-5.9.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3054e923204b8e9c23a55b23b6df73a8089ae1d075cb0bf711d3e9da1724ded4"}, + {file = "psutil-5.9.1-cp37-cp37m-win32.whl", hash = "sha256:d2d006286fbcb60f0b391741f520862e9b69f4019b4d738a2a45728c7e952f1b"}, + {file = "psutil-5.9.1-cp37-cp37m-win_amd64.whl", hash = "sha256:b14ee12da9338f5e5b3a3ef7ca58b3cba30f5b66f7662159762932e6d0b8f680"}, + {file = "psutil-5.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:19f36c16012ba9cfc742604df189f2f28d2720e23ff7d1e81602dbe066be9fd1"}, + {file = "psutil-5.9.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:944c4b4b82dc4a1b805329c980f270f170fdc9945464223f2ec8e57563139cf4"}, + {file = "psutil-5.9.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b6750a73a9c4a4e689490ccb862d53c7b976a2a35c4e1846d049dcc3f17d83b"}, + {file = "psutil-5.9.1-cp38-cp38-win32.whl", hash = "sha256:a8746bfe4e8f659528c5c7e9af5090c5a7d252f32b2e859c584ef7d8efb1e689"}, + {file = "psutil-5.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:79c9108d9aa7fa6fba6e668b61b82facc067a6b81517cab34d07a84aa89f3df0"}, + {file = "psutil-5.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:28976df6c64ddd6320d281128817f32c29b539a52bdae5e192537bc338a9ec81"}, + {file = "psutil-5.9.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b88f75005586131276634027f4219d06e0561292be8bd6bc7f2f00bdabd63c4e"}, + {file = "psutil-5.9.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:645bd4f7bb5b8633803e0b6746ff1628724668681a434482546887d22c7a9537"}, + {file = "psutil-5.9.1-cp39-cp39-win32.whl", hash = "sha256:32c52611756096ae91f5d1499fe6c53b86f4a9ada147ee42db4991ba1520e574"}, + {file = "psutil-5.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:f65f9a46d984b8cd9b3750c2bdb419b2996895b005aefa6cbaba9a143b1ce2c5"}, + {file = "psutil-5.9.1.tar.gz", hash = "sha256:57f1819b5d9e95cdfb0c881a8a5b7d542ed0b7c522d575706a80bedc848c8954"}, +] [package.extras] -test = ["ipaddress", "mock", "enum34", "pywin32", "wmi"] +test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] [[package]] name = "ptyprocess" @@ -554,6 +1316,10 @@ description = "Run a subprocess in a pseudo terminal" category = "dev" optional = false python-versions = "*" +files = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] [[package]] name = "pure-eval" @@ -562,6 +1328,10 @@ description = "Safely evaluate AST nodes without side effects" category = "dev" optional = false python-versions = "*" +files = [ + {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, + {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, +] [package.extras] tests = ["pytest"] @@ -573,6 +1343,10 @@ description = "library with cross-python path, ini-parsing, io, code, log facili category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] [[package]] name = "pycparser" @@ -581,6 +1355,10 @@ description = "C parser in Python" category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] [[package]] name = "pyflakes" @@ -589,14 +1367,41 @@ description = "passive checker of Python programs" category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "pyflakes-2.5.0-py2.py3-none-any.whl", hash = "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"}, + {file = "pyflakes-2.5.0.tar.gz", hash = "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3"}, +] [[package]] name = "pygments" -version = "2.12.0" +version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, + {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, +] + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pymdown-extensions" +version = "9.11" +description = "Extension pack for Python Markdown." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pymdown_extensions-9.11-py3-none-any.whl", hash = "sha256:a499191d8d869f30339de86fcf072a787e86c42b6f16f280f5c2cf174182b7f3"}, + {file = "pymdown_extensions-9.11.tar.gz", hash = "sha256:f7e86c1d3981f23d9dc43294488ecb54abadd05b0be4bf8f0e15efc90f7853ff"}, +] + +[package.dependencies] +markdown = ">=3.2" +pyyaml = "*" [[package]] name = "pyparsing" @@ -605,9 +1410,13 @@ description = "pyparsing module - Classes and methods to define and execute pars category = "dev" optional = false python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, +] [package.extras] -diagrams = ["railroad-diagrams", "jinja2"] +diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" @@ -616,6 +1425,10 @@ description = "pytest: simple powerful testing with Python" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "pytest-7.1.2-py3-none-any.whl", hash = "sha256:13d0e3ccfc2b6e26be000cb6568c832ba67ba32e719443bfe725814d3c42433c"}, + {file = "pytest-7.1.2.tar.gz", hash = "sha256:a06a0425453864a270bc45e71f783330a7428defb4230fb5e6a731fde06ecd45"}, +] [package.dependencies] atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} @@ -637,13 +1450,17 @@ description = "Pytest plugin for measuring coverage." category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"}, + {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"}, +] [package.dependencies] coverage = {version = ">=5.2.1", extras = ["toml"]} pytest = ">=4.6" [package.extras] -testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtualenv"] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] [[package]] name = "python-dateutil" @@ -652,6 +1469,10 @@ description = "Extensions to the standard Python datetime module" category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] [package.dependencies] six = ">=1.5" @@ -663,6 +1484,10 @@ description = "Read key-value pairs from a .env file and set them as environment category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "python-dotenv-0.20.0.tar.gz", hash = "sha256:b7e3b04a59693c42c36f9ab1cc2acc46fa5df8c78e178fc33a8d4cd05c8d498f"}, + {file = "python_dotenv-0.20.0-py3-none-any.whl", hash = "sha256:d92a187be61fe482e4fd675b6d52200e7be63a12b724abbf931a40ce4fa92938"}, +] [package.extras] cli = ["click (>=5.0)"] @@ -674,6 +1499,10 @@ description = "World timezone definitions, modern and historical" category = "main" optional = false python-versions = "*" +files = [ + {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"}, + {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"}, +] [[package]] name = "pywin32" @@ -682,6 +1511,87 @@ description = "Python for Window Extensions" category = "dev" optional = false python-versions = "*" +files = [ + {file = "pywin32-304-cp310-cp310-win32.whl", hash = "sha256:3c7bacf5e24298c86314f03fa20e16558a4e4138fc34615d7de4070c23e65af3"}, + {file = "pywin32-304-cp310-cp310-win_amd64.whl", hash = "sha256:4f32145913a2447736dad62495199a8e280a77a0ca662daa2332acf849f0be48"}, + {file = "pywin32-304-cp310-cp310-win_arm64.whl", hash = "sha256:d3ee45adff48e0551d1aa60d2ec066fec006083b791f5c3527c40cd8aefac71f"}, + {file = "pywin32-304-cp311-cp311-win32.whl", hash = "sha256:30c53d6ce44c12a316a06c153ea74152d3b1342610f1b99d40ba2795e5af0269"}, + {file = "pywin32-304-cp311-cp311-win_amd64.whl", hash = "sha256:7ffa0c0fa4ae4077e8b8aa73800540ef8c24530057768c3ac57c609f99a14fd4"}, + {file = "pywin32-304-cp311-cp311-win_arm64.whl", hash = "sha256:cbbe34dad39bdbaa2889a424d28752f1b4971939b14b1bb48cbf0182a3bcfc43"}, + {file = "pywin32-304-cp36-cp36m-win32.whl", hash = "sha256:be253e7b14bc601718f014d2832e4c18a5b023cbe72db826da63df76b77507a1"}, + {file = "pywin32-304-cp36-cp36m-win_amd64.whl", hash = "sha256:de9827c23321dcf43d2f288f09f3b6d772fee11e809015bdae9e69fe13213988"}, + {file = "pywin32-304-cp37-cp37m-win32.whl", hash = "sha256:f64c0377cf01b61bd5e76c25e1480ca8ab3b73f0c4add50538d332afdf8f69c5"}, + {file = "pywin32-304-cp37-cp37m-win_amd64.whl", hash = "sha256:bb2ea2aa81e96eee6a6b79d87e1d1648d3f8b87f9a64499e0b92b30d141e76df"}, + {file = "pywin32-304-cp38-cp38-win32.whl", hash = "sha256:94037b5259701988954931333aafd39cf897e990852115656b014ce72e052e96"}, + {file = "pywin32-304-cp38-cp38-win_amd64.whl", hash = "sha256:ead865a2e179b30fb717831f73cf4373401fc62fbc3455a0889a7ddac848f83e"}, + {file = "pywin32-304-cp39-cp39-win32.whl", hash = "sha256:25746d841201fd9f96b648a248f731c1dec851c9a08b8e33da8b56148e4c65cc"}, + {file = "pywin32-304-cp39-cp39-win_amd64.whl", hash = "sha256:d24a3382f013b21aa24a5cfbfad5a2cd9926610c0affde3e8ab5b3d7dbcf4ac9"}, +] + +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, + {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, + {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] + +[[package]] +name = "pyyaml-env-tag" +version = "0.1" +description = "A custom YAML tag for referencing environment variables in YAML files. " +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, + {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, +] + +[package.dependencies] +pyyaml = "*" [[package]] name = "pyzmq" @@ -690,11 +1600,140 @@ description = "Python bindings for 0MQ" category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "pyzmq-23.2.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:22ac0243a41798e3eb5d5714b28c2f28e3d10792dffbc8a5fca092f975fdeceb"}, + {file = "pyzmq-23.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f685003d836ad0e5d4f08d1e024ee3ac7816eb2f873b2266306eef858f058133"}, + {file = "pyzmq-23.2.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d4651de7316ec8560afe430fb042c0782ed8ac54c0be43a515944d7c78fddac8"}, + {file = "pyzmq-23.2.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bcc6953e47bcfc9028ddf9ab2a321a3c51d7cc969db65edec092019bb837959f"}, + {file = "pyzmq-23.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e08671dc202a1880fa522f921f35ca5925ba30da8bc96228d74a8f0643ead9c"}, + {file = "pyzmq-23.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de727ea906033b30527b4a99498f19aca3f4d1073230a958679a5b726e2784e0"}, + {file = "pyzmq-23.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5aa9da520e4bb8cee8189f2f541701405e7690745094ded7a37b425d60527ea"}, + {file = "pyzmq-23.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f3ff6abde52e702397949054cb5b06c1c75b5d6542f6a2ce029e46f71ffbbbf2"}, + {file = "pyzmq-23.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e2e2db5c6ef376e97c912733dfc24406f5949474d03e800d5f07b6aca4d870af"}, + {file = "pyzmq-23.2.0-cp310-cp310-win32.whl", hash = "sha256:e669913cb2179507628419ec4f0e453e48ce6f924de5884d396f18c31836089c"}, + {file = "pyzmq-23.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:a3dc339f7bc185d5fd0fd976242a5baf35de404d467e056484def8a4dd95868b"}, + {file = "pyzmq-23.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:30c365e60c39c53f8eea042b37ea28304ffa6558fb7241cf278745095a5757da"}, + {file = "pyzmq-23.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c2d8b69a2bf239ae3d987537bf3fbc2b044a405394cf4c258fc684971dd48b2"}, + {file = "pyzmq-23.2.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:602835e5672ca9ca1d78e6c148fb28c4f91b748ebc41fbd2f479d8763d58bc9b"}, + {file = "pyzmq-23.2.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:831da96ba3f36cc892f0afbb4fb89b28b61b387261676e55d55a682addbd29f7"}, + {file = "pyzmq-23.2.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c8dec8a2f3f0bb462e6439df436cd8c7ec37968e90b4209ac621e7fbc0ed3b00"}, + {file = "pyzmq-23.2.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:814e5aaf0c3be9991a59066eafb2d6e117aed6b413e3e7e9be45d4e55f5e2748"}, + {file = "pyzmq-23.2.0-cp36-cp36m-win32.whl", hash = "sha256:8496a2a5efd055c61ac2c6a18116c768a25c644b6747dcfde43e91620ab3453c"}, + {file = "pyzmq-23.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:60746a7e8558655420a69441c0a1d47ed225ed3ac355920b96a96d0554ef7e6b"}, + {file = "pyzmq-23.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5cb642e94337b0c76c9c8cb9bfb0f8a78654575847d080d3e1504f312d691fc3"}, + {file = "pyzmq-23.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:444f7d615d5f686d0ef508b9edfa8a286e6d89f449a1ba37b60ef69d869220a3"}, + {file = "pyzmq-23.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c9638e0057e3f1a8b7c5ce33c7575349d9183a033a19b5676ad55096ae36820b"}, + {file = "pyzmq-23.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:004a431dfa0459123e6f4660d7e3c4ac19217d134ca38bacfffb2e78716fe944"}, + {file = "pyzmq-23.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:5592fb4316f895922b1cacb91b04a0fa09d6f6f19bbab4442b4d0a0825177b93"}, + {file = "pyzmq-23.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c0a5f987d73fd9b46c3d180891f829afda714ab6bab30a1218724d4a0a63afd8"}, + {file = "pyzmq-23.2.0-cp37-cp37m-win32.whl", hash = "sha256:d11628212fd731b8986f1561d9bb3f8c38d9c15b330c3d8a88963519fbcd553b"}, + {file = "pyzmq-23.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:558f5f636e3e65f261b64925e8b190e8689e334911595394572cc7523879006d"}, + {file = "pyzmq-23.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:61b97f624da42813f74977425a3a6144d604ea21cf065616d36ea3a866d92c1c"}, + {file = "pyzmq-23.2.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:693c96ae4d975eb8efa1639670e9b1fac0c3f98b7845b65c0f369141fb4bb21f"}, + {file = "pyzmq-23.2.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2b054525c9f7e240562185bf21671ca16d56bde92e9bd0f822c07dec7626b704"}, + {file = "pyzmq-23.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:859059caf564f0c9398c9005278055ed3d37af4d73de6b1597821193b04ca09b"}, + {file = "pyzmq-23.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8355744fdbdeac5cfadfa4f38b82029b5f2b8cab7472a33453a217a7f3a9dce2"}, + {file = "pyzmq-23.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:420b9abd1a7330687a095373b8280a20cdee04342fbc8ccb3b56d9ec8efd4e62"}, + {file = "pyzmq-23.2.0-cp38-cp38-win32.whl", hash = "sha256:59928dfebe93cf1e203e3cb0fd5d5dd384da56b99c8305f2e1b0a933751710f6"}, + {file = "pyzmq-23.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:c882f1d4f96fbd807e92c334251d8ebd159a1ef89059ccd386ddea83fdb91bd8"}, + {file = "pyzmq-23.2.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:ced12075cdf3c7332ecc1960f77f7439d5ebb8ea20bbd3c34c8299e694f1b0a1"}, + {file = "pyzmq-23.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3a4d87342c2737fbb9eee5c33c792db27b36b04957b4e6b7edd73a5b239a2a13"}, + {file = "pyzmq-23.2.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:99cedf38eaddf263cf7e2a50e405f12c02cedf6d9df00a0d9c5d7b9417b57f76"}, + {file = "pyzmq-23.2.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d1610260cc672975723fcf7705c69a95f3b88802a594c9867781bedd9b13422c"}, + {file = "pyzmq-23.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c223a13555444707a0a7ebc6f9ee63053147c8c082bd1a31fd1207a03e8b0500"}, + {file = "pyzmq-23.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f5fdb00d65ec44b10cc6b9b6318ef1363b81647a4aa3270ca39565eadb2d1201"}, + {file = "pyzmq-23.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:984b232802eddf9f0be264a4d57a10b3a1fd7319df14ee6fc7b41c6d155a3e6c"}, + {file = "pyzmq-23.2.0-cp39-cp39-win32.whl", hash = "sha256:f146648941cadaaaf01254a75651a23c08159d009d36c5af42a7cc200a5e53ec"}, + {file = "pyzmq-23.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:83005d8928f8a5cebcfb33af3bfb84b1ad65d882b899141a331cc5d07d89f093"}, + {file = "pyzmq-23.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fee86542dc4ee8229e023003e3939b4d58cc2453922cf127778b69505fc9064b"}, + {file = "pyzmq-23.2.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5d57542429df6acff02ff022067aa75b677603cee70e3abb9742787545eec966"}, + {file = "pyzmq-23.2.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:057b154471e096e2dda147f7b057041acc303bb7ca4aa24c3b88c6cecdd78717"}, + {file = "pyzmq-23.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:5d92e7cbeab7f70b08cc0f27255b0bb2500afc30f31075bca0b1cb87735d186c"}, + {file = "pyzmq-23.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:eb4a573a8499685d62545e806d8fd143c84ac8b3439f925cd92c8763f0ed9bd7"}, + {file = "pyzmq-23.2.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:da338e2728410d74ddeb1479ec67cfba73311607037455a40f92b6f5c62bf11d"}, + {file = "pyzmq-23.2.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1b2a21f595f8cc549abd6c8de1fcd34c83441e35fb24b8a59bf161889c62a486"}, + {file = "pyzmq-23.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:8c0f4d6f8c985bab83792be26ff3233940ba42e22237610ac50cbcfc10a5c235"}, + {file = "pyzmq-23.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bbabd1df23bf63ae829e81200034c0e433499275a6ed29ca1a912ea7629426d9"}, + {file = "pyzmq-23.2.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:21552624ce69e69f7924f413b802b1fb554f4c0497f837810e429faa1cd4f163"}, + {file = "pyzmq-23.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c616893a577e9d6773a3836732fd7e2a729157a108b8fccd31c87512fa01671a"}, + {file = "pyzmq-23.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ce4f71e17fa849de41a06109030d3f6815fcc33338bf98dd0dde6d456d33c929"}, + {file = "pyzmq-23.2.0.tar.gz", hash = "sha256:a51f12a8719aad9dcfb55d456022f16b90abc8dde7d3ca93ce3120b40e3fa169"}, +] [package.dependencies] cffi = {version = "*", markers = "implementation_name == \"pypy\""} py = {version = "*", markers = "implementation_name == \"pypy\""} +[[package]] +name = "regex" +version = "2023.3.23" +description = "Alternative regular expression module, to replace re." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "regex-2023.3.23-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:845a5e2d84389c4ddada1a9b95c055320070f18bb76512608374aca00d22eca8"}, + {file = "regex-2023.3.23-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:87d9951f5a538dd1d016bdc0dcae59241d15fa94860964833a54d18197fcd134"}, + {file = "regex-2023.3.23-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37ae17d3be44c0b3f782c28ae9edd8b47c1f1776d4cabe87edc0b98e1f12b021"}, + {file = "regex-2023.3.23-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b8eb1e3bca6b48dc721818a60ae83b8264d4089a4a41d62be6d05316ec38e15"}, + {file = "regex-2023.3.23-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df45fac182ebc3c494460c644e853515cc24f5ad9da05f8ffb91da891bfee879"}, + {file = "regex-2023.3.23-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7006105b10b59971d3b248ad75acc3651c7e4cf54d81694df5a5130a3c3f7ea"}, + {file = "regex-2023.3.23-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93f3f1aa608380fe294aa4cb82e2afda07a7598e828d0341e124b8fd9327c715"}, + {file = "regex-2023.3.23-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:787954f541ab95d8195d97b0b8cf1dc304424adb1e07365967e656b92b38a699"}, + {file = "regex-2023.3.23-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:20abe0bdf03630fe92ccafc45a599bca8b3501f48d1de4f7d121153350a2f77d"}, + {file = "regex-2023.3.23-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11d00c31aeab9a6e0503bc77e73ed9f4527b3984279d997eb145d7c7be6268fd"}, + {file = "regex-2023.3.23-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:d5bbe0e1511b844794a3be43d6c145001626ba9a6c1db8f84bdc724e91131d9d"}, + {file = "regex-2023.3.23-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ea3c0cb56eadbf4ab2277e7a095676370b3e46dbfc74d5c383bd87b0d6317910"}, + {file = "regex-2023.3.23-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d895b4c863059a4934d3e874b90998df774644a41b349ebb330f85f11b4ef2c0"}, + {file = "regex-2023.3.23-cp310-cp310-win32.whl", hash = "sha256:9d764514d19b4edcc75fd8cb1423448ef393e8b6cbd94f38cab983ab1b75855d"}, + {file = "regex-2023.3.23-cp310-cp310-win_amd64.whl", hash = "sha256:11d1f2b7a0696dc0310de0efb51b1f4d813ad4401fe368e83c0c62f344429f98"}, + {file = "regex-2023.3.23-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8a9c63cde0eaa345795c0fdeb19dc62d22e378c50b0bc67bf4667cd5b482d98b"}, + {file = "regex-2023.3.23-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dd7200b4c27b68cf9c9646da01647141c6db09f48cc5b51bc588deaf8e98a797"}, + {file = "regex-2023.3.23-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22720024b90a6ba673a725dcc62e10fb1111b889305d7c6b887ac7466b74bedb"}, + {file = "regex-2023.3.23-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b190a339090e6af25f4a5fd9e77591f6d911cc7b96ecbb2114890b061be0ac1"}, + {file = "regex-2023.3.23-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e76b6fc0d8e9efa39100369a9b3379ce35e20f6c75365653cf58d282ad290f6f"}, + {file = "regex-2023.3.23-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7868b8f218bf69a2a15402fde08b08712213a1f4b85a156d90473a6fb6b12b09"}, + {file = "regex-2023.3.23-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2472428efc4127374f494e570e36b30bb5e6b37d9a754f7667f7073e43b0abdd"}, + {file = "regex-2023.3.23-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c37df2a060cb476d94c047b18572ee2b37c31f831df126c0da3cd9227b39253d"}, + {file = "regex-2023.3.23-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4479f9e2abc03362df4045b1332d4a2b7885b245a30d4f4b051c4083b97d95d8"}, + {file = "regex-2023.3.23-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e2396e0678167f2d0c197da942b0b3fb48fee2f0b5915a0feb84d11b6686afe6"}, + {file = "regex-2023.3.23-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:75f288c60232a5339e0ff2fa05779a5e9c74e9fc085c81e931d4a264501e745b"}, + {file = "regex-2023.3.23-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c869260aa62cee21c5eb171a466c0572b5e809213612ef8d495268cd2e34f20d"}, + {file = "regex-2023.3.23-cp311-cp311-win32.whl", hash = "sha256:25f0532fd0c53e96bad84664171969de9673b4131f2297f1db850d3918d58858"}, + {file = "regex-2023.3.23-cp311-cp311-win_amd64.whl", hash = "sha256:5ccfafd98473e007cebf7da10c1411035b7844f0f204015efd050601906dbb53"}, + {file = "regex-2023.3.23-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6572ff287176c0fb96568adb292674b421fa762153ed074d94b1d939ed92c253"}, + {file = "regex-2023.3.23-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a610e0adfcb0fc84ea25f6ea685e39e74cbcd9245a72a9a7aab85ff755a5ed27"}, + {file = "regex-2023.3.23-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086afe222d58b88b62847bdbd92079b4699350b4acab892f88a935db5707c790"}, + {file = "regex-2023.3.23-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79e29fd62fa2f597a6754b247356bda14b866131a22444d67f907d6d341e10f3"}, + {file = "regex-2023.3.23-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c07ce8e9eee878a48ebeb32ee661b49504b85e164b05bebf25420705709fdd31"}, + {file = "regex-2023.3.23-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86b036f401895e854de9fefe061518e78d506d8a919cc250dc3416bca03f6f9a"}, + {file = "regex-2023.3.23-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78ac8dd8e18800bb1f97aad0d73f68916592dddf233b99d2b5cabc562088503a"}, + {file = "regex-2023.3.23-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:539dd010dc35af935b32f248099e38447bbffc10b59c2b542bceead2bed5c325"}, + {file = "regex-2023.3.23-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9bf4a5626f2a0ea006bf81e8963f498a57a47d58907eaa58f4b3e13be68759d8"}, + {file = "regex-2023.3.23-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf86b4328c204c3f315074a61bc1c06f8a75a8e102359f18ce99fbcbbf1951f0"}, + {file = "regex-2023.3.23-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:2848bf76673c83314068241c8d5b7fa9ad9bed866c979875a0e84039349e8fa7"}, + {file = "regex-2023.3.23-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c125a02d22c555e68f7433bac8449992fa1cead525399f14e47c2d98f2f0e467"}, + {file = "regex-2023.3.23-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cd1671e9d5ac05ce6aa86874dd8dfa048824d1dbe73060851b310c6c1a201a96"}, + {file = "regex-2023.3.23-cp38-cp38-win32.whl", hash = "sha256:fffe57312a358be6ec6baeb43d253c36e5790e436b7bf5b7a38df360363e88e9"}, + {file = "regex-2023.3.23-cp38-cp38-win_amd64.whl", hash = "sha256:dbb3f87e15d3dd76996d604af8678316ad2d7d20faa394e92d9394dfd621fd0c"}, + {file = "regex-2023.3.23-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c88e8c226473b5549fe9616980ea7ca09289246cfbdf469241edf4741a620004"}, + {file = "regex-2023.3.23-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6560776ec19c83f3645bbc5db64a7a5816c9d8fb7ed7201c5bcd269323d88072"}, + {file = "regex-2023.3.23-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b1fc2632c01f42e06173d8dd9bb2e74ab9b0afa1d698058c867288d2c7a31f3"}, + {file = "regex-2023.3.23-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fdf7ad455f1916b8ea5cdbc482d379f6daf93f3867b4232d14699867a5a13af7"}, + {file = "regex-2023.3.23-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5fc33b27b1d800fc5b78d7f7d0f287e35079ecabe68e83d46930cf45690e1c8c"}, + {file = "regex-2023.3.23-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c49552dc938e3588f63f8a78c86f3c9c75301e813bca0bef13bdb4b87ccf364"}, + {file = "regex-2023.3.23-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e152461e9a0aedec7d37fc66ec0fa635eca984777d3d3c3e36f53bf3d3ceb16e"}, + {file = "regex-2023.3.23-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:db034255e72d2995cf581b14bb3fc9c00bdbe6822b49fcd4eef79e1d5f232618"}, + {file = "regex-2023.3.23-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:55ae114da21b7a790b90255ea52d2aa3a0d121a646deb2d3c6a3194e722fc762"}, + {file = "regex-2023.3.23-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ef3f528fe1cc3d139508fe1b22523745aa77b9d6cb5b0bf277f48788ee0b993f"}, + {file = "regex-2023.3.23-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:a81c9ec59ca2303acd1ccd7b9ac409f1e478e40e96f8f79b943be476c5fdb8bb"}, + {file = "regex-2023.3.23-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cde09c4fdd070772aa2596d97e942eb775a478b32459e042e1be71b739d08b77"}, + {file = "regex-2023.3.23-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3cd9f5dd7b821f141d3a6ca0d5d9359b9221e4f051ca3139320adea9f1679691"}, + {file = "regex-2023.3.23-cp39-cp39-win32.whl", hash = "sha256:7304863f3a652dab5e68e6fb1725d05ebab36ec0390676d1736e0571ebb713ef"}, + {file = "regex-2023.3.23-cp39-cp39-win_amd64.whl", hash = "sha256:54c3fa855a3f7438149de3211738dd9b5f0c733f48b54ae05aa7fce83d48d858"}, + {file = "regex-2023.3.23.tar.gz", hash = "sha256:dc80df325b43ffea5cdea2e3eaa97a44f3dd298262b1c7fe9dbb2a9522b956a7"}, +] + [[package]] name = "requests" version = "2.28.1" @@ -702,6 +1741,10 @@ description = "Python HTTP for Humans." category = "main" optional = false python-versions = ">=3.7, <4" +files = [ + {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, + {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, +] [package.dependencies] certifi = ">=2017.4.17" @@ -711,7 +1754,24 @@ urllib3 = ">=1.21.1,<1.27" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "setuptools" +version = "67.7.2" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "setuptools-67.7.2-py3-none-any.whl", hash = "sha256:23aaf86b85ca52ceb801d32703f12d77517b2556af839621c641fca11287952b"}, + {file = "setuptools-67.7.2.tar.gz", hash = "sha256:f104fa03692a2602fa0fec6c6a9e63b6c8a968de13e17c026957dd1f53d80990"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" @@ -720,6 +1780,10 @@ description = "Python 2 and 3 compatibility utilities" category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] [[package]] name = "soupsieve" @@ -728,6 +1792,10 @@ description = "A modern CSS selector implementation for Beautiful Soup." category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "soupsieve-2.3.2.post1-py3-none-any.whl", hash = "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759"}, + {file = "soupsieve-2.3.2.post1.tar.gz", hash = "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d"}, +] [[package]] name = "stack-data" @@ -736,6 +1804,10 @@ description = "Extract data from python stack frames and tracebacks for informat category = "dev" optional = false python-versions = "*" +files = [ + {file = "stack_data-0.3.0-py3-none-any.whl", hash = "sha256:aa1d52d14d09c7a9a12bb740e6bdfffe0f5e8f4f9218d85e7c73a8c37f7ae38d"}, + {file = "stack_data-0.3.0.tar.gz", hash = "sha256:77bec1402dcd0987e9022326473fdbcc767304892a533ed8c29888dacb7dddbc"}, +] [package.dependencies] asttokens = "*" @@ -743,7 +1815,7 @@ executing = "*" pure-eval = "*" [package.extras] -tests = ["pytest", "typeguard", "pygments", "littleutils", "cython"] +tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "tomli" @@ -752,6 +1824,10 @@ description = "A lil' TOML parser" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] [[package]] name = "tornado" @@ -760,6 +1836,19 @@ description = "Tornado is a Python web framework and asynchronous networking lib category = "dev" optional = false python-versions = ">= 3.7" +files = [ + {file = "tornado-6.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72"}, + {file = "tornado-6.2-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_i686.whl", hash = "sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca"}, + {file = "tornado-6.2-cp37-abi3-win32.whl", hash = "sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23"}, + {file = "tornado-6.2-cp37-abi3-win_amd64.whl", hash = "sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b"}, + {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"}, +] [[package]] name = "traitlets" @@ -768,6 +1857,10 @@ description = "" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "traitlets-5.3.0-py3-none-any.whl", hash = "sha256:65fa18961659635933100db8ca120ef6220555286949774b9cfc106f941d1c7a"}, + {file = "traitlets-5.3.0.tar.gz", hash = "sha256:0bb9f1f9f017aa8ec187d8b1b2a7a6626a2a1d877116baba52a129bfa124f8e2"}, +] [package.extras] test = ["pre-commit", "pytest"] @@ -779,10 +1872,14 @@ description = "Run-time type checker for Python" category = "main" optional = false python-versions = ">=3.5.3" +files = [ + {file = "typeguard-2.13.3-py3-none-any.whl", hash = "sha256:5e3e3be01e887e7eafae5af63d1f36c849aaa94e3a0112097312aabfa16284f1"}, + {file = "typeguard-2.13.3.tar.gz", hash = "sha256:00edaa8da3a133674796cf5ea87d9f4b4c367d77476e185e80251cc13dfbb8c4"}, +] [package.extras] -doc = ["sphinx-rtd-theme", "sphinx-autodoc-typehints (>=1.2.0)"] -test = ["pytest", "typing-extensions", "mypy"] +doc = ["sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["mypy", "pytest", "typing-extensions"] [[package]] name = "types-requests" @@ -791,6 +1888,10 @@ description = "Typing stubs for requests" category = "dev" optional = false python-versions = "*" +files = [ + {file = "types-requests-2.28.3.tar.gz", hash = "sha256:fb9ea69311766967f9e91861211ec7449f6484025b766ea709689c0dbb29d7ba"}, + {file = "types_requests-2.28.3-py3-none-any.whl", hash = "sha256:66f0e427708588d4dac2f365a0b2c1ad8f31780429fd8ad193fec93139b22112"}, +] [package.dependencies] types-urllib3 = "<1.27" @@ -802,6 +1903,10 @@ description = "Typing stubs for urllib3" category = "dev" optional = false python-versions = "*" +files = [ + {file = "types-urllib3-1.26.16.tar.gz", hash = "sha256:8bb3832c684c30cbed40b96e28bc04703becb2b97d82ac65ba4b968783453b0e"}, + {file = "types_urllib3-1.26.16-py3-none-any.whl", hash = "sha256:20588c285e5ca336d908d2705994830a83cfb6bda40fc356bbafaf430a262013"}, +] [[package]] name = "typing-extensions" @@ -810,6 +1915,10 @@ description = "Backported and Experimental Type Hints for Python 3.7+" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"}, + {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"}, +] [[package]] name = "urllib3" @@ -818,12 +1927,56 @@ description = "HTTP library with thread-safe connection pooling, file post, and category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" +files = [ + {file = "urllib3-1.26.10-py2.py3-none-any.whl", hash = "sha256:8298d6d56d39be0e3bc13c1c97d133f9b45d797169a0e11cdd0e0489d786f7ec"}, + {file = "urllib3-1.26.10.tar.gz", hash = "sha256:879ba4d1e89654d9769ce13121e0f94310ea32e8d2f8cf587b77c08bbcdb30d6"}, +] [package.extras] -brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +[[package]] +name = "watchdog" +version = "3.0.0" +description = "Filesystem events monitoring" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7"}, + {file = "watchdog-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8"}, + {file = "watchdog-3.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100"}, + {file = "watchdog-3.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346"}, + {file = "watchdog-3.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33"}, + {file = "watchdog-3.0.0-py3-none-win32.whl", hash = "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f"}, + {file = "watchdog-3.0.0-py3-none-win_amd64.whl", hash = "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c"}, + {file = "watchdog-3.0.0-py3-none-win_ia64.whl", hash = "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759"}, + {file = "watchdog-3.0.0.tar.gz", hash = "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9"}, +] + +[package.extras] +watchmedo = ["PyYAML (>=3.10)"] + [[package]] name = "wcwidth" version = "0.2.5" @@ -831,6 +1984,10 @@ description = "Measures the displayed width of unicode strings in a terminal" category = "dev" optional = false python-versions = "*" +files = [ + {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, + {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, +] [[package]] name = "webencodings" @@ -839,6 +1996,10 @@ description = "Character encoding aliases for legacy web content" category = "dev" optional = false python-versions = "*" +files = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] [[package]] name = "win32-setctime" @@ -847,173 +2008,31 @@ description = "A small Python utility to set file creation time on Windows" category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, + {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, +] + +[package.extras] +dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] + +[[package]] +name = "zipp" +version = "3.15.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, + {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, +] [package.extras] -dev = ["pytest (>=4.6.2)", "black (>=19.3b0)"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [metadata] -lock-version = "1.1" +lock-version = "2.0" python-versions = "^3.9" -content-hash = "c9f00ce1df9b1c9f10fee354d878c2c87d491eb4b6f22d9720faf679b389ac95" - -[metadata.files] -appnope = [] -asttokens = [] -atomicwrites = [] -attrs = [ - {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, - {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, -] -autoflake = [] -backcall = [] -beautifulsoup4 = [] -black = [] -bs4 = [] -certifi = [] -cffi = [] -charset-normalizer = [] -click = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, -] -colorama = [] -coverage = [] -debugpy = [] -decorator = [] -entrypoints = [] -executing = [] -html5lib = [] -idna = [ - {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, - {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, -] -iniconfig = [ - {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, - {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, -] -ipykernel = [] -ipython = [] -jedi = [] -jupyter-client = [] -jupyter-core = [] -loguru = [ - {file = "loguru-0.6.0-py3-none-any.whl", hash = "sha256:4e2414d534a2ab57573365b3e6d0234dfb1d84b68b7f3b948e6fb743860a77c3"}, - {file = "loguru-0.6.0.tar.gz", hash = "sha256:066bd06758d0a513e9836fd9c6b5a75bfb3fd36841f4b996bc60b547a309d41c"}, -] -lxml = [] -matplotlib-inline = [] -mypy = [ - {file = "mypy-0.950-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cf9c261958a769a3bd38c3e133801ebcd284ffb734ea12d01457cb09eacf7d7b"}, - {file = "mypy-0.950-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5b5bd0ffb11b4aba2bb6d31b8643902c48f990cc92fda4e21afac658044f0c0"}, - {file = "mypy-0.950-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5e7647df0f8fc947388e6251d728189cfadb3b1e558407f93254e35abc026e22"}, - {file = "mypy-0.950-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:eaff8156016487c1af5ffa5304c3e3fd183edcb412f3e9c72db349faf3f6e0eb"}, - {file = "mypy-0.950-cp310-cp310-win_amd64.whl", hash = "sha256:563514c7dc504698fb66bb1cf897657a173a496406f1866afae73ab5b3cdb334"}, - {file = "mypy-0.950-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:dd4d670eee9610bf61c25c940e9ade2d0ed05eb44227275cce88701fee014b1f"}, - {file = "mypy-0.950-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ca75ecf2783395ca3016a5e455cb322ba26b6d33b4b413fcdedfc632e67941dc"}, - {file = "mypy-0.950-cp36-cp36m-win_amd64.whl", hash = "sha256:6003de687c13196e8a1243a5e4bcce617d79b88f83ee6625437e335d89dfebe2"}, - {file = "mypy-0.950-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4c653e4846f287051599ed8f4b3c044b80e540e88feec76b11044ddc5612ffed"}, - {file = "mypy-0.950-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e19736af56947addedce4674c0971e5dceef1b5ec7d667fe86bcd2b07f8f9075"}, - {file = "mypy-0.950-cp37-cp37m-win_amd64.whl", hash = "sha256:ef7beb2a3582eb7a9f37beaf38a28acfd801988cde688760aea9e6cc4832b10b"}, - {file = "mypy-0.950-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0112752a6ff07230f9ec2f71b0d3d4e088a910fdce454fdb6553e83ed0eced7d"}, - {file = "mypy-0.950-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ee0a36edd332ed2c5208565ae6e3a7afc0eabb53f5327e281f2ef03a6bc7687a"}, - {file = "mypy-0.950-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:77423570c04aca807508a492037abbd72b12a1fb25a385847d191cd50b2c9605"}, - {file = "mypy-0.950-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5ce6a09042b6da16d773d2110e44f169683d8cc8687e79ec6d1181a72cb028d2"}, - {file = "mypy-0.950-cp38-cp38-win_amd64.whl", hash = "sha256:5b231afd6a6e951381b9ef09a1223b1feabe13625388db48a8690f8daa9b71ff"}, - {file = "mypy-0.950-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0384d9f3af49837baa92f559d3fa673e6d2652a16550a9ee07fc08c736f5e6f8"}, - {file = "mypy-0.950-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1fdeb0a0f64f2a874a4c1f5271f06e40e1e9779bf55f9567f149466fc7a55038"}, - {file = "mypy-0.950-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:61504b9a5ae166ba5ecfed9e93357fd51aa693d3d434b582a925338a2ff57fd2"}, - {file = "mypy-0.950-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a952b8bc0ae278fc6316e6384f67bb9a396eb30aced6ad034d3a76120ebcc519"}, - {file = "mypy-0.950-cp39-cp39-win_amd64.whl", hash = "sha256:eaea21d150fb26d7b4856766e7addcf929119dd19fc832b22e71d942835201ef"}, - {file = "mypy-0.950-py3-none-any.whl", hash = "sha256:a4d9898f46446bfb6405383b57b96737dcfd0a7f25b748e78ef3e8c576bba3cb"}, - {file = "mypy-0.950.tar.gz", hash = "sha256:1b333cfbca1762ff15808a0ef4f71b5d3eed8528b23ea1c3fb50543c867d68de"}, -] -mypy-extensions = [ - {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, - {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, -] -nest-asyncio = [] -numpy = [] -packaging = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, -] -pandas = [] -parso = [] -pathspec = [ - {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, - {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, -] -pexpect = [] -pickleshare = [] -platformdirs = [ - {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, - {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, -] -pluggy = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, -] -prompt-toolkit = [] -psutil = [] -ptyprocess = [] -pure-eval = [] -py = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] -pycparser = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, -] -pyflakes = [] -pygments = [ - {file = "Pygments-2.12.0-py3-none-any.whl", hash = "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519"}, - {file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"}, -] -pyparsing = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, -] -pytest = [ - {file = "pytest-7.1.2-py3-none-any.whl", hash = "sha256:13d0e3ccfc2b6e26be000cb6568c832ba67ba32e719443bfe725814d3c42433c"}, - {file = "pytest-7.1.2.tar.gz", hash = "sha256:a06a0425453864a270bc45e71f783330a7428defb4230fb5e6a731fde06ecd45"}, -] -pytest-cov = [] -python-dateutil = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] -python-dotenv = [] -pytz = [ - {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"}, - {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"}, -] -pywin32 = [] -pyzmq = [] -requests = [] -six = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] -soupsieve = [] -stack-data = [] -tomli = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] -tornado = [] -traitlets = [] -typeguard = [] -types-requests = [] -types-urllib3 = [] -typing-extensions = [] -urllib3 = [] -wcwidth = [ - {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, - {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, -] -webencodings = [] -win32-setctime = [ - {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, - {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, -] +content-hash = "2bf66d84879960a4ab5ccefbd1af7e226cfcc776c1470db313f1c5f8fc6e0a45" diff --git a/pyokx/Earn.py b/pyokx/Earn.py deleted file mode 100644 index 33da232..0000000 --- a/pyokx/Earn.py +++ /dev/null @@ -1,160 +0,0 @@ -# auto-generated code # -from .base import APIComponent, APIReturn, EndpointDetails - - -class Earn(APIComponent): - def get_offers( - self, - productId: str = None, - protocolType: str = None, - ccy: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get offers - Rate Limit: 3 requests per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/finance/staking-defi/offers", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def purchase( - self, - productId: str, - investData: list, - ccy: str, - amt: str, - tag: str = None, - term: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Purchase - Rate Limit: 2 requests per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/finance/staking-defi/purchase", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def redeem( - self, - ordId: str, - protocolType: str, - allowEarlyRedeem: bool = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Redeem - Rate Limit: 2 requests per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/finance/staking-defi/redeem", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def cancel_purchases_redemptions( - self, ordId: str, protocolType: str, use_proxy: bool = False - ) -> APIReturn: - """ - Cancel purchases/redemptions - - After cancelling, returning funds will go to the funding account. - - Rate Limit: 2 requests per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/finance/staking-defi/cancel", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_active_orders( - self, - productId: str = None, - protocolType: str = None, - ccy: str = None, - state: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get active orders - Rate Limit: 3 requests per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/finance/staking-defi/orders-active", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_order_history( - self, - productId: str = None, - protocolType: str = None, - ccy: str = None, - after: str = None, - before: str = None, - limit: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get order history - Rate Limit: 3 requests per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/finance/staking-defi/orders-history", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) diff --git a/pyokx/Funding.py b/pyokx/Funding.py deleted file mode 100644 index 5b15d48..0000000 --- a/pyokx/Funding.py +++ /dev/null @@ -1,517 +0,0 @@ -# auto-generated code # -from .base import APIComponent, APIReturn, EndpointDetails - - -class Funding(APIComponent): - def get_currencies(self, ccy: str = None, use_proxy: bool = False) -> APIReturn: - """ - Get currencies - Retrieve a list of all currencies. - Rate Limit: 6 requests per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/currencies", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_balance(self, ccy: str = None, use_proxy: bool = False) -> APIReturn: - """ - Get balance - Retrieve the balances of all the assets and the amount that is available or on hold. - - Only asset information of a currency with a balance greater than 0 will be returned. - - Rate Limit: 6 requests per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/balances", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_non_tradable_assets( - self, ccy: str = None, use_proxy: bool = False - ) -> APIReturn: - """ - Get non-tradable assets - Rate Limit: 6 requests per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/non-tradable-assets", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_account_asset_valuation( - self, ccy: str = None, use_proxy: bool = False - ) -> APIReturn: - """ - Get account asset valuation - View account asset valuation - Rate Limit: 1 request 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/asset-valuation", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def funds_transfer( - self, - ccy: str, - amt: str, - from_: str, - to: str, - type: str = None, - loanTrans: bool = None, - clientId: str = None, - omitPosRisk: str = None, - subAcct: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Funds transfer - Only API keys with Trade privilege can call this endpoint. - This endpoint supports the transfer of funds between your funding account and trading account, and from the master account to sub-accounts. - Sub-account can transfer out to master account by default. Need to call "Set Permission Of Transfer Out" to grant privilege first if you want sub-account transferring to another sub-account(subaccounts need to belong to same master account.) - - Failure of the request does not mean the transfer has failed. Recommend to call "Get funds transfer state" to confirm the status. - - Rate Limit: 1 request per second - Rate limit rule: UserID + Currency - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/transfer", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_funds_transfer_state( - self, - type: str = None, - transId: str = None, - clientId: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get funds transfer state - Retrieve the transfer state data of the last 2 weeks. - Rate Limit: 1 request per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/transfer-state", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def asset_bills_details( - self, - ccy: str = None, - type: str = None, - clientId: str = None, - after: str = None, - before: str = None, - limit: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Asset bills details - Query the billing record. You can get the latest 1 month historical data. - Rate Limit: 6 Requests per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/bills", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def lightning_deposits( - self, ccy: str, amt: str, to: str = None, use_proxy: bool = False - ) -> APIReturn: - """ - Lightning deposits - Users can create up to 10,000 different invoices within 24 hours. - Rate Limit: 2 requests per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/deposit-lightning", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_deposit_address(self, ccy: str, use_proxy: bool = False) -> APIReturn: - """ - Get deposit address - Retrieve the deposit addresses of currencies, including previously-used addresses. - Rate Limit: 6 requests per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/deposit-address", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_deposit_history( - self, - ccy: str = None, - depId: str = None, - txId: str = None, - type: str = None, - state: str = None, - after: str = None, - before: str = None, - limit: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get deposit history - Retrieve the deposit records according to the currency, deposit status, and time range in reverse chronological order. The 100 most recent records are returned by default. - Rate Limit: 6 requests per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/deposit-history", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def withdrawal( - self, - ccy: str, - amt: str, - dest: str, - toAddr: str, - fee: str, - clientId: str = None, - chain: str = None, - areaCode: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Withdrawal - Withdrawal of tokens. Common sub-account does not support withdrawal. - Rate Limit: 6 requests per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/withdrawal", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def lightning_withdrawals( - self, ccy: str, invoice: str, memo: str = None, use_proxy: bool = False - ) -> APIReturn: - """ - Lightning withdrawals - The maximum withdrawal amount is 0.1 BTC per request, and 1 BTC in 24 hours. The minimum withdrawal amount is approximately 0.000001 BTC. Sub-account does not support withdrawal. - Rate Limit: 2 requests per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/withdrawal-lightning", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def cancel_withdrawal(self, wdId: str, use_proxy: bool = False) -> APIReturn: - """ - Cancel withdrawal - You can cancel normal withdrawal requests, but you cannot cancel withdrawal requests on Lightning. - Rate Limit: 6 requests per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/cancel-withdrawal", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_withdrawal_history( - self, - ccy: str = None, - wdId: str = None, - clientId: str = None, - txId: str = None, - type: str = None, - state: str = None, - after: str = None, - before: str = None, - limit: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get withdrawal history - Retrieve the withdrawal records according to the currency, withdrawal status, and time range in reverse chronological order. The 100 most recent records are returned by default. - Rate Limit: 6 requests per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/withdrawal-history", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def small_assets_convert(self, ccy: list, use_proxy: bool = False) -> APIReturn: - """ - Small assets convert - Convert small assets in funding account to OKB. Only one convert is allowed within 24 hours. - Rate Limit: 1 request per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/convert-dust-assets", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_saving_balance(self, ccy: str = None, use_proxy: bool = False) -> APIReturn: - """ - Get saving balance - Rate Limit: 6 requests per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/saving-balance", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def savings_purchase_redemption( - self, ccy: str, amt: str, side: str, rate: str, use_proxy: bool = False - ) -> APIReturn: - """ - Savings purchase/redemption - Only the assets in the funding account can be used for saving. - Rate Limit: 6 requests per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/purchase_redempt", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def set_lending_rate( - self, ccy: str, rate: str, use_proxy: bool = False - ) -> APIReturn: - """ - Set lending rate - Rate Limit: 6 requests per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/set-lending-rate", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_lending_history( - self, - ccy: str = None, - after: str = None, - before: str = None, - limit: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get lending history - Rate Limit: 6 requests per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/lending-history", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_public_borrow_info_public( - self, ccy: str = None, use_proxy: bool = False - ) -> APIReturn: - """ - Get public borrow info (public) - Authentication is not required for this public endpoint. - Rate Limit: 6 requests per second - Rate limit rule: IP - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/lending-rate-summary", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_public_borrow_history_public( - self, - ccy: str = None, - after: str = None, - before: str = None, - limit: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get public borrow history (public) - Authentication is not required for this public endpoint. - Rate Limit: 6 requests per second - Rate limit rule: IP - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/lending-rate-history", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) diff --git a/pyokx/Gridtrading.py b/pyokx/Gridtrading.py deleted file mode 100644 index c899046..0000000 --- a/pyokx/Gridtrading.py +++ /dev/null @@ -1,313 +0,0 @@ -# auto-generated code # -from .base import APIComponent, APIReturn, EndpointDetails -from typing import * - - -class Gridtrading(APIComponent): - def place_grid_algo_order( - self, - instId: str, - algoOrdType: str, - maxPx: str, - minPx: str, - gridNum: str, - runType: str = None, - tpTriggerPx: str = None, - slTriggerPx: str = None, - tag: str = None, - quoteSz: str = None, - baseSz: str = None, - sz: str = None, - direction: str = None, - lever: str = None, - basePos: bool = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Place grid algo order - Rate Limit: 20 requests per 2 seconds - Rate limit rule (except Options): UserID + Instrument ID - Rate limit rule (Options only): UserID + Instrument Family - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/tradingBot/grid/order-algo", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def amend_grid_algo_order( - self, - algoId: str, - instId: str, - slTriggerPx: str = None, - tpTriggerPx: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Amend grid algo order - Supported contract grid algo order amendment. - Rate Limit: 20 requests per 2 seconds - Rate limit rule: UserID + Instrument ID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/tradingBot/grid/amend-order-algo", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def stop_grid_algo_order( - self, body: List[dict] = None, use_proxy: bool = False - ) -> APIReturn: - """ - Stop grid algo order - A maximum of 10 orders can be canceled per request. - Rate Limit: 20 requests per 2 seconds - Rate limit rule (except Options): UserID + Instrument ID - Rate limit rule (Options only): UserID + Instrument Family - """ - kwargs = body - details = EndpointDetails( - request_path="/api/v5/tradingBot/grid/stop-order-algo", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_grid_algo_order_list( - self, - algoOrdType: str, - algoId: str = None, - instId: str = None, - instType: str = None, - after: str = None, - before: str = None, - limit: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get grid algo order list - Rate Limit: 20 requests per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/tradingBot/grid/orders-algo-pending", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_grid_algo_order_history( - self, - algoOrdType: str, - algoId: str = None, - instId: str = None, - instType: str = None, - after: str = None, - before: str = None, - limit: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get grid algo order history - Rate Limit: 20 requests per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/tradingBot/grid/orders-algo-history", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_grid_algo_order_details( - self, algoOrdType: str, algoId: str, use_proxy: bool = False - ) -> APIReturn: - """ - Get grid algo order details - Rate Limit: 20 requests per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/tradingBot/grid/orders-algo-details", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_grid_algo_sub_orders( - self, - algoOrdType: str, - algoId: str, - type: str, - groupId: str = None, - after: str = None, - before: str = None, - limit: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get grid algo sub orders - Rate Limit: 20 requests per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/tradingBot/grid/sub-orders", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_grid_algo_order_positions( - self, algoOrdType: str, algoId: str, use_proxy: bool = False - ) -> APIReturn: - """ - Get grid algo order positions - Rate Limit: 20 requests per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/tradingBot/grid/positions", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def spot_moon_grid_withdraw_income( - self, algoId: str, use_proxy: bool = False - ) -> APIReturn: - """ - Spot/Moon grid withdraw income - Rate Limit: 20 requests per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/tradingBot/grid/withdraw-income", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def compute_margin_balance( - self, algoId: str, type: str, amt: str = None, use_proxy: bool = False - ) -> APIReturn: - """ - Compute margin balance - Rate Limit: 20 requests per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/tradingBot/grid/compute-margin-balance", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def adjust_margin_balance( - self, - algoId: str, - type: str, - amt: str = None, - percent: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Adjust margin balance - Rate Limit: 20 requests per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/tradingBot/grid/margin-balance", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_grid_ai_parameter_public( - self, - algoOrdType: str, - instId: str, - duration: str = None, - direction: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get grid AI parameter (public) - Authentication is not required for this public endpoint. - Rate Limit: 20 requests per 2 seconds - Rate limit rule: IP - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/tradingBot/grid/ai-param", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) diff --git a/pyokx/SubAccount.py b/pyokx/SubAccount.py deleted file mode 100644 index db0c553..0000000 --- a/pyokx/SubAccount.py +++ /dev/null @@ -1,207 +0,0 @@ -# auto-generated code # -from .base import APIComponent, APIReturn, EndpointDetails - - -class SubAccount(APIComponent): - def view_sub_account_list( - self, - enable: str = None, - subAcct: str = None, - after: str = None, - before: str = None, - limit: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - View sub-account list - Applies to master accounts only - Rate limit:2 requests per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/users/subaccount/list", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def reset_the_apikey_of_a_sub_account( - self, - subAcct: str, - apiKey: str, - label: str = None, - perm: str = None, - ip: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Reset the APIKey of a sub-account - Applies to master accounts only and master accounts APIKey must be linked to IP addresses. - Rate limit:1 request per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/users/subaccount/modify-apikey", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_sub_account_trading_balance(self, use_proxy: bool = False) -> APIReturn: - """ - Get sub-account trading balance - Query detailed balance info of Trading Account of a sub-account via the master account (applies to master accounts only) - Rate limit:2 requests per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/account/subaccount/balances", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_sub_account_funding_balance( - self, subAcct: str, ccy: str = None, use_proxy: bool = False - ) -> APIReturn: - """ - Get sub-account funding balance - Query detailed balance info of Funding Account of a sub-account via the master account (applies to master accounts only) - Rate limit:2 requests per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/subaccount/balances", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def history_of_sub_account_transfer( - self, - ccy: str = None, - type: str = None, - subAcct: str = None, - after: str = None, - before: str = None, - limit: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - History of sub-account transfer - Applies to master accounts only. - Retrieve the transfer data for the last 3 months. - Rate limit:6 requests per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/subaccount/bills", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def master_accounts_manage_the_transfers_between_sub_accounts( - self, - ccy: str, - amt: str, - from_: str, - to: str, - fromSubAccount: str, - toSubAccount: str, - loanTrans: bool = None, - omitPosRisk: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Master accounts manage the transfers between sub-accounts - Applies to master accounts only - Rate limit:1 request per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/asset/subaccount/transfer", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def set_permission_of_transfer_out( - self, subAcct: str, canTransOut: bool = None, use_proxy: bool = False - ) -> APIReturn: - """ - Set Permission Of Transfer Out - Set permission of transfer out for sub-account(only applicable to master account). Sub-account can transfer out to master account by default. - Rate Limit: 1 request per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/users/subaccount/set-transfer-out", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_custody_trading_sub_account_list( - self, subAcct: str = None, use_proxy: bool = False - ) -> APIReturn: - """ - Get custody trading sub-account list - The trading team uses this interface to view the list of sub-accounts currently under escrow - Rate limit:1 request per second - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/users/entrust-subaccount-list", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) diff --git a/pyokx/Trade.py b/pyokx/Trade.py deleted file mode 100644 index ed9b1c0..0000000 --- a/pyokx/Trade.py +++ /dev/null @@ -1,697 +0,0 @@ -# auto-generated code # -from .base import APIComponent, APIReturn, EndpointDetails -from typing import * - - -class Trade(APIComponent): - def place_order( - self, - instId: str, - side: str, - ordType: str, - sz: str, - tdMode: str, - banAmend: bool = None, - tpTriggerPxType: str = None, - slOrdPx: str = None, - slTriggerPx: str = None, - tpOrdPx: str = None, - tpTriggerPx: str = None, - slTriggerPxType: str = None, - tgtCcy: str = None, - reduceOnly: bool = None, - tag: str = None, - clOrdId: str = None, - ccy: str = None, - posSide: str = None, - px: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Place order - You can place an order only if you have sufficient funds. - For leading contracts, this endpoint supports placement, but can't close positions. - Rate Limit: 60 requests per 2 seconds - Rate Limit of leading contracts: 1 requests per 2 seconds - Rate limit rule (except Options): UserID + Instrument ID - Rate limit rule (Options only): UserID + Instrument Family - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/trade/order", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def place_multiple_orders( - self, body: List[dict] = None, use_proxy: bool = False - ) -> APIReturn: - """ - Place multiple orders - Place orders in batches. Maximum 20 orders can be placed per request. Request parameters should be passed in the form of an array. - For leading contracts, this endpoint supports placement, but can't close positions. - Rate Limit: 300 orders per 2 seconds - Rate Limit of leading contracts: 1 requests per 2 seconds - Rate limit rule (except Options): UserID + Instrument ID - Rate limit rule (Options only): UserID + Instrument Family - - Unlike other endpoints, the rate limit of this endpoint is determined by the number of orders. If there is only one order in the request, it will consume the rate limit of `Place order`. - - """ - kwargs = body - details = EndpointDetails( - request_path="/api/v5/trade/batch-orders", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def cancel_order( - self, - instId: str, - ordId: str = None, - clOrdId: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Cancel order - Cancel an incomplete order. - Rate Limit: 60 requests per 2 seconds - Rate limit rule (except Options): UserID + Instrument ID - Rate limit rule (Options only): UserID + Instrument Family - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/trade/cancel-order", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def cancel_multiple_orders( - self, body: List[dict] = None, use_proxy: bool = False - ) -> APIReturn: - """ - Cancel multiple orders - Cancel incomplete orders in batches. Maximum 20 orders can be canceled per request. Request parameters should be passed in the form of an array. - Rate Limit: 300 orders per 2 seconds - Rate limit rule (except Options): UserID + Instrument ID - Rate limit rule (Options only): UserID + Instrument Family - - Unlike other endpoints, the rate limit of this endpoint is determined by the number of orders. If there is only one order in the request, it will consume the rate limit of `Cancel order`. - - """ - kwargs = body - details = EndpointDetails( - request_path="/api/v5/trade/cancel-batch-orders", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def amend_order( - self, - instId: str, - cxlOnFail: bool = None, - reqId: str = None, - ordId: str = None, - clOrdId: str = None, - newSz: str = None, - newPx: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Amend order - Amend an incomplete order. - Rate Limit: 60 requests per 2 seconds - Rate Limit of leading contracts: 1 requests per 2 seconds - Rate limit rule (except Options): UserID + Instrument ID - Rate limit rule (Options only): UserID + Instrument Family - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/trade/amend-order", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def amend_multiple_orders( - self, body: List[dict] = None, use_proxy: bool = False - ) -> APIReturn: - """ - Amend multiple orders - Amend incomplete orders in batches. Maximum 20 orders can be amended per request. Request parameters should be passed in the form of an array. - Rate Limit: 300 orders per 2 seconds - Rate Limit of leading contracts: 1 requests per 2 seconds - Rate limit rule (except Options): UserID + Instrument ID - Rate limit rule (Options only): UserID + Instrument Family - - Unlike other endpoints, the rate limit of this endpoint is determined by the number of orders. If there is only one order in the request, it will consume the rate limit of `Amend order`. - - """ - kwargs = body - details = EndpointDetails( - request_path="/api/v5/trade/amend-batch-orders", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def close_positions( - self, - instId: str, - mgnMode: str, - autoCxl: bool = None, - clOrdId: str = None, - tag: str = None, - posSide: str = None, - ccy: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Close positions - Close all positions of an instrument via a market order. - Rate Limit: 20 requests per 2 seconds - Rate limit rule (except Options): UserID + Instrument ID - Rate limit rule (Options only): UserID + Instrument Family - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/trade/close-position", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_order_details( - self, - instId: str, - ordId: str = None, - clOrdId: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get order details - Retrieve order details. - Rate Limit: 60 requests per 2 seconds - Rate limit rule (except Options): UserID + Instrument ID - Rate limit rule (Options only): UserID + Instrument Family - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/trade/order", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_order_list( - self, - instType: str = None, - uly: str = None, - instFamily: str = None, - instId: str = None, - ordType: str = None, - state: str = None, - after: str = None, - before: str = None, - limit: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get order List - Retrieve all incomplete orders under the current account. - Rate Limit: 60 requests per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/trade/orders-pending", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_order_history_last_7_days( - self, - instType: str = None, - uly: str = None, - instFamily: str = None, - instId: str = None, - ordType: str = None, - state: str = None, - category: str = None, - after: str = None, - before: str = None, - begin: str = None, - end: str = None, - limit: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get order history (last 7 days) - Retrieve the completed order data for the last 7 days, and the incomplete orders that have been canceled are only reserved for 2 hours. - Rate Limit: 40 requests per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/trade/orders-history", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_order_history_last_3_months( - self, - instType: str = None, - uly: str = None, - instFamily: str = None, - instId: str = None, - ordType: str = None, - state: str = None, - category: str = None, - after: str = None, - before: str = None, - begin: str = None, - end: str = None, - limit: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get order history (last 3 months) - Retrieve the completed order data of the last 3 months. - Rate Limit: 20 requests per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/trade/orders-history-archive", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_transaction_details_last_3_days( - self, - instType: str = None, - uly: str = None, - instFamily: str = None, - instId: str = None, - ordId: str = None, - after: str = None, - before: str = None, - begin: str = None, - end: str = None, - limit: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get transaction details (last 3 days) - Retrieve recently-filled transaction details in the last 3 day. - Rate Limit: 60 requests per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/trade/fills", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_transaction_details_last_3_months( - self, - instType: str = None, - uly: str = None, - instFamily: str = None, - instId: str = None, - ordId: str = None, - after: str = None, - before: str = None, - begin: str = None, - end: str = None, - limit: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get transaction details (last 3 months) - Retrieve recently-filled transaction details in the last 3 months. - Rate Limit: 10 requests per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/trade/fills-history", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def place_algo_order( - self, - instId: str, - tdMode: str, - side: str, - ordType: str, - pxSpread: str = None, - triggerPxType: str = None, - callbackRatio: str = None, - callbackSpread: str = None, - activePx: str = None, - pxVar: str = None, - szLimit: str = None, - triggerPx: str = None, - pxLimit: str = None, - orderPx: str = None, - slTriggerPxType: str = None, - slOrdPx: str = None, - slTriggerPx: str = None, - tpOrdPx: str = None, - tpTriggerPxType: str = None, - tpTriggerPx: str = None, - clOrdId: str = None, - tgtCcy: str = None, - reduceOnly: bool = None, - tag: str = None, - ccy: str = None, - timeInterval: str = None, - closeFraction: str = None, - sz: str = None, - posSide: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Place algo order - The algo order includes trigger order, oco order, conditional order,iceberg order, twap order and trailing order. - Rate Limit: 20 requests per 2 seconds - Rate Limit of leading contracts: 1 requests per 2 seconds - Rate limit rule (except Options): UserID + Instrument ID - Rate limit rule (Options only): UserID + Instrument Family - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/trade/order-algo", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def cancel_algo_order( - self, body: List[dict] = None, use_proxy: bool = False - ) -> APIReturn: - """ - Cancel algo order - Cancel unfilled algo orders (not including Iceberg order, TWAP order, Trailing Stop order). A maximum of 10 orders can be canceled per request. Request parameters should be passed in the form of an array. - Rate Limit: 20 requests per 2 seconds - Rate limit rule (except Options): UserID + Instrument ID - Rate limit rule (Options only): UserID + Instrument Family - """ - kwargs = body - details = EndpointDetails( - request_path="/api/v5/trade/cancel-algos", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def cancel_advance_algo_order( - self, body: List[dict] = None, use_proxy: bool = False - ) -> APIReturn: - """ - Cancel advance algo order - Cancel unfilled algo orders (including Iceberg order, TWAP order, Trailing Stop order). A maximum of 10 orders can be canceled per request. Request parameters should be passed in the form of an array. - Rate Limit: 20 requests per 2 seconds - Rate limit rule (except Options): UserID + Instrument ID - Rate limit rule (Options only): UserID + Instrument Family - """ - kwargs = body - details = EndpointDetails( - request_path="/api/v5/trade/cancel-advance-algos", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_algo_order_list( - self, - ordType: str, - algoId: str = None, - clOrdId: str = None, - instType: str = None, - instId: str = None, - after: str = None, - before: str = None, - limit: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get algo order list - Retrieve a list of untriggered Algo orders under the current account. - Rate Limit: 20 requests per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/trade/orders-algo-pending", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_algo_order_history( - self, - ordType: str, - instType: str = None, - instId: str = None, - after: str = None, - before: str = None, - limit: str = None, - state: str = None, - algoId: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get algo order history - Retrieve a list of all algo orders under the current account in the last 3 months. - Rate Limit: 20 requests per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/trade/orders-algo-history", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_easy_convert_currency_list(self, use_proxy: bool = False) -> APIReturn: - """ - Get easy convert currency list - Get list of small convertibles and mainstream currencies. Only applicable to the crypto balance less than $10. - Rate Limit: 1 request per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/trade/easy-convert-currency-list", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def place_easy_convert( - self, fromCcy: list, toCcy: str, use_proxy: bool = False - ) -> APIReturn: - """ - Place easy convert - Convert small currencies to mainstream currencies. Only applicable to the crypto balance less than $10. - Rate Limit: 1 request per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/trade/easy-convert", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_easy_convert_history( - self, - after: str = None, - before: str = None, - limit: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get easy convert history - Get the history and status of easy convert trades. - Rate Limit: 1 request per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/trade/easy-convert-history", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_one_click_repay_currency_list( - self, debtType: str = None, use_proxy: bool = False - ) -> APIReturn: - """ - Get one-click repay currency list - Get list of debt currency data and repay currencies. Debt currencies include both cross and isolated debts. - Rate Limit: 1 request per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/trade/one-click-repay-currency-list", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def trade_one_click_repay( - self, debtCcy: list, repayCcy: str, use_proxy: bool = False - ) -> APIReturn: - """ - Trade one-click repay - Trade one-click repay to repay cross debts. Isolated debts are not applicable. - The maximum repayment amount is based on the remaining available balance of funding and trading accounts. - Rate Limit: 1 request per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/trade/one-click-repay", - method="POST", - body=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - - def get_one_click_repay_history( - self, - after: str = None, - before: str = None, - limit: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get one-click repay history - Get the history and status of one-click repay trades. - Rate Limit: 1 request per 2 seconds - Rate limit rule: UserID - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/trade/one-click-repay-history", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) diff --git a/pyokx/__init__.py b/pyokx/__init__.py index 3a70a65..2c9062a 100644 --- a/pyokx/__init__.py +++ b/pyokx/__init__.py @@ -1,21 +1,21 @@ from loguru import logger import sys -from .Account import Account -from .Blocktrading import Blocktrading -from .Convert import Convert -from .Earn import Earn -from .Funding import Funding -from .Gridtrading import Gridtrading -from .Marketdata import Marketdata -from .Publicdata import Publicdata -from .Status import Status -from .SubAccount import SubAccount -from .Trade import Trade -from .Tradingdata import Tradingdata +from .account import Account +from .block_trading import Blocktrading +from .convert import Convert +from .earn import Earn +from .funding import Funding +from .grid_trading import GridTrading +from .market_data import MarketData +from .public_data import PublicData +from .status import Status +from .subaccount import Subaccount +from .trade import Trade +from .trading_data import TradingData from .base import OKXClient -__version__ = "0.4.0" +__version__ = "0.7.0" def change_log_level(level: str = "INFO"): @@ -31,13 +31,13 @@ def change_log_level(level: str = "INFO"): "Convert", "Earn", "Funding", - "Gridtrading", - "Marketdata", - "Publicdata", + "GridTrading", + "MarketData", + "PublicData", "Status", - "SubAccount", + "Subaccount", "Trade", - "Tradingdata", + "TradingData", "change_log_level", "OKXClient", ] diff --git a/pyokx/Account.py b/pyokx/account.py similarity index 51% rename from pyokx/Account.py rename to pyokx/account.py index 3d66018..dda1767 100644 --- a/pyokx/Account.py +++ b/pyokx/account.py @@ -5,14 +5,21 @@ class Account(APIComponent): def get_balance(self, ccy: str = None, use_proxy: bool = False) -> APIReturn: """ - Get balance - Retrieve a list of assets (with non-zero balance), remaining balance, and available amount in the trading account. + + Retrieve a list of assets (with non-zero balance), remaining balance, and available amount in the trading account. Interest-free quota and discount rates are public data and not displayed on the account interface. - Rate Limit: 10 requests per 2 seconds - Rate limit rule: UserID + Rate Limit: 10 requests per 2 seconds + Rate limit rule: UserID + + + Args: + ccy: Single currency or multiple currencies (no more than 20) separated + with comma, e.g. BTC or BTC,ETH. + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -34,11 +41,24 @@ def get_positions( use_proxy: bool = False, ) -> APIReturn: """ - Get positions + Retrieve information on your positions. When the account is in net mode, net positions will be displayed, and when the account is in long/short mode, long or short positions will be displayed. Return in reverse chronological order using ctime. Rate Limit: 10 requests per 2 seconds Rate limit rule: UserID + + + Args: + instType: Instrument type MARGIN SWAP FUTURES OPTION instId will be checked + against instType when both parameters are passed. + instId: Instrument ID, e.g. BTC-USD-190927-5000-C. Single instrument ID or + multiple instrument IDs (no more than 10) separated with comma + posId: Single position ID or multiple position IDs (no more than 20) + separated with comma. There is attribute expiration, the posId and + position information will be cleared if it is more than 30 days after + the last close position. + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -57,7 +77,7 @@ def get_positions_history( instType: str = None, instId: str = None, mgnMode: str = None, - type: str = None, + type_: str = None, posId: str = None, after: str = None, before: str = None, @@ -65,11 +85,30 @@ def get_positions_history( use_proxy: bool = False, ) -> APIReturn: """ - Get positions history + Retrieve the updated position data for the last 3 months. Return in reverse chronological order using utime. Rate Limit: 1 request per 10 seconds Rate limit rule: UserID + + + Args: + instType: Instrument type MARGIN SWAP FUTURES OPTION + instId: Instrument ID, e.g. BTC-USD-SWAP + mgnMode: Margin mode cross isolated + type_: The type of closing position 1:Close position partially;2:Close + all;3:Liquidation;4:Partial liquidation; 5:ADL; It is the latest type + if there are several types for the same position. + posId: Position ID. There is attribute expiration, the posId and position + information will be cleared if it is more than 30 days after the last + close position. + after: Pagination of data to return records earlier than the requested uTime, + Unix timestamp format in milliseconds, e.g. 1597026383085 + before: Pagination of data to return records newer than the requested uTime, + Unix timestamp format in milliseconds, e.g. 1597026383085 + limit: Number of results per request. The maximum is 100. The default is 100. + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -83,16 +122,24 @@ def get_positions_history( ) return self.request(details) - def get_account_and_position_risk(self, use_proxy: bool = False) -> APIReturn: + def get_account_and_position_risk( + self, instType: str = None, use_proxy: bool = False + ) -> APIReturn: """ - Get account and position risk - Get account and position risk + + Get account and position risk Obtain basic information about accounts and positions on the same time slice - Rate Limit: 10 requests per 2 seconds - Rate limit rule: UserID + Rate Limit: 10 requests per 2 seconds + Rate limit rule: UserID + + + Args: + instType: Instrument type MARGIN SWAP FUTURES OPTION + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -112,7 +159,7 @@ def get_bills_details_last_7_days( ccy: str = None, mgnMode: str = None, ctType: str = None, - type: str = None, + type_: str = None, subType: str = None, after: str = None, before: str = None, @@ -122,11 +169,54 @@ def get_bills_details_last_7_days( use_proxy: bool = False, ) -> APIReturn: """ - Get bills details (last 7 days) + Retrieve the bills of the account. The bill refers to all transaction records that result in changing the balance of an account. Pagination is supported, and the response is sorted with the most recent first. This endpoint can retrieve data from the last 7 days. Rate Limit: 6 requests per second Rate limit rule: UserID + + + Args: + instType: Instrument type SPOT MARGIN SWAP FUTURES OPTION + ccy: Bill currency + mgnMode: Margin mode isolated cross + ctType: Contract type linear inverse Only applicable to FUTURES/SWAP + type_: Bill type 1: Transfer 2: Trade 3: Delivery 4: Auto token conversion 5: + Liquidation 6: Margin transfer 7: Interest deduction 8: Funding fee 9: + ADL 10: Clawback 11: System token conversion 12: Strategy transfer 13: + ddh 14: Block trade 15: Quick Margin 18: Profit sharing 22: Repay + subType: Bill subtype 1: Buy 2: Sell 3: Open long 4: Open short 5: Close long + 6: Close short 9: Interest deduction for Market loans 11: Transfer in + 12: Transfer out 14: Interest deduction for VIP loans 160: Manual + margin increase 161: Manual margin decrease 162: Auto margin increase + 114: Auto buy 115: Auto sell 118: System token conversion transfer in + 119: System token conversion transfer out 100: Partial liquidation + close long 101: Partial liquidation close short 102: Partial + liquidation buy 103: Partial liquidation sell 104: Liquidation long + 105: Liquidation short 106: Liquidation buy 107: Liquidation sell + 108:clawback 110: Liquidation transfer in 111: Liquidation transfer + out 125: ADL close long 126: ADL close short 127: ADL buy 128: ADL + sell 131: ddh buy 132: ddh sell 170: Exercised 171: Counterparty + exercised 172: Expired OTM 112: Delivery long 113: Delivery short 117: + Delivery/Exercise clawback 173: Funding fee expense 174: Funding fee + income 200:System transfer in 201: Manually transfer in 202: System + transfer out 203: Manually transfer out 204: block trade buy 205: + block trade sell 206: block trade open long 207: block trade open + short 208: block trade close open 209: block trade close short 210: + Manual Borrowing 211: Manual Repayment 212: Auto borrow 213: Auto + repay 16: Repay forcibly 17: Repay interest by borrowing forcibly 224: + repayment transfer in 225: repayment transfer out 250: Profit sharing + expenses; 251: Profit sharing refund; 252: Profit sharing income; + after: Pagination of data to return records earlier than the requested bill + ID. + before: Pagination of data to return records newer than the requested bill ID. + begin: Filter with a begin timestamp. Unix timestamp format in milliseconds, + e.g. 1597026383085 + end: Filter with an end timestamp. Unix timestamp format in milliseconds, + e.g. 1597026383085 + limit: Number of results per request. The maximum is 100. The default is 100. + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -146,7 +236,7 @@ def get_bills_details_last_3_months( ccy: str = None, mgnMode: str = None, ctType: str = None, - type: str = None, + type_: str = None, subType: str = None, after: str = None, before: str = None, @@ -156,11 +246,54 @@ def get_bills_details_last_3_months( use_proxy: bool = False, ) -> APIReturn: """ - Get bills details (last 3 months) + Retrieve the account’s bills. The bill refers to all transaction records that result in changing the balance of an account. Pagination is supported, and the response is sorted with most recent first. This endpoint can retrieve data from the last 3 months. Rate Limit: 6 requests per second Rate limit rule: UserID + + + Args: + instType: Instrument type SPOT MARGIN SWAP FUTURES OPTION + ccy: Bill currency + mgnMode: Margin mode isolated cross + ctType: Contract type linear inverse Only applicable to FUTURES/SWAP + type_: Bill type 1: Transfer 2: Trade 3: Delivery 4: Auto token conversion 5: + Liquidation 6: Margin transfer 7: Interest deduction 8: Funding fee 9: + ADL 10: Clawback 11: System token conversion 12: Strategy transfer 13: + ddh 14: Block trade 15: Quick Margin 18: Profit sharing 22: Repay + subType: Bill subtype 1: Buy 2: Sell 3: Open long 4: Open short 5: Close long + 6: Close short 9: Interest deduction for Market loans 11: Transfer in + 12: Transfer out 14: Interest deduction for VIP loans 160: Manual + margin increase 161: Manual margin decrease 162: Auto margin increase + 114: Auto buy 115: Auto sell 118: System token conversion transfer in + 119: System token conversion transfer out 100: Partial liquidation + close long 101: Partial liquidation close short 102: Partial + liquidation buy 103: Partial liquidation sell 104: Liquidation long + 105: Liquidation short 106: Liquidation buy 107: Liquidation sell + 108:clawback 110: Liquidation transfer in 111: Liquidation transfer + out 125: ADL close long 126: ADL close short 127: ADL buy 128: ADL + sell 131: ddh buy 132: ddh sell 170: Exercised 171: Counterparty + exercised 172: Expired OTM 112: Delivery long 113: Delivery short 117: + Delivery/Exercise clawback 173: Funding fee expense 174: Funding fee + income 200:System transfer in 201: Manually transfer in 202: System + transfer out 203: Manually transfer out 204: block trade buy 205: + block trade sell 206: block trade open long 207: block trade open + short 208: block trade close open 209: block trade close short 210: + Manual Borrowing 211: Manual Repayment 212: Auto borrow 213: Auto + repay 16: Repay forcibly 17: Repay interest by borrowing forcibly 224: + repayment transfer in 225: repayment transfer out 250: Profit sharing + expenses; 251: Profit sharing refund; 252: Profit sharing income; + after: Pagination of data to return records earlier than the requested bill + ID. + before: Pagination of data to return records newer than the requested bill ID. + begin: Filter with a begin timestamp. Unix timestamp format in milliseconds, + e.g. 1597026383085 + end: Filter with an end timestamp. Unix timestamp format in milliseconds, + e.g. 1597026383085 + limit: Number of results per request. The maximum is 100. The default is 100. + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -176,11 +309,13 @@ def get_bills_details_last_3_months( def get_account_configuration(self, use_proxy: bool = False) -> APIReturn: """ - Get account configuration + Retrieve current account configuration. Rate Limit: 5 requests per 2 seconds Rate limit rule: UserID + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -196,12 +331,19 @@ def get_account_configuration(self, use_proxy: bool = False) -> APIReturn: def set_position_mode(self, posMode: str, use_proxy: bool = False) -> APIReturn: """ - Set position mode - Single-currency mode and Multi-currency mode: FUTURES and SWAP support both long/short mode and net mode. In net mode, users can only have positions in one direction; In long/short mode, users can hold positions in long and short directions. + + Single-currency mode and Multi-currency mode: FUTURES and SWAP support both long/short mode and net mode. In net mode, users can only have positions in one direction; In long/short mode, users can hold positions in long and short directions. Portfolio margin mode: FUTURES and SWAP only support net mode - Rate Limit: 5 requests per 2 seconds - Rate limit rule: UserID + Rate Limit: 5 requests per 2 seconds + Rate limit rule: UserID + + + Args: + posMode: Position mode long_short_mode: long/short, only applicable to + FUTURES/SWAP net_mode: net + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -225,8 +367,8 @@ def set_leverage( use_proxy: bool = False, ) -> APIReturn: """ - Set leverage - There are 9 different scenarios for leverage setting: + + There are 9 different scenarios for leverage setting: 1. Set leverage for MARGIN instruments under isolated-margin trade mode at pairs level. 2. Set leverage for MARGIN instruments under cross-margin trade mode and Single-currency margin account mode at pairs level. 3. Set leverage for MARGIN instruments under cross-margin trade mode and Multi-currency margin at currency level. @@ -236,11 +378,25 @@ def set_leverage( 7. Set leverage for SWAP instruments under cross-margin trade at contract level. 8. Set leverage for SWAP instruments under isolated-margin trade mode and buy/sell position mode at contract level. 9. Set leverage for SWAP instruments under isolated-margin trade mode and long/short position mode at contract and position side level. - Note that the request parameter posSide is only required when margin mode is isolated in long/short position mode for FUTURES/SWAP instruments (see scenario 6 and 9 above). - Please refer to the request examples on the right side for each case. - Rate Limit: 20 requests per 2 seconds - Rate limit rule: UserID + Note that the request parameter posSide is only required when margin mode is isolated in long/short position mode for FUTURES/SWAP instruments (see scenario 6 and 9 above). + Please refer to the request examples on the right for each case. + Rate limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + lever: Leverage + mgnMode: Margin mode isolated cross Can only be cross if ccy is passed. + instId: Instrument ID Either instId or ccy is required; if both are passed, + instId will be used by default. + ccy: Currency used for margin Only applicable to cross MARGIN of Multi- + currency margin Required when setting the leverage for automatically + borrowing coin. + posSide: Position side long short Only required when margin mode is isolated + in long/short mode for FUTURES/SWAP. + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -258,20 +414,39 @@ def get_maximum_buy_sell_amount_or_open_amount( self, instId: str, tdMode: str, + ccy: str = None, px: str = None, leverage: str = None, unSpotOffset: bool = None, - ccy: str = None, use_proxy: bool = False, ) -> APIReturn: """ - Get maximum buy/sell amount or open amount + Under the Portfolio Margin account, the cross mode of derivatives does not support the calculation of the maximum buy/sell amount or open amount. - Rate Limit: 20 requests per 2 seconds - Rate limit rule: UserID + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + instId: Single instrument or multiple instruments (no more than 5) separated + with comma, e.g. BTC-USDT,ETH-USDT + tdMode: Trade mode cross isolated cash + ccy: Currency used for margin Only applicable to MARGIN of Single-currency + margin. + px: Price When the price is not specified, it will be calculated according + to the last traded price. The parameter will be ignored when multiple + instruments are specified. + leverage: Leverage for instrument The default is current leverage Only + applicable to MARGIN/FUTURES/SWAP + unSpotOffset: true: disable Spot-Derivatives risk offset, false: enable Spot- + Derivatives risk offset Default is false Applicable to `Portfolio It + is effective when Spot-Derivatives risk offset is turned on, otherwise + this parameter is ignored. + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -289,16 +464,34 @@ def get_maximum_available_tradable_amount( self, instId: str, tdMode: str, + ccy: str = None, reduceOnly: bool = None, unSpotOffset: bool = None, - ccy: str = None, + quickMgnType: str = None, use_proxy: bool = False, ) -> APIReturn: """ - Get maximum available tradable amount + Rate Limit: 20 requests per 2 seconds Rate limit rule: UserID + + + Args: + instId: Single instrument or multiple instruments (no more than 5) separated + with comma, e.g. BTC-USDT,ETH-USDT + tdMode: Trade mode cross isolated cash + ccy: Currency used for margin Only applicable to cross MARGIN of Single- + currency margin. + reduceOnly: Whether to reduce position only Only applicable to MARGIN + unSpotOffset: true: disable Spot-Derivatives risk offset, false: enable Spot- + Derivatives risk offset Default is false Only applicable to Portfolio + margin It is effective when Spot-Derivatives risk offset is turned on, + otherwise this parameter is ignored. + quickMgnType: Quick Margin type. Only applicable to Quick Margin Mode of isolated + margin manual, auto_borrow, auto_repay The default value is manual + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -316,7 +509,7 @@ def increase_decrease_margin( self, instId: str, posSide: str, - type: str, + type_: str, amt: str, ccy: str = None, auto: bool = None, @@ -324,11 +517,27 @@ def increase_decrease_margin( use_proxy: bool = False, ) -> APIReturn: """ - Increase/decrease margin + Increase or decrease the margin of the isolated position. Margin reduction may result in the change of the actual leverage. Rate Limit: 20 requests per 2 seconds Rate limit rule: UserID + + + Args: + instId: Instrument ID + posSide: Position side, the default is net long short net + type_: add: add margin, or transfer collaterals in (Quick Margin Mode) + reduce: reduce margin, transfer collaterals out (Quick Margin Mode) + amt: Amount to be increased or decreased. + ccy: Currency, only applicable to MARGIN(Manual transfers and Quick Margin + Mode) + auto: Automatic loan transfer out, true or false, the default is false only + applicable to MARGIN(Manual transfers) + loanTrans: Whether or not borrowed coins can be transferred out under Multi- + currency margin and Portfolio margin the default is false + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -346,10 +555,18 @@ def get_leverage( self, instId: str, mgnMode: str, use_proxy: bool = False ) -> APIReturn: """ - Get leverage + Rate Limit: 20 requests per 2 seconds Rate limit rule: UserID + + + Args: + instId: Instrument ID Single instrument ID or multiple instrument IDs (no more + than 20) separated with comma + mgnMode: Margin mode cross isolated + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -367,10 +584,20 @@ def get_the_maximum_loan_of_instrument( self, instId: str, mgnMode: str, mgnCcy: str = None, use_proxy: bool = False ) -> APIReturn: """ - Get the maximum loan of instrument + Rate Limit: 20 requests per 2 seconds Rate limit rule: UserID + + + Args: + instId: Single instrument or multiple instruments (no more than 5) separated + with comma, e.g. BTC-USDT,ETH-USDT + mgnMode: Margin mode isolated cross + mgnCcy: Margin currency Only applicable to cross MARGIN in Single-currency + margin + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -393,10 +620,19 @@ def get_fee_rates( use_proxy: bool = False, ) -> APIReturn: """ - Get fee rates + Rate Limit: 5 requests per 2 seconds Rate limit rule: UserID + + + Args: + instType: Instrument type SPOT MARGIN SWAP FUTURES OPTION + instId: Instrument ID, e.g. BTC-USDT Applicable to SPOT/MARGIN + uly: Underlying, e.g. BTC-USD Applicable to FUTURES/SWAP/OPTION + instFamily: Instrument family, e.g. BTC-USD Applicable to FUTURES/SWAP/OPTION + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -412,7 +648,7 @@ def get_fee_rates( def get_interest_accrued_data( self, - type: str = None, + type_: str = None, ccy: str = None, instId: str = None, mgnMode: str = None, @@ -422,10 +658,25 @@ def get_interest_accrued_data( use_proxy: bool = False, ) -> APIReturn: """ - Get interest accrued data + Rate Limit: 5 requests per 2 seconds Rate limit rule: UserID + + + Args: + type_: Loan type 1: VIP loans 2: Market loans Default is Market loans + ccy: Loan currency, e.g. BTC Only applicable to Market loans Only + applicable toMARGIN + instId: Instrument ID, e.g. BTC-USDT Only applicable to Market loans + mgnMode: Margin mode cross isolated Only applicable to Market loans + after: Pagination of data to return records earlier than the requested + timestamp, Unix timestamp format in milliseconds, e.g. 1597026383085 + before: Pagination of data to return records newer than the requested, Unix + timestamp format in milliseconds, e.g. 1597026383085 + limit: Number of results per request. The maximum is 100. The default is 100. + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -441,11 +692,17 @@ def get_interest_accrued_data( def get_interest_rate(self, ccy: str = None, use_proxy: bool = False) -> APIReturn: """ - Get interest rate + Get the user's current leveraged currency borrowing interest rate Rate Limit: 5 requests per 2 seconds Rate limit rule: UserID + + + Args: + ccy: Currency, e.g. BTC + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -461,11 +718,18 @@ def get_interest_rate(self, ccy: str = None, use_proxy: bool = False) -> APIRetu def set_greeks_pa_bs(self, greeksType: str, use_proxy: bool = False) -> APIReturn: """ - Set greeks (PA/BS) + Set the display type of Greeks. Rate Limit: 5 requests per 2 seconds Rate limit rule: UserID + + + Args: + greeksType: Display type of Greeks. PA: Greeks in coins BS: Black-Scholes Greeks + in dollars + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -480,14 +744,22 @@ def set_greeks_pa_bs(self, greeksType: str, use_proxy: bool = False) -> APIRetur return self.request(details) def isolated_margin_trading_settings( - self, isoMode: str, type: str, use_proxy: bool = False + self, isoMode: str, type_: str, use_proxy: bool = False ) -> APIReturn: """ - Isolated margin trading settings + You can set the currency margin and futures/perpetual Isolated margin trading mode Rate Limit: 5 requests per 2 seconds Rate limit rule: UserID + + + Args: + isoMode: Isolated margin trading settings automatic:Auto transfers + autonomy:Manual transfers quick_margin:Quick Margin Mode + type_: Instrument type MARGIN CONTRACTS + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -505,11 +777,18 @@ def get_maximum_withdrawals( self, ccy: str = None, use_proxy: bool = False ) -> APIReturn: """ - Get maximum withdrawals + Retrieve the maximum transferable amount from trading account to funding account. If no currency is specified, the transferable amount of all owned currencies will be returned. Rate Limit: 20 requests per 2 seconds Rate limit rule: UserID + + + Args: + ccy: Single currency or multiple currencies (no more than 20) separated + with comma, e.g. BTC or BTC,ETH. + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -523,13 +802,31 @@ def get_maximum_withdrawals( ) return self.request(details) - def get_account_risk_state(self, use_proxy: bool = False) -> APIReturn: + def get_account_risk_state( + self, + atRisk: str = None, + atRiskIdx: list = None, + atRiskMgn: list = None, + ts: str = None, + use_proxy: bool = False, + ) -> APIReturn: """ - Get account risk state + Only applicable to Portfolio margin account Rate Limit: 10 requests per 2 seconds Rate limit rule: UserID + + + Args: + atRisk: Account risk status in auto-borrow mode true: the account is currently + in a specific risk state false: the account is currently not in a + specific risk state + atRiskIdx: derivatives risk unit list + atRiskMgn: margin risk unit list + ts: Unix timestamp format in milliseconds, e.g.1597026383085 + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -547,10 +844,19 @@ def manual_borrow_and_repay_in_quick_margin_mode( self, instId: str, ccy: str, side: str, amt: str, use_proxy: bool = False ) -> APIReturn: """ - Manual borrow and repay in Quick Margin Mode + Rate Limit: 5 requests per 2 seconds Rate limit rule: UserID + + + Args: + instId: Instrument ID, e.g. BTC-USDT + ccy: Loan currency, e.g. BTC + side: borrow repay + amt: borrow/repay amount + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -564,7 +870,7 @@ def manual_borrow_and_repay_in_quick_margin_mode( ) return self.request(details) - def get_manual_borrow_and_repay_history_in_quick_margin_mode( + def get_borrow_and_repay_history_in_quick_margin_mode( self, instId: str = None, ccy: str = None, @@ -577,10 +883,25 @@ def get_manual_borrow_and_repay_history_in_quick_margin_mode( use_proxy: bool = False, ) -> APIReturn: """ - Get manual borrow and repay history in Quick Margin Mode + Rate Limit: 5 requests per 2 seconds Rate limit rule: UserID + + + Args: + instId: Instrument ID, e.g. BTC-USDT + ccy: Loan currency, e.g. BTC + side: borrow repay + after: Pagination of data to return records earlier than the requested refId + before: Pagination of data to return records newer than the requested refId + begin: Filter with a begin timestamp. Unix timestamp format in milliseconds, + e.g. 1597026383085 + end: Filter with an end timestamp. Unix timestamp format in milliseconds, + e.g. 1597026383085 + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -598,10 +919,20 @@ def vip_loans_borrow_and_repay( self, ccy: str, side: str, amt: str, ordId: str = None, use_proxy: bool = False ) -> APIReturn: """ - VIP loans borrow and repay + + Maximum number of borrowing orders for a single currency is 20 Rate Limit: 6 requests per second Rate limit rule: UserID + + + Args: + ccy: Loan currency, e.g. BTC + side: borrow repay + amt: borrow/repay amount + ordId: Order ID of borrowing, it is necessary while repaying + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -624,10 +955,21 @@ def get_borrow_and_repay_history_for_vip_loans( use_proxy: bool = False, ) -> APIReturn: """ - Get borrow and repay history for VIP loans + Rate Limit: 5 requests per 2 seconds Rate limit rule: UserID + + + Args: + ccy: Loan currency, e.g. BTC + after: Pagination of data to return records earlier than the requested + timestamp, Unix timestamp format in milliseconds, e.g. 1597026383085 + before: Pagination of data to return records newer than the requested, Unix + timestamp format in milliseconds, e.g. 1597026383085 + limit: Number of results per request. The maximum is 100. The default is 100. + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -651,10 +993,22 @@ def get_vip_interest_accrued_data( use_proxy: bool = False, ) -> APIReturn: """ - Get VIP interest accrued data + Rate Limit: 5 requests per 2 seconds Rate limit rule: UserID + + + Args: + ccy: Loan currency, e.g. BTC Only applicable toMARGIN + ordId: Order ID of borrowing + after: Pagination of data to return records earlier than the requested + timestamp, Unix timestamp format in milliseconds, e.g. 1597026383085 + before: Pagination of data to return records newer than the requested, Unix + timestamp format in milliseconds, e.g. 1597026383085 + limit: Number of results per request. The maximum is 100. The default is 100. + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -678,10 +1032,22 @@ def get_vip_interest_deducted_data( use_proxy: bool = False, ) -> APIReturn: """ - Get VIP interest deducted data + Rate Limit: 5 requests per 2 seconds Rate limit rule: UserID + + + Args: + ccy: Loan currency, e.g. BTC Only applicable toMARGIN + ordId: Order ID of borrowing + after: Pagination of data to return records earlier than the requested + timestamp, Unix timestamp format in milliseconds, e.g. 1597026383085 + before: Pagination of data to return records newer than the requested, Unix + timestamp format in milliseconds, e.g. 1597026383085 + limit: Number of results per request. The maximum is 100. The default is 100. + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -706,10 +1072,21 @@ def get_vip_loan_order_list( use_proxy: bool = False, ) -> APIReturn: """ - Get VIP loan order list - Rate Limit: 5次/2s + + Rate Limit: 5 requests per 2 seconds Rate limit rule: UserID + + + Args: + ordId: Order ID of borrowing + state: State 1:Borrowing 2:Borrowed 3:Repaying 4:Repaid 5:Borrow failed + ccy: Loan currency, e.g. BTC + after: Pagination of data to return records earlier than the requested ordId + before: Pagination of data to return records newer than the requested ordId + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -725,7 +1102,7 @@ def get_vip_loan_order_list( def get_vip_loan_order_detail( self, - ordId: str = None, + ordId: str, ccy: str = None, after: str = None, before: str = None, @@ -733,10 +1110,22 @@ def get_vip_loan_order_detail( use_proxy: bool = False, ) -> APIReturn: """ - Get VIP loan order detail - Rate Limit: 5次/2s + + Rate limit: 5 requests per 2 seconds Rate limit rule: UserID + + + Args: + ordId: Order ID of loan + ccy: Loan currency, e.g. BTC + after: Pagination of data to return records earlier than the requested + timestamp, Unix timestamp format in milliseconds, e.g. 1597026383085 + before: Pagination of data to return records newer than the requested + timestamp, Unix timestamp format in milliseconds, e.g. 1597026383085 + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -751,13 +1140,20 @@ def get_vip_loan_order_detail( return self.request(details) def get_borrow_interest_and_limit( - self, type: str = None, ccy: str = None, use_proxy: bool = False + self, type_: str = None, ccy: str = None, use_proxy: bool = False ) -> APIReturn: """ - Get borrow interest and limit + Rate Limit: 5 requests per 2 seconds Rate limit rule: UserID + + + Args: + type_: Loan type 1: VIP loans 2: Market loans Default is Market loans + ccy: Loan currency, e.g. BTC + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -771,21 +1167,44 @@ def get_borrow_interest_and_limit( ) return self.request(details) - def position_builder(self, use_proxy: bool = False) -> APIReturn: + def position_builder( + self, + instType: str = None, + inclRealPos: bool = None, + spotOffsetType: str = None, + simPos: list = None, + instId: str = None, + pos: str = None, + use_proxy: bool = False, + ) -> APIReturn: """ - Position builder - Calculates portfolio margin information for simulated position or current position of the user. + + Calculates portfolio margin information for simulated position or current position of the user. You can add up to 200 simulated positions in one request. - Rate Limit: 2 requests per 2 seconds - Rate limit rule: UserID + Rate Limit: 2 requests per 2 seconds + Rate limit rule: UserID + + + Args: + instType: Instrument type SWAP FUTURES OPTION + inclRealPos: Whether import existing positions true:Import existing positions and + hedge with simulated ones false:Only use simulated positions The + default is true + spotOffsetType: Spot-derivatives risk offset mode 1: Spot-derivatives (USDT) 2: Spot- + derivatives (crypto) 3: Derivatives-only The default is 3 + simPos: List of positions + instId: Instrument ID + pos: Quantity of positions + _____________ """ + kwargs = { k: v for k, v in locals().items() if k not in ["use_proxy", "self"] and v is not None } details = EndpointDetails( - request_path="/api/v5/account/simulated_margin", + request_path="/api/v5/account/simulated", method="POST", body=kwargs, use_proxy=use_proxy, @@ -794,11 +1213,17 @@ def position_builder(self, use_proxy: bool = False) -> APIReturn: def get_greeks(self, ccy: str = None, use_proxy: bool = False) -> APIReturn: """ - Get Greeks + Retrieve a greeks list of all assets in the account. Rate Limit: 10 requests per 2 seconds Rate limit rule: UserID + + + Args: + ccy: Single currency, e.g. BTC. + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -812,7 +1237,7 @@ def get_greeks(self, ccy: str = None, use_proxy: bool = False) -> APIReturn: ) return self.request(details) - def get_pm_limitation( + def get_pm_position_limitation( self, instType: str, uly: str = None, @@ -820,11 +1245,23 @@ def get_pm_limitation( use_proxy: bool = False, ) -> APIReturn: """ - Get PM limitation + Retrieve cross position limitation of SWAP/FUTURES/OPTION under Portfolio margin mode. Rate Limit: 10 requests per 2 seconds Rate limit rule: UserID + + + Args: + instType: Instrument type SWAP FUTURES OPTION + uly: Single underlying or multiple underlyings (no more than 3) separated + with comma. Either uly or instFamily is required. If both are passed, + instFamily will be used. + instFamily: Single instrument family or instrument families (no more than 5) + separated with comma. Either uly or instFamily is required. If both + are passed, instFamily will be used. + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -838,20 +1275,77 @@ def get_pm_limitation( ) return self.request(details) - def set_risk_offset_type(self, type: str, use_proxy: bool = False) -> APIReturn: + def set_risk_offset_type(self, type_: str, use_proxy: bool = False) -> APIReturn: """ - Set risk offset type + Configure the risk offset type in portfolio margin mode. Rate Limit: 10 requests per 2 seconds Rate limit rule: UserID + + + Args: + type_: Risk offset type 1: Spot-derivatives (USDT) risk offset 2: Spot- + derivatives (Crypto) risk offset 3:Derivatives only mode + _____________ """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/account/set-risk", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def activate_option(self, use_proxy: bool = False) -> APIReturn: + """ + + Rate Limit: 5 requests per 2 seconds + Rate limit rule: UserID + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/account/activate-option", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def set_auto_loan( + self, autoLoan: bool = None, use_proxy: bool = False + ) -> APIReturn: + """ + + Only applicalbe to Multi-currency margin and Portfolio margin + Rate Limit: 5 requests per 2 seconds + Rate limit rule: UserID + + + Args: + autoLoan: Whether to automatically make loans Valid values are true, false The + default is true + _____________ + """ + kwargs = { k: v for k, v in locals().items() if k not in ["use_proxy", "self"] and v is not None } details = EndpointDetails( - request_path="/api/v5/account/set-riskOffset-type", + request_path="/api/v5/account/set-auto-loan", method="POST", body=kwargs, use_proxy=use_proxy, diff --git a/pyokx/Blocktrading.py b/pyokx/block_trading.py similarity index 100% rename from pyokx/Blocktrading.py rename to pyokx/block_trading.py diff --git a/pyokx/Convert.py b/pyokx/convert.py similarity index 65% rename from pyokx/Convert.py rename to pyokx/convert.py index fc06653..329618e 100644 --- a/pyokx/Convert.py +++ b/pyokx/convert.py @@ -5,10 +5,12 @@ class Convert(APIComponent): def get_convert_currencies(self, use_proxy: bool = False) -> APIReturn: """ - Get convert currencies + Rate Limit: 6 requests per second Rate limit rule: UserID + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -26,10 +28,17 @@ def get_convert_currency_pair( self, fromCcy: str, toCcy: str, use_proxy: bool = False ) -> APIReturn: """ - Get convert currency pair + Rate Limit: 6 requests per second Rate limit rule: UserID + + + Args: + fromCcy: Currency to convert from, e.g. USDT + toCcy: Currency to convert to, e.g. BTC + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -55,10 +64,24 @@ def estimate_quote( use_proxy: bool = False, ) -> APIReturn: """ - Estimate quote + Rate Limit: 10 requests per second Rate limit rule: UserID + + + Args: + baseCcy: Base currency, e.g. BTC in BTC-USDT + quoteCcy: Quote currency, e.g. USDT in BTC-USDT + side: Trade side based on baseCcy buy sell + rfqSz: RFQ amount + rfqSzCcy: RFQ currency + clQReqId: Client Order ID as assigned by the client A combination of case- + sensitive alphanumerics, all numbers, or all letters of up to 32 + characters. + tag: Order tag Applicable to broker user + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -85,10 +108,25 @@ def convert_trade( use_proxy: bool = False, ) -> APIReturn: """ - Convert trade + Rate Limit: 10 requests per second Rate limit rule: UserID + + + Args: + quoteId: Quote ID + baseCcy: Base currency, e.g. BTC in BTC-USDT + quoteCcy: Quote currency, e.g. USDT in BTC-USDT + side: Trade side based on baseCcy buy sell + sz: Quote amount The quote amount should no more then RFQ amount + szCcy: Quote currency + clTReqId: Client Order ID as assigned by the client A combination of case- + sensitive alphanumerics, all numbers, or all letters of up to 32 + characters. + tag: Order tag Applicable to broker user + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -111,10 +149,21 @@ def get_convert_history( use_proxy: bool = False, ) -> APIReturn: """ - Get convert history + Rate Limit: 6 requests per second Rate limit rule: UserID + + + Args: + after: Pagination of data to return records earlier than the requested ts, + Unix timestamp format in milliseconds, e.g. 1597026383085 + before: Pagination of data to return records newer than the requested ts, Unix + timestamp format in milliseconds, e.g. 1597026383085 + limit: Number of results per request. The maximum is 100. The default is 100. + tag: Order tag Applicable to broker user + _____________ """ + kwargs = { k: v for k, v in locals().items() diff --git a/pyokx/CopyTrading.py b/pyokx/copy_trading.py similarity index 65% rename from pyokx/CopyTrading.py rename to pyokx/copy_trading.py index a752a45..3383db2 100644 --- a/pyokx/CopyTrading.py +++ b/pyokx/copy_trading.py @@ -7,11 +7,18 @@ def get_existing_leading_positions( self, instId: str = None, use_proxy: bool = False ) -> APIReturn: """ - Get existing leading positions + + The leading trader gets leading positions that are not closed. Returns reverse chronological order with openTime Rate limit: 2 requests per 2 seconds Rate limit rule: UserID + + + Args: + instId: Instrument ID, e.g. BTC-USDT-SWAP + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -34,11 +41,23 @@ def get_leading_position_history( use_proxy: bool = False, ) -> APIReturn: """ - Get leading position history + + The leading trader retrieves the completed leading position of the last 3 months. Returns reverse chronological order with closeTime. Rate limit: 2 requests per 2 seconds Rate limit rule: UserID + + + Args: + instId: Instrument ID, e.g. BTC-USDT-SWAP + after: Pagination of data to return records earlier than the requested + subPosId. + before: Pagination of data to return records newer than the requested + subPosId. + limit: Number of results per request. Maximum is 100. Default is 100. + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -55,17 +74,33 @@ def get_leading_position_history( def place_leading_stop_order( self, subPosId: str, - tpTriggerPxType: str = None, - slTriggerPxType: str = None, tpTriggerPx: str = None, slTriggerPx: str = None, + tpTriggerPxType: str = None, + slTriggerPxType: str = None, use_proxy: bool = False, ) -> APIReturn: """ - Place leading stop order + + The leading trader sets TP/SL for the current leading position that are not closed. Rate limit: 1 request per 2 seconds Rate limit rule: UserID + + + Args: + subPosId: Leading position ID + tpTriggerPx: Take-profit trigger price. Take-profit order price will be the market + price after triggering. At least one of tpTriggerPx and slTriggerPx + must be filled + slTriggerPx: Stop-loss trigger price. Stop-loss order price will be the market + price after triggering. + tpTriggerPxType: Take-profit trigger price type last: last price index: index price + mark: mark price Default is last + slTriggerPxType: Stop-loss trigger price type last: last price index: index price mark: + mark price Default is last + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -83,10 +118,18 @@ def close_leading_position( self, subPosId: str, use_proxy: bool = False ) -> APIReturn: """ - Close leading position + + The leading trader can only close a leading position once a time. + It is required to pass subPosId which can get from Get existing leading positions. Rate limit: 2 requests per 2 seconds Rate limit rule: UserID + + + Args: + subPosId: Leading position ID + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -102,10 +145,13 @@ def close_leading_position( def get_leading_instruments(self, use_proxy: bool = False) -> APIReturn: """ - Get leading instruments + + The leading trader gets contracts that are supported to lead by the platform. Rate limit: 2 requests per 2 seconds Rate limit rule: UserID + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -123,10 +169,19 @@ def amend_leading_instruments( self, instId: str, use_proxy: bool = False ) -> APIReturn: """ - Amend leading instruments + + The leading trder can amend current leading instruments, need to set initial leading instruments while applying to become a leading trader. + All non-leading contracts can't have position or pending orders for the current request when setting non-leading contracts as leading contracts. Rate limit: 2 requests per 2 seconds Rate limit rule: UserID + + + Args: + instId: Instrument ID, e.g. BTC-USDT-SWAP. If there are multiple instruments, + separate them with commas. Maximum of 31 instruments can be selected. + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -148,10 +203,21 @@ def get_profit_sharing_details( use_proxy: bool = False, ) -> APIReturn: """ - Get profit sharing details + + The leading trader gets all profits shared details since joining the platform. Rate limit: 2 requests per 2 seconds Rate limit rule: UserID + + + Args: + after: Pagination of data to return records earlier than the requested + profitSharingId + before: Pagination of data to return records newer than the requested + profitSharingId + limit: Number of results per request. Maximum is 100. Default is 100. + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -167,10 +233,13 @@ def get_profit_sharing_details( def get_total_profit_sharing(self, use_proxy: bool = False) -> APIReturn: """ - Get total profit sharing + + The leading trader gets the total amount of profit shared since joining the platform. Rate limit: 2 requests per 2 seconds Rate limit rule: UserID + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -188,10 +257,14 @@ def get_unrealized_profit_sharing_details( self, use_proxy: bool = False ) -> APIReturn: """ - Get unrealized profit sharing details + + The leading trader gets the profit sharing details that are expected to be shared in the next settlement cycle. + The unrealized profit sharing details will update once there copy position is closed. Rate limit: 2 requests per 2 seconds Rate limit rule: UserID + _____________ """ + kwargs = { k: v for k, v in locals().items() diff --git a/pyokx/earn.py b/pyokx/earn.py new file mode 100644 index 0000000..00a25db --- /dev/null +++ b/pyokx/earn.py @@ -0,0 +1,291 @@ +# auto-generated code # +from .base import APIComponent, APIReturn, EndpointDetails + + +class Earn(APIComponent): + def get_offers( + self, + productId: str = None, + protocolType: str = None, + ccy: str = None, + protocol: str = None, + term: str = None, + apy: str = None, + earlyRedeem: bool = None, + investData: list = None, + bal: str = None, + minAmt: str = None, + maxAmt: str = None, + earningData: list = None, + earningType: str = None, + state: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Rate Limit: 3 requests per second + Rate limit rule: UserID + + + Args: + productId: Product ID + protocolType: Protocol type staking: staking defi: DEFI + ccy: Investment currency, e.g. BTC + ccy: Currency type, e.g. BTC + productId: Product ID + protocol: Protocol + protocolType: Protocol type staking:staking defi:DEFI + term: Protocol term For current, this field is 0, and for others it shows + the number of deposit days + apy: Estimated annualization If the annualization is 7% , this field is + 0.07 + earlyRedeem: Whether the protocol supports early redemption + investData: Current target currency information available for investment + ccy: Investment currency, e.g. BTC + bal: Available balance to invest + minAmt: Minimum subscription amount + maxAmt: Maximum subscription amount + earningData: Earning data + ccy: Earning currency, e.g. BTC + earningType: Earning type 0: Estimated earning 1: Cumulative earning + state: Product state purchasable: Purchasable sold_out: Sold out Stop: + Suspension of subscription + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/finance/staking-defi/offers", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def purchase( + self, + productId: str, + investData: list, + ccy: str, + amt: str, + term: str = None, + tag: str = None, + ordId: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Rate Limit: 2 requests per second + Rate limit rule: UserID + + + Args: + productId: Product ID + investData: Investment data + ccy: Investment currency, e.g. BTC + amt: Investment amount + term: Investment term Investment term must be specified for fixed-term + projects + tag: Order tag A combination of case-sensitive alphanumerics, all numbers, + or all letters of up to 16 characters. + ordId: Order ID + tag: Order tag + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/finance/staking-defi/purchase", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def redeem( + self, + ordId: str, + protocolType: str, + allowEarlyRedeem: bool = None, + tag: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Rate Limit: 2 requests per second + Rate limit rule: UserID + + + Args: + ordId: Order ID + protocolType: Protocol type staking: staking defi: DEFI + allowEarlyRedeem: Whether allows early redemption Default is false + tag: Order tag + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/finance/staking-defi/redeem", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def cancel_purchases_redemptions( + self, ordId: str, protocolType: str, tag: str = None, use_proxy: bool = False + ) -> APIReturn: + """ + + + After cancelling, returning funds will go to the funding account. + + Rate Limit: 2 requests per second + Rate limit rule: UserID + + + Args: + ordId: Order ID + protocolType: Protocol type staking: staking defi: DEFI + tag: Order tag + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/finance/staking-defi/cancel", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_active_orders( + self, + productId: str = None, + protocolType: str = None, + ccy: str = None, + state: str = None, + ordId: str = None, + protocol: str = None, + term: str = None, + apy: str = None, + investData: list = None, + amt: str = None, + earningData: list = None, + earningType: str = None, + earnings: str = None, + purchasedTime: str = None, + estSettlementTime: str = None, + cancelRedemptionDeadline: str = None, + tag: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Rate Limit: 3 requests per second + Rate limit rule: UserID + + + Args: + productId: Product ID + protocolType: Protocol type staking: staking defi: DEFI + ccy: Investment currency, e.g. BTC + state: Order state 8: Pending 13: Cancelling 9: Onchain 1: Earning 2: + Redeeming + ccy: Currency, e.g. BTC + ordId: Order ID + productId: Product ID + state: Order state 8: Pending 13: Cancelling 9: Onchain 1: Earning 2: + Redeeming + protocol: Protocol + protocolType: Protocol type staking: staking defi: DEFI + term: Protocol term For current, this field is 0, and for others it shows + the number of deposit days + apy: Estimated annualization If the annualization is 7% , this field is + 0.07 Retain to 4 decimal places (truncated) + investData: Investment data + ccy: Investment currency, e.g. BTC + amt: Invested amount + earningData: Earning data + ccy: Earning currency, e.g. BTC + earningType: Earning type 0: Estimated earning 1: Cumulative earning + earnings: Earning amount + purchasedTime: Order purchased time, Unix timestamp format in milliseconds, e.g. + 1597026383085 + estSettlementTime: Estimated redemption settlement time + cancelRedemptionDeadline: Deadline for cancellation of redemption application + tag: Order tag + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/finance/staking-defi/orders-active", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_order_history( + self, + productId: str = None, + protocolType: str = None, + ccy: str = None, + after: str = None, + before: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Rate Limit: 3 requests per second + Rate limit rule: UserID + + + Args: + productId: Product ID + protocolType: Protocol type staking: staking defi: DEFI + ccy: Investment currency, e.g. BTC + after: Pagination of data to return records earlier than the requested ID. + The value passed is the corresponding ordId + before: Pagination of data to return records newer than the requested ID. The + value passed is the corresponding ordId + limit: Number of results per request. The default is 100. The maximum is 100. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/finance/staking-defi/orders-history", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) diff --git a/pyokx/funding.py b/pyokx/funding.py new file mode 100644 index 0000000..0347138 --- /dev/null +++ b/pyokx/funding.py @@ -0,0 +1,682 @@ +# auto-generated code # +from .base import APIComponent, APIReturn, EndpointDetails +from typing import * + + +class Funding(APIComponent): + def get_currencies(self, ccy: str = None, use_proxy: bool = False) -> APIReturn: + """ + + Retrieve a list of all currencies. + Rate Limit: 6 requests per second + Rate limit rule: UserID + + + Args: + ccy: Single currency or multiple currencies (no more than 20) separated + with comma, e.g. BTC or BTC,ETH. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/asset/currencies", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_balance(self, ccy: str = None, use_proxy: bool = False) -> APIReturn: + """ + + Retrieve the funding account balances of all the assets and the amount that is available or on hold. + + Only asset information of a currency with a balance greater than 0 will be returned. + + Rate Limit: 6 requests per second + Rate limit rule: UserID + + + Args: + ccy: Single currency or multiple currencies (no more than 20) separated + with comma, e.g. BTC or BTC,ETH. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/asset/balances", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_non_tradable_assets( + self, ccy: str = None, use_proxy: bool = False + ) -> APIReturn: + """ + + Rate Limit: 6 requests per second + Rate limit rule: UserID + + + Args: + ccy: Single currency or multiple currencies (no more than 20) separated + with comma, e.g. BTC or BTC,ETH. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/asset/non-tradable-assets", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_account_asset_valuation( + self, ccy: str = None, use_proxy: bool = False + ) -> APIReturn: + """ + + View account asset valuation + Rate Limit: 1 request per second + Rate limit rule: UserID + + + Args: + ccy: Asset valuation calculation unit BTC, USDT USD, CNY, JP, KRW, RUB, EUR + VND, IDR, INR, PHP, THB, TRY AUD, SGD, ARS, SAR, AED, IQD The default + is the valuation in BTC. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/asset/asset-valuation", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def funds_transfer( + self, + ccy: str, + amt: str, + from_: str, + to: str, + subAcct: str = None, + type_: str = None, + loanTrans: bool = None, + clientId: str = None, + omitPosRisk: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Only API keys with Trade privilege can call this endpoint. + This endpoint supports the transfer of funds between your funding account and trading account, and from the master account to sub-accounts. + Sub-account can transfer out to master account by default. Need to call "Set Permission Of Transfer Out" to grant privilege first if you want sub-account transferring to another sub-account (sub-accounts need to belong to same master account.) + + Failure of the request does not mean the transfer has failed. Recommend to call "Get funds transfer state" to confirm the status. + + Rate Limit: 1 request per second + Rate limit rule: UserID + Currency + + + Args: + ccy: Currency, e.g. USDT + amt: Amount to be transferred + from: The remitting account 6: Funding account, 18: Trading account + to: The beneficiary account 6: Funding account, 18: Trading account + subAcct: Name of the sub-account When type is 1, 2 or 4, sub-account is + required. + type_: Transfer type 0: transfer within account 1: master account to sub- + account (Only applicable to API Key from master account) 2: sub- + account to master account (Only applicable to API Key from master + account) 3: sub-account to master account (Only applicable to APIKey + from sub-account) 4: sub-account to sub-account (Only applicable to + APIKey from sub-account, and target account needs to be another sub- + account which belongs to same master account) The default is 0. + loanTrans: Whether or not borrowed coins can be transferred out under Multi- + currency margin and Portfolio margin the default is false + clientId: Client-supplied ID A combination of case-sensitive alphanumerics, all + numbers, or all letters of up to 32 characters. + omitPosRisk: Ignore position risk Default is false Applicable to Portfolio margin + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/asset/transfer", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_funds_transfer_state( + self, + transId: str = None, + clientId: str = None, + type_: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Retrieve the transfer state data of the last 2 weeks. + Rate Limit: 1 request per second + Rate limit rule: UserID + + + Args: + transId: Transfer ID Either transId or clientId is required. If both are + passed, transId will be used. + clientId: Client-supplied ID A combination of case-sensitive alphanumerics, all + numbers, or all letters of up to 32 characters. + type_: Transfer type 0: transfer within account 1: master account to sub- + account (Only applicable to API Key from master account) 2: sub- + account to master account (Only applicable to API Key from master + account) 3: sub-account to master account (Only applicable to APIKey + from sub-account) 4: sub-account to sub-account (Only applicable to + APIKey from sub-account, and target account needs to be another sub- + account which belongs to same master account) The default is 0 + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/asset/transfer-state", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def asset_bills_details( + self, + ccy: str = None, + type_: str = None, + clientId: str = None, + after: str = None, + before: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Query the billing record. You can get the latest 1 month historical data. + Rate Limit: 6 Requests per second + Rate limit rule: UserID + + + Args: + ccy: Currency + type_: Bill type 1: Deposit 2: Withdrawal 13: Canceled withdrawal 20: + Transfer to sub account (for master account) 21: Transfer from sub + account (for master account) 22: Transfer out from sub to master + account (for sub-account) 23: Transfer in from master to sub account + (for sub-account) 28: Manually claimed Airdrop 47: System reversal 48: + Event Reward 49: Event Giveaway 50: Received from appointments 51: + Deducted from appointments 52: Red packet sent 53: Red packet snatched + 54: Red packet refunded 61: Conversion 68: Claim rebate card 69: + Distribute rebate card 72: Token received 73: Token given away 74: + Token refunded 75: Subscription to savings 76: Redemption to savings + 77: Distribute 78: Lock up 79: Node voting 80: Staking 81: Vote + redemption 82: Staking redemption 83: Staking yield 84: Violation fee + 85: PoW mining yield 86: Cloud mining pay 87: Cloud mining yield 88: + Subsidy 89: Staking 90: Staking subscription 91: staking redemption + 92: Add collateral 93: Redeem collateral 94: Investment 95: Borrower + borrows 96: Principal transferred in 97: Borrower transferred loan out + 98: Borrower transferred interest out 99: Investor transferred + interest in 102: Prepayment penalty transferred in 103: Prepayment + penalty transferred out 104: Mortgage fee transferred in 105: Mortgage + fee transferred out 106: Overdue fee transferred in 107: Overdue fee + transferred out 108: Overdue interest transferred out 109: Overdue + interest transferred in 110: Collateral for closed position + transferred in 111: Collateral for closed position transferred out + 112: Collateral for liquidation transferred in 113: Collateral for + liquidation transferred out 114: Insurance fund transferred in 115: + Insurance fund transferred out 116: Place an order 117: Fulfill an + order 118: Cancel an order 119: Merchants unlock deposit 120: + Merchants add deposit 121: FiatGateway Place an order 122: FiatGateway + Cancel an order 123: FiatGateway Fulfill an order 124: Jumpstart + unlocking 125: Manual deposit 126: Interest deposit 127: Investment + fee transferred in 128: Investment fee transferred out 129: Rewards + transferred in 130: Transferred from Trading account 131: Transferred + to Trading account 132: Frozen by customer service 133: Unfrozen by + customer service 134: Transferred by customer service 135: Cross chain + exchange 136: Convert 137: ETH 2.0 Subscription 138: ETH 2.0 Swapping + 139: ETH 2.0 Earnings 143: System Reverse 144: Transfer out of unified + account reserve 145: Reward Expired 146: Customer feedback 147: vested + sushi rewards 150: Affiliate commission 151: Referral reward 152: + Broker reward 153: Joiner reward 154: Mystery box reward 155: Rewards + withdraw 156: Fee rebate 157: Collected crypto 160: Dual Investment + subscribe 161: Dual Investment collection 162: Dual Investment profit + 163: Dual Investment refund 169: 2022 new year rewards 172: Sub- + affiliate commission 173: Fee rebate 174: Pay 175: Locked collateral + 176: Loan 177: Added collateral 178: Returned collateral 179: + Repayment 180: Unlocked collateral 181: Airdrop Payment 182: Feedback + bounty 183: Invite friends rewards 184: Divide the reward pool 185: + Broker Convert Reward 186: FreeETH 187: Convert transfer 188: Slot + Auction Conversion 189: Mystery box bonus 193: Card payment Buy 195: + Untradable asset withdrawal 196: Untradable asset withdrawal revoked + 197: Untradable asset deposit 198: Untradable asset collection reduce + 199: Untradable asset collection increase 200: Buy 202: Price Lock + Subscribe 203: Price Lock Collection 204: Price Lock Profit 205: Price + Lock Refund 207: Dual Investment Lite Subscribe 208: Dual Investment + Lite Collection 209: Dual Investment Lite Profit 210: Dual Investment + Lite Refund 211: Win crypto with Satoshi 212: Multi-collateral loan + collateral locked 213: Collateral transfered out from user account + 214: Collateral returned to users 215: Multi-collateral loan + collateral released 216: Loan transferred to user's account 217: + Multi-collateral loan borrowed 218: Multi-collateral loan repaid 219: + Repayment transferred from user's account 220: Delisted crypto 221: + Blockchain's withdrawal fee 222: Withdrawal fee refund 223: Profit + share 224: Service fee 225: Shark Fin subscribe 226: Shark Fin + collection 227: Shark Fin profit 228: Shark Fin refund 229: Airdrop + 230: Token migration completed 232: Subsidized interest received 233: + Broker rebate compensation 284: Transfer out trading sub-account 285: + Transfer in trading sub-account 286: Transfer out custody funding + account 287: Transfer in custody funding account 288: Custody fund + delegation 289: Custody fund undelegation + clientId: Client-supplied ID for transfer or withdrawal A combination of case- + sensitive alphanumerics, all numbers, or all letters of up to 32 + characters. + after: Pagination of data to return records earlier than the requested ts, + Unix timestamp format in milliseconds, e.g. 1597026383085 + before: Pagination of data to return records newer than the requested ts, Unix + timestamp format in milliseconds, e.g. 1597026383085 + limit: Number of results per request. The maximum is 100. The default is 100. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/asset/bills", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def lightning_deposits( + self, + ccy: str, + amt: str, + to: str = None, + invoice: str = None, + cTime: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Users can create up to 10,000 different invoices within 24 hours. + Rate Limit: 2 requests per second + Rate limit rule: UserID + + + Args: + ccy: Token symbol. Currently only BTC is supported. + amt: Deposit amount between 0.000001 - 0.1 + to: Receiving account 6: Funding account 18: Trading account If empty, + will default to funding account. + invoice: Invoice text + cTime: Invoice creation time + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/asset/deposit-lightning", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_deposit_address(self, ccy: str, use_proxy: bool = False) -> APIReturn: + """ + + Retrieve the deposit addresses of currencies, including previously-used addresses. + Rate Limit: 6 requests per second + Rate limit rule: UserID + + + Args: + ccy: Currency, e.g. BTC + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/asset/deposit-address", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_deposit_history( + self, + ccy: str = None, + depId: str = None, + fromWdId: str = None, + txId: str = None, + type_: str = None, + state: str = None, + after: str = None, + before: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Retrieve the deposit records according to the currency, deposit status, and time range in reverse chronological order. The 100 most recent records are returned by default. + Rate Limit: 6 requests per second + Rate limit rule: UserID + + + Args: + ccy: Currency, e.g. BTC + depId: Deposit ID + fromWdId: Internal transfer initiator's withdrawal ID If the deposit comes from + internal transfer, this field displays the withdrawal ID of the + internal transfer initiator + txId: Hash record of the deposit + type_: Deposit Type 3: internal transfer 4: deposit from chain + state: Status of deposit 0: waiting for confirmation 1: deposit credited 2: + deposit successful 8: pending due to temporary deposit suspension on + this crypto currency 11: match the address blacklist 12: account or + deposit is frozen 13: sub-account deposit interception 14: KYC limit + after: Pagination of data to return records earlier than the requested ts, + Unix timestamp format in milliseconds, e.g. 1654041600000 + before: Pagination of data to return records newer than the requested ts, Unix + timestamp format in milliseconds, e.g. 1656633600000 + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/asset/deposit-history", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def withdrawal( + self, + ccy: str, + amt: str, + dest: str, + toAddr: str, + fee: str, + chain: str = None, + areaCode: str = None, + clientId: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Withdrawal of tokens. Common sub-account does not support withdrawal. + Rate Limit: 6 requests per second + Rate limit rule: UserID + + + Args: + ccy: Currency, e.g. USDT + amt: Withdrawal amount + dest: Withdrawal method 3: internal 4: on chain + toAddr: If your dest is 4,toAddr should be a trusted crypto currency address. + Some crypto currency addresses are formatted as 'address:tag', e.g. + 'ARDOR-7JF3-8F2E-QUWZ-CAN7F:123456' If your dest is 3,toAddr should be + a recipient address which can be email, phone or login account name. + fee: Transaction fee + chain: Chain name There are multiple chains under some currencies, such as + USDT has USDT-ERC20, USDT-TRC20, and USDT-Omni. If the parameter is + not filled in, the default will be the main chain. When you withdrawal + the non-tradable asset, if the parameter is not filled in, the default + will be the unique withdrawal chain. + areaCode: Area code for the phone number If toAddr is a phone number, this + parameter is required. + clientId: Client-supplied ID A combination of case-sensitive alphanumerics, all + numbers, or all letters of up to 32 characters. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/asset/withdrawal", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def lightning_withdrawals( + self, ccy: str, invoice: str, memo: str = None, use_proxy: bool = False + ) -> APIReturn: + """ + + The maximum withdrawal amount is 0.1 BTC per request, and 1 BTC in 24 hours. The minimum withdrawal amount is approximately 0.000001 BTC. Sub-account does not support withdrawal. + Rate Limit: 2 requests per second + Rate limit rule: UserID + + + Args: + ccy: Token symbol. Currently only BTC is supported. + invoice: Invoice text + memo: Lightning withdrawal memo + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/asset/withdrawal-lightning", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def cancel_withdrawal(self, wdId: str, use_proxy: bool = False) -> APIReturn: + """ + + You can cancel normal withdrawal requests, but you cannot cancel withdrawal requests on Lightning. + Rate Limit: 6 requests per second + Rate limit rule: UserID + + + Args: + wdId: Withdrawal ID + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/asset/cancel-withdrawal", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_withdrawal_history( + self, + ccy: str = None, + wdId: str = None, + clientId: str = None, + txId: str = None, + type_: str = None, + state: str = None, + after: str = None, + before: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Retrieve the withdrawal records according to the currency, withdrawal status, and time range in reverse chronological order. The 100 most recent records are returned by default. + Rate Limit: 6 requests per second + Rate limit rule: UserID + + + Args: + ccy: Currency, e.g. BTC + wdId: Withdrawal ID + clientId: Client-supplied ID A combination of case-sensitive alphanumerics, all + numbers, or all letters of up to 32 characters. + txId: Hash record of the deposit + type_: Withdrawal type 3: internal transfer 4: withdrawal to chain + state: Status of withdrawal -3:canceling -2:canceled -1:failed 0:waiting + withdrawal 1:withdrawing 2:withdraw success 7: approved 10: waiting + transfer 4, 5, 6, 8, 9, 12: waiting mannual review + after: Pagination of data to return records earlier than the requested ts, + Unix timestamp format in milliseconds, e.g. 1654041600000 + before: Pagination of data to return records newer than the requested ts, Unix + timestamp format in milliseconds, e.g. 1656633600000 + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/asset/withdrawal-history", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_deposit_withdraw_status( + self, + wdId: str = None, + txId: str = None, + ccy: str = None, + to: str = None, + chain: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Retrieve deposit's and withdrawal's detailed status and estimated complete time. + Rate Limit: 1 request per 2 seconds + Rate limit rule: UserID + + + Args: + wdId: Withdrawl ID, use to retrieve withdrawal status Required to input one + and only one of wdId and txId + txId: Hash record of the deposit, use to retrieve deposit status Required to + input one and only one of wdId and txId + ccy: Currency type, e.g. USDT Required when retrieving deposit status with + txId + to: To address, the destination address in deposit Required when + retrieving deposit status with txId + chain: Currency chain infomation, e.g. USDT-ERC20 Required when retrieving + deposit status with txId + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/asset/deposit-withdraw-status", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def small_assets_convert( + self, ccy: List[str], use_proxy: bool = False + ) -> APIReturn: + """ + + Convert small assets in funding account to OKB. Only 5 convert is allowed within 24 hours. + Rate Limit: 1 request per second + Rate limit rule: UserID + + + Args: + ccy: Small assets needed to be convert, e.g. ["BTC","USDT"] + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/asset/convert-dust-assets", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) diff --git a/pyokx/grid_trading.py b/pyokx/grid_trading.py new file mode 100644 index 0000000..e4c3c46 --- /dev/null +++ b/pyokx/grid_trading.py @@ -0,0 +1,701 @@ +# auto-generated code # +from .base import APIComponent, APIReturn, EndpointDetails +from typing import * + + +class GridTrading(APIComponent): + def place_grid_algo_order( + self, + instId: str, + algoOrdType: str, + maxPx: str, + minPx: str, + gridNum: str, + triggerAction: str, + triggerStrategy: str, + runType: str = None, + tpTriggerPx: str = None, + slTriggerPx: str = None, + tag: str = None, + algoClOrdId: str = None, + triggerParams: List[dict] = None, + delaySeconds: str = None, + timeframe: str = None, + thold: str = None, + triggerCond: str = None, + timePeriod: str = None, + triggerPx: str = None, + stopType: str = None, + quoteSz: str = None, + baseSz: str = None, + sz: str = None, + direction: str = None, + lever: str = None, + basePos: bool = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + Instrument ID + + + Args: + instId: Instrument ID, e.g. BTC-USDT-SWAP + algoOrdType: Algo order type grid: Spot grid contract_grid: Contract grid + moon_grid: Moon grid + maxPx: Upper price of price range + minPx: Lower price of price range + gridNum: Grid quantity + triggerAction: Trigger action start stop + triggerStrategy: Trigger strategy instant price rsi + runType: Grid type 1: Arithmetic, 2: Geometric Default is Arithmetic moon_grid + only support 2 + tpTriggerPx: TP tigger price Applicable to Spot grid/Contract grid + slTriggerPx: SL tigger price Applicable to Spot grid/Contract grid + tag: Order tag + algoClOrdId: Client-supplied Algo ID A combination of case-sensitive alphanumerics, + all numbers, or all letters of up to 32 characters. + triggerParams: Trigger Parameters + delaySeconds: Delay seconds after action triggered + timeframe: K-line type 3m, 5m, 15m, 30m (m: minute) 1H, 4H (H: hour) 1D (D: day) + This field is only valid when triggerStrategy is rsi + thold: Threshold The value should be an integer between 1 to 100 This field + is only valid when triggerStrategy is rsi + triggerCond: Trigger condition cross_up cross_down above below cross This field is + only valid when triggerStrategy is rsi + timePeriod: Time Period 14 This field is only valid when triggerStrategy is rsi + triggerPx: Trigger Price This field is only valid when triggerStrategy is price + stopType: Stop type Spot grid 1: Sell base currency 2: Keep base currency + Contract grid 1: Market Close All positions 2: Keep positions This + field is only valid when triggerAction is stop + quoteSz: Invest amount for quote currency Either quoteSz or baseSz is required + baseSz: Invest amount for base currency Either quoteSz or baseSz is required + sz: Used margin based on USDT + direction: Contract grid type long,short,neutral + lever: Leverage + basePos: Whether or not open a position when the strategy activates Default is + false Neutral contract grid should omit the parameter + quoteSz: Invest amount for quote currency + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def amend_grid_algo_order( + self, + algoId: str, + instId: str, + triggerAction: str, + triggerStrategy: str, + slTriggerPx: str = None, + tpTriggerPx: str = None, + triggerParams: List[dict] = None, + triggerPx: str = None, + stopType: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Supported contract grid algo order amendment. + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + algoId: Algo ID + instId: Instrument ID, e.g. BTC-USDT-SWAP + triggerAction: Trigger action start stop + triggerStrategy: Trigger strategy instant price rsi + slTriggerPx: New stop-loss trigger price if slTriggerPx is set "" means stop-loss + trigger price is canceled. Either slTriggerPx or tpTriggerPx is + required. + tpTriggerPx: New take-profit trigger price if tpTriggerPx is set "" means take- + profit trigger price is canceled. + triggerParams: Trigger Parameters + triggerPx: Trigger Price This field is only valid when triggerStrategy is price + stopType: Stop type Spot grid 1: Sell base currency 2: Keep base currency + Contract grid 1: Market Close All positions 2: Keep positions This + field is only valid when triggerAction is stop + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def stop_grid_algo_order( + self, body: List[dict] = None, use_proxy: bool = False + ) -> APIReturn: + """ + + A maximum of 10 orders can be stopped per request. + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Request format: + This function body should be formatted as an array. Eg. + ```python + ... + body = [ + { + "algoId": str + "instId": str + "algoOrdType": str + "stopType": str + } + ... + ] + api_helper = GridTrading(client) + response = api_helper.stop_grid_algo_order(body=body) + ``` + + + Args: + algoId: Algo ID + instId: Instrument ID, e.g. BTC-USDT + algoOrdType: Algo order type grid: Spot grid contract_grid: Contract grid + moon_grid: Moon grid + stopType: Stop type Spot grid/Moon grid 1: Sell base currency 2: Keep base + currency Contract grid 1: Market Close All positions 2: Keep positions + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def close_position_for_contract_grid( + self, + algoId: str, + mktClose: bool, + sz: str = None, + px: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Close position when the contract grid stop type is 'keep position'. + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + algoId: Algo ID + mktClose: Market close all the positions or not + sz: Close position amount, with unit of contract If mktClose is false, the + parameter is required. + px: Close position price If mktClose is false, the parameter is required. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def cancel_close_position_order_for_contract_grid( + self, algoId: str, ordId: str, use_proxy: bool = False + ) -> APIReturn: + """ + + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + algoId: Algo ID + ordId: Close position order ID + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def instant_trigger_grid_algo_order( + self, algoId: str, use_proxy: bool = False + ) -> APIReturn: + """ + + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + Instrument ID + + + Args: + algoId: Algo ID + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_grid_algo_order_list( + self, + algoOrdType: str, + algoId: str = None, + instId: str = None, + instType: str = None, + after: str = None, + before: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + algoOrdType: Algo order type grid: Spot grid contract_grid: Contract grid + moon_grid: Moon grid + algoId: Algo ID + instId: Instrument ID, e.g. BTC-USDT + instType: Instrument type SPOT MARGIN FUTURES SWAP + after: Pagination of data to return records earlier than the requested + algoId. + before: Pagination of data to return records newer than the requested algoId. + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_grid_algo_order_history( + self, + algoOrdType: str, + algoId: str = None, + instId: str = None, + instType: str = None, + after: str = None, + before: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + algoOrdType: Algo order type grid: Spot grid contract_grid: Contract grid + moon_grid: Moon grid + algoId: Algo ID + instId: Instrument ID, e.g. BTC-USDT + instType: Instrument type SPOT MARGIN FUTURES SWAP + after: Pagination of data to return records earlier than the requested + algoId. + before: Pagination of data to return records newer than the requested algoId. + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_grid_algo_order_details( + self, algoOrdType: str, algoId: str, use_proxy: bool = False + ) -> APIReturn: + """ + + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + algoOrdType: Algo order type grid: Spot grid contract_grid: Contract grid + moon_grid: Moon grid + algoId: Algo ID + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_grid_algo_sub_orders( + self, + algoOrdType: str, + algoId: str, + type_: str, + groupId: str = None, + after: str = None, + before: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + algoOrdType: Algo order type grid: Spot grid contract_grid: Contract grid + moon_grid: Moon grid + algoId: Algo ID + type_: Sub order state live filled + groupId: Group ID + after: Pagination of data to return records earlier than the requested + algoId. + before: Pagination of data to return records newer than the requested algoId. + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_grid_algo_order_positions( + self, algoOrdType: str, algoId: str, use_proxy: bool = False + ) -> APIReturn: + """ + + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + algoOrdType: Algo order type contract_grid: contract grid + algoId: Algo ID + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def spot_moon_grid_withdraw_income( + self, algoId: str, use_proxy: bool = False + ) -> APIReturn: + """ + + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + algoId: Algo ID + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def compute_margin_balance( + self, algoId: str, type_: str, amt: str = None, use_proxy: bool = False + ) -> APIReturn: + """ + + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + algoId: Algo ID + type_: Adjust margin balance type add reduce + amt: Adjust margin balance amount Default is zero. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def adjust_margin_balance( + self, + algoId: str, + type_: str, + amt: str = None, + percent: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + algoId: Algo ID + type_: Adjust margin balance type add reduce + amt: Adjust margin balance amount Either amt or percent is required. + percent: Adjust margin balance percentage + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_grid_ai_parameter_public( + self, + algoOrdType: str, + instId: str, + direction: str = None, + duration: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Authentication is not required for this public endpoint. + Rate Limit: 20 requests per 2 seconds + Rate limit rule: IP + + + Args: + algoOrdType: Algo order type grid: Spot grid contract_grid: Contract grid + moon_grid: Moon grid + instId: Instrument ID, e.g. BTC-USDT + direction: Contract grid type long,short,neutral Required in the case of + contract_grid + duration: Back testing duration 7D: 7 Days, 30D: 30 Days, 180D: 180 Days The + default is 7D for Spot grid,180D for Moon grid Only 7D is available + for Contract grid + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def compute_min_investment_public( + self, + instId: str, + algoOrdType: str, + maxPx: str, + minPx: str, + gridNum: str, + runType: str, + amt: str, + ccy: str, + direction: str = None, + lever: str = None, + basePos: bool = None, + investmentData: List[dict] = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Authentication is not required for this public endpoint. + Rate Limit: 20 requests per 2 seconds + Rate limit rule: IP + + + Args: + instId: Instrument ID, e.g. BTC-USDT-SWAP + algoOrdType: Algo order type grid: Spot grid contract_grid: Contract grid + maxPx: Upper price of price range + minPx: Lower price of price range + gridNum: Grid quantity + runType: Grid type 1: Arithmetic, 2: Geometric + amt: Invest amount + ccy: Invest currency + direction: Contract grid type long,short,neutral Only applicable to contract grid + lever: Leverage Only applicable to contract grid + basePos: Whether or not open a position when the strategy activates Default is + false Neutral contract grid should omit the parameter Only applicable + to contract grid + investmentData: Invest Data + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def rsi_back_testing_public( + self, + instId: str, + timeframe: str, + thold: str, + timePeriod: str, + triggerCond: str = None, + duration: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Authentication is not required for this public endpoint. + Rate Limit: 20 requests per 2 seconds + Rate limit rule: IP + + + Args: + instId: Instrument ID, e.g. BTC-USDT Only applicable to SPOT + timeframe: K-line type 3m, 5m, 15m, 30m (m: minute) 1H, 4H (H: hour) 1D (D: day) + This field is only valid when triggerStrategy is rsi + thold: Threshold The value should be an integer between 1 to 100 + timePeriod: Time Period 14 + triggerCond: Trigger condition cross_up cross_down above below cross Default is + cross_down + duration: Back testing duration 1M (M: month) Default is 1M + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) diff --git a/pyokx/Marketdata.py b/pyokx/market_data.py similarity index 66% rename from pyokx/Marketdata.py rename to pyokx/market_data.py index f6e4eaf..f61ab3e 100644 --- a/pyokx/Marketdata.py +++ b/pyokx/market_data.py @@ -2,7 +2,7 @@ from .base import APIComponent, APIReturn, EndpointDetails -class Marketdata(APIComponent): +class MarketData(APIComponent): def get_tickers( self, instType: str, @@ -11,11 +11,19 @@ def get_tickers( use_proxy: bool = False, ) -> APIReturn: """ - Get tickers + Retrieve the latest price snapshot, best bid/ask price, and trading volume in the last 24 hours. Rate Limit: 20 requests per 2 seconds Rate limit rule: IP + + + Args: + instType: Instrument type SPOT SWAP FUTURES OPTION + uly: Underlying, e.g. BTC-USD Applicable to FUTURES/SWAP/OPTION + instFamily: Instrument family Applicable to FUTURES/SWAP/OPTION + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -31,11 +39,17 @@ def get_tickers( def get_ticker(self, instId: str, use_proxy: bool = False) -> APIReturn: """ - Get ticker + Retrieve the latest price snapshot, best bid/ask price, and trading volume in the last 24 hours. Rate Limit: 20 requests per 2 seconds Rate limit rule: IP + + + Args: + instId: Instrument ID, e.g. BTC-USD-SWAP + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -53,11 +67,19 @@ def get_index_tickers( self, quoteCcy: str = None, instId: str = None, use_proxy: bool = False ) -> APIReturn: """ - Get index tickers + Retrieve index tickers. Rate Limit: 20 requests per 2 seconds Rate limit rule: IP + + + Args: + quoteCcy: Quote currency Currently there is only an index with USD/USDT/BTC as + the quote currency. + instId: Index, e.g. BTC-USD Either quoteCcy or instId is required. + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -75,11 +97,19 @@ def get_order_book( self, instId: str, sz: str = None, use_proxy: bool = False ) -> APIReturn: """ - Get order book + Retrieve order book of the instrument. Rate Limit: 40 requests per 2 seconds Rate limit rule: IP + + + Args: + instId: Instrument ID, e.g. BTC-USDT + sz: Order book depth per side. Maximum 400, e.g. 400 bids + 400 asks + Default returns to 1 depth data + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -95,11 +125,17 @@ def get_order_book( def get_order_lite_book(self, instId: str, use_proxy: bool = False) -> APIReturn: """ - Get order lite book + Retrieve order top 25 book of the instrument more quickly Rate Limit: 6 requests per 1 seconds Rate limit rule: IP + + + Args: + instId: Instrument ID, e.g. BTC-USDT + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -123,11 +159,23 @@ def get_candlesticks( use_proxy: bool = False, ) -> APIReturn: """ - Get candlesticks + Retrieve the candlestick charts. This endpoint can retrieve the latest 1,440 data entries. Charts are returned in groups based on the requested bar. Rate Limit: 40 requests per 2 seconds Rate limit rule: IP + + + Args: + instId: Instrument ID, e.g. BTC-USD-190927-5000-C + bar: Bar size, the default is 1m e.g. [1m/3m/5m/15m/30m/1H/2H/4H] Hong Kong + time opening price k-line:[6H/12H/1D/2D/3D/1W/1M/3M] UTC time opening + price k-line:[/6Hutc/12Hutc/1Dutc/2Dutc/3Dutc/1Wutc/1Mutc/3Mutc] + after: Pagination of data to return records earlier than the requested ts + before: Pagination of data to return records newer than the requested ts + limit: Number of results per request. The maximum is 300. The default is 100. + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -151,11 +199,23 @@ def get_candlesticks_history( use_proxy: bool = False, ) -> APIReturn: """ - Get candlesticks history + Retrieve history candlestick charts from recent years. Rate Limit: 20 requests per 2 seconds Rate limit rule: IP + + + Args: + instId: Instrument ID, e.g. BTC-USD-200927 + after: Pagination of data to return records earlier than the requested ts + before: Pagination of data to return records newer than the requested ts + bar: Bar size, the default is 1m e.g. [1m/3m/5m/15m/30m/1H/2H/4H] Hong Kong + time opening price k-line:[6H/12H/1D/2D/3D/1W/1M/3M] UTC time opening + price k-line:[6Hutc/12Hutc/1Dutc/2Dutc/3Dutc/1Wutc/1Mutc/3Mutc] + limit: Number of results per request. The maximum is 100. The default is 100. + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -179,11 +239,23 @@ def get_index_candlesticks( use_proxy: bool = False, ) -> APIReturn: """ - Get index candlesticks + Retrieve the candlestick charts of the index. This endpoint can retrieve the latest 1,440 data entries. Charts are returned in groups based on the requested bar. Rate Limit: 20 requests per 2 seconds Rate limit rule: IP + + + Args: + instId: Index, e.g. BTC-USD + after: Pagination of data to return records earlier than the requested ts + before: Pagination of data to return records newer than the requested ts + bar: Bar size, the default is 1m e.g. [1m/3m/5m/15m/30m/1H/2H/4H] Hong Kong + time opening price k-line:[6H/12H/1D/1W/1M/3M] UTC time opening price + k-line:[/6Hutc/12Hutc/1Dutc/1Wutc/1Mutc/3Mutc] + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -207,11 +279,23 @@ def get_index_candlesticks_history( use_proxy: bool = False, ) -> APIReturn: """ - Get index candlesticks history + Retrieve the candlestick charts of the index from recent years. Rate Limit: 10 requests per 2 seconds Rate limit rule: IP + + + Args: + instId: Index, e.g. BTC-USD + after: Pagination of data to return records earlier than the requested ts + before: Pagination of data to return records newer than the requested ts + bar: Bar size, the default is 1m e.g. [1m/3m/5m/15m/30m/1H/2H/4H] Hong Kong + time opening price k-line:[6H/12H/1D/1W/1M] UTC time opening price + k-line:[/6Hutc/12Hutc/1Dutc/1Wutc/1Mutc] + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -235,11 +319,23 @@ def get_mark_price_candlesticks( use_proxy: bool = False, ) -> APIReturn: """ - Get mark price candlesticks + Retrieve the candlestick charts of mark price. This endpoint can retrieve the latest 1,440 data entries. Charts are returned in groups based on the requested bar. Rate Limit: 20 requests per 2 seconds Rate limit rule: IP + + + Args: + instId: Instrument ID, e.g. BTC-USD-SWAP + after: Pagination of data to return records earlier than the requested ts + before: Pagination of data to return records newer than the requested ts + bar: Bar size, the default is 1m e.g. [1m/3m/5m/15m/30m/1H/2H/4H] Hong Kong + time opening price k-line:[6H/12H/1D/1W/1M/3M] UTC time opening price + k-line:[6Hutc/12Hutc/1Dutc/1Wutc/1Mutc/3Mutc] + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -263,11 +359,23 @@ def get_mark_price_candlesticks_history( use_proxy: bool = False, ) -> APIReturn: """ - Get mark price candlesticks history + Retrieve the candlestick charts of mark price from recent years. Rate Limit: 10 requests per 2 seconds Rate limit rule: IP + + + Args: + instId: Instrument ID, e.g. BTC-USD-SWAP + after: Pagination of data to return records earlier than the requested ts + before: Pagination of data to return records newer than the requested ts + bar: Bar size, the default is 1m e.g. [1m/3m/5m/15m/30m/1H/2H/4H] Hong Kong + time opening price k-line:[6H/12H/1D/1W/1M] UTC time opening price + k-line:[6Hutc/12Hutc/1Dutc/1Wutc/1Mutc] + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -285,11 +393,18 @@ def get_trades( self, instId: str, limit: str = None, use_proxy: bool = False ) -> APIReturn: """ - Get trades + Retrieve the recent transactions of an instrument. Rate Limit: 100 requests per 2 seconds Rate limit rule: IP + + + Args: + instId: Instrument ID, e.g. BTC-USDT + limit: Number of results per request. The maximum is 500; The default is 100 + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -306,18 +421,30 @@ def get_trades( def get_trades_history( self, instId: str, - type: str = None, + type_: str = None, after: str = None, before: str = None, limit: str = None, use_proxy: bool = False, ) -> APIReturn: """ - Get trades history + Retrieve the recent transactions of an instrument from the last 3 months with pagination. Rate Limit: 10 requests per 2 seconds Rate limit rule: IP + + + Args: + instId: Instrument ID, e.g. BTC-USDT + type_: Pagination Type 1: tradeId 2: timestamp The default is 1 + after: Pagination of data to return records earlier than the requested + tradeId or ts. + before: Pagination of data to return records newer than the requested tradeId. + Do not support timestamp for pagination + limit: Number of results per request. The maximum and default both are 100 + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -333,11 +460,17 @@ def get_trades_history( def get_option_trades(self, instFamily: str, use_proxy: bool = False) -> APIReturn: """ - Get option trades + Retrieve the recent transactions of an instrument under same instFamily. The maximum is 100. Rate Limit: 20 requests per 2 seconds Rate limit rule: IP + + + Args: + instFamily: Instrument family, e.g. BTC-USD Applicable to OPTION + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -351,33 +484,66 @@ def get_option_trades(self, instFamily: str, use_proxy: bool = False) -> APIRetu ) return self.request(details) - def get_24h_total_volume(self, use_proxy: bool = False) -> APIReturn: + def get_24h_total_volume( + self, + volUsd: str = None, + volCny: str = None, + ts: str = None, + use_proxy: bool = False, + ) -> APIReturn: """ - Get 24H total volume - The 24-hour trading volume is calculated on a rolling basis, using USD as the pricing unit, including block trading volume. + + The 24-hour trading volume is calculated on a rolling basis. Rate Limit: 2 requests per 2 seconds Rate limit rule: IP + + + Args: + volUsd: 24-hour total trading volume from the order book trading in "USD" + volCny: 24-hour total trading volume from the order book trading in "CNY" + ts: Data return time, Unix timestamp format in milliseconds, e.g. + 1597026383085 + _____________ """ + kwargs = { k: v for k, v in locals().items() if k not in ["use_proxy", "self"] and v is not None } details = EndpointDetails( - request_path="/api/v5/market/platform-24-volume", + request_path="/api/v5/market/platform-", method="GET", params=kwargs, use_proxy=use_proxy, ) return self.request(details) - def get_oracle(self, use_proxy: bool = False) -> APIReturn: + def get_oracle( + self, + messages: str = None, + prices: str = None, + signatures: str = None, + timestamp: str = None, + use_proxy: bool = False, + ) -> APIReturn: """ - Get oracle + Get the crypto price of signing using Open Oracle smart contract. Rate Limit: 1 request per 5 seconds Rate limit rule: IP + + + Args: + messages: ABI-encoded values [kind, timestamp, key, value], where kind equals + 'prices', timestamp is the time when price was obtained, key is the + asset ticker (e.g. btc) and value is the asset price. + prices: Readable asset prices + signatures: Ethereum-compatible ECDSA signatures for each message + timestamp: Time of latest datapoint, Unix timestamp, e.g. 1597026387 + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -391,13 +557,21 @@ def get_oracle(self, use_proxy: bool = False) -> APIReturn: ) return self.request(details) - def get_exchange_rate(self, use_proxy: bool = False) -> APIReturn: + def get_exchange_rate( + self, usdCny: str = None, use_proxy: bool = False + ) -> APIReturn: """ - Get exchange rate + This interface provides the average exchange rate data for 2 weeks Rate Limit: 1 request per 2 seconds Rate limit rule: IP + + + Args: + usdCny: Exchange rate + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -413,11 +587,17 @@ def get_exchange_rate(self, use_proxy: bool = False) -> APIReturn: def get_index_components(self, index: str, use_proxy: bool = False) -> APIReturn: """ - Get index components + Get the index component information data on the market Rate Limit: 20 requests per 2 seconds Rate limit rule: IP + + + Args: + index: index, e.g BTC-USDT + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -439,11 +619,19 @@ def get_block_tickers( use_proxy: bool = False, ) -> APIReturn: """ - Get block tickers + Retrieve the latest block trading volume in the last 24 hours. Rate Limit: 20 requests per 2 seconds Rate limit rule: IP + + + Args: + instType: Instrument type SPOT SWAP FUTURES OPTION + uly: Underlying, e.g. BTC-USD Applicable to FUTURES/SWAP/OPTION + instFamily: Instrument family, e.g. BTC-USD Applicable to FUTURES/SWAP/OPTION + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -459,11 +647,17 @@ def get_block_tickers( def get_block_ticker(self, instId: str, use_proxy: bool = False) -> APIReturn: """ - Get block ticker + Retrieve the latest block trading volume in the last 24 hours. Rate Limit: 20 requests per 2 seconds Rate limit rule: IP + + + Args: + instId: Instrument ID, e.g. BTC-USD-SWAP + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -479,11 +673,17 @@ def get_block_ticker(self, instId: str, use_proxy: bool = False) -> APIReturn: def get_block_trades(self, instId: str, use_proxy: bool = False) -> APIReturn: """ - Get block trades + Retrieve the recent block trading transactions of an instrument. Descending order by tradeId. Rate Limit: 20 requests per 2 seconds Rate limit rule: IP + + + Args: + instId: Instrument ID, e.g. BTC-USDT + _____________ """ + kwargs = { k: v for k, v in locals().items() diff --git a/pyokx/Publicdata.py b/pyokx/public_data.py similarity index 56% rename from pyokx/Publicdata.py rename to pyokx/public_data.py index aff4211..fcae555 100644 --- a/pyokx/Publicdata.py +++ b/pyokx/public_data.py @@ -2,21 +2,32 @@ from .base import APIComponent, APIReturn, EndpointDetails -class Publicdata(APIComponent): +class PublicData(APIComponent): def get_instruments( self, instType: str, - instId: str = None, uly: str = None, instFamily: str = None, + instId: str = None, use_proxy: bool = False, ) -> APIReturn: """ - Get instruments + Retrieve a list of instruments with open contracts. Rate Limit: 20 requests per 2 seconds Rate limit rule: IP + instrumentType + + + Args: + instType: Instrument type SPOT MARGIN SWAP FUTURES OPTION + uly: Underlying Only applicable to FUTURES/SWAP/OPTION.If instType is + OPTION, either uly or instFamily is required. + instFamily: Instrument family Only applicable to FUTURES/SWAP/OPTION. If instType + is OPTION, either uly or instFamily is required. + instId: Instrument ID + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -33,19 +44,32 @@ def get_instruments( def get_delivery_exercise_history( self, instType: str, + uly: str = None, + instFamily: str = None, after: str = None, before: str = None, limit: str = None, - uly: str = None, - instFamily: str = None, use_proxy: bool = False, ) -> APIReturn: """ - Get delivery/exercise history + Retrieve delivery records of Futures and exercise records of Options in the last 3 months. Rate Limit: 40 requests per 2 seconds Rate limit rule: IP + (instrumentType + uly) + + + Args: + instType: Instrument type FUTURES OPTION + uly: Underlying, only applicable to FUTURES/OPTION Either uly or instFamily + is required. If both are passed, instFamily will be used. + instFamily: Instrument family, only applicable to FUTURES/OPTION Either uly or + instFamily is required. If both are passed, instFamily will be used. + after: Pagination of data to return records earlier than the requested ts + before: Pagination of data to return records newer than the requested ts + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -62,17 +86,28 @@ def get_delivery_exercise_history( def get_open_interest( self, instType: str, - instId: str = None, uly: str = None, instFamily: str = None, + instId: str = None, use_proxy: bool = False, ) -> APIReturn: """ - Get open interest + Retrieve the total open interest for contracts on OKX. Rate Limit: 20 requests per 2 seconds Rate limit rule: IP +instrumentID + + + Args: + instType: Instrument type SWAP FUTURES OPTION + uly: Underlying Applicable to FUTURES/SWAP/OPTION. If instType is OPTION, + either uly or instFamily is required. + instFamily: Instrument family Applicable to FUTURES/SWAP/OPTION If instType is + OPTION, either uly or instFamily is required. + instId: Instrument ID, e.g. BTC-USD-180216 Applicable to FUTURES/SWAP/OPTION + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -88,11 +123,17 @@ def get_open_interest( def get_funding_rate(self, instId: str, use_proxy: bool = False) -> APIReturn: """ - Get funding rate + Retrieve funding rate. Rate Limit: 20 requests per 2 seconds Rate limit rule: IP +instrumentID + + + Args: + instId: Instrument ID, e.g. BTC-USD-SWAP only applicable to SWAP + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -115,11 +156,22 @@ def get_funding_rate_history( use_proxy: bool = False, ) -> APIReturn: """ - Get funding rate history + Retrieve funding rate history. This endpoint can retrieve data from the last 3 months. Rate Limit: 20 requests per 2 seconds Rate limit rule: IP +instrumentID + + + Args: + instId: Instrument ID, e.g. BTC-USD-SWAP only applicable to SWAP + before: Pagination of data to return records newer than the requested + fundingTime + after: Pagination of data to return records earlier than the requested + fundingTime + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -135,11 +187,18 @@ def get_funding_rate_history( def get_limit_price(self, instId: str, use_proxy: bool = False) -> APIReturn: """ - Get limit price + Retrieve the highest buy limit and lowest sell limit of the instrument. Rate Limit: 20 requests per 2 seconds Rate limit rule: IP + + + Args: + instId: Instrument ID, e.g. BTC-USDT-SWAP only applicable to + FUTURES/SWAP/OPTION + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -155,17 +214,27 @@ def get_limit_price(self, instId: str, use_proxy: bool = False) -> APIReturn: def get_option_market_data( self, - expTime: str = None, uly: str = None, instFamily: str = None, + expTime: str = None, use_proxy: bool = False, ) -> APIReturn: """ - Get option market data + Retrieve option market data. Rate Limit: 20 requests per 2 seconds Rate limit rule: IP +uly + + + Args: + uly: Underlying, only applicable to OPTION Either uly or instFamily is + required. If both are passed, instFamily will be used. + instFamily: Instrument family, only applicable to OPTION Either uly or instFamily + is required. If both are passed, instFamily will be used. + expTime: Contract expiry date, the format is "YYMMDD", e.g. "200527" + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -183,11 +252,17 @@ def get_estimated_delivery_exercise_price( self, instId: str, use_proxy: bool = False ) -> APIReturn: """ - Get estimated delivery/exercise price + Retrieve the estimated delivery price which will only have a return value one hour before the delivery/exercise. Rate Limit: 10 requests per 2 seconds Rate limit rule: IP +instId + + + Args: + instId: Instrument ID, e.g. BTC-USD-200214 only applicable to FUTURES/OPTION + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -205,11 +280,18 @@ def get_discount_rate_and_interest_free_quota( self, ccy: str = None, discountLv: str = None, use_proxy: bool = False ) -> APIReturn: """ - Get discount rate and interest-free quota + Retrieve discount rate level and interest-free quota. Rate Limit: 2 requests per 2 seconds Rate limit rule: IP + + + Args: + ccy: Currency + discountLv: Discount level 1:level 1 2:level 2 3:level 3 4:level 4 5:level 5 + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -223,54 +305,26 @@ def get_discount_rate_and_interest_free_quota( ) return self.request(details) - def get_system_time(self, use_proxy: bool = False) -> APIReturn: + def get_system_time(self, ts: str = None, use_proxy: bool = False) -> APIReturn: """ - Get system time + Retrieve API server time. Rate Limit: 10 requests per 2 seconds Rate limit rule: IP - """ - kwargs = { - k: v - for k, v in locals().items() - if k not in ["use_proxy", "self"] and v is not None - } - details = EndpointDetails( - request_path="/api/v5/public/time", - method="GET", - params=kwargs, - use_proxy=use_proxy, - ) - return self.request(details) - def get_liquidation_orders( - self, - instType: str, - mgnMode: str = None, - instId: str = None, - ccy: str = None, - state: str = None, - before: str = None, - after: str = None, - limit: str = None, - uly: str = None, - instFamily: str = None, - alias: str = None, - use_proxy: bool = False, - ) -> APIReturn: - """ - Get liquidation orders - Retrieve information on liquidation orders in the last day. - Rate Limit: 40 requests per 2 seconds - Rate limit rule: IP + + Args: + ts: System time, Unix timestamp format in milliseconds, e.g. 1597026383085 + _____________ """ + kwargs = { k: v for k, v in locals().items() if k not in ["use_proxy", "self"] and v is not None } details = EndpointDetails( - request_path="/api/v5/public/liquidation-orders", + request_path="/api/v5/public/time", method="GET", params=kwargs, use_proxy=use_proxy, @@ -286,12 +340,21 @@ def get_mark_price( use_proxy: bool = False, ) -> APIReturn: """ - Get mark price + Retrieve mark price. We set the mark price based on the SPOT index and at a reasonable basis to prevent individual users from manipulating the market and causing the contract price to fluctuate. Rate Limit: 10 requests per 2 seconds Rate limit rule: IP +instrumentID + + + Args: + instType: Instrument type MARGIN SWAP FUTURES OPTION + uly: Underlying Applicable to FUTURES/SWAP/OPTION + instFamily: Instrument family Applicable to FUTURES/SWAP/OPTION + instId: Instrument ID, e.g. BTC-USD-SWAP + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -309,19 +372,41 @@ def get_position_tiers( self, instType: str, tdMode: str, - tier: str = None, uly: str = None, instFamily: str = None, instId: str = None, ccy: str = None, + tier: str = None, use_proxy: bool = False, ) -> APIReturn: """ - Get position tiers + Retrieve position tiers information, maximum leverage depends on your borrowings and margin ratio. Rate Limit: 10 requests per 2 seconds Rate limit rule: IP + + + Args: + instType: Instrument type MARGIN SWAP FUTURES OPTION + tdMode: Trade mode Margin mode cross isolated + uly: Single underlying or multiple underlyings (no more than 3) separated + with comma. If instType is SWAP/FUTURES/OPTION, either uly or + instFamily is required. If both are passed, instFamily will be used. + instFamily: Single instrument familiy or multiple instrument families (no more + than 5) separated with comma. If instType is SWAP/FUTURES/OPTION, + either uly or instFamily is required. If both are passed, instFamily + will be used. + instId: Single instrument or multiple instruments (no more than 5) separated + with comma. Either instId or ccy is required, if both are passed, + instId will be used, ignore when instType is one of + SWAP,FUTURES,OPTION + ccy: Margin currency Only applicable to cross MARGIN. It will return + borrowing amount for Multi-currency margin and Portfolio margin when + ccy takes effect. + tier: Tiers + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -335,13 +420,42 @@ def get_position_tiers( ) return self.request(details) - def get_interest_rate_and_loan_quota(self, use_proxy: bool = False) -> APIReturn: + def get_interest_rate_and_loan_quota( + self, + basic: list = None, + ccy: str = None, + rate: str = None, + quota: str = None, + vip: list = None, + level: str = None, + loanQuotaCoef: str = None, + irDiscount: str = None, + regular: list = None, + use_proxy: bool = False, + ) -> APIReturn: """ - Get interest rate and loan quota + Retrieve interest rate Rate Limit: 2 requests per 2 seconds Rate limit rule: IP + + + Args: + basic: Basic interest rate + ccy: Currency + rate: Daily rate + quota: Max borrow + vip: Interest info for vip users + level: VIP Level, e.g. VIP1 + loanQuotaCoef: Loan quota coefficient + irDiscount: Interest rate discount + regular: Interest info for regular users + level: Regular user Level, e.g. Lv1 + loanQuotaCoef: Loan quota coefficient + irDiscount: Interest rate discount + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -356,13 +470,31 @@ def get_interest_rate_and_loan_quota(self, use_proxy: bool = False) -> APIReturn return self.request(details) def get_interest_rate_and_loan_quota_for_vip_loans( - self, use_proxy: bool = False + self, + ccy: str = None, + rate: str = None, + quota: str = None, + levelList: list = None, + level: str = None, + loanQuota: str = None, + use_proxy: bool = False, ) -> APIReturn: """ - Get interest rate and loan quota for VIP loans + Rate Limit: 2 requests per 2 seconds Rate limit rule: IP + + + Args: + ccy: Currency, e.g. BTC + rate: Daily rate + quota: Max borrow + levelList: Loan quota information under different VIP levels + level: VIP Level, e.g. VIP5 + loanQuota: Loan quota + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -378,10 +510,16 @@ def get_interest_rate_and_loan_quota_for_vip_loans( def get_underlying(self, instType: str, use_proxy: bool = False) -> APIReturn: """ - Get underlying + Rate Limit: 20 requests per 2 seconds Rate limit rule: IP + + + Args: + instType: Instrument type SWAP FUTURES OPTION + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -398,21 +536,37 @@ def get_underlying(self, instType: str, use_proxy: bool = False) -> APIReturn: def get_insurance_fund( self, instType: str, - type: str = None, - before: str = None, - after: str = None, - limit: str = None, + type_: str = None, uly: str = None, instFamily: str = None, ccy: str = None, + before: str = None, + after: str = None, + limit: str = None, use_proxy: bool = False, ) -> APIReturn: """ - Get insurance fund + Get insurance fund balance information Rate Limit: 10 requests per 2 seconds Rate limit rule: IP + + + Args: + instType: Instrument type MARGIN SWAP FUTURES OPTION + type_: Type liquidation_balance_deposit bankruptcy_loss platform_revenue The + default is all type + uly: Underlying Required for FUTURES/SWAP/OPTION Either uly or instFamily + is required. If both are passed, instFamily will be used. + instFamily: Instrument family Required for FUTURES/SWAP/OPTION Either uly or + instFamily is required. If both are passed, instFamily will be used. + ccy: Currency, only applicable to MARGIN + before: Pagination of data to return records newer than the requested ts + after: Pagination of data to return records earlier than the requested ts + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -430,17 +584,35 @@ def unit_convert( self, instId: str, sz: str, - type: str = None, - unit: str = None, + type_: str = None, px: str = None, + unit: str = None, use_proxy: bool = False, ) -> APIReturn: """ - Unit convert + Convert the crypto value to the number of contracts, or vice versa Rate Limit: 10 requests per 2 seconds Rate limit rule: IP + + + Args: + instId: Instrument ID, only applicable to FUTURES/SWAP/OPTION + sz: Quantity to buy or sell It is quantity of currency while converting + currency to contract; It is quantity of contract while contract to + currency. Quantity of coin needs to be positive integer + type_: Convert type 1: Convert currency to contract. It will be rounded up + when the value of contract is decimal 2: Convert contract to currency + The defautl is 1 + px: Order price For crypto-margined contracts, it is necessary while + converting; For USDT-margined contracts, it is necessary while + converting between usdt and contract, it is optional while converting + between coin and contract. For OPTION, it is optional. + unit: The unit of currency. coin usds: usdt or usdc, only applicable to + USDⓈ-margined contracts from FUTURES/SWAP + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -453,3 +625,67 @@ def unit_convert( use_proxy=use_proxy, ) return self.request(details) + + def get_option_trades( + self, + instId: str = None, + instFamily: str = None, + optType: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + The maximum is 100. + Rate Limit: 20 requests per 2 seconds + Rate limit rule: IP + + + Args: + instId: Instrument ID, e.g. BTC-USD-221230-4000-C, Either instId or instFamily + is required. If both are passed, instId will be used. + instFamily: Instrument family, e.g. BTC-USD + optType: Option type, C: Call P: put + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/public/option-trades", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_option_tickbands( + self, instType: str, instFamily: str = None, use_proxy: bool = False + ) -> APIReturn: + """ + + Get option tickBands information + Rate Limit: 5 requests per 2 seconds + Rate limit rule: IP + + + Args: + instType: Instrument type OPTION + instFamily: Instrument family Only applicable to OPTION + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/public/instrument-tick-bands", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) diff --git a/pyokx/recurring_buy.py b/pyokx/recurring_buy.py new file mode 100644 index 0000000..7b42b8a --- /dev/null +++ b/pyokx/recurring_buy.py @@ -0,0 +1,274 @@ +# auto-generated code # +from .base import APIComponent, APIReturn, EndpointDetails +from typing import * + + +class RecurringBuy(APIComponent): + def place_recurring_buy_order( + self, + stgyName: str, + recurringList: List[dict], + ccy: str, + ratio: str, + period: str, + recurringDay: str, + recurringTime: str, + timeZone: str, + amt: str, + investmentCcy: str, + tdMode: str, + algoClOrdId: str = None, + tag: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + stgyName: Custom name for trading bot, no more than 40 characters + recurringList: Recurring buy info + ccy: Recurring currency, e.g. BTC + ratio: Proportion of recurring currency assets, e.g. "0.2" representing 20% + period: Period monthly weekly daily + recurringDay: Recurring buy date When the period is monthly, the value range is an + integer of [1,28] When the period is weekly, the value range is an + integer of [1,7] When the period is daily, the value is 1 + recurringTime: Recurring buy time, the value range is an integer of [0,23] + timeZone: UTC time zone,the value range is an integer of [-12,14] e.g. "8" + representing UTC+8 (East 8 District), Beijing Time + amt: Quantity invested per cycle + investmentCcy: The invested quantity unit, can only be USDT/USDC + tdMode: Trading mode Margin mode: cross Non-Margin mode: cash + algoClOrdId: Client-supplied Algo ID There will be a value when algo order + attaching algoClOrdId is triggered, or it will be "". A combination of + case-sensitive alphanumerics, all numbers, or all letters of up to 32 + characters. + tag: Order tag A combination of case-sensitive alphanumerics, all numbers, + or all letters of up to 16 characters. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def amend_recurring_buy_order( + self, algoId: str, stgyName: str, use_proxy: bool = False + ) -> APIReturn: + """ + + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + algoId: Algo ID + stgyName: New custom name for trading bot after adjustment, no more than 40 + characters + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def stop_recurring_buy_order( + self, body: List[dict] = None, use_proxy: bool = False + ) -> APIReturn: + """ + + A maximum of 10 orders can be stopped per request. + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Request format: + This function body should be formatted as an array. Eg. + ```python + ... + body = [ + { + "algoId": str + } + ... + ] + api_helper = RecurringBuy(client) + response = api_helper.stop_recurring_buy_order(body=body) + ``` + + + Args: + algoId: Algo ID + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_recurring_buy_order_list( + self, + algoId: str = None, + after: str = None, + before: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + algoId: Algo ID + after: Pagination of data to return records earlier than the requested + algoId. + before: Pagination of data to return records newer than the requested algoId. + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_recurring_buy_order_history( + self, + algoId: str = None, + after: str = None, + before: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + algoId: Algo ID + after: Pagination of data to return records earlier than the requested + algoId. + before: Pagination of data to return records newer than the requested algoId. + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_recurring_buy_order_details( + self, algoId: str, use_proxy: bool = False + ) -> APIReturn: + """ + + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + algoId: Algo ID + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_recurring_buy_sub_orders( + self, + algoId: str, + ordId: str = None, + after: str = None, + before: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + algoId: Algo ID + ordId: Sub order ID + after: Pagination of data to return records earlier than the requested + algoId. + before: Pagination of data to return records newer than the requested algoId. + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trading", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) diff --git a/pyokx/savings.py b/pyokx/savings.py new file mode 100644 index 0000000..c32d320 --- /dev/null +++ b/pyokx/savings.py @@ -0,0 +1,194 @@ +# auto-generated code # +from .base import APIComponent, APIReturn, EndpointDetails + + +class Savings(APIComponent): + def get_saving_balance(self, ccy: str = None, use_proxy: bool = False) -> APIReturn: + """ + + Rate Limit: 6 requests per second + Rate limit rule: UserID + + + Args: + ccy: Currency, e.g. BTC + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/finance/savings/balance", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def savings_purchase_redemption( + self, ccy: str, amt: str, side: str, rate: str, use_proxy: bool = False + ) -> APIReturn: + """ + + Only the assets in the funding account can be used for saving. + Rate Limit: 6 requests per second + Rate limit rule: UserID + + + Args: + ccy: Currency, e.g. BTC + amt: Purchase/redemption amount + side: Action type. purchase: purchase saving shares redempt: redeem saving + shares + rate: Annual purchase rate Only applicable to purchase saving shares The + interest rate of the new subscription will cover the interest rate of + the last subscription The rate value range is between 1% and 365% + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/finance/savings/purchase-redempt", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def set_lending_rate( + self, ccy: str, rate: str, use_proxy: bool = False + ) -> APIReturn: + """ + + Rate Limit: 6 requests per second + Rate limit rule: UserID + + + Args: + ccy: Currency, e.g. BTC + rate: Annual lending rate The rate value range is between 1% and 365% + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/finance/savings/set-lending-rate", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_lending_history( + self, + ccy: str = None, + after: str = None, + before: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Rate Limit: 6 requests per second + Rate limit rule: UserID + + + Args: + ccy: Currency, e.g. BTC + after: Pagination of data to return records earlier than the requested ts, + Unix timestamp format in milliseconds, e.g. 1597026383085 + before: Pagination of data to return records newer than the requested ts, Unix + timestamp format in milliseconds, e.g. 1597026383085 + limit: Number of results per request. The maximum is 100. The default is 100. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/finance/savings/lending-history", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_public_borrow_info_public( + self, ccy: str = None, use_proxy: bool = False + ) -> APIReturn: + """ + + Authentication is not required for this public endpoint. + Rate Limit: 6 requests per second + Rate limit rule: IP + + + Args: + ccy: Currency, e.g. BTC + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/finance/savings/lending-rate-summary", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_public_borrow_history_public( + self, + ccy: str = None, + after: str = None, + before: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Authentication is not required for this public endpoint. + Rate Limit: 6 requests per second + Rate limit rule: IP + + + Args: + ccy: Currency, e.g. BTC + after: Pagination of data to return records earlier than the requested ts, + Unix timestamp format in milliseconds, e.g. 1597026383085 + before: Pagination of data to return records newer than the requested ts, Unix + timestamp format in milliseconds, e.g. 1597026383085 + limit: Number of results per request. The maximum is 100. The default is 100. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/finance/savings/lending-rate-history", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) diff --git a/pyokx/Status.py b/pyokx/status.py similarity index 100% rename from pyokx/Status.py rename to pyokx/status.py diff --git a/pyokx/subaccount.py b/pyokx/subaccount.py new file mode 100644 index 0000000..f570c07 --- /dev/null +++ b/pyokx/subaccount.py @@ -0,0 +1,391 @@ +# auto-generated code # +from .base import APIComponent, APIReturn, EndpointDetails +from typing import * + + +class Subaccount(APIComponent): + def view_sub_account_list( + self, + enable: str = None, + subAcct: str = None, + after: str = None, + before: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Applies to master accounts only + Rate limit:2 requests per 2 seconds + Rate limit rule: UserID + + + Args: + enable: Sub-account status, true: Normal ; false: Frozen + subAcct: Sub-account name + after: If you query the data prior to the requested creation time ID, the + value will be a Unix timestamp in millisecond format. + before: If you query the data after the requested creation time ID, the value + will be a Unix timestamp in millisecond format. + limit: Number of results per request. The maximum is 100. The default is 100. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/users/subaccount/list", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def reset_the_api_key_of_a_sub_account( + self, + subAcct: str, + apiKey: str, + label: str = None, + perm: str = None, + ip: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Applies to master accounts only and master accounts API Key must be linked to IP addresses. + Rate limit:1 request per second + Rate limit rule: UserID + + + Args: + subAcct: Sub-account name + apiKey: Sub-account APIKey + label: Sub-account API Key label. The label will be reset if this is passed + through. + perm: Sub-account API Key permissions read_only : Read only trade : Trade + Separate with commas if more than one. The permission will be reset if + this is passed through. + ip: Sub-account API Key linked IP addresses, separate with commas if more + than one. Support up to 20 IP addresses. The IP will be reset if this + is passed through. If ip is set to "", then no IP addresses is linked + to the APIKey. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/users/subaccount/modify-apikey", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_sub_account_trading_balance( + self, subAcct: str, use_proxy: bool = False + ) -> APIReturn: + """ + + Query detailed balance info of Trading Account of a sub-account via the master account (applies to master accounts only) + Rate limit:6 requests per 2 seconds + Rate limit rule: UserID + + + Args: + subAcct: Sub-account name + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/account/subaccount/balances", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_sub_account_funding_balance( + self, subAcct: str, ccy: str = None, use_proxy: bool = False + ) -> APIReturn: + """ + + Query detailed balance info of Funding Account of a sub-account via the master account (applies to master accounts only) + Rate limit:6 requests per 2 seconds + Rate limit rule: UserID + + + Args: + subAcct: Sub-account name + ccy: Single currency or multiple currencies (no more than 20) separated + with comma, e.g. BTC or BTC,ETH. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/asset/subaccount/balances", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def history_of_sub_account_transfer( + self, + ccy: str = None, + type_: str = None, + subAcct: str = None, + after: str = None, + before: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Applies to master accounts only. + Retrieve the transfer data for the last 3 months. + Rate limit:6 requests per second + Rate limit rule: UserID + + + Args: + ccy: Currency, such as BTC + type_: 0: Transfers from master account to sub-account ;1 : Transfers from + sub-account to master account. + subAcct: Sub-account name + after: If you query the data prior to the requested bill ID, the value will + be a Unix timestamp in millisecond format. + before: If you query the data after the requested bill ID, the value will be a + Unix timestamp in millisecond format. + limit: Number of results per request. The maximum is 100. The default is 100. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/asset/subaccount/bills", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def master_accounts_manage_the_transfers_between_sub_accounts( + self, + ccy: str, + amt: str, + from_: str, + to: str, + fromSubAccount: str, + toSubAccount: str, + loanTrans: bool = None, + omitPosRisk: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Applies to master accounts only. + Only API keys with Trade privilege can call this endpoint. + Rate limit:1 request per second + Rate limit rule: UserID + + + Args: + ccy: Currency + amt: Transfer amount + from: 6:Funding Account 18:Trading account + to: 6:Funding Account 18:Trading account + fromSubAccount: Sub-account name of the account that transfers funds out. + toSubAccount: Sub-account name of the account that transfers funds in. + loanTrans: Whether or not borrowed coins can be transferred out under Multi- + currency margin and Portfolio margin the default is false + omitPosRisk: Ignore position risk Default is false Applicable to Portfolio margin + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/asset/subaccount/transfer", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def set_permission_of_transfer_out( + self, subAcct: str, canTransOut: bool = None, use_proxy: bool = False + ) -> APIReturn: + """ + + Set permission of transfer out for sub-account (only applicable to master account). Sub-account can transfer out to master account by default. + Rate Limit: 1 request per second + Rate limit rule: UserID + + + Args: + subAcct: Name of the sub-account. Single sub-account or multiple sub-account + (no more than 20) separated with comma. + canTransOut: Whether the sub-account has the right to transfer out. The default is + true. false: cannot transfer out true: can transfer + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/users/subaccount/set-transfer-out", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_custody_trading_sub_account_list( + self, subAcct: str = None, use_proxy: bool = False + ) -> APIReturn: + """ + + The trading team uses this interface to view the list of sub-accounts currently under escrow + Rate limit:1 request per second + Rate limit rule: UserID + + + Args: + subAcct: Sub-account name + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/users/entrust-subaccount-list", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_the_user_39_s_affiliate_rebate_information( + self, apiKey: str, use_proxy: bool = False + ) -> APIReturn: + """ + + This endpoint is used to get the user's affiliate rebate information for affiliate. + Rate limit:20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + apiKey: The user's API key + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/users/partner/if-rebate", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def set_sub_accounts_vip_loan( + self, + enable: bool, + subAcct: str, + loanAlloc: str, + alloc: List[dict] = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Set the VIP loan allocation of sub-accounts. Only Applicable to master account API keys with Trade access. + Rate Limit: 5 requests per 2 seconds + Rate limit rule: UserID + + + Args: + enable: true or false + subAcct: Name of the sub-account + loanAlloc: VIP Loan allocation. The unit is percent(%). Range is [0, 100]. + Precision is 0.01% (2 decimal places) "0" to remove loan allocation + for the sub-account + alloc: If enable = false, this will not be validated + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/account/subaccount/set-loan-allocation", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_sub_account_borrow_interest_and_limit( + self, subAcct: str = None, ccy: str = None, use_proxy: bool = False + ) -> APIReturn: + """ + + Only applicable to master account API keys. Only return VIP loan information + Rate Limit: 5 requests per 2 seconds + Rate limit rule: UserID + + + Args: + subAcct: Name of the sub-account. Can only put 1 sub account. + ccy: Loan currency, e.g. BTC + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/account/subaccount/interest-limits", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) diff --git a/pyokx/trade.py b/pyokx/trade.py new file mode 100644 index 0000000..f22aea1 --- /dev/null +++ b/pyokx/trade.py @@ -0,0 +1,1399 @@ +# auto-generated code # +from .base import APIComponent, APIReturn, EndpointDetails +from typing import * + + +class Trade(APIComponent): + def place_order( + self, + instId: str, + tdMode: str, + side: str, + ordType: str, + sz: str, + ccy: str = None, + clOrdId: str = None, + tag: str = None, + posSide: str = None, + px: str = None, + reduceOnly: bool = None, + tgtCcy: str = None, + banAmend: bool = None, + tpTriggerPx: str = None, + tpOrdPx: str = None, + slTriggerPx: str = None, + slOrdPx: str = None, + tpTriggerPxType: str = None, + slTriggerPxType: str = None, + quickMgnType: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + You can place an order only if you have sufficient funds. + For leading contracts, this endpoint supports placement, but can't close positions. + Rate Limit: 60 requests per 2 seconds + Rate Limit of leading contracts for Copy Trading: 1 requests per 2 seconds + Rate limit rule (except Options): UserID + Instrument ID + Rate limit rule (Options only): UserID + Instrument Family + + + Args: + instId: Instrument ID, e.g. BTC-USD-190927-5000-C + tdMode: Trade mode Margin mode cross isolated Non-Margin mode cash + side: Order side, buy sell + ordType: Order type market: Market order limit: Limit order post_only: Post- + only order fok: Fill-or-kill order ioc: Immediate-or-cancel order + optimal_limit_ioc: Market order with immediate-or-cancel order + (applicable only to Futures and Perpetual swap). + sz: Quantity to buy or sell + ccy: Margin currency Only applicable to cross MARGIN orders in Single- + currency margin. + clOrdId: Client Order ID as assigned by the client A combination of case- + sensitive alphanumerics, all numbers, or all letters of up to 32 + characters. + tag: Order tag A combination of case-sensitive alphanumerics, all numbers, + or all letters of up to 16 characters. + posSide: Position side The default is net in the net mode It is required in the + long/short mode, and can only be long or short. Only applicable to + FUTURES/SWAP. + px: Order price. Only applicable to limit,post_only,fok,ioc order. + reduceOnly: Whether orders can only reduce in position size. Valid options: true + or false. The default value is false. Only applicable to MARGIN + orders, and FUTURES/SWAP orders in net mode Only applicable to Single- + currency margin and Multi-currency margin + tgtCcy: Whether the target currency uses the quote or base currency. base_ccy: + Base currency ,quote_ccy: Quote currency Only applicable to SPOT + Market Orders Default is quote_ccy for buy, base_ccy for sell + banAmend: Whether to disallow the system from amending the size of the SPOT + Market Order. Valid options: true or false. The default value is + false. If true, system will not amend and reject the market order if + user does not have sufficient funds. Only applicable to SPOT Market + Orders + tpTriggerPx: Take-profit trigger price If you fill in this parameter, you should + fill in the take-profit order price as well. + tpOrdPx: Take-profit order price If you fill in this parameter, you should fill + in the take-profit trigger price as well. If the price is -1, take- + profit will be executed at the market price. + slTriggerPx: Stop-loss trigger price If you fill in this parameter, you should + fill in the stop-loss order price. + slOrdPx: Stop-loss order price If you fill in this parameter, you should fill + in the stop-loss trigger price. If the price is -1, stop-loss will be + executed at the market price. + tpTriggerPxType: Take-profit trigger price type last: last price index: index price + mark: mark price The Default is last + slTriggerPxType: Stop-loss trigger price type last: last price index: index price mark: + mark price The Default is last + quickMgnType: Quick Margin type. Only applicable to Quick Margin Mode of isolated + margin manual, auto_borrow, auto_repay The default value is manual + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/order", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def place_multiple_orders( + self, body: List[dict] = None, use_proxy: bool = False + ) -> APIReturn: + """ + + Place orders in batches. Maximum 20 orders can be placed per request. Request parameters should be passed in the form of an array. + For leading contracts, this endpoint supports placement, but can't close positions. + Rate Limit: 300 orders per 2 seconds + Rate Limit of leading contracts for Copy Trading: 1 requests per 2 seconds + Rate limit rule (except Options): UserID + Instrument ID + Rate limit rule (Options only): UserID + Instrument Family + + Unlike other endpoints, the rate limit of this endpoint is determined by the number of orders. If there is only one order in the request, it will consume the rate limit of `Place order`. + + + + Request format: + This function body should be formatted as an array. Eg. + ```python + ... + body = [ + { + "instId": str + "tdMode": str + "side": str + "ordType": str + "sz": str + "ccy": str # optional + "clOrdId": str # optional + "tag": str # optional + "posSide": str # optional + "px": str # optional + "reduceOnly": bool # optional + "tgtCcy": str # optional + "banAmend": bool # optional + "tpTriggerPx": str # optional + "tpOrdPx": str # optional + "slTriggerPx": str # optional + "slOrdPx": str # optional + "tpTriggerPxType": str # optional + "slTriggerPxType": str # optional + "quickMgnType": str # optional + } + ... + ] + api_helper = Trade(client) + response = api_helper.place_multiple_orders(body=body) + ``` + + + Args: + instId: Instrument ID, e.g. BTC-USD-190927-5000-C + tdMode: Trade mode Margin mode cross isolated Non-Margin mode cash + side: Order side buy sell + ordType: Order type market: Market order limit: Limit order post_only: Post- + only order fok: Fill-or-kill order ioc: Immediate-or-cancel order + optimal_limit_ioc: Market order with immediate-or-cancel order + (applicable only to Futures and Perpetual swap). + sz: Quantity to buy or sell + ccy: Margin currency Only applicable to cross MARGIN orders in Single- + currency margin. + clOrdId: Client Order ID as assigned by the client A combination of case- + sensitive alphanumerics, all numbers, or all letters of up to 32 + characters. + tag: Order tag A combination of case-sensitive alphanumerics, all numbers, + or all letters of up to 16 characters. + posSide: Position side The default is net in the net mode It is required in the + long/short mode, and can only be long or short. Only applicable to + FUTURES/SWAP. + px: Order price. Only applicable to limit,post_only,fok,ioc order. + reduceOnly: Whether the order can only reduce position size. Valid options: true + or false. The default value is false. Only applicable to MARGIN + orders, and FUTURES/SWAP orders in net mode Only applicable to Single- + currency margin and Multi-currency margin + tgtCcy: Order quantity unit setting for sz base_ccy: Base currency ,quote_ccy: + Quote currency Only applicable to SPOT Market Orders Default is + quote_ccy for buy, base_ccy for sell + banAmend: Whether to disallow the system from amending the size of the SPOT + Market Order. Valid options: true or false. The default value is + false. If true, system will not amend and reject the market order if + user does not have sufficient funds. Only applicable to SPOT Market + Orders + tpTriggerPx: Take-profit trigger price If you fill in this parameter, you should + fill in the take-profit order price as well. + tpOrdPx: Take-profit order price If you fill in this parameter, you should fill + in the take-profit trigger price as well. If the price is -1, take- + profit will be executed at the market price. + slTriggerPx: Stop-loss trigger price If you fill in this parameter, you should + fill in the stop-loss order price. + slOrdPx: Stop-loss order price If you fill in this parameter, you should fill + in the stop-loss trigger price. If the price is -1, stop-loss will be + executed at the market price. + tpTriggerPxType: Take-profit trigger price type last: last price index: index price + mark: mark price The Default is last + slTriggerPxType: Stop-loss trigger price type last: last price index: index price mark: + mark price The Default is last + quickMgnType: Quick Margin type. Only applicable to Quick Margin Mode of isolated + margin manual, auto_borrow, auto_repay The default value is manual + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/batch-orders", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def cancel_order( + self, + instId: str, + ordId: str = None, + clOrdId: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Cancel an incomplete order. + Rate Limit: 60 requests per 2 seconds + Rate limit rule (except Options): UserID + Instrument ID + Rate limit rule (Options only): UserID + Instrument Family + + + Args: + instId: Instrument ID, e.g. BTC-USD-190927 + ordId: Order ID Either ordId or clOrdId is required. If both are passed, + ordId will be used. + clOrdId: Client Order ID as assigned by the client + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/cancel-order", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def cancel_multiple_orders( + self, body: List[dict] = None, use_proxy: bool = False + ) -> APIReturn: + """ + + Cancel incomplete orders in batches. Maximum 20 orders can be canceled per request. Request parameters should be passed in the form of an array. + Rate Limit: 300 orders per 2 seconds + Rate limit rule (except Options): UserID + Instrument ID + Rate limit rule (Options only): UserID + Instrument Family + + Unlike other endpoints, the rate limit of this endpoint is determined by the number of orders. If there is only one order in the request, it will consume the rate limit of `Cancel order`. + + + + Request format: + This function body should be formatted as an array. Eg. + ```python + ... + body = [ + { + "instId": str + "ordId": str # optional + "clOrdId": str # optional + } + ... + ] + api_helper = Trade(client) + response = api_helper.cancel_multiple_orders(body=body) + ``` + + + Args: + instId: Instrument ID, e.g. BTC-USD-190927 + ordId: Order ID Either ordId or clOrdId is required. If both are passed, + ordId will be used. + clOrdId: Client Order ID as assigned by the client + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/cancel-batch-orders", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def amend_order( + self, + instId: str, + cxlOnFail: bool = None, + ordId: str = None, + clOrdId: str = None, + reqId: str = None, + newSz: str = None, + newPx: str = None, + newTpTriggerPx: str = None, + newTpOrdPx: str = None, + newSlTriggerPx: str = None, + newSlOrdPx: str = None, + newTpTriggerPxType: str = None, + newSlTriggerPxType: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Amend an incomplete order. + Rate Limit: 60 requests per 2 seconds + Rate Limit of leading contracts for Copy Trading: 1 requests per 2 seconds + Rate limit rule (except Options): UserID + Instrument ID + Rate limit rule (Options only): UserID + Instrument Family + + + Args: + instId: Instrument ID + cxlOnFail: Whether the order needs to be automatically canceled when the order + amendment fails Valid options: false or true, the default is false. + ordId: Order ID Either ordId or clOrdId is required. If both are passed, + ordId will be used. + clOrdId: Client Order ID as assigned by the client + reqId: Client Request ID as assigned by the client for order amendment A + combination of case-sensitive alphanumerics, all numbers, or all + letters of up to 32 characters. The response will include the + corresponding reqId to help you identify the request if you provide it + in the request. + newSz: New quantity after amendment. When amending a partially-filled order, + the newSz should include the amount that has been filled. + newPx: New price after amendment. + newTpTriggerPx: Take-profit trigger price. Either the take profit trigger price or + order price is 0, it means that the take profit is deleted + newTpOrdPx: Take-profit order price If the price is -1, take-profit will be + executed at the market price. + newSlTriggerPx: Stop-loss trigger price Either the stop loss trigger price or order + price is 0, it means that the stop loss is deleted + newSlOrdPx: Stop-loss order price If the price is -1, stop-loss will be executed + at the market price. + newTpTriggerPxType: Take-profit trigger price type last: last price index: index price + mark: mark price + newSlTriggerPxType: Stop-loss trigger price type last: last price index: index price mark: + mark price + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/amend-order", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def amend_multiple_orders( + self, body: List[dict] = None, use_proxy: bool = False + ) -> APIReturn: + """ + + Amend incomplete orders in batches. Maximum 20 orders can be amended per request. Request parameters should be passed in the form of an array. + Rate Limit: 300 orders per 2 seconds + Rate Limit of leading contracts for Copy Trading: 1 requests per 2 seconds + Rate limit rule (except Options): UserID + Instrument ID + Rate limit rule (Options only): UserID + Instrument Family + + Unlike other endpoints, the rate limit of this endpoint is determined by the number of orders. If there is only one order in the request, it will consume the rate limit of `Amend order`. + + + + Request format: + This function body should be formatted as an array. Eg. + ```python + ... + body = [ + { + "instId": str + "cxlOnFail": bool # optional + "ordId": str # optional + "clOrdId": str # optional + "reqId": str # optional + "newSz": str # optional + "newPx": str # optional + "newTpTriggerPx": str # optional + "newTpOrdPx": str # optional + "newSlTriggerPx": str # optional + "newSlOrdPx": str # optional + "newTpTriggerPxType": str # optional + "newSlTriggerPxType": str # optional + } + ... + ] + api_helper = Trade(client) + response = api_helper.amend_multiple_orders(body=body) + ``` + + + Args: + instId: Instrument ID + cxlOnFail: Whether the order needs to be automatically canceled when the order + amendment fails false true, the default is false. + ordId: Order ID Either ordId or clOrdIdis required, if both are passed, ordId + will be used. + clOrdId: Client Order ID as assigned by the client + reqId: Client Request ID as assigned by the client for order amendment A + combination of case-sensitive alphanumerics, all numbers, or all + letters of up to 32 characters. The response will include the + corresponding reqId to help you identify the request if you provide it + in the request. + newSz: New quantity after amendment. When amending a partially-filled order, + the newSz should include the amount that has been filled. + newPx: New price after amendment. + newTpTriggerPx: Take-profit trigger price. Either the take-profit trigger price or + order price is 0, it means that the take-profit is deleted + newTpOrdPx: Take-profit order price If the price is -1, take-profit will be + executed at the market price. + newSlTriggerPx: Stop-loss trigger price Either the stop-loss trigger price or order + price is 0, it means that the stop-loss is deleted + newSlOrdPx: Stop-loss order price If the price is -1, stop-loss will be executed + at the market price. + newTpTriggerPxType: Take-profit trigger price type last: last price index: index price + mark: mark price + newSlTriggerPxType: Stop-loss trigger price type last: last price index: index price mark: + mark price + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/amend-batch-orders", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def close_positions( + self, + instId: str, + mgnMode: str, + posSide: str = None, + ccy: str = None, + autoCxl: bool = None, + clOrdId: str = None, + tag: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Close the position of an instrument via a market order. + Rate Limit: 20 requests per 2 seconds + Rate limit rule (except Options): UserID + Instrument ID + Rate limit rule (Options only): UserID + Instrument Family + + + Args: + instId: Instrument ID + mgnMode: Margin mode cross isolated + posSide: Position side This parameter can be omitted in net mode, and the + default value is net. You can only fill with net. This parameter must + be filled in under the long/short mode. Fill in long for close-long + and short for close-short. + ccy: Margin currency, required in the case of closing cross MARGIN position + for Single-currency margin. + autoCxl: Whether any pending orders for closing out needs to be automatically + canceled when close position via a market order. false or true, the + default is false. + clOrdId: Client-supplied ID A combination of case-sensitive alphanumerics, all + numbers, or all letters of up to 32 characters. + tag: Order tag A combination of case-sensitive alphanumerics, all numbers, + or all letters of up to 16 characters. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/close-position", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_order_details( + self, + instId: str, + ordId: str = None, + clOrdId: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Retrieve order details. + Rate Limit: 60 requests per 2 seconds + Rate limit rule (except Options): UserID + Instrument ID + Rate limit rule (Options only): UserID + Instrument Family + + + Args: + instId: Instrument ID, e.g. BTC-USD-190927 + ordId: Order ID Either ordId or clOrdId is required, if both are passed, + ordId will be used + clOrdId: Client Order ID as assigned by the client If the clOrdId is associated + with multiple orders, only the latest one will be returned. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/order", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_order_list( + self, + instType: str = None, + uly: str = None, + instFamily: str = None, + instId: str = None, + ordType: str = None, + state: str = None, + after: str = None, + before: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Retrieve all incomplete orders under the current account. + Rate Limit: 60 requests per 2 seconds + Rate limit rule: UserID + + + Args: + instType: Instrument type SPOT MARGIN SWAP FUTURES OPTION + uly: Underlying + instFamily: Instrument family Applicable to FUTURES/SWAP/OPTION + instId: Instrument ID, e.g. BTC-USD-200927 + ordType: Order type market: Market order limit: Limit order post_only: Post- + only order fok: Fill-or-kill order ioc: Immediate-or-cancel order + optimal_limit_ioc: Market order with immediate-or-cancel order + state: State live partially_filled + after: Pagination of data to return records earlier than the requested ordId + before: Pagination of data to return records newer than the requested ordId + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/orders-pending", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_order_history_last_7_days( + self, + instType: str, + uly: str = None, + instFamily: str = None, + instId: str = None, + ordType: str = None, + state: str = None, + category: str = None, + after: str = None, + before: str = None, + begin: str = None, + end: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Retrieve the completed order data for the last 7 days, including those placed 7 days ago but completed for the last 7 days. + The incomplete orders that have been canceled are only reserved for 2 hours. + Rate Limit: 40 requests per 2 seconds + Rate limit rule: UserID + + + Args: + instType: Instrument type SPOT MARGIN SWAP FUTURES OPTION + uly: Underlying Applicable to FUTURES/SWAP/OPTION + instFamily: Instrument family Applicable to FUTURES/SWAP/OPTION + instId: Instrument ID, e.g. BTC-USD-190927 + ordType: Order type market: market order limit: limit order post_only: Post- + only order fok: Fill-or-kill order ioc: Immediate-or-cancel order + optimal_limit_ioc: Market order with immediate-or-cancel order + state: State canceled filled + category: Category twap adl full_liquidation partial_liquidation delivery ddh + after: Pagination of data to return records earlier than the requested ordId + before: Pagination of data to return records newer than the requested ordId + begin: Filter with a begin timestamp. Unix timestamp format in milliseconds, + e.g. 1597026383085 + end: Filter with an end timestamp. Unix timestamp format in milliseconds, + e.g. 1597026383085 + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/orders-history", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_order_history_last_3_months( + self, + instType: str, + uly: str = None, + instFamily: str = None, + instId: str = None, + ordType: str = None, + state: str = None, + category: str = None, + after: str = None, + before: str = None, + begin: str = None, + end: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Retrieve the completed order data for the last 3 months, including those placed 3 months ago but completed for the last 3 months. + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + instType: Instrument type SPOT MARGIN SWAP FUTURES OPTION + uly: Underlying Applicable to FUTURES/SWAP/OPTION + instFamily: Instrument family Applicable to FUTURES/SWAP/OPTION + instId: Instrument ID, e.g. BTC-USD-200927 + ordType: Order type market: Market order limit: Limit order post_only: Post- + only order fok: Fill-or-kill order ioc: Immediate-or-cancel order + optimal_limit_ioc: Market order with immediate-or-cancel order + state: State canceled filled + category: Category twap adl full_liquidation partial_liquidation delivery ddh + after: Pagination of data to return records earlier than the requested ordId + before: Pagination of data to return records newer than the requested ordId + begin: Filter with a begin timestamp. Unix timestamp format in milliseconds, + e.g. 1597026383085 + end: Filter with an end timestamp. Unix timestamp format in milliseconds, + e.g. 1597026383085 + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/orders-history-archive", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_transaction_details_last_3_days( + self, + instType: str = None, + uly: str = None, + instFamily: str = None, + instId: str = None, + ordId: str = None, + after: str = None, + before: str = None, + begin: str = None, + end: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Retrieve recently-filled transaction details in the last 3 day. + Rate Limit: 60 requests per 2 seconds + Rate limit rule: UserID + + + Args: + instType: Instrument type SPOT MARGIN SWAP FUTURES OPTION + uly: Underlying Applicable to FUTURES/SWAP/OPTION + instFamily: Instrument family Applicable to FUTURES/SWAP/OPTION + instId: Instrument ID, e.g. BTC-USD-190927 + ordId: Order ID + after: Pagination of data to return records earlier than the requested billId + before: Pagination of data to return records newer than the requested billId + begin: Filter with a begin timestamp. Unix timestamp format in milliseconds, + e.g. 1597026383085 + end: Filter with an end timestamp. Unix timestamp format in milliseconds, + e.g. 1597026383085 + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/fills", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_transaction_details_last_3_months( + self, + instType: str, + uly: str = None, + instFamily: str = None, + instId: str = None, + ordId: str = None, + after: str = None, + before: str = None, + begin: str = None, + end: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Retrieve recently-filled transaction details in the last 3 months. + Rate Limit: 10 requests per 2 seconds + Rate limit rule: UserID + + + Args: + instType: Instrument type SPOT MARGIN SWAP FUTURES OPTION + uly: Underlying Applicable to FUTURES/SWAP/OPTION + instFamily: Instrument family Applicable to FUTURES/SWAP/OPTION + instId: Instrument ID, e.g. BTC-USD-190927 + ordId: Order ID + after: Pagination of data to return records earlier than the requested billId + before: Pagination of data to return records newer than the requested billId + begin: Filter with a begin timestamp. Unix timestamp format in milliseconds, + e.g. 1597026383085 + end: Filter with an end timestamp. Unix timestamp format in milliseconds, + e.g. 1597026383085 + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/fills-history", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def place_algo_order( + self, + instId: str, + tdMode: str, + side: str, + ordType: str, + ccy: str = None, + posSide: str = None, + sz: str = None, + tag: str = None, + reduceOnly: bool = None, + tgtCcy: str = None, + algoClOrdId: str = None, + closeFraction: str = None, + quickMgnType: str = None, + tpTriggerPx: str = None, + tpTriggerPxType: str = None, + tpOrdPx: str = None, + slTriggerPx: str = None, + slTriggerPxType: str = None, + slOrdPx: str = None, + triggerPx: str = None, + orderPx: str = None, + triggerPxType: str = None, + callbackRatio: str = None, + callbackSpread: str = None, + activePx: str = None, + pxVar: str = None, + pxSpread: str = None, + szLimit: str = None, + pxLimit: str = None, + timeInterval: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + The algo order includes trigger order, oco order, conditional order,iceberg order, twap order and trailing order. + Rate Limit: 20 requests per 2 seconds + Rate Limit of leading contracts for Copy Trading: 1 requests per 2 seconds + Rate limit rule (except Options): UserID + Instrument ID + Rate limit rule (Options only): UserID + Instrument Family + + + Args: + instId: Instrument ID, e.g. BTC-USD-190927-5000-C + tdMode: Trade mode Margin mode cross isolated Non-Margin mode cash + side: Order side, buy sell + ordType: Order type conditional: One-way stop order oco: One-cancels-the-other + order trigger: Trigger order move_order_stop: Trailing order iceberg: + Iceberg order twap: TWAP order + ccy: Margin currency Only applicable to cross MARGIN orders in Single- + currency margin. + posSide: Position side Required in long/short mode and only be long or short + sz: Quantity to buy or sell Either sz or closeFraction is required. + tag: Order tag A combination of case-sensitive alphanumerics, all numbers, + or all letters of up to 16 characters. + reduceOnly: Whether the order can only reduce the position size. Valid options: + true or false. The default value is false. Only applicable to MARGIN + orders, and FUTURES/SWAP orders in net mode Only applicable to Single- + currency margin and Multi-currency margin + tgtCcy: Order quantity unit setting for sz base_ccy: Base currency ,quote_ccy: + Quote currency Only applicable to SPOT traded with Market buy + conditional order Default is quote_ccy for buy, base_ccy for sell + algoClOrdId: Client-supplied Algo ID A combination of case-sensitive alphanumerics, + all numbers, or all letters of up to 32 characters. + closeFraction: Fraction of position to be closed when the algo order is triggered. + Currently the system supports fully closing the position only so the + only accepted value is 1. This is only applicable to FUTURES or SWAP + instruments. This is only applicable if posSide is net. This is only + applicable if reduceOnly is true. This is only applicable if ordType + is conditional or oco. This is only applicable if the stop loss and + take profit order is executed as market order Either sz or + closeFraction is required. + quickMgnType: Quick Margin type. Only applicable to Quick Margin Mode of isolated + margin manual, auto_borrow, auto_repay The default value is manual + tpTriggerPx: Take-profit trigger price If you fill in this parameter, you should + fill in the take-profit order price as well. + tpTriggerPxType: Take-profit trigger price type last: last price index: index price + mark: mark price The Default is last + tpOrdPx: Take-profit order price If you fill in this parameter, you should fill + in the take-profit trigger price as well. If the price is -1, take- + profit will be executed at the market price. + slTriggerPx: Stop-loss trigger price If you fill in this parameter, you should fill + in the stop-loss order price. + slTriggerPxType: Stop-loss trigger price type last: last price index: index price mark: + mark price The Default is last + slOrdPx: Stop-loss order price If you fill in this parameter, you should fill + in the stop-loss trigger price. If the price is -1, stop-loss will be + executed at the market price. + triggerPx: Trigger price + orderPx: Order Price If the price is -1, the order will be executed at the + market price. + triggerPxType: Trigger price type last: last price index: index price mark: mark + price The Default is last + callbackRatio: Callback price ratio , e.g. 0.01 Either callbackRatio or + callbackSpread is allowed to be passed. + callbackSpread: Callback price variance + activePx: Active price + pxVar: Price ratio Either pxVar or pxSpread is allowed to be passed. + pxSpread: Price variance + szLimit: Average amount + pxLimit: Price Limit + pxVar: Price ratio Either pxVar or pxSpread is allowed to be passed. + pxSpread: Price variance + szLimit: Average amount + pxLimit: Price Limit + timeInterval: Time interval + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/order-algo", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def cancel_algo_order( + self, body: List[dict] = None, use_proxy: bool = False + ) -> APIReturn: + """ + + Cancel unfilled algo orders (not including Iceberg order, TWAP order, Trailing Stop order). A maximum of 10 orders can be canceled per request. Request parameters should be passed in the form of an array. + Rate Limit: 20 requests per 2 seconds + Rate limit rule (except Options): UserID + Instrument ID + Rate limit rule (Options only): UserID + Instrument Family + + + Request format: + This function body should be formatted as an array. Eg. + ```python + ... + body = [ + { + "algoId": str + "instId": str + } + ... + ] + api_helper = Trade(client) + response = api_helper.cancel_algo_order(body=body) + ``` + + + Args: + algoId: Algo ID + instId: Instrument ID, e.g. BTC-USDT + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/cancel-algos", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def amend_algo_order( + self, + instId: str, + algoId: str, + algoClOrdId: str, + cxlOnFail: bool = None, + reqId: str = None, + newSz: str = None, + newTpTriggerPx: str = None, + newTpOrdPx: str = None, + newSlTriggerPx: str = None, + newSlOrdPx: str = None, + newTpTriggerPxType: str = None, + newSlTriggerPxType: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Amend unfilled algo orders (Support stop order only,not including Move_order_stop order, Trigger order, Iceberg order, TWAP order, Trailing Stop order). + Only applicable to Futures and Perpetual swap. + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + Instrument ID + + + Args: + instId: Instrument ID + algoId: Algo ID + algoClOrdId: Client-supplied Algo ID + cxlOnFail: Whether the order needs to be automatically canceled when the order + amendment fails Valid options: false or true, the default is false. + reqId: Client Request ID as assigned by the client for order amendment A + combination of case-sensitive alphanumerics, all numbers, or all + letters of up to 32 characters. The response will include the + corresponding reqId to help you identify the request if you provide it + in the request. + newSz: New quantity after amendment. + newTpTriggerPx: Take-profit trigger price. Either the take-profit trigger price or + order price is 0, it means that the take-profit is deleted + newTpOrdPx: Take-profit order price If the price is -1, take-profit will be + executed at the market price. + newSlTriggerPx: Stop-loss trigger price. Either the stop-loss trigger price or order + price is 0, it means that the stop-loss is deleted + newSlOrdPx: Stop-loss order price If the price is -1, stop-loss will be executed + at the market price. + newTpTriggerPxType: Take-profit trigger price type last: last price index: index price + mark: mark price + newSlTriggerPxType: Stop-loss trigger price type last: last price index: index price mark: + mark price + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/amend-algos", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def cancel_advance_algo_order( + self, body: List[dict] = None, use_proxy: bool = False + ) -> APIReturn: + """ + + Cancel unfilled algo orders (including Iceberg order, TWAP order, Trailing Stop order). A maximum of 10 orders can be canceled per request. Request parameters should be passed in the form of an array. + Rate Limit: 20 requests per 2 seconds + Rate limit rule (except Options): UserID + Instrument ID + Rate limit rule (Options only): UserID + Instrument Family + + + Request format: + This function body should be formatted as an array. Eg. + ```python + ... + body = [ + { + "algoId": str + "instId": str + } + ... + ] + api_helper = Trade(client) + response = api_helper.cancel_advance_algo_order(body=body) + ``` + + + Args: + algoId: Algo ID + instId: Instrument ID, e.g. BTC-USDT + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/cancel-advance-algos", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_algo_order_details( + self, algoId: str = None, algoClOrdId: str = None, use_proxy: bool = False + ) -> APIReturn: + """ + + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + algoId: Algo ID Either algoId or algoClOrdId is required.If both are passed, + algoId will be used. + algoClOrdId: Client-supplied Algo ID A combination of case-sensitive alphanumerics, + all numbers, or all letters of up to 32 characters. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/order-algo", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_algo_order_list( + self, + ordType: str, + algoId: str = None, + algoClOrdId: str = None, + instType: str = None, + instId: str = None, + after: str = None, + before: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Retrieve a list of untriggered Algo orders under the current account. + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + ordType: Order type conditional: One-way stop order oco: One-cancels-the-other + order trigger: Trigger order move_order_stop: Trailing order iceberg: + Iceberg order twap: TWAP order + algoId: Algo ID + algoClOrdId: Client-supplied Algo ID A combination of case-sensitive alphanumerics, + all numbers, or all letters of up to 32 characters. + instType: Instrument type SPOT SWAP FUTURES MARGIN + instId: Instrument ID, e.g. BTC-USD-190927 + after: Pagination of data to return records earlier than the requested + algoId. + before: Pagination of data to return records newer than the requested algoId. + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/orders-algo-pending", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_algo_order_history( + self, + ordType: str, + state: str = None, + algoId: str = None, + instType: str = None, + instId: str = None, + after: str = None, + before: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Retrieve a list of all algo orders under the current account in the last 3 months. + Rate Limit: 20 requests per 2 seconds + Rate limit rule: UserID + + + Args: + ordType: Order type conditional: One-way stop order oco: One-cancels-the-other + order trigger: Trigger order move_order_stop: Trailing order iceberg: + Iceberg order twap: TWAP order + state: State effective canceled order_failed Either state or algoId is + requied + algoId: Algo ID Either state or algoId is required. + instType: Instrument type SPOT SWAP FUTURES MARGIN + instId: Instrument ID, e.g. BTC-USD-190927 + after: Pagination of data to return records earlier than the requested algoId + before: Pagination of data to return records new than the requested algoId + limit: Number of results per request. The maximum is 100; The default is 100 + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/orders-algo-history", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_easy_convert_currency_list(self, use_proxy: bool = False) -> APIReturn: + """ + + Get list of small convertibles and mainstream currencies. Only applicable to the crypto balance less than $10. + Rate Limit: 1 request per 2 seconds + Rate limit rule: UserID + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/easy-convert-currency-list", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def place_easy_convert( + self, fromCcy: list, toCcy: str, use_proxy: bool = False + ) -> APIReturn: + """ + + Convert small currencies to mainstream currencies. Only applicable to the crypto balance less than $10. + Rate Limit: 1 request per 2 seconds + Rate limit rule: UserID + + + Args: + fromCcy: Type of small payment currency convert from Maximum 5 currencies can + be selected in one order. If there are multiple currencies, separate + them with commas. + toCcy: Type of mainstream currency convert to Only one receiving currency + type can be selected in one order and cannot be the same as the small + payment currencies. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/easy-convert", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_easy_convert_history( + self, + after: str = None, + before: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Get the history and status of easy convert trades. + Rate Limit: 1 request per 2 seconds + Rate limit rule: UserID + + + Args: + after: Pagination of data to return records earlier than the requested time, + Unix timestamp format in milliseconds, e.g. 1597026383085 + before: Pagination of data to return records newer than the requested time, + Unix timestamp format in milliseconds, e.g. 1597026383085 + limit: Number of results per request. The maximum is 100. The default is 100. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/easy-convert-history", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_one_click_repay_currency_list( + self, debtType: str = None, use_proxy: bool = False + ) -> APIReturn: + """ + + Get list of debt currency data and repay currencies. Debt currencies include both cross and isolated debts. + Rate Limit: 1 request per 2 seconds + Rate limit rule: UserID + + + Args: + debtType: Debt type cross: cross isolated: isolated + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/one-click-repay-currency-list", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def trade_one_click_repay( + self, debtCcy: list, repayCcy: str, use_proxy: bool = False + ) -> APIReturn: + """ + + Trade one-click repay to repay cross debts. Isolated debts are not applicable. + The maximum repayment amount is based on the remaining available balance of funding and trading accounts. + Rate Limit: 1 request per 2 seconds + Rate limit rule: UserID + + + Args: + debtCcy: Debt currency type Maximum 5 currencies can be selected in one order. + If there are multiple currencies, separate them with commas. + repayCcy: Repay currency type Only one receiving currency type can be selected + in one order and cannot be the same as the small payment currencies. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/one-click-repay", + method="POST", + body=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) + + def get_one_click_repay_history( + self, + after: str = None, + before: str = None, + limit: str = None, + use_proxy: bool = False, + ) -> APIReturn: + """ + + Get the history and status of one-click repay trades. + Rate Limit: 1 request per 2 seconds + Rate limit rule: UserID + + + Args: + after: Pagination of data to return records earlier than the requested time, + Unix timestamp format in milliseconds, e.g. 1597026383085 + before: Pagination of data to return records newer than the requested time, + Unix timestamp format in milliseconds, e.g. 1597026383085 + limit: Number of results per request. The maximum is 100. The default is 100. + _____________ + """ + + kwargs = { + k: v + for k, v in locals().items() + if k not in ["use_proxy", "self"] and v is not None + } + details = EndpointDetails( + request_path="/api/v5/trade/one-click-repay-history", + method="GET", + params=kwargs, + use_proxy=use_proxy, + ) + return self.request(details) diff --git a/pyokx/Tradingdata.py b/pyokx/trading_data.py similarity index 68% rename from pyokx/Tradingdata.py rename to pyokx/trading_data.py index f114ca9..ff696f6 100644 --- a/pyokx/Tradingdata.py +++ b/pyokx/trading_data.py @@ -1,15 +1,30 @@ # auto-generated code # from .base import APIComponent, APIReturn, EndpointDetails +from typing import * -class Tradingdata(APIComponent): - def get_support_coin(self, use_proxy: bool = False) -> APIReturn: +class TradingData(APIComponent): + def get_support_coin( + self, + contract: List[str] = None, + option: List[str] = None, + spot: List[str] = None, + use_proxy: bool = False, + ) -> APIReturn: """ - Get support coin + Retrieve the currencies supported by the trading data endpoints. Rate Limit: 5 requests per 2 seconds Rate limit rule: IP + + + Args: + contract: Currency supported by derivatives trading data + option: Currency supported by option trading data + spot: Currency supported by spot trading data + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -33,11 +48,24 @@ def get_taker_volume( use_proxy: bool = False, ) -> APIReturn: """ - Get taker volume + Retrieve the taker volume for both buyers and sellers. Rate Limit: 5 requests per 2 seconds Rate limit rule: IP + + + Args: + ccy: Currency + instType: Instrument type SPOT,CONTRACTS + begin: Begin time, e.g. 1597026383085 + end: End time, e.g. 1597026383011 + period: Period, the default is 5m, e.g. [5m/1H/1D] 5m granularity can only + query data within two days at most 1H granularity can only query data + within 30 days at most 1D granularity can only query data within 180 + days at most + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -60,11 +88,23 @@ def get_margin_lending_ratio( use_proxy: bool = False, ) -> APIReturn: """ - Get margin lending ratio + Retrieve the ratio of cumulative amount between currency margin quote currency and base currency. Rate Limit: 5 requests per 2 seconds Rate limit rule: IP + + + Args: + ccy: Currency + begin: Begin time, e.g. 1597026383085 + end: End time, e.g. 1597026383085 + period: Period, the default is 5m, e.g. [5m/1H/1D] 5mgranularity can only + query data within two days at most 1H granularity can only query data + within 30 days at most 1D granularity can only query data within 180 + days at most + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -87,11 +127,23 @@ def get_long_short_ratio( use_proxy: bool = False, ) -> APIReturn: """ - Get long/short ratio + Retrieve the ratio of users with net long vs net short positions for futures and perpetual swaps. Rate Limit: 5 requests per 2 seconds Rate limit rule: IP + + + Args: + ccy: Currency + begin: Begin time, e.g. 1597026383085 + end: End time, e.g. 1597026383011 + period: Period, the default is 5m, e.g. [5m/1H/1D] 5m granularity can only + query data within two days at most 1H granularity can only query data + within 30 days at most 1D granularity can only query data within 180 + days at most + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -114,11 +166,23 @@ def get_contracts_open_interest_and_volume( use_proxy: bool = False, ) -> APIReturn: """ - Get contracts open interest and volume + Retrieve the open interest and trading volume for futures and perpetual swaps. Rate Limit: 5 requests per 2 seconds Rate limit rule: IP + + + Args: + ccy: Currency + begin: Begin time, e.g. 1597026383085 + end: End time, e.g. 1597026383011 + period: Period, the default is 5m, e.g. [5m/1H/1D] 5m granularity can only + query data within two days at most 1H granularity can only query data + within 30 days at most 1D granularity can only query data within 180 + days at most + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -136,11 +200,19 @@ def get_options_open_interest_and_volume( self, ccy: str, period: str = None, use_proxy: bool = False ) -> APIReturn: """ - Get options open interest and volume + Retrieve the open interest and trading volume for options. Rate Limit: 5 requests per 2 seconds Rate limit rule: IP + + + Args: + ccy: Currency + period: Period, the default is 8H. e.g. [8H/1D] Each granularity can only + query 72 pieces of data at the earliest + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -158,11 +230,19 @@ def get_put_call_ratio( self, ccy: str, period: str = None, use_proxy: bool = False ) -> APIReturn: """ - Get put/call ratio + Retrieve the open interest ratio and trading volume ratio of calls vs puts. Rate Limit: 5 requests per 2 seconds Rate limit rule: IP + + + Args: + ccy: Currency + period: Period, the default is 8H. e.g. [8H/1D] Each granularity can only + query 72 pieces of data at the earliest + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -180,11 +260,19 @@ def get_open_interest_and_volume_expiry( self, ccy: str, period: str = None, use_proxy: bool = False ) -> APIReturn: """ - Get open interest and volume (expiry) + Retrieve the open interest and trading volume of calls and puts for each upcoming expiration. Rate Limit: 5 requests per 2 seconds Rate limit rule: IP + + + Args: + ccy: Currency + period: Period, the default is 8H. e.g. [8H/1D] Each granularity can only + query 72 pieces of data at the earliest + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -202,11 +290,20 @@ def get_open_interest_and_volume_strike( self, ccy: str, expTime: str, period: str = None, use_proxy: bool = False ) -> APIReturn: """ - Get open interest and volume (strike) + Retrieve the taker volume for both buyers and sellers of calls and puts. Rate Limit: 5 requests per 2 seconds Rate limit rule: IP + + + Args: + ccy: Currency + expTime: Contract expiry date, the format is YYYYMMdd, e.g. 20210623 + period: Period, the default is 8H. e.g. [8H/1D] Each granularity can only + query 72 pieces of data at the earliest + _____________ """ + kwargs = { k: v for k, v in locals().items() @@ -224,11 +321,19 @@ def get_taker_flow( self, ccy: str, period: str = None, use_proxy: bool = False ) -> APIReturn: """ - Get taker flow + This shows the relative buy/sell volume for calls and puts. It shows whether traders are bullish or bearish on price and volatility. Rate Limit: 5 requests per 2 seconds Rate limit rule: IP + + + Args: + ccy: currency + period: period, the default is 8H. e.g. [8H/1D] Each granularity can only + query 72 pieces of data at the earliest + _____________ """ + kwargs = { k: v for k, v in locals().items() diff --git a/pyproject.toml b/pyproject.toml index ec82ba9..014a9cc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "pyokx" -version = "0.6.0" +version = "0.7.0" description = "Unofficial python wrapper for the OKX V5 API" authors = ["nicelgueta"] license = "MIT" @@ -14,6 +14,21 @@ classifiers = [ include = [ "LICENSE", ] +[tool.poetry.group.dev.dependencies] +mkdocs-material = "^9.1.8" +mkdocstrings = "^0.21.2" +mkdocstrings-python = "^0.9.0" +pyyaml = "^6.0" +mypy = "^1.3.0" +black = "^22.3.0" +pytest = "^7.1.2" +pytest-cov = "^3.0.0" +bs4 = "^0.0.1" +types-requests = "^2.28.3" +ipykernel = "^6.15.1" +lxml = "^4.9.1" +html5lib = "^1.1" +autoflake = "^1.4" [tool.pytest.ini_options] addopts = "--cov=pyokx pyokx/tests/" @@ -40,18 +55,6 @@ requests = "^2.28.1" python-dotenv = "^0.20.0" pandas = "^1.4.3" -[tool.poetry.dev-dependencies] -black = "^22.3.0" -pytest = "^7.1.2" -mypy = "^0.950" -pytest-cov = "^3.0.0" -bs4 = "^0.0.1" -types-requests = "^2.28.3" -ipykernel = "^6.15.1" -lxml = "^4.9.1" -html5lib = "^1.1" -autoflake = "^1.4" - [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api" diff --git a/requirements.txt b/requirements.txt index c2e6ec4..3b6d299 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,73 +1,93 @@ -appnope==0.1.3; platform_system == "Darwin" and python_version >= "3.8" and sys_platform == "darwin" -asttokens==2.0.5; python_version >= "3.8" -atomicwrites==1.4.1; python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.4.0" -attrs==21.4.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" -autoflake==1.4 -backcall==0.2.0; python_version >= "3.8" -beautifulsoup4==4.11.1; python_full_version >= "3.6.0" -black==22.6.0; python_full_version >= "3.6.2" -bs4==0.0.1 -certifi==2022.6.15; python_version >= "3.7" and python_version < "4" -cffi==1.15.1; implementation_name == "pypy" and python_version >= "3.7" -charset-normalizer==2.1.0; python_version >= "3.7" and python_version < "4" and python_full_version >= "3.6.0" -click==8.1.3; python_version >= "3.7" and python_full_version >= "3.6.2" -colorama==0.4.5; sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.6.2" and platform_system == "Windows" and (python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.5.0") and (python_version >= "3.8" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.8" and python_full_version >= "3.5.0") -coverage==6.4.3; python_version >= "3.7" -debugpy==1.6.2; python_version >= "3.7" -decorator==5.1.1; python_version >= "3.8" -entrypoints==0.4; python_version >= "3.7" -executing==0.8.3; python_version >= "3.8" -html5lib==1.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0") -idna==3.3; python_version >= "3.7" and python_version < "4" -iniconfig==1.1.1; python_version >= "3.7" -ipykernel==6.15.1; python_version >= "3.7" -ipython==8.4.0; python_version >= "3.8" -jedi==0.18.1; python_version >= "3.8" -jupyter-client==7.3.4; python_version >= "3.7" -jupyter-core==4.11.1; python_version >= "3.7" -loguru==0.6.0; python_version >= "3.5" -lxml==4.9.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0") -matplotlib-inline==0.1.3; python_version >= "3.8" -mypy-extensions==0.4.3; python_full_version >= "3.6.2" and python_version >= "3.6" -mypy==0.950; python_version >= "3.6" -nest-asyncio==1.5.5; python_version >= "3.7" -numpy==1.23.1 -packaging==21.3; python_version >= "3.7" -pandas==1.4.3; python_version >= "3.8" -parso==0.8.3; python_version >= "3.8" -pathspec==0.9.0; python_full_version >= "3.6.2" -pexpect==4.8.0; sys_platform != "win32" and python_version >= "3.8" -pickleshare==0.7.5; python_version >= "3.8" -platformdirs==2.5.2; python_version >= "3.7" and python_full_version >= "3.6.2" -pluggy==1.0.0; python_version >= "3.7" -prompt-toolkit==3.0.30; python_full_version >= "3.6.2" and python_version >= "3.8" -psutil==5.9.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -ptyprocess==0.7.0; sys_platform != "win32" and python_version >= "3.8" -pure-eval==0.2.2; python_version >= "3.8" -py==1.11.0; python_version >= "3.7" and python_full_version < "3.0.0" and implementation_name == "pypy" or python_full_version >= "3.5.0" and python_version >= "3.7" and implementation_name == "pypy" -pycparser==2.21; python_version >= "3.7" and python_full_version < "3.0.0" and implementation_name == "pypy" or implementation_name == "pypy" and python_version >= "3.7" and python_full_version >= "3.4.0" -pyflakes==2.5.0; python_version >= "3.6" -pygments==2.12.0; python_version >= "3.8" -pyparsing==3.0.9; python_full_version >= "3.6.8" and python_version >= "3.7" -pytest-cov==3.0.0; python_version >= "3.6" -pytest==7.1.2; python_version >= "3.7" -python-dateutil==2.8.2; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.8" -python-dotenv==0.20.0; python_version >= "3.5" -pytz==2022.1; python_version >= "3.8" -pywin32==304; sys_platform == "win32" and platform_python_implementation != "PyPy" and python_version >= "3.7" -pyzmq==23.2.0; python_version >= "3.7" -requests==2.28.1; python_version >= "3.7" and python_version < "4" -six==1.16.0; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.8" -soupsieve==2.3.2.post1; python_version >= "3.6" and python_full_version >= "3.6.0" -stack-data==0.3.0; python_version >= "3.8" -tomli==2.0.1; python_full_version <= "3.11.0a6" and python_full_version >= "3.6.2" and python_version >= "3.7" and python_version < "3.11" -tornado==6.2; python_version >= "3.7" -traitlets==5.3.0; python_version >= "3.8" -typeguard==2.13.3; python_full_version >= "3.5.3" -types-requests==2.28.3 -types-urllib3==1.26.16 -typing-extensions==4.3.0; python_version < "3.10" and python_full_version >= "3.6.2" and python_version >= "3.7" -urllib3==1.26.10; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.7" -wcwidth==0.2.5; python_full_version >= "3.6.2" and python_version >= "3.8" -webencodings==0.5.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" -win32-setctime==1.1.0; sys_platform == "win32" and python_version >= "3.5" +appnope==0.1.3 ; python_version >= "3.9" and python_version < "4.0" and platform_system == "Darwin" or python_version >= "3.9" and python_version < "4.0" and sys_platform == "darwin" +asttokens==2.0.5 ; python_version >= "3.9" and python_version < "4.0" +atomicwrites==1.4.1 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "win32" +attrs==21.4.0 ; python_version >= "3.9" and python_version < "4.0" +autoflake==1.4 ; python_version >= "3.9" and python_version < "4.0" +backcall==0.2.0 ; python_version >= "3.9" and python_version < "4.0" +beautifulsoup4==4.11.1 ; python_version >= "3.9" and python_version < "4.0" +black==22.6.0 ; python_version >= "3.9" and python_version < "4.0" +bs4==0.0.1 ; python_version >= "3.9" and python_version < "4.0" +certifi==2022.6.15 ; python_version >= "3.9" and python_version < "4" +cffi==1.15.1 ; python_version >= "3.9" and python_version < "4.0" and implementation_name == "pypy" +charset-normalizer==2.1.0 ; python_version >= "3.9" and python_version < "4" +click==8.1.3 ; python_version >= "3.9" and python_version < "4.0" +colorama==0.4.5 ; python_version >= "3.9" and python_version < "4.0" +coverage[toml]==6.4.3 ; python_version >= "3.9" and python_version < "4.0" +debugpy==1.6.2 ; python_version >= "3.9" and python_version < "4.0" +decorator==5.1.1 ; python_version >= "3.9" and python_version < "4.0" +entrypoints==0.4 ; python_version >= "3.9" and python_version < "4.0" +executing==0.8.3 ; python_version >= "3.9" and python_version < "4.0" +ghp-import==2.1.0 ; python_version >= "3.9" and python_version < "4.0" +griffe==0.27.1 ; python_version >= "3.9" and python_version < "4.0" +html5lib==1.1 ; python_version >= "3.9" and python_version < "4.0" +idna==3.3 ; python_version >= "3.9" and python_version < "4" +importlib-metadata==6.6.0 ; python_version >= "3.9" and python_version < "3.10" +iniconfig==1.1.1 ; python_version >= "3.9" and python_version < "4.0" +ipykernel==6.15.1 ; python_version >= "3.9" and python_version < "4.0" +ipython==8.4.0 ; python_version >= "3.9" and python_version < "4.0" +jedi==0.18.1 ; python_version >= "3.9" and python_version < "4.0" +jinja2==3.1.2 ; python_version >= "3.9" and python_version < "4.0" +jupyter-client==7.3.4 ; python_version >= "3.9" and python_version < "4.0" +jupyter-core==4.11.1 ; python_version >= "3.9" and python_version < "4.0" +loguru==0.6.0 ; python_version >= "3.9" and python_version < "4.0" +lxml==4.9.1 ; python_version >= "3.9" and python_version < "4.0" +markdown==3.3.7 ; python_version >= "3.9" and python_version < "4.0" +markupsafe==2.1.2 ; python_version >= "3.9" and python_version < "4.0" +matplotlib-inline==0.1.3 ; python_version >= "3.9" and python_version < "4.0" +mergedeep==1.3.4 ; python_version >= "3.9" and python_version < "4.0" +mkdocs-autorefs==0.4.1 ; python_version >= "3.9" and python_version < "4.0" +mkdocs-material-extensions==1.1.1 ; python_version >= "3.9" and python_version < "4.0" +mkdocs-material==9.1.8 ; python_version >= "3.9" and python_version < "4.0" +mkdocs==1.4.2 ; python_version >= "3.9" and python_version < "4.0" +mkdocstrings-python==0.9.0 ; python_version >= "3.9" and python_version < "4.0" +mkdocstrings==0.21.2 ; python_version >= "3.9" and python_version < "4.0" +mypy-extensions==0.4.3 ; python_version >= "3.9" and python_version < "4.0" +mypy==0.950 ; python_version >= "3.9" and python_version < "4.0" +nest-asyncio==1.5.5 ; python_version >= "3.9" and python_version < "4.0" +numpy==1.23.1 ; python_version < "4.0" and python_version >= "3.9" +packaging==21.3 ; python_version >= "3.9" and python_version < "4.0" +pandas==1.4.3 ; python_version >= "3.9" and python_version < "4.0" +parso==0.8.3 ; python_version >= "3.9" and python_version < "4.0" +pathspec==0.9.0 ; python_version >= "3.9" and python_version < "4.0" +pexpect==4.8.0 ; python_version >= "3.9" and python_version < "4.0" and sys_platform != "win32" +pickleshare==0.7.5 ; python_version >= "3.9" and python_version < "4.0" +platformdirs==2.5.2 ; python_version >= "3.9" and python_version < "4.0" +pluggy==1.0.0 ; python_version >= "3.9" and python_version < "4.0" +prompt-toolkit==3.0.30 ; python_version >= "3.9" and python_version < "4.0" +psutil==5.9.1 ; python_version >= "3.9" and python_version < "4.0" +ptyprocess==0.7.0 ; python_version >= "3.9" and python_version < "4.0" and sys_platform != "win32" +pure-eval==0.2.2 ; python_version >= "3.9" and python_version < "4.0" +py==1.11.0 ; python_version >= "3.9" and python_version < "4.0" +pycparser==2.21 ; python_version >= "3.9" and python_version < "4.0" and implementation_name == "pypy" +pyflakes==2.5.0 ; python_version >= "3.9" and python_version < "4.0" +pygments==2.15.1 ; python_version >= "3.9" and python_version < "4.0" +pymdown-extensions==9.11 ; python_version >= "3.9" and python_version < "4.0" +pyparsing==3.0.9 ; python_version >= "3.9" and python_version < "4.0" +pytest-cov==3.0.0 ; python_version >= "3.9" and python_version < "4.0" +pytest==7.1.2 ; python_version >= "3.9" and python_version < "4.0" +python-dateutil==2.8.2 ; python_version >= "3.9" and python_version < "4.0" +python-dotenv==0.20.0 ; python_version >= "3.9" and python_version < "4.0" +pytz==2022.1 ; python_version >= "3.9" and python_version < "4.0" +pywin32==304 ; sys_platform == "win32" and platform_python_implementation != "PyPy" and python_version >= "3.9" and python_version < "4.0" +pyyaml-env-tag==0.1 ; python_version >= "3.9" and python_version < "4.0" +pyyaml==6.0 ; python_version >= "3.9" and python_version < "4.0" +pyzmq==23.2.0 ; python_version >= "3.9" and python_version < "4.0" +regex==2023.3.23 ; python_version >= "3.9" and python_version < "4.0" +requests==2.28.1 ; python_version >= "3.9" and python_version < "4" +setuptools==67.7.2 ; python_version >= "3.9" and python_version < "4.0" +six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" +soupsieve==2.3.2.post1 ; python_version >= "3.9" and python_version < "4.0" +stack-data==0.3.0 ; python_version >= "3.9" and python_version < "4.0" +tomli==2.0.1 ; python_version >= "3.9" and python_version < "4.0" +tornado==6.2 ; python_version >= "3.9" and python_version < "4.0" +traitlets==5.3.0 ; python_version >= "3.9" and python_version < "4.0" +typeguard==2.13.3 ; python_version >= "3.9" and python_version < "4.0" +types-requests==2.28.3 ; python_version >= "3.9" and python_version < "4.0" +types-urllib3==1.26.16 ; python_version >= "3.9" and python_version < "4.0" +typing-extensions==4.3.0 ; python_version >= "3.9" and python_version < "4.0" +urllib3==1.26.10 ; python_version >= "3.9" and python_version < "4" +watchdog==3.0.0 ; python_version >= "3.9" and python_version < "4.0" +wcwidth==0.2.5 ; python_version >= "3.9" and python_version < "4.0" +webencodings==0.5.1 ; python_version >= "3.9" and python_version < "4.0" +win32-setctime==1.1.0 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "win32" +zipp==3.15.0 ; python_version >= "3.9" and python_version < "3.10"