Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def _api_retrieve(cls, id):
# https://stripe.com/docs/payments/payment-methods#transitioning
# You can retrieve all saved compatible payment instruments through the
# Payment Methods API.
if id.startswith('card_'):
return Card._api_retrieve(id)
elif id.startswith('src_'):
return Source._api_retrieve(id)
return super()._api_retrieve(id)
raise UserError(400, 'Bad request')
obj = cls._api_retrieve(id)
if type(source) is str and source.startswith('src_'):
source_obj = Source._api_retrieve(source)
elif type(source) is str and source.startswith('tok_'):
source_obj = Token._api_retrieve(source).card
else:
source_obj = Card(source=source)
if source_obj._attaching_is_declined():
raise UserError(402, 'Your card was declined.',
{'code': 'card_declined'})
if isinstance(source_obj, Card):
source_obj.customer = id
obj.sources._list.append(source_obj)
if obj.default_source is None:
obj.default_source = source_obj.id
schedule_webhook(Event('customer.source.created', source_obj))
return source_obj
try:
if type(source) is str:
assert source[:4] in ('src_', 'tok_')
else:
assert type(source) is dict
except AssertionError:
raise UserError(400, 'Bad request')
obj = cls._api_retrieve(id)
if type(source) is str and source.startswith('src_'):
source_obj = Source._api_retrieve(source)
elif type(source) is str and source.startswith('tok_'):
source_obj = Token._api_retrieve(source).card
else:
source_obj = Card(source=source)
if source_obj._attaching_is_declined():
raise UserError(402, 'Your card was declined.',
{'code': 'card_declined'})
if isinstance(source_obj, Card):
source_obj.customer = id
obj.sources._list.append(source_obj)
if obj.default_source is None:
obj.default_source = source_obj.id
schedule_webhook(Event('customer.source.created', source_obj))
return source_obj
def __init__(self, card=None, customer=None, **kwargs):
if kwargs:
raise UserError(400, 'Unexpected ' + ', '.join(kwargs.keys()))
try:
assert type(card) is dict
if customer is not None:
assert type(customer) is str and customer.startswith('cus_')
except AssertionError:
raise UserError(400, 'Bad request')
# If this raises, abort and don't create the token
card['object'] = 'card'
card_obj = Card(source=card)
if customer is not None:
card_obj.customer = customer
# All exceptions must be raised before this point.
super().__init__()
self.type = 'card'
self.card = card_obj