from typing import Any, Dict, Optional
from coinbase.constants import API_PREFIX
from coinbase.rest.types.portfolios_types import (
CreatePortfolioResponse,
DeletePortfolioResponse,
EditPortfolioResponse,
GetPortfolioBreakdownResponse,
ListPortfoliosResponse,
MovePortfolioFundsResponse,
)
[docs]
def get_portfolios(
self, portfolio_type: Optional[str] = None, **kwargs
) -> ListPortfoliosResponse:
"""
**List Portfolios**
___________________
[GET] https://api.coinbase.com/api/v3/brokerage/portfolios
__________
**Description:**
Get a list of all portfolios of a user.
__________
**Read more on the official documentation:** `List Portfolios
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/portfolios/list-portfolios>`_
"""
endpoint = f"{API_PREFIX}/portfolios"
params = {"portfolio_type": portfolio_type}
return ListPortfoliosResponse(self.get(endpoint, params=params, **kwargs))
[docs]
def create_portfolio(self, name: str, **kwargs) -> CreatePortfolioResponse:
"""
**Create Portfolio**
____________________
[POST] https://api.coinbase.com/api/v3/brokerage/portfolios
__________
**Description:**
Create a portfolio.
__________
**Read more on the official documentation:** `Create Portfolio
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/portfolios/create-portfolio>`_
"""
endpoint = f"{API_PREFIX}/portfolios"
data = {
"name": name,
}
return CreatePortfolioResponse(self.post(endpoint, data=data, **kwargs))
[docs]
def get_portfolio_breakdown(
self, portfolio_uuid: str, currency: Optional[str] = None, **kwargs
) -> GetPortfolioBreakdownResponse:
"""
**Get Portfolio Breakdown**
___________________________
[GET] https://api.coinbase.com/api/v3/brokerage/portfolios/{portfolio_uuid}
__________
**Description:**
Get the breakdown of a portfolio by portfolio ID.
__________
**Read more on the official documentation:** `Get Portfolio Breakdown
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/portfolios/get-portfolio-breakdown>`_
"""
endpoint = f"{API_PREFIX}/portfolios/{portfolio_uuid}"
params = {"currency": currency}
return GetPortfolioBreakdownResponse(self.get(endpoint, params=params, **kwargs))
[docs]
def move_portfolio_funds(
self,
value: str,
currency: str,
source_portfolio_uuid: str,
target_portfolio_uuid: str,
**kwargs,
) -> MovePortfolioFundsResponse:
"""
**Move Portfolio Funds**
________________________
[POST] https://api.coinbase.com/api/v3/brokerage/portfolios/move_funds
__________
**Description:**
Transfer funds between portfolios.
__________
**Read more on the official documentation:** `Move Portfolio Funds
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/portfolios/move-portfolios-funds>`_
"""
endpoint = f"{API_PREFIX}/portfolios/move_funds"
data = {
"funds": {
"value": value,
"currency": currency,
},
"source_portfolio_uuid": source_portfolio_uuid,
"target_portfolio_uuid": target_portfolio_uuid,
}
return MovePortfolioFundsResponse(self.post(endpoint, data=data, **kwargs))
[docs]
def edit_portfolio(
self, portfolio_uuid: str, name: str, **kwargs
) -> EditPortfolioResponse:
"""
**Edit Portfolio**
__________________
[PUT] https://api.coinbase.com/api/v3/brokerage/portfolios/{portfolio_uuid}
__________
**Description:**
Modify a portfolio by portfolio ID.
__________
**Read more on the official documentation:** `Edit Portfolio
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/portfolios/edit-portfolio>`_
"""
endpoint = f"{API_PREFIX}/portfolios/{portfolio_uuid}"
data = {
"name": name,
}
return EditPortfolioResponse(self.put(endpoint, data=data, **kwargs))
[docs]
def delete_portfolio(self, portfolio_uuid: str, **kwargs) -> DeletePortfolioResponse:
"""
**Delete Portfolio**
____________________
[DELETE] https://api.coinbase.com/api/v3/brokerage/portfolios/{portfolio_uuid}
__________
**Description:**
Delete a portfolio by portfolio ID.
__________
**Read more on the official documentation:** `Delete Portfolio
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/portfolios/delete-portfolio>`_
"""
endpoint = f"{API_PREFIX}/portfolios/{portfolio_uuid}"
return DeletePortfolioResponse(self.delete(endpoint, **kwargs))