From 62bb9ff169a8ffcdde829caa7b673ef47ff4f1ba Mon Sep 17 00:00:00 2001 From: Paul Bozzay Date: Mon, 2 Dec 2013 22:35:02 -0800 Subject: [PATCH 1/2] Added basic support for transactions. --- coinbase/__init__.py | 35 +++++++++++++++++++++++++++++++++-- coinbase/models/__init__.py | 1 + 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/coinbase/__init__.py b/coinbase/__init__.py index a18064d..4ebebd6 100644 --- a/coinbase/__init__.py +++ b/coinbase/__init__.py @@ -45,7 +45,7 @@ #from decimal import Decimal from coinbase.config import COINBASE_ENDPOINT -from coinbase.models import CoinbaseAmount, CoinbaseTransaction, CoinbaseUser +from coinbase.models import CoinbaseAmount, CoinbaseTransaction, CoinbaseUser, CoinbaseTransfer class CoinbaseAccount(object): @@ -328,6 +328,34 @@ def transactions(self, count=30): transactions.append(CoinbaseTransaction(transaction['transaction'])) return transactions + + def transfers(self, count=30): + """ + Retrieve the list of transfers for the current account + :param count: How many transfers to retrieve + :return: List of CoinbaseTransfer objects + """ + url = COINBASE_ENDPOINT + '/transfers' + pages = count / 30 + 1 + transfers = [] + + reached_final_page = False + + for page in xrange(1, pages + 1): + + if not reached_final_page: + params = {'page': page} + params.update(self.global_request_params) + response = self.session.get(url=url, params=params) + parsed_transfers = response.json() + + if parsed_transfers['num_pages'] == page: + reached_final_page = True + + for transfer in parsed_transfers['transfers']: + transfers.append(CoinbaseTransfer(transfer['transfer'])) + + return transfers def get_transaction(self, transaction_id): """ @@ -388,4 +416,7 @@ def generate_receive_address(self, callback_url=None): } } response = self.session.post(url=url, data=json.dumps(request_data), params=self.global_request_params) - return response.json()['address'] \ No newline at end of file + return response.json()['address'] + + + diff --git a/coinbase/models/__init__.py b/coinbase/models/__init__.py index f9565ee..aced3a6 100644 --- a/coinbase/models/__init__.py +++ b/coinbase/models/__init__.py @@ -2,5 +2,6 @@ from amount import CoinbaseAmount from transaction import CoinbaseTransaction +from transfer import CoinbaseTransfer from contact import CoinbaseContact from user import CoinbaseUser \ No newline at end of file From 6497a6b742bf07418faccd852bced859c6d75279 Mon Sep 17 00:00:00 2001 From: Paul Bozzay Date: Mon, 2 Dec 2013 22:54:57 -0800 Subject: [PATCH 2/2] Added support for transfers. --- coinbase/__init__.py | 35 +++++++++++++++++++++++-- coinbase/models/__init__.py | 1 + coinbase/models/transfer.py | 52 +++++++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 coinbase/models/transfer.py diff --git a/coinbase/__init__.py b/coinbase/__init__.py index a18064d..4ebebd6 100644 --- a/coinbase/__init__.py +++ b/coinbase/__init__.py @@ -45,7 +45,7 @@ #from decimal import Decimal from coinbase.config import COINBASE_ENDPOINT -from coinbase.models import CoinbaseAmount, CoinbaseTransaction, CoinbaseUser +from coinbase.models import CoinbaseAmount, CoinbaseTransaction, CoinbaseUser, CoinbaseTransfer class CoinbaseAccount(object): @@ -328,6 +328,34 @@ def transactions(self, count=30): transactions.append(CoinbaseTransaction(transaction['transaction'])) return transactions + + def transfers(self, count=30): + """ + Retrieve the list of transfers for the current account + :param count: How many transfers to retrieve + :return: List of CoinbaseTransfer objects + """ + url = COINBASE_ENDPOINT + '/transfers' + pages = count / 30 + 1 + transfers = [] + + reached_final_page = False + + for page in xrange(1, pages + 1): + + if not reached_final_page: + params = {'page': page} + params.update(self.global_request_params) + response = self.session.get(url=url, params=params) + parsed_transfers = response.json() + + if parsed_transfers['num_pages'] == page: + reached_final_page = True + + for transfer in parsed_transfers['transfers']: + transfers.append(CoinbaseTransfer(transfer['transfer'])) + + return transfers def get_transaction(self, transaction_id): """ @@ -388,4 +416,7 @@ def generate_receive_address(self, callback_url=None): } } response = self.session.post(url=url, data=json.dumps(request_data), params=self.global_request_params) - return response.json()['address'] \ No newline at end of file + return response.json()['address'] + + + diff --git a/coinbase/models/__init__.py b/coinbase/models/__init__.py index f9565ee..aced3a6 100644 --- a/coinbase/models/__init__.py +++ b/coinbase/models/__init__.py @@ -2,5 +2,6 @@ from amount import CoinbaseAmount from transaction import CoinbaseTransaction +from transfer import CoinbaseTransfer from contact import CoinbaseContact from user import CoinbaseUser \ No newline at end of file diff --git a/coinbase/models/transfer.py b/coinbase/models/transfer.py new file mode 100644 index 0000000..6af27da --- /dev/null +++ b/coinbase/models/transfer.py @@ -0,0 +1,52 @@ +__author__ = 'pmb6tz' + +from amount import CoinbaseAmount + +class CoinbaseTransfer(object): + + def __init__(self, transfer): + self.type = transfer['type'] + self.code = transfer['code'] + self.created_at = transfer['created_at'] + + fees_coinbase_cents = transfer['fees']['coinbase']['cents'] + fees_coinbase_currency_iso = transfer['fees']['coinbase']['currency_iso'] + self.fees_coinbase = CoinbaseAmount(fees_coinbase_cents, fees_coinbase_currency_iso) + + fees_bank_cents = transfer['fees']['bank']['cents'] + fees_bank_currency_iso = transfer['fees']['bank']['currency_iso'] + self.fees_bank = CoinbaseAmount(fees_bank_cents, fees_bank_currency_iso) + + self.payout_date = transfer['payout_date'] + self.transaction_id = transfer['transaction_id'] + self.status = transfer['status'] + + btc_amount = transfer['btc']['amount'] + btc_currency = transfer['btc']['currency'] + self.btc_amount = CoinbaseAmount(btc_amount, btc_currency) + + subtotal_amount = transfer['subtotal']['amount'] + subtotal_currency = transfer['subtotal']['currency'] + self.subtotal_amount = CoinbaseAmount(subtotal_amount, subtotal_currency) + + total_amount = transfer['total']['amount'] + total_currency = transfer['total']['currency'] + self.total_amount = CoinbaseAmount(total_amount, total_currency) + + self.description = transfer['description'] + + def refresh(self): + pass + #TODO: Refresh the transfer + + def cancel(self): + pass + #TODO: Cancel the transfer if possible + + def complete(self): + pass + #TODO: Approve the transfer if possible + + def resend(self): + pass + #TODO: Resend the transfer email if possible \ No newline at end of file