Skip to content

Commit 2f9cf0c

Browse files
committed
Merge pull request #7 from pmb6tz/master
Added support for Transfers
2 parents 6e969f1 + a36a329 commit 2f9cf0c

3 files changed

Lines changed: 86 additions & 2 deletions

File tree

coinbase/__init__.py

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
#from decimal import Decimal
4646

4747
from coinbase.config import COINBASE_ENDPOINT
48-
from coinbase.models import CoinbaseAmount, CoinbaseTransaction, CoinbaseUser
48+
from coinbase.models import CoinbaseAmount, CoinbaseTransaction, CoinbaseUser, CoinbaseTransfer
4949

5050

5151
class CoinbaseAccount(object):
@@ -328,6 +328,34 @@ def transactions(self, count=30):
328328
transactions.append(CoinbaseTransaction(transaction['transaction']))
329329

330330
return transactions
331+
332+
def transfers(self, count=30):
333+
"""
334+
Retrieve the list of transfers for the current account
335+
:param count: How many transfers to retrieve
336+
:return: List of CoinbaseTransfer objects
337+
"""
338+
url = COINBASE_ENDPOINT + '/transfers'
339+
pages = count / 30 + 1
340+
transfers = []
341+
342+
reached_final_page = False
343+
344+
for page in xrange(1, pages + 1):
345+
346+
if not reached_final_page:
347+
params = {'page': page}
348+
params.update(self.global_request_params)
349+
response = self.session.get(url=url, params=params)
350+
parsed_transfers = response.json()
351+
352+
if parsed_transfers['num_pages'] == page:
353+
reached_final_page = True
354+
355+
for transfer in parsed_transfers['transfers']:
356+
transfers.append(CoinbaseTransfer(transfer['transfer']))
357+
358+
return transfers
331359

332360
def get_transaction(self, transaction_id):
333361
"""
@@ -388,4 +416,7 @@ def generate_receive_address(self, callback_url=None):
388416
}
389417
}
390418
response = self.session.post(url=url, data=json.dumps(request_data), params=self.global_request_params)
391-
return response.json()['address']
419+
return response.json()['address']
420+
421+
422+

coinbase/models/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@
22

33
from amount import CoinbaseAmount
44
from transaction import CoinbaseTransaction
5+
from transfer import CoinbaseTransfer
56
from contact import CoinbaseContact
67
from user import CoinbaseUser

coinbase/models/transfer.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
__author__ = 'pmb6tz'
2+
3+
from amount import CoinbaseAmount
4+
5+
class CoinbaseTransfer(object):
6+
7+
def __init__(self, transfer):
8+
self.type = transfer['type']
9+
self.code = transfer['code']
10+
self.created_at = transfer['created_at']
11+
12+
fees_coinbase_cents = transfer['fees']['coinbase']['cents']
13+
fees_coinbase_currency_iso = transfer['fees']['coinbase']['currency_iso']
14+
self.fees_coinbase = CoinbaseAmount(fees_coinbase_cents, fees_coinbase_currency_iso)
15+
16+
fees_bank_cents = transfer['fees']['bank']['cents']
17+
fees_bank_currency_iso = transfer['fees']['bank']['currency_iso']
18+
self.fees_bank = CoinbaseAmount(fees_bank_cents, fees_bank_currency_iso)
19+
20+
self.payout_date = transfer['payout_date']
21+
self.transaction_id = transfer['transaction_id']
22+
self.status = transfer['status']
23+
24+
btc_amount = transfer['btc']['amount']
25+
btc_currency = transfer['btc']['currency']
26+
self.btc_amount = CoinbaseAmount(btc_amount, btc_currency)
27+
28+
subtotal_amount = transfer['subtotal']['amount']
29+
subtotal_currency = transfer['subtotal']['currency']
30+
self.subtotal_amount = CoinbaseAmount(subtotal_amount, subtotal_currency)
31+
32+
total_amount = transfer['total']['amount']
33+
total_currency = transfer['total']['currency']
34+
self.total_amount = CoinbaseAmount(total_amount, total_currency)
35+
36+
self.description = transfer['description']
37+
38+
def refresh(self):
39+
pass
40+
#TODO: Refresh the transfer
41+
42+
def cancel(self):
43+
pass
44+
#TODO: Cancel the transfer if possible
45+
46+
def complete(self):
47+
pass
48+
#TODO: Approve the transfer if possible
49+
50+
def resend(self):
51+
pass
52+
#TODO: Resend the transfer email if possible

0 commit comments

Comments
 (0)