Package: copra
CoPrAAsyncronous Python REST and WebSocket Clients for Coinbase ProQuick Links:Documentation-Source Code-PyPiRelated:Coinbase Pro Digital Currency Exchange-Coinbase Pro REST API-Coinbase Pro WebSocket APIIntroductionThe CoPrA (CoinbaseProAsync) package provides asyncronous REST and WebSocket clients written in Python for use with the Coinbase Pro digital currency trading platform. To learn about Coinbase Pro’s REST and WebSocket APIs as well as how to obtain an API key for authentication to those services, please seeCoinbase Pro’s API documentation.CoPrA Featurescompatible with Python 3.5 or greaterutilizes Python’sasyncioconcurrency frameworkopen source (MITlicense)REST FeaturesAsyncronous REST client class with 100% of the account management, trading, and market data functionality offered by the Coinbase Pro REST API.supports user authenticationbuilt onaiohttp, the asynchronous HTTP client/server framework for asyncio and PythonWebSocket FeaturesAsyncronous WebSocket client class with callback hooks for managing every phase of a Coinbase Pro WebSocket sessionsupports user authenticationbuilt onAutobahn|Python, the open-source (MIT) real-time framework for web, mobile & the Internet of Things.ExamplesRESTWithout a Coinbase Pro API key,copra.rest.Clienthas access to all of the public market data that Coinbase makes available.# 24hour_stats.pyimportasynciofromcopra.restimportClientloop=asyncio.get_event_loop()client=Client(loop)asyncdefget_stats():btc_stats=awaitclient.get_24hour_stats('BTC-USD')print(btc_stats)loop.run_until_complete(get_stats())loop.run_until_complete(client.close())Running the above:$python324hour_stats.py{'open':'3914.96000000','high':'3957.10000000','low':'3508.00000000','volume':'37134.10720409','last':'3670.06000000','volume_30day':'423047.53794129'}In conjunction with a Coinbase Pro API key,copra.rest.Clientcan be used to trade cryptocurrency and manage your Coinbase pro account. This example also shows howcopra.rest.Clientcan be used as a context manager.# btc_account_info.pyimportasynciofromcopra.restimportClientKEY=YOUR_API_KEYSECRET=YOUR_API_SECRETPASSPHRASE=YOUR_API_PASSPHRASEBTC_ACCOUNT_ID=YOUR_BTC_ACCOUNT_IDloop=asyncio.get_event_loop()asyncdefget_btc_account():asyncwithClient(loop,auth=True,key=KEY,secret=SECRET,passphrase=PASSPHRASE)asclient:btc_account=awaitclient.account(BTC_ACCOUNT_ID)print(btc_account)loop.run_until_complete(get_btc_account())Running the above:$python3btc_account_info.py{'id':'1b121cbe-bd4-4c42-9e31-7047632fc7c7','currency':'BTC','balance':'26.1023109600000000','available':'26.09731096','hold':'0.0050000000000000','profile_id':'151d9abd-abcc-4597-ae40-b6286d72a0bd'}WebSocketWhilecopra.websocket.Clientis meant to be overridden, but it can be used ‘as is’ to test the module through the command line.# btc_heartbeat.pyimportasynciofromcopra.websocketimportChannel,Clientloop=asyncio.get_event_loop()ws=Client(loop,Channel('heartbeat','BTC-USD'))try:loop.run_forever()exceptKeyboardInterrupt:loop.run_until_complete(ws.close())loop.close()Running the above:$python3btc_heartbeat.py{'type':'subscriptions','channels':[{'name':'heartbeat','product_ids':['BTC-USD']}]}{'type':'heartbeat','last_trade_id':45950713,'product_id':'BTC-USD','sequence':6254273323,'time':'2018-07-05T22:36:30.823000Z'}{'type':'heartbeat','last_trade_id':45950714,'product_id':'BTC-USD','sequence':6254273420,'time':'2018-07-05T22:36:31.823000Z'}{'type':'heartbeat','last_trade_id':45950715,'product_id':'BTC-USD','sequence':6254273528,'time':'2018-07-05T22:36:32.823000Z'}{'type':'heartbeat','last_trade_id':45950715,'product_id':'BTC-USD','sequence':6254273641,'time':'2018-07-05T22:36:33.823000Z'}{'type':'heartbeat','last_trade_id':45950715,'product_id':'BTC-USD','sequence':6254273758,'time':'2018-07-05T22:36:34.823000Z'}{'type':'heartbeat','last_trade_id':45950720,'product_id':'BTC-USD','sequence':6254273910,'time':'2018-07-05T22:36:35.824000Z'}...A Coinbase Pro API key allowscopra.websocket.Clientto authenticate with the Coinbase WebSocket server giving you access to feeds specific to your user account.# user_channel.pyimportasynciofromcopra.websocketimportChannel,ClientKEY=YOUR_API_KEYSECRET=YOUR_API_SECRETPASSPHRASE=YOUR_API_PASSPHRASEloop=asyncio.get_event_loop()channel=Channel('user','LTC-USD')ws=Client(loop,channel,auth=True,key=KEY,secret=SECRET,passphrase=PASSPHRASE)try:loop.run_forever()exceptKeyboardInterrupt:loop.run_until_complete(ws.close())loop.close()Running the above:$python3user_channel.py{'type':'subscriptions','channels':[{'name':'user','product_ids':['LTC-USD']}]}{'type':'received','order_id':'42d2677d-0d37-435f-a776-e9e7f81ff22b','order_type':'limit','size':'50.00000000','price':'1.00000000','side':'buy','client_oid':'00098b59-4ac9-4ff8-ba16-bd2ef673f7b7','product_id':'LTC-USD','sequence':2311323871,'user_id':'642394321fdf8242c4006432','profile_id':'039ee148-d490-44f9-9aed-0d1f6412884','time':'2018-07-07T17:33:29.755000Z'}{'type':'open','side':'buy','price':'1.00000000','order_id':'42d2677d-0d37-435f-a776-e9e7f81ff22b','remaining_size':'50.00000000','product_id':'LTC-USD','sequence':2311323872,'user_id':'642394321fdf8242c4006432','profile_id':'039ee148-d490-44f9-9aed-0d1f6412884','time':'2018-07-07T17:33:29.755000Z'}...VersioningWe useSemVerfor versioning. For the versions available, see thetags on this repository.LicenseThis project is licensed under theMIT License- see theLICENSE filefor detailsAuthorsTony Podlaski-http://www.neuraldump.netSee also the list ofcontributerswho participated in this project.ContributingPlease readCONTRIBUTING.rstfor details on our code of conduct, and the process for submitting pull requests to us.CreditsThis package was created withCookiecutterand theaudreyr/cookiecutter-pypackageproject template.History0.1.0 (2018-07-06)First release on PyPI.0.2.0 (2018-07-07)Added Client authentication.0.3.0 (2018-07-09)Added reconnect option to Client.0.4.0 (2018-07-10)Added subscribe and unsubscribe methods to Client.1.0.0 (2018-07-12)Added full documentation of the CoPrA API.1.0.1 (2018-07-12)Fixed typos in the documentation.1.0.2 (2018-07-12)Added Examples page to the documentation.1.0.3 (2018-07-16)More documentation typos fixed.1.0.4 - 1.0.5 (2018-07-17)Non-API changes.1.0.6 (2018-08-19)Updated Autobahn requirement to 18.8.11.0.7 (2018-08-19)Modified Travis config to test against Python 3.7.1.1.0 (2018-11-27)Added REST client.1.1.2 (2018-12-01)Updated documentation formatting.1.2.0 (2019-01-04)Created copra.rest package and moved old copra.rest module to
copra.rest.client.Created copra.websocket package and moved old copra.websocket module to
copra.websocket.client.Add imports to copra.rest.__init__ and copra.websocket.__init__ so that
classes and attributes can still be imported as they were before.Rewrote and completed unit tests from copra.websocket.1.2.5 (2019-01-05)Updated copra.websocket.client unit tests to ignore those that are
incompatible with Python 3.5 due to Mock methods that were not yet
implemented.1.2.6 (2019-01-07)Updated the REST client to attach an additional query string parameter
to all GET requests. The parameter, ‘no-cache’, is a timestamp and ensures
that the Coinbase server responds to all GET requests with fresh and not
cached content.