Skip to content

Commit 98867bb

Browse files
committed
3.9.0
1 parent f950cb7 commit 98867bb

18 files changed

+107
-3
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
## 3.9.0
2+
* Support Coinbase accounts
3+
* Surface Apple Pay payment instrument name in responses
4+
* Expose subscription status events
5+
* Support SEPA bank accounts for customer
6+
* Improve documentation
7+
18
## 3.8.0
29
* Add error code constants
310
* Allow PayPal parameters to be sent in options.paypal

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ instructions above for upgrading from pycurl / httplib to requests.
2828

2929
## Documentation
3030

31-
* [Official documentation](https://www.braintreepayments.com/docs/python)
31+
* [Official documentation](https://developers.braintreepayments.com/python/sdk/server/overview)
3232

3333
## Quick Start Example
3434

braintree/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
from braintree.settlement_batch_summary import SettlementBatchSummary
3939
from braintree.subscription import Subscription
4040
from braintree.subscription_gateway import SubscriptionGateway
41+
from braintree.subscription_status_event import SubscriptionStatusEvent
4142
from braintree.status_event import StatusEvent
4243
from braintree.testing_gateway import TestingGateway
4344
from braintree.transaction import Transaction

braintree/coinbase_account.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import braintree
2+
from braintree.resource import Resource
3+
4+
class CoinbaseAccount(Resource):
5+
def __init__(self, gateway, attributes):
6+
Resource.__init__(self, gateway, attributes)
7+
if "subscriptions" in attributes:
8+
self.subscriptions = [braintree.subscription.Subscription(gateway, subscription) for subscription in self.subscriptions]

braintree/customer.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
from braintree.apple_pay_card import ApplePayCard
77
from braintree.credit_card import CreditCard
88
from braintree.paypal_account import PayPalAccount
9+
from braintree.sepa_bank_account import SEPABankAccount
10+
from braintree.coinbase_account import CoinbaseAccount
911
from braintree.address import Address
1012
from braintree.configuration import Configuration
1113
from braintree.ids_search import IdsSearch
@@ -196,3 +198,9 @@ def __init__(self, gateway, attributes):
196198

197199
if "apple_pay_cards" in attributes:
198200
self.apple_pay_cards = [ApplePayCard(gateway, apple_pay_card) for apple_pay_card in self.apple_pay_cards]
201+
202+
if "sepa_bank_accounts" in attributes:
203+
self.sepa_bank_accounts = [SEPABankAccount(gateway, sepa_bank_account) for sepa_bank_account in self.sepa_bank_accounts]
204+
205+
if "coinbase_accounts" in attributes:
206+
self.coinbase_accounts = [CoinbaseAccount(gateway, coinbase_account) for coinbase_account in self.coinbase_accounts]

braintree/payment_method_gateway.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from braintree.payment_method import PaymentMethod
55
from braintree.paypal_account import PayPalAccount
66
from braintree.sepa_bank_account import SEPABankAccount
7+
from braintree.coinbase_account import CoinbaseAccount
78
from braintree.unknown_payment_method import UnknownPaymentMethod
89
from braintree.error_result import ErrorResult
910
from braintree.exceptions.not_found_error import NotFoundError
@@ -73,6 +74,8 @@ def _parse_payment_method(self, response):
7374
return SEPABankAccount(self.gateway, response["sepa_bank_account"])
7475
elif "apple_pay_card" in response:
7576
return ApplePayCard(self.gateway, response["apple_pay_card"])
77+
elif "coinbase_account" in response:
78+
return CoinbaseAccount(self.gateway, response["coinbase_account"])
7679
else:
7780
name = list(response)[0]
7881
return UnknownPaymentMethod(self.gateway, response[name])

braintree/subscription.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from braintree.discount import Discount
88
from braintree.exceptions.not_found_error import NotFoundError
99
from braintree.resource_collection import ResourceCollection
10+
from braintree.subscription_status_event import SubscriptionStatusEvent
1011
from braintree.successful_result import SuccessfulResult
1112
from braintree.error_result import ErrorResult
1213
from braintree.transaction import Transaction
@@ -45,6 +46,12 @@ class TrialDurationUnit(object):
4546
Day = "day"
4647
Month = "month"
4748

49+
class Source(object):
50+
Api = "api"
51+
ControlPanel = "control_panel"
52+
Recurring = "recurring"
53+
Unrecognized = "unrecognized"
54+
4855
class Status(object):
4956
"""
5057
Constants representing subscription statusues. Available statuses are:
@@ -231,6 +238,8 @@ def __init__(self, gateway, attributes):
231238
self.descriptor = Descriptor(gateway, attributes.pop("descriptor"))
232239
if "discounts" in attributes:
233240
self.discounts = [Discount(gateway, discount) for discount in self.discounts]
241+
if "status_history" in attributes:
242+
self.status_history = [SubscriptionStatusEvent(gateway, status_event) for status_event in self.status_history]
234243
if "transactions" in attributes:
235244
self.transactions = [Transaction(gateway, transaction) for transaction in self.transactions]
236245

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from decimal import Decimal
2+
from braintree.resource import Resource
3+
4+
class SubscriptionStatusEvent(Resource):
5+
def __init__(self, gateway, attributes):
6+
Resource.__init__(self, gateway, attributes)
7+
8+
self.balance = Decimal(self.balance)
9+
self.price = Decimal(self.price)

braintree/test/nonces.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ class Nonces(object):
77
ApplePayMasterCard = "fake-apple-pay-mastercard-nonce"
88
ApplePayAmEx = "fake-apple-pay-amex-nonce"
99
AbstractTransactable = "fake-abstract-transactable-nonce"
10+
Coinbase = "fake-coinbase-nonce"

braintree/transaction.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from decimal import Decimal
44
from braintree.add_on import AddOn
55
from braintree.apple_pay_card import ApplePayCard
6+
from braintree.coinbase_account import CoinbaseAccount
67
from braintree.disbursement_detail import DisbursementDetail
78
from braintree.dispute import Dispute
89
from braintree.discount import Discount
@@ -492,6 +493,8 @@ def __init__(self, gateway, attributes):
492493
self.sepa_bank_account_details = SEPABankAccount(gateway, attributes.pop("sepa_bank_account"))
493494
if "apple_pay" in attributes:
494495
self.apple_pay_details = ApplePayCard(gateway, attributes.pop("apple_pay"))
496+
if "coinbase_account" in attributes:
497+
self.coinbase_details = CoinbaseAccount(gateway, attributes.pop("coinbase_account"))
495498
if "customer" in attributes:
496499
self.customer_details = Customer(gateway, attributes.pop("customer"))
497500
if "shipping" in attributes:

0 commit comments

Comments
 (0)