summaryrefslogtreecommitdiff
path: root/python-bitmex-trio-websocket.spec
diff options
context:
space:
mode:
Diffstat (limited to 'python-bitmex-trio-websocket.spec')
-rw-r--r--python-bitmex-trio-websocket.spec454
1 files changed, 454 insertions, 0 deletions
diff --git a/python-bitmex-trio-websocket.spec b/python-bitmex-trio-websocket.spec
new file mode 100644
index 0000000..7d37959
--- /dev/null
+++ b/python-bitmex-trio-websocket.spec
@@ -0,0 +1,454 @@
+%global _empty_manifest_terminate_build 0
+Name: python-bitmex-trio-websocket
+Version: 0.16.1
+Release: 1
+Summary: Websocket implementation for BitMEX cryptocurrency derivatives exchange.
+License: MIT
+URL: https://github.com/andersea/bitmex-trio-websocket
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/3d/73/54e2148e85ea46d6b0675d50f1d991f6df73137dbb49131fb4479f19ad03/bitmex-trio-websocket-0.16.1.tar.gz
+BuildArch: noarch
+
+Requires: python3-sortedcontainers
+Requires: python3-async_generator
+Requires: python3-pendulum
+Requires: python3-slurry-websocket
+
+%description
+# BitMEX Trio-Websocket
+
+
+[![PyPI](https://img.shields.io/pypi/v/bitmex_trio_websocket.svg)](https://pypi.python.org/pypi/bitmex-trio-websocket)
+[![Build Status](https://img.shields.io/travis/com/andersea/bitmex-trio-websocket.svg)](https://travis-ci.com/andersea/bitmex-trio-websocket)
+
+Websocket implementation for BitMEX cryptocurrency derivatives exchange.
+
+* Free software: MIT license
+
+## Features
+
+* Supports authenticated connections using api keys.
+* Uses SortedDict as backend storage for easy and fast table searching.
+* Fully async using async generators. No callbacks or event emitters.
+* Based on [Slurry](https://slurry.readthedocs.io/en/latest/) and [Slurry-websocket](https://github.com/andersea/slurry-websocket).
+
+## Installation
+
+This library requires Python 3.7 or greater.
+
+To install from PyPI:
+
+ pip install bitmex-trio-websocket
+
+## Client example
+
+ import trio
+ from async_generator import aclosing
+
+ from bitmex_trio_websocket import open_bitmex_websocket
+ from trio_websocket import ConnectionClosed
+
+ async def main():
+ async with open_bitmex_websocket('testnet') as bws:
+ async with aclosing(bws.listen('instrument')) as agen:
+ try:
+ async for msg in agen:
+ print(f'Received message, symbol: \'{msg["symbol"]}\', timestamp: \'{msg["timestamp"]}\'')
+ except ConnectionClosed as e:
+ print(e)
+
+ if __name__ == '__main__':
+ trio.run(main)
+
+This will print a sequence of dicts for each received item on inserts (including partials) or updates.
+
+Multiple tables can be listened to concurrently, by running each listener in a seperate task using nursery.start_soon.
+
+## API
+
+![async def](https://img.shields.io/badge/async%20with-open__bitmex__websocket(network%2C%20api__key%2C%20api__secret%2C%20*%2C%20dead_mans_switch)-blue)
+
+Creates a new websocket object.
+
+This is an async context manager, so it needs to be used with the `async with .. as ..:` construct. The returned value is a BitMEXWebsocket object.
+
+**`network`** str
+
+Network to connect to. Options: 'mainnet', 'testnet'.
+
+**`api_key`** Optional\[str\]
+
+Api key for authenticated connections.
+
+**`api_secret`** Optional\[str\]
+
+Api secret for authenticated connections.
+
+**`dead_mans_switch`** Optional\[bool\]
+
+When enabled, the websocket will periodically send cancelAllAfter messages with a timeout of 60 seconds. The timer is refreshed every 15 seconds.
+
+See: https://www.bitmex.com/app/wsAPI#Dead-Mans-Switch-Auto-Cancel
+
+![bitmex__trio__websocket.BitMEXWebsocket](https://img.shields.io/badge/class-bitmex__trio__websocket.BitMEXWebsocket-blue?style=flat-square)
+
+
+![await listen](https://img.shields.io/badge/await-listen(table,%20symbol=None)-green)
+
+Subscribes to the channel and optionally a specific symbol. It is possible for multiple listeners
+to be listening using the same subscription.
+
+Returns an async generator object that yields messages from the channel.
+
+If the websocket is closed, while a listener is still active, a [trio-websocket.ConnectionClosed](https://trio-websocket.readthedocs.io/en/stable/api.html#trio_websocket.ConnectionClosed) error will be raised by the generator, with the reason for the closure.
+
+**`table`** str
+
+Channel to subscribe to.
+
+**`symbol`** Optional[str]
+
+Optional symbol to subscribe to.
+
+![storage](https://img.shields.io/badge/attribute-storage-teal)
+
+This attribute contains the storage object for the websocket. The storage object caches the data tables for received
+items. The implementation uses SortedDict from [Sorted Containers](http://www.grantjenks.com/docs/sortedcontainers/index.html),
+to handle inserts, updates and deletes.
+
+The storage object has two public attributes `data`, and `keys`.
+
+`data` contains the table state for each channel as a dictionary with the table name as key. The tables are sorted dictionaries, stored with key tuples generated from each item using the keys schema received in the initial partial message.
+
+`data['orderBookL2']` is a special state dictionary for the orderBookL2 table. It is a double nested defaultdict, with a SortedDict containing each price level. The nested dictionaries are composed like this:
+
+ # Special storage for orderBookL2
+ # dict[symbol][side][id]
+ self.data['orderBookL2'] = defaultdict(lambda: defaultdict(SortedDict))
+
+`keys` contains a mapping for lists of keys by which to look up values in each table.
+
+In addition the following helper methods are supplied:
+
+`make_key(table, match_data)` creates a key for searching the `data` table. Raises `ValueError` if `table == 'orderBookL2'`, since this table needs special indexing.
+
+`parse_timestamp(timestamp)` static method for converting BitMEX timestamps to datetime with timezone (UTC).
+
+## Credits
+
+Thanks to the [Trio](https://github.com/python-trio/trio) and [Trio-websocket](https://github.com/HyperionGray/trio-websocket) libraries for their awesome work.
+
+The library was originally based on the [reference client](https://github.com/BitMEX/api-connectors/tree/master/official-ws), but is now substantially redesigned.
+
+This package was created with [Cookiecutter](https://github.com/audreyr/cookiecutter) and the [audreyr/cookiecutter-pypackage](https://github.com/audreyr/cookiecutter-pypackage) project template.
+
+
+%package -n python3-bitmex-trio-websocket
+Summary: Websocket implementation for BitMEX cryptocurrency derivatives exchange.
+Provides: python-bitmex-trio-websocket
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-bitmex-trio-websocket
+# BitMEX Trio-Websocket
+
+
+[![PyPI](https://img.shields.io/pypi/v/bitmex_trio_websocket.svg)](https://pypi.python.org/pypi/bitmex-trio-websocket)
+[![Build Status](https://img.shields.io/travis/com/andersea/bitmex-trio-websocket.svg)](https://travis-ci.com/andersea/bitmex-trio-websocket)
+
+Websocket implementation for BitMEX cryptocurrency derivatives exchange.
+
+* Free software: MIT license
+
+## Features
+
+* Supports authenticated connections using api keys.
+* Uses SortedDict as backend storage for easy and fast table searching.
+* Fully async using async generators. No callbacks or event emitters.
+* Based on [Slurry](https://slurry.readthedocs.io/en/latest/) and [Slurry-websocket](https://github.com/andersea/slurry-websocket).
+
+## Installation
+
+This library requires Python 3.7 or greater.
+
+To install from PyPI:
+
+ pip install bitmex-trio-websocket
+
+## Client example
+
+ import trio
+ from async_generator import aclosing
+
+ from bitmex_trio_websocket import open_bitmex_websocket
+ from trio_websocket import ConnectionClosed
+
+ async def main():
+ async with open_bitmex_websocket('testnet') as bws:
+ async with aclosing(bws.listen('instrument')) as agen:
+ try:
+ async for msg in agen:
+ print(f'Received message, symbol: \'{msg["symbol"]}\', timestamp: \'{msg["timestamp"]}\'')
+ except ConnectionClosed as e:
+ print(e)
+
+ if __name__ == '__main__':
+ trio.run(main)
+
+This will print a sequence of dicts for each received item on inserts (including partials) or updates.
+
+Multiple tables can be listened to concurrently, by running each listener in a seperate task using nursery.start_soon.
+
+## API
+
+![async def](https://img.shields.io/badge/async%20with-open__bitmex__websocket(network%2C%20api__key%2C%20api__secret%2C%20*%2C%20dead_mans_switch)-blue)
+
+Creates a new websocket object.
+
+This is an async context manager, so it needs to be used with the `async with .. as ..:` construct. The returned value is a BitMEXWebsocket object.
+
+**`network`** str
+
+Network to connect to. Options: 'mainnet', 'testnet'.
+
+**`api_key`** Optional\[str\]
+
+Api key for authenticated connections.
+
+**`api_secret`** Optional\[str\]
+
+Api secret for authenticated connections.
+
+**`dead_mans_switch`** Optional\[bool\]
+
+When enabled, the websocket will periodically send cancelAllAfter messages with a timeout of 60 seconds. The timer is refreshed every 15 seconds.
+
+See: https://www.bitmex.com/app/wsAPI#Dead-Mans-Switch-Auto-Cancel
+
+![bitmex__trio__websocket.BitMEXWebsocket](https://img.shields.io/badge/class-bitmex__trio__websocket.BitMEXWebsocket-blue?style=flat-square)
+
+
+![await listen](https://img.shields.io/badge/await-listen(table,%20symbol=None)-green)
+
+Subscribes to the channel and optionally a specific symbol. It is possible for multiple listeners
+to be listening using the same subscription.
+
+Returns an async generator object that yields messages from the channel.
+
+If the websocket is closed, while a listener is still active, a [trio-websocket.ConnectionClosed](https://trio-websocket.readthedocs.io/en/stable/api.html#trio_websocket.ConnectionClosed) error will be raised by the generator, with the reason for the closure.
+
+**`table`** str
+
+Channel to subscribe to.
+
+**`symbol`** Optional[str]
+
+Optional symbol to subscribe to.
+
+![storage](https://img.shields.io/badge/attribute-storage-teal)
+
+This attribute contains the storage object for the websocket. The storage object caches the data tables for received
+items. The implementation uses SortedDict from [Sorted Containers](http://www.grantjenks.com/docs/sortedcontainers/index.html),
+to handle inserts, updates and deletes.
+
+The storage object has two public attributes `data`, and `keys`.
+
+`data` contains the table state for each channel as a dictionary with the table name as key. The tables are sorted dictionaries, stored with key tuples generated from each item using the keys schema received in the initial partial message.
+
+`data['orderBookL2']` is a special state dictionary for the orderBookL2 table. It is a double nested defaultdict, with a SortedDict containing each price level. The nested dictionaries are composed like this:
+
+ # Special storage for orderBookL2
+ # dict[symbol][side][id]
+ self.data['orderBookL2'] = defaultdict(lambda: defaultdict(SortedDict))
+
+`keys` contains a mapping for lists of keys by which to look up values in each table.
+
+In addition the following helper methods are supplied:
+
+`make_key(table, match_data)` creates a key for searching the `data` table. Raises `ValueError` if `table == 'orderBookL2'`, since this table needs special indexing.
+
+`parse_timestamp(timestamp)` static method for converting BitMEX timestamps to datetime with timezone (UTC).
+
+## Credits
+
+Thanks to the [Trio](https://github.com/python-trio/trio) and [Trio-websocket](https://github.com/HyperionGray/trio-websocket) libraries for their awesome work.
+
+The library was originally based on the [reference client](https://github.com/BitMEX/api-connectors/tree/master/official-ws), but is now substantially redesigned.
+
+This package was created with [Cookiecutter](https://github.com/audreyr/cookiecutter) and the [audreyr/cookiecutter-pypackage](https://github.com/audreyr/cookiecutter-pypackage) project template.
+
+
+%package help
+Summary: Development documents and examples for bitmex-trio-websocket
+Provides: python3-bitmex-trio-websocket-doc
+%description help
+# BitMEX Trio-Websocket
+
+
+[![PyPI](https://img.shields.io/pypi/v/bitmex_trio_websocket.svg)](https://pypi.python.org/pypi/bitmex-trio-websocket)
+[![Build Status](https://img.shields.io/travis/com/andersea/bitmex-trio-websocket.svg)](https://travis-ci.com/andersea/bitmex-trio-websocket)
+
+Websocket implementation for BitMEX cryptocurrency derivatives exchange.
+
+* Free software: MIT license
+
+## Features
+
+* Supports authenticated connections using api keys.
+* Uses SortedDict as backend storage for easy and fast table searching.
+* Fully async using async generators. No callbacks or event emitters.
+* Based on [Slurry](https://slurry.readthedocs.io/en/latest/) and [Slurry-websocket](https://github.com/andersea/slurry-websocket).
+
+## Installation
+
+This library requires Python 3.7 or greater.
+
+To install from PyPI:
+
+ pip install bitmex-trio-websocket
+
+## Client example
+
+ import trio
+ from async_generator import aclosing
+
+ from bitmex_trio_websocket import open_bitmex_websocket
+ from trio_websocket import ConnectionClosed
+
+ async def main():
+ async with open_bitmex_websocket('testnet') as bws:
+ async with aclosing(bws.listen('instrument')) as agen:
+ try:
+ async for msg in agen:
+ print(f'Received message, symbol: \'{msg["symbol"]}\', timestamp: \'{msg["timestamp"]}\'')
+ except ConnectionClosed as e:
+ print(e)
+
+ if __name__ == '__main__':
+ trio.run(main)
+
+This will print a sequence of dicts for each received item on inserts (including partials) or updates.
+
+Multiple tables can be listened to concurrently, by running each listener in a seperate task using nursery.start_soon.
+
+## API
+
+![async def](https://img.shields.io/badge/async%20with-open__bitmex__websocket(network%2C%20api__key%2C%20api__secret%2C%20*%2C%20dead_mans_switch)-blue)
+
+Creates a new websocket object.
+
+This is an async context manager, so it needs to be used with the `async with .. as ..:` construct. The returned value is a BitMEXWebsocket object.
+
+**`network`** str
+
+Network to connect to. Options: 'mainnet', 'testnet'.
+
+**`api_key`** Optional\[str\]
+
+Api key for authenticated connections.
+
+**`api_secret`** Optional\[str\]
+
+Api secret for authenticated connections.
+
+**`dead_mans_switch`** Optional\[bool\]
+
+When enabled, the websocket will periodically send cancelAllAfter messages with a timeout of 60 seconds. The timer is refreshed every 15 seconds.
+
+See: https://www.bitmex.com/app/wsAPI#Dead-Mans-Switch-Auto-Cancel
+
+![bitmex__trio__websocket.BitMEXWebsocket](https://img.shields.io/badge/class-bitmex__trio__websocket.BitMEXWebsocket-blue?style=flat-square)
+
+
+![await listen](https://img.shields.io/badge/await-listen(table,%20symbol=None)-green)
+
+Subscribes to the channel and optionally a specific symbol. It is possible for multiple listeners
+to be listening using the same subscription.
+
+Returns an async generator object that yields messages from the channel.
+
+If the websocket is closed, while a listener is still active, a [trio-websocket.ConnectionClosed](https://trio-websocket.readthedocs.io/en/stable/api.html#trio_websocket.ConnectionClosed) error will be raised by the generator, with the reason for the closure.
+
+**`table`** str
+
+Channel to subscribe to.
+
+**`symbol`** Optional[str]
+
+Optional symbol to subscribe to.
+
+![storage](https://img.shields.io/badge/attribute-storage-teal)
+
+This attribute contains the storage object for the websocket. The storage object caches the data tables for received
+items. The implementation uses SortedDict from [Sorted Containers](http://www.grantjenks.com/docs/sortedcontainers/index.html),
+to handle inserts, updates and deletes.
+
+The storage object has two public attributes `data`, and `keys`.
+
+`data` contains the table state for each channel as a dictionary with the table name as key. The tables are sorted dictionaries, stored with key tuples generated from each item using the keys schema received in the initial partial message.
+
+`data['orderBookL2']` is a special state dictionary for the orderBookL2 table. It is a double nested defaultdict, with a SortedDict containing each price level. The nested dictionaries are composed like this:
+
+ # Special storage for orderBookL2
+ # dict[symbol][side][id]
+ self.data['orderBookL2'] = defaultdict(lambda: defaultdict(SortedDict))
+
+`keys` contains a mapping for lists of keys by which to look up values in each table.
+
+In addition the following helper methods are supplied:
+
+`make_key(table, match_data)` creates a key for searching the `data` table. Raises `ValueError` if `table == 'orderBookL2'`, since this table needs special indexing.
+
+`parse_timestamp(timestamp)` static method for converting BitMEX timestamps to datetime with timezone (UTC).
+
+## Credits
+
+Thanks to the [Trio](https://github.com/python-trio/trio) and [Trio-websocket](https://github.com/HyperionGray/trio-websocket) libraries for their awesome work.
+
+The library was originally based on the [reference client](https://github.com/BitMEX/api-connectors/tree/master/official-ws), but is now substantially redesigned.
+
+This package was created with [Cookiecutter](https://github.com/audreyr/cookiecutter) and the [audreyr/cookiecutter-pypackage](https://github.com/audreyr/cookiecutter-pypackage) project template.
+
+
+%prep
+%autosetup -n bitmex-trio-websocket-0.16.1
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-bitmex-trio-websocket -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Wed May 10 2023 Python_Bot <Python_Bot@openeuler.org> - 0.16.1-1
+- Package Spec generated