cbpro-SCR


Namecbpro-SCR JSON
Version 0.0.1 PyPI version JSON
download
home_pagehttps://github.com/daniel-dc-cd/coinbasepro-python/
SummaryThe newly edited unofficial Python client for the Coinbase Pro API for use by SCR only.
upload_time2024-02-27 20:36:19
maintainer
docs_urlNone
authorDaniel Oostra
requires_python
licenseMIT
keywords gdax gdax-api orderbook trade bitcoin ethereum btc eth client api wrapper exchange crypto currency trading trading-api coinbase pro prime coinbasepro
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI
coveralls test coverage
            # coinbasepro-python

The Python client for the [Coinbase Pro API](https://docs.pro.coinbase.com/) (formerly known as
the GDAX)

##### Provided under MIT License by Daniel Oostra
.
*Note: this library may be subtly broken or buggy. The code is released under
the MIT License – please take the following message to heart:*
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

## Benefits
- A simple to use python wrapper for both public and authenticated endpoints.
- In about 10 minutes, you could be programmatically trading on one of the
largest Bitcoin exchanges in the *world*!
- Do not worry about handling the nuances of the API with easy-to-use methods
for every API endpoint.
- Gain an advantage in the market by getting under the hood of CB Pro to learn
what and who is behind every tick.

## Under Development
- Test Scripts
- Additional Functionality for the real-time order book
- FIX API Client **Looking for assistance**

## Getting Started
This README is documentation on the syntax of the python client presented in
this repository. See function docstrings for full syntax details.  
**This API attempts to present a clean interface to CB Pro, but in order to use it
to its full potential, you must familiarize yourself with the official CB Pro
documentation.**

- https://docs.pro.coinbase.com/

- You may manually install the project or use ```pip```:
```python
pip install cbpro
#or
pip install git+git://github.com/danpaquin/coinbasepro-python.git
```

### Public Client
Only some endpoints in the API are available to everyone.  The public endpoints
can be reached using ```PublicClient```

```python
import cbpro
public_client = cbpro.PublicClient()
```

### PublicClient Methods
- [get_products](https://docs.pro.coinbase.com//#get-products)
```python
public_client.get_products()
```

- [get_product_order_book](https://docs.pro.coinbase.com/#get-product-order-book)
```python
# Get the order book at the default level.
public_client.get_product_order_book('BTC-USD')
# Get the order book at a specific level.
public_client.get_product_order_book('BTC-USD', level=1)
```

- [get_product_ticker](https://docs.pro.coinbase.com/#get-product-ticker)
```python
# Get the product ticker for a specific product.
public_client.get_product_ticker(product_id='ETH-USD')
```

- [get_product_trades](https://docs.pro.coinbase.com/#get-trades) (paginated)
```python
# Get the product trades for a specific product.
# Returns a generator
public_client.get_product_trades(product_id='ETH-USD')
```

- [get_product_historic_rates](https://docs.pro.coinbase.com/#get-historic-rates)
```python
public_client.get_product_historic_rates('ETH-USD')
# To include other parameters, see function docstring:
public_client.get_product_historic_rates('ETH-USD', granularity=3000)
```

- [get_product_24hr_stats](https://docs.pro.coinbase.com/#get-24hr-stats)
```python
public_client.get_product_24hr_stats('ETH-USD')
```

- [get_currencies](https://docs.pro.coinbase.com/#get-currencies)
```python
public_client.get_currencies()
```

- [get_time](https://docs.pro.coinbase.com/#time)
```python
public_client.get_time()
```

### Authenticated Client

Not all API endpoints are available to everyone.
Those requiring user authentication can be reached using `AuthenticatedClient`.
You must setup API access within your
[account settings](https://pro.coinbase.com/profile/api).
The `AuthenticatedClient` inherits all methods from the `PublicClient`
class, so you will only need to initialize one if you are planning to
integrate both into your script.

```python
import cbpro
auth_client = cbpro.AuthenticatedClient(key, b64secret, passphrase)
# Use the sandbox API (requires a different set of API access credentials)
auth_client = cbpro.AuthenticatedClient(key, b64secret, passphrase,
                                  api_url="https://api-public.sandbox.pro.coinbase.com")
```

### Pagination
Some calls are [paginated](https://docs.pro.coinbase.com/#pagination), meaning multiple
calls must be made to receive the full set of data. The CB Pro Python API provides
an abstraction for paginated endpoints in the form of generators which provide a
clean interface for iteration but may make multiple HTTP requests behind the 
scenes. The pagination options `before`, `after`, and `limit` may be supplied as
keyword arguments if desired, but aren't necessary for typical use cases.
```python
fills_gen = auth_client.get_fills()
# Get all fills (will possibly make multiple HTTP requests)
all_fills = list(fills_gen)
```
One use case for pagination parameters worth pointing out is retrieving only 
new data since the previous request. For the case of `get_fills()`, the 
`trade_id` is the parameter used for indexing. By passing 
`before=some_trade_id`, only fills more recent than that `trade_id` will be 
returned. Note that when using `before`, a maximum of 100 entries will be 
returned - this is a limitation of CB Pro.
```python
from itertools import islice
# Get 5 most recent fills
recent_fills = islice(auth_client.get_fills(), 5)
# Only fetch new fills since last call by utilizing `before` parameter.
new_fills = auth_client.get_fills(before=recent_fills[0]['trade_id'])
```

### AuthenticatedClient Methods
- [get_accounts](https://docs.pro.coinbase.com/#list-accounts)
```python
auth_client.get_accounts()
```

- [get_account](https://docs.pro.coinbase.com/#get-an-account)
```python
auth_client.get_account("7d0f7d8e-dd34-4d9c-a846-06f431c381ba")
```

- [get_account_history](https://docs.pro.coinbase.com/#get-account-history) (paginated)
```python
# Returns generator:
auth_client.get_account_history("7d0f7d8e-dd34-4d9c-a846-06f431c381ba")
```

- [get_account_holds](https://docs.pro.coinbase.com/#get-holds) (paginated)
```python
# Returns generator:
auth_client.get_account_holds("7d0f7d8e-dd34-4d9c-a846-06f431c381ba")
```

- [buy & sell](https://docs.pro.coinbase.com/#place-a-new-order)
```python
# Buy 0.01 BTC @ 100 USD
auth_client.buy(price='100.00', #USD
               size='0.01', #BTC
               order_type='limit',
               product_id='BTC-USD')
```
```python
# Sell 0.01 BTC @ 200 USD
auth_client.sell(price='200.00', #USD
                size='0.01', #BTC
                order_type='limit',
                product_id='BTC-USD')
```
```python
# Limit order-specific method
auth_client.place_limit_order(product_id='BTC-USD', 
                              side='buy', 
                              price='200.00', 
                              size='0.01')
```
```python
# Place a market order by specifying amount of USD to use. 
# Alternatively, `size` could be used to specify quantity in BTC amount.
auth_client.place_market_order(product_id='BTC-USD', 
                               side='buy', 
                               funds='100.00')
```
```python
# Stop order. `funds` can be used instead of `size` here.
auth_client.place_stop_order(product_id='BTC-USD', 
                              stop_type='loss', 
                              price='200.00', 
                              size='0.01')
```

- [cancel_order](https://docs.pro.coinbase.com/#cancel-an-order)
```python
auth_client.cancel_order("d50ec984-77a8-460a-b958-66f114b0de9b")
```
- [cancel_all](https://docs.pro.coinbase.com/#cancel-all)
```python
auth_client.cancel_all(product_id='BTC-USD')
```

- [get_orders](https://docs.pro.coinbase.com/#list-orders) (paginated)
```python
# Returns generator:
auth_client.get_orders()
```

- [get_order](https://docs.pro.coinbase.com/#get-an-order)
```python
auth_client.get_order("d50ec984-77a8-460a-b958-66f114b0de9b")
```

- [get_fills](https://docs.pro.coinbase.com/#list-fills) (paginated)
```python
# All return generators
auth_client.get_fills()
# Get fills for a specific order
auth_client.get_fills(order_id="d50ec984-77a8-460a-b958-66f114b0de9b")
# Get fills for a specific product
auth_client.get_fills(product_id="ETH-BTC")
```

- [deposit & withdraw](https://docs.pro.coinbase.com/#depositwithdraw)
```python
depositParams = {
        'amount': '25.00', # Currency determined by account specified
        'coinbase_account_id': '60680c98bfe96c2601f27e9c'
}
auth_client.deposit(depositParams)
```
```python
# Withdraw from CB Pro into Coinbase Wallet
withdrawParams = {
        'amount': '1.00', # Currency determined by account specified
        'coinbase_account_id': '536a541fa9393bb3c7000023'
}
auth_client.withdraw(withdrawParams)
```

### WebsocketClient
If you would like to receive real-time market updates, you must subscribe to the
[websocket feed](https://docs.pro.coinbase.com/#websocket-feed).

#### Subscribe to a single product
```python
import cbpro

# Parameters are optional
wsClient = cbpro.WebsocketClient(url="wss://ws-feed.pro.coinbase.com",
                                products="BTC-USD",
                                channels=["ticker"])
# Do other stuff...
wsClient.close()
```

#### Subscribe to multiple products
```python
import cbpro
# Parameters are optional
wsClient = cbpro.WebsocketClient(url="wss://ws-feed.pro.coinbase.com",
                                products=["BTC-USD", "ETH-USD"],
                                channels=["ticker"])
# Do other stuff...
wsClient.close()
```

### WebsocketClient + Mongodb
The ```WebsocketClient``` now supports data gathering via MongoDB. Given a
MongoDB collection, the ```WebsocketClient``` will stream results directly into
the database collection.
```python
# import PyMongo and connect to a local, running Mongo instance
from pymongo import MongoClient
import cbpro
mongo_client = MongoClient('mongodb://localhost:27017/')

# specify the database and collection
db = mongo_client.cryptocurrency_database
BTC_collection = db.BTC_collection

# instantiate a WebsocketClient instance, with a Mongo collection as a parameter
wsClient = cbpro.WebsocketClient(url="wss://ws-feed.pro.coinbase.com", products="BTC-USD",
    mongo_collection=BTC_collection, should_print=False)
wsClient.start()
```

### WebsocketClient Methods
The ```WebsocketClient``` subscribes in a separate thread upon initialization.
There are three methods which you could overwrite (before initialization) so it
can react to the data streaming in.  The current client is a template used for
illustration purposes only.

- onOpen - called once, *immediately before* the socket connection is made, this
is where you want to add initial parameters.
- onMessage - called once for every message that arrives and accepts one
argument that contains the message of dict type.
- on_close - called once after the websocket has been closed.
- close - call this method to close the websocket connection (do not overwrite).
```python
import cbpro, time
class myWebsocketClient(cbpro.WebsocketClient):
    def on_open(self):
        self.url = "wss://ws-feed.pro.coinbase.com/"
        self.products = ["LTC-USD"]
        self.message_count = 0
        print("Lets count the messages!")
    def on_message(self, msg):
        self.message_count += 1
        if 'price' in msg and 'type' in msg:
            print ("Message type:", msg["type"],
                   "\t@ {:.3f}".format(float(msg["price"])))
    def on_close(self):
        print("-- Goodbye! --")

wsClient = myWebsocketClient()
wsClient.start()
print(wsClient.url, wsClient.products)
while (wsClient.message_count < 500):
    print ("\nmessage_count =", "{} \n".format(wsClient.message_count))
    time.sleep(1)
wsClient.close()
```
## Testing
A test suite is under development. Tests for the authenticated client require a 
set of sandbox API credentials. To provide them, rename 
`api_config.json.example` in the tests folder to `api_config.json` and edit the 
file accordingly. To run the tests, start in the project directory and run
```
python -m pytest
```

### Real-time OrderBook
The ```OrderBook``` is a convenient data structure to keep a real-time record of
the orderbook for the product_id input. It processes incoming messages from an
already existing WebsocketClient. Please provide your feedback for future
improvements.

```python
import cbpro, time, Queue
class myWebsocketClient(cbpro.WebsocketClient):
    def on_open(self):
        self.products = ['BTC-USD', 'ETH-USD']
        self.order_book_btc = OrderBookConsole(product_id='BTC-USD')
        self.order_book_eth = OrderBookConsole(product_id='ETH-USD')
    def on_message(self, msg):
        self.order_book_btc.process_message(msg)
        self.order_book_eth.process_message(msg)

wsClient = myWebsocketClient()
wsClient.start()
time.sleep(10)
while True:
    print(wsClient.order_book_btc.get_ask())
    print(wsClient.order_book_eth.get_bid())
    time.sleep(1)
```

### Testing
Unit tests are under development using the pytest framework. Contributions are 
welcome!

To run the full test suite, in the project 
directory run:
```bash
python -m pytest
```

## Change Log
*1.1.2* **Current PyPI release**
- Refactor project for Coinbase Pro
- Major overhaul on how pagination is handled

*1.0*
- The first release that is not backwards compatible
- Refactored to follow PEP 8 Standards
- Improved Documentation

*0.3*
- Added crypto and LTC deposit & withdraw (undocumented).
- Added support for Margin trading (undocumented).
- Enhanced functionality of the WebsocketClient.
- Soft launch of the OrderBook (undocumented).
- Minor bug squashing & syntax improvements.

*0.2.2*
- Added additional API functionality such as cancelAll() and ETH withdrawal.

*0.2.1*
- Allowed ```WebsocketClient``` to operate intuitively and restructured example
workflow.

*0.2.0*
- Renamed project to GDAX-Python
- Merged Websocket updates to handle errors and reconnect.

*0.1.2*
- Updated JSON handling for increased compatibility among some users.
- Added support for payment methods, reports, and Coinbase user accounts.
- Other compatibility updates.

*0.1.1b2*
- Original PyPI Release.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/daniel-dc-cd/coinbasepro-python/",
    "name": "cbpro-SCR",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "gdax,gdax-api,orderbook,trade,bitcoin,ethereum,BTC,ETH,client,api,wrapper,exchange,crypto,currency,trading,trading-api,coinbase,pro,prime,coinbasepro",
    "author": "Daniel Oostra",
    "author_email": "danoostra@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/93/98/49302d5cf5b3be15e175ce2d6cede18cfa98bde7b51a19e1359862e1c229/cbpro_SCR-0.0.1.tar.gz",
    "platform": null,
    "description": "# coinbasepro-python\n\nThe Python client for the [Coinbase Pro API](https://docs.pro.coinbase.com/) (formerly known as\nthe GDAX)\n\n##### Provided under MIT License by Daniel Oostra\n.\n*Note: this library may be subtly broken or buggy. The code is released under\nthe MIT License \u2013 please take the following message to heart:*\n> THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n## Benefits\n- A simple to use python wrapper for both public and authenticated endpoints.\n- In about 10 minutes, you could be programmatically trading on one of the\nlargest Bitcoin exchanges in the *world*!\n- Do not worry about handling the nuances of the API with easy-to-use methods\nfor every API endpoint.\n- Gain an advantage in the market by getting under the hood of CB Pro to learn\nwhat and who is behind every tick.\n\n## Under Development\n- Test Scripts\n- Additional Functionality for the real-time order book\n- FIX API Client **Looking for assistance**\n\n## Getting Started\nThis README is documentation on the syntax of the python client presented in\nthis repository. See function docstrings for full syntax details.  \n**This API attempts to present a clean interface to CB Pro, but in order to use it\nto its full potential, you must familiarize yourself with the official CB Pro\ndocumentation.**\n\n- https://docs.pro.coinbase.com/\n\n- You may manually install the project or use ```pip```:\n```python\npip install cbpro\n#or\npip install git+git://github.com/danpaquin/coinbasepro-python.git\n```\n\n### Public Client\nOnly some endpoints in the API are available to everyone.  The public endpoints\ncan be reached using ```PublicClient```\n\n```python\nimport cbpro\npublic_client = cbpro.PublicClient()\n```\n\n### PublicClient Methods\n- [get_products](https://docs.pro.coinbase.com//#get-products)\n```python\npublic_client.get_products()\n```\n\n- [get_product_order_book](https://docs.pro.coinbase.com/#get-product-order-book)\n```python\n# Get the order book at the default level.\npublic_client.get_product_order_book('BTC-USD')\n# Get the order book at a specific level.\npublic_client.get_product_order_book('BTC-USD', level=1)\n```\n\n- [get_product_ticker](https://docs.pro.coinbase.com/#get-product-ticker)\n```python\n# Get the product ticker for a specific product.\npublic_client.get_product_ticker(product_id='ETH-USD')\n```\n\n- [get_product_trades](https://docs.pro.coinbase.com/#get-trades) (paginated)\n```python\n# Get the product trades for a specific product.\n# Returns a generator\npublic_client.get_product_trades(product_id='ETH-USD')\n```\n\n- [get_product_historic_rates](https://docs.pro.coinbase.com/#get-historic-rates)\n```python\npublic_client.get_product_historic_rates('ETH-USD')\n# To include other parameters, see function docstring:\npublic_client.get_product_historic_rates('ETH-USD', granularity=3000)\n```\n\n- [get_product_24hr_stats](https://docs.pro.coinbase.com/#get-24hr-stats)\n```python\npublic_client.get_product_24hr_stats('ETH-USD')\n```\n\n- [get_currencies](https://docs.pro.coinbase.com/#get-currencies)\n```python\npublic_client.get_currencies()\n```\n\n- [get_time](https://docs.pro.coinbase.com/#time)\n```python\npublic_client.get_time()\n```\n\n### Authenticated Client\n\nNot all API endpoints are available to everyone.\nThose requiring user authentication can be reached using `AuthenticatedClient`.\nYou must setup API access within your\n[account settings](https://pro.coinbase.com/profile/api).\nThe `AuthenticatedClient` inherits all methods from the `PublicClient`\nclass, so you will only need to initialize one if you are planning to\nintegrate both into your script.\n\n```python\nimport cbpro\nauth_client = cbpro.AuthenticatedClient(key, b64secret, passphrase)\n# Use the sandbox API (requires a different set of API access credentials)\nauth_client = cbpro.AuthenticatedClient(key, b64secret, passphrase,\n                                  api_url=\"https://api-public.sandbox.pro.coinbase.com\")\n```\n\n### Pagination\nSome calls are [paginated](https://docs.pro.coinbase.com/#pagination), meaning multiple\ncalls must be made to receive the full set of data. The CB Pro Python API provides\nan abstraction for paginated endpoints in the form of generators which provide a\nclean interface for iteration but may make multiple HTTP requests behind the \nscenes. The pagination options `before`, `after`, and `limit` may be supplied as\nkeyword arguments if desired, but aren't necessary for typical use cases.\n```python\nfills_gen = auth_client.get_fills()\n# Get all fills (will possibly make multiple HTTP requests)\nall_fills = list(fills_gen)\n```\nOne use case for pagination parameters worth pointing out is retrieving only \nnew data since the previous request. For the case of `get_fills()`, the \n`trade_id` is the parameter used for indexing. By passing \n`before=some_trade_id`, only fills more recent than that `trade_id` will be \nreturned. Note that when using `before`, a maximum of 100 entries will be \nreturned - this is a limitation of CB Pro.\n```python\nfrom itertools import islice\n# Get 5 most recent fills\nrecent_fills = islice(auth_client.get_fills(), 5)\n# Only fetch new fills since last call by utilizing `before` parameter.\nnew_fills = auth_client.get_fills(before=recent_fills[0]['trade_id'])\n```\n\n### AuthenticatedClient Methods\n- [get_accounts](https://docs.pro.coinbase.com/#list-accounts)\n```python\nauth_client.get_accounts()\n```\n\n- [get_account](https://docs.pro.coinbase.com/#get-an-account)\n```python\nauth_client.get_account(\"7d0f7d8e-dd34-4d9c-a846-06f431c381ba\")\n```\n\n- [get_account_history](https://docs.pro.coinbase.com/#get-account-history) (paginated)\n```python\n# Returns generator:\nauth_client.get_account_history(\"7d0f7d8e-dd34-4d9c-a846-06f431c381ba\")\n```\n\n- [get_account_holds](https://docs.pro.coinbase.com/#get-holds) (paginated)\n```python\n# Returns generator:\nauth_client.get_account_holds(\"7d0f7d8e-dd34-4d9c-a846-06f431c381ba\")\n```\n\n- [buy & sell](https://docs.pro.coinbase.com/#place-a-new-order)\n```python\n# Buy 0.01 BTC @ 100 USD\nauth_client.buy(price='100.00', #USD\n               size='0.01', #BTC\n               order_type='limit',\n               product_id='BTC-USD')\n```\n```python\n# Sell 0.01 BTC @ 200 USD\nauth_client.sell(price='200.00', #USD\n                size='0.01', #BTC\n                order_type='limit',\n                product_id='BTC-USD')\n```\n```python\n# Limit order-specific method\nauth_client.place_limit_order(product_id='BTC-USD', \n                              side='buy', \n                              price='200.00', \n                              size='0.01')\n```\n```python\n# Place a market order by specifying amount of USD to use. \n# Alternatively, `size` could be used to specify quantity in BTC amount.\nauth_client.place_market_order(product_id='BTC-USD', \n                               side='buy', \n                               funds='100.00')\n```\n```python\n# Stop order. `funds` can be used instead of `size` here.\nauth_client.place_stop_order(product_id='BTC-USD', \n                              stop_type='loss', \n                              price='200.00', \n                              size='0.01')\n```\n\n- [cancel_order](https://docs.pro.coinbase.com/#cancel-an-order)\n```python\nauth_client.cancel_order(\"d50ec984-77a8-460a-b958-66f114b0de9b\")\n```\n- [cancel_all](https://docs.pro.coinbase.com/#cancel-all)\n```python\nauth_client.cancel_all(product_id='BTC-USD')\n```\n\n- [get_orders](https://docs.pro.coinbase.com/#list-orders) (paginated)\n```python\n# Returns generator:\nauth_client.get_orders()\n```\n\n- [get_order](https://docs.pro.coinbase.com/#get-an-order)\n```python\nauth_client.get_order(\"d50ec984-77a8-460a-b958-66f114b0de9b\")\n```\n\n- [get_fills](https://docs.pro.coinbase.com/#list-fills) (paginated)\n```python\n# All return generators\nauth_client.get_fills()\n# Get fills for a specific order\nauth_client.get_fills(order_id=\"d50ec984-77a8-460a-b958-66f114b0de9b\")\n# Get fills for a specific product\nauth_client.get_fills(product_id=\"ETH-BTC\")\n```\n\n- [deposit & withdraw](https://docs.pro.coinbase.com/#depositwithdraw)\n```python\ndepositParams = {\n        'amount': '25.00', # Currency determined by account specified\n        'coinbase_account_id': '60680c98bfe96c2601f27e9c'\n}\nauth_client.deposit(depositParams)\n```\n```python\n# Withdraw from CB Pro into Coinbase Wallet\nwithdrawParams = {\n        'amount': '1.00', # Currency determined by account specified\n        'coinbase_account_id': '536a541fa9393bb3c7000023'\n}\nauth_client.withdraw(withdrawParams)\n```\n\n### WebsocketClient\nIf you would like to receive real-time market updates, you must subscribe to the\n[websocket feed](https://docs.pro.coinbase.com/#websocket-feed).\n\n#### Subscribe to a single product\n```python\nimport cbpro\n\n# Parameters are optional\nwsClient = cbpro.WebsocketClient(url=\"wss://ws-feed.pro.coinbase.com\",\n                                products=\"BTC-USD\",\n                                channels=[\"ticker\"])\n# Do other stuff...\nwsClient.close()\n```\n\n#### Subscribe to multiple products\n```python\nimport cbpro\n# Parameters are optional\nwsClient = cbpro.WebsocketClient(url=\"wss://ws-feed.pro.coinbase.com\",\n                                products=[\"BTC-USD\", \"ETH-USD\"],\n                                channels=[\"ticker\"])\n# Do other stuff...\nwsClient.close()\n```\n\n### WebsocketClient + Mongodb\nThe ```WebsocketClient``` now supports data gathering via MongoDB. Given a\nMongoDB collection, the ```WebsocketClient``` will stream results directly into\nthe database collection.\n```python\n# import PyMongo and connect to a local, running Mongo instance\nfrom pymongo import MongoClient\nimport cbpro\nmongo_client = MongoClient('mongodb://localhost:27017/')\n\n# specify the database and collection\ndb = mongo_client.cryptocurrency_database\nBTC_collection = db.BTC_collection\n\n# instantiate a WebsocketClient instance, with a Mongo collection as a parameter\nwsClient = cbpro.WebsocketClient(url=\"wss://ws-feed.pro.coinbase.com\", products=\"BTC-USD\",\n    mongo_collection=BTC_collection, should_print=False)\nwsClient.start()\n```\n\n### WebsocketClient Methods\nThe ```WebsocketClient``` subscribes in a separate thread upon initialization.\nThere are three methods which you could overwrite (before initialization) so it\ncan react to the data streaming in.  The current client is a template used for\nillustration purposes only.\n\n- onOpen - called once, *immediately before* the socket connection is made, this\nis where you want to add initial parameters.\n- onMessage - called once for every message that arrives and accepts one\nargument that contains the message of dict type.\n- on_close - called once after the websocket has been closed.\n- close - call this method to close the websocket connection (do not overwrite).\n```python\nimport cbpro, time\nclass myWebsocketClient(cbpro.WebsocketClient):\n    def on_open(self):\n        self.url = \"wss://ws-feed.pro.coinbase.com/\"\n        self.products = [\"LTC-USD\"]\n        self.message_count = 0\n        print(\"Lets count the messages!\")\n    def on_message(self, msg):\n        self.message_count += 1\n        if 'price' in msg and 'type' in msg:\n            print (\"Message type:\", msg[\"type\"],\n                   \"\\t@ {:.3f}\".format(float(msg[\"price\"])))\n    def on_close(self):\n        print(\"-- Goodbye! --\")\n\nwsClient = myWebsocketClient()\nwsClient.start()\nprint(wsClient.url, wsClient.products)\nwhile (wsClient.message_count < 500):\n    print (\"\\nmessage_count =\", \"{} \\n\".format(wsClient.message_count))\n    time.sleep(1)\nwsClient.close()\n```\n## Testing\nA test suite is under development. Tests for the authenticated client require a \nset of sandbox API credentials. To provide them, rename \n`api_config.json.example` in the tests folder to `api_config.json` and edit the \nfile accordingly. To run the tests, start in the project directory and run\n```\npython -m pytest\n```\n\n### Real-time OrderBook\nThe ```OrderBook``` is a convenient data structure to keep a real-time record of\nthe orderbook for the product_id input. It processes incoming messages from an\nalready existing WebsocketClient. Please provide your feedback for future\nimprovements.\n\n```python\nimport cbpro, time, Queue\nclass myWebsocketClient(cbpro.WebsocketClient):\n    def on_open(self):\n        self.products = ['BTC-USD', 'ETH-USD']\n        self.order_book_btc = OrderBookConsole(product_id='BTC-USD')\n        self.order_book_eth = OrderBookConsole(product_id='ETH-USD')\n    def on_message(self, msg):\n        self.order_book_btc.process_message(msg)\n        self.order_book_eth.process_message(msg)\n\nwsClient = myWebsocketClient()\nwsClient.start()\ntime.sleep(10)\nwhile True:\n    print(wsClient.order_book_btc.get_ask())\n    print(wsClient.order_book_eth.get_bid())\n    time.sleep(1)\n```\n\n### Testing\nUnit tests are under development using the pytest framework. Contributions are \nwelcome!\n\nTo run the full test suite, in the project \ndirectory run:\n```bash\npython -m pytest\n```\n\n## Change Log\n*1.1.2* **Current PyPI release**\n- Refactor project for Coinbase Pro\n- Major overhaul on how pagination is handled\n\n*1.0*\n- The first release that is not backwards compatible\n- Refactored to follow PEP 8 Standards\n- Improved Documentation\n\n*0.3*\n- Added crypto and LTC deposit & withdraw (undocumented).\n- Added support for Margin trading (undocumented).\n- Enhanced functionality of the WebsocketClient.\n- Soft launch of the OrderBook (undocumented).\n- Minor bug squashing & syntax improvements.\n\n*0.2.2*\n- Added additional API functionality such as cancelAll() and ETH withdrawal.\n\n*0.2.1*\n- Allowed ```WebsocketClient``` to operate intuitively and restructured example\nworkflow.\n\n*0.2.0*\n- Renamed project to GDAX-Python\n- Merged Websocket updates to handle errors and reconnect.\n\n*0.1.2*\n- Updated JSON handling for increased compatibility among some users.\n- Added support for payment methods, reports, and Coinbase user accounts.\n- Other compatibility updates.\n\n*0.1.1b2*\n- Original PyPI Release.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "The newly edited unofficial Python client for the Coinbase Pro API for use by SCR only.",
    "version": "0.0.1",
    "project_urls": {
        "Download": "https://github.com/daniel-dc-cd/coinbasepro-python/",
        "Homepage": "https://github.com/daniel-dc-cd/coinbasepro-python/"
    },
    "split_keywords": [
        "gdax",
        "gdax-api",
        "orderbook",
        "trade",
        "bitcoin",
        "ethereum",
        "btc",
        "eth",
        "client",
        "api",
        "wrapper",
        "exchange",
        "crypto",
        "currency",
        "trading",
        "trading-api",
        "coinbase",
        "pro",
        "prime",
        "coinbasepro"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8f6ac282fab706c7377ef1cf82f7052585c410ee78181f1b105149ebadb239fb",
                "md5": "b4a78382901d68cd2748821baaf3a4be",
                "sha256": "2815e7949ea4bb66fd0dd46f79e3c96bfbe5ce42102ac276be5448cce0a493b7"
            },
            "downloads": -1,
            "filename": "cbpro_SCR-0.0.1-py2.py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "b4a78382901d68cd2748821baaf3a4be",
            "packagetype": "bdist_wheel",
            "python_version": "py2.py3",
            "requires_python": null,
            "size": 24828,
            "upload_time": "2024-02-27T20:36:17",
            "upload_time_iso_8601": "2024-02-27T20:36:17.186962Z",
            "url": "https://files.pythonhosted.org/packages/8f/6a/c282fab706c7377ef1cf82f7052585c410ee78181f1b105149ebadb239fb/cbpro_SCR-0.0.1-py2.py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "939849302d5cf5b3be15e175ce2d6cede18cfa98bde7b51a19e1359862e1c229",
                "md5": "44704135f0e4bfe1f6d5959657940b3e",
                "sha256": "77a8879a16e703465792b5f20cdcc1e971c3004dee37f22792e3385011cc5a91"
            },
            "downloads": -1,
            "filename": "cbpro_SCR-0.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "44704135f0e4bfe1f6d5959657940b3e",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 29898,
            "upload_time": "2024-02-27T20:36:19",
            "upload_time_iso_8601": "2024-02-27T20:36:19.827014Z",
            "url": "https://files.pythonhosted.org/packages/93/98/49302d5cf5b3be15e175ce2d6cede18cfa98bde7b51a19e1359862e1c229/cbpro_SCR-0.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-02-27 20:36:19",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "daniel-dc-cd",
    "github_project": "coinbasepro-python",
    "travis_ci": true,
    "coveralls": true,
    "github_actions": false,
    "tox": true,
    "lcname": "cbpro-scr"
}
        
Elapsed time: 0.89755s