Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
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 _on_payment_success(self):
assert self.status == 'paid'
self.status_transitions['paid_at'] = int(time.time())
schedule_webhook(Event('invoice.payment_succeeded', self))
if self.subscription:
sub = Subscription._api_retrieve(self.subscription)
sub._on_initial_payment_success(self)
payment_behavior != 'error_if_incomplete')
self.items = List('/v1/subscription_items?subscription=' + self.id)
self.items._list.append(
SubscriptionItem(
subscription=self.id,
plan=items[0]['plan'],
quantity=items[0]['quantity'],
tax_rates=items[0]['tax_rates']))
create_an_invoice = \
self.trial_end is None and self.trial_period_days is None
if create_an_invoice:
self._create_invoice()
schedule_webhook(Event('customer.subscription.created', self))
def _api_delete(cls, id):
obj = Subscription._api_retrieve(id)
obj.ended_at = int(time.time())
obj.status = 'canceled'
schedule_webhook(Event('customer.subscription.deleted', obj))
return obj
def _api_update(cls, id, **data):
if ('invoice_settings' in data and
data['invoice_settings'].get('default_payment_method') == ''):
data['invoice_settings']['default_payment_method'] = None
obj = super()._api_update(id, **data)
schedule_webhook(Event('customer.updated', obj))
return obj
def _on_payment_failure_now(self):
assert self.status in ('open', 'void')
if self.status == 'void':
self.status_transitions['voided_at'] = int(time.time())
schedule_webhook(Event('invoice.payment_failed', self))
if self.subscription:
sub = Subscription._api_retrieve(self.subscription)
if sub.status == 'incomplete':
sub._on_initial_payment_failure_now(self)
else:
sub._on_recurring_payment_failure(self)