Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
subscription=self.id,
limit=99)
for previous_invoice in previous._list:
previous_tax_rates = [tr.id for tr in (
previous_invoice.lines._list[0].tax_rates or [])]
InvoiceItem(amount=- previous_invoice.subtotal,
currency=previous_invoice.currency,
proration=True,
description='Unused time',
subscription=self.id,
plan=old_plan.id,
tax_rates=previous_tax_rates,
customer=self.customer)
elif self.items._list[0].tax_rates != items[0]['tax_rates']:
self.items = List('/v1/subscription_items?subscription=' +
self.id)
item = SubscriptionItem(subscription=self.id,
plan=items[0]['plan'],
quantity=items[0]['quantity'],
tax_rates=items[0]['tax_rates'])
self.items._list.append(item)
if tax_percent is not None:
self.tax_percent = tax_percent
if default_tax_rates is not None:
self.default_tax_rates = [TaxRate._api_retrieve(tr)
for tr in default_tax_rates]
if trial_end is not None:
self.trial_end = trial_end
self.canceled_at = None
self.discount = None
self.ended_at = None
self.quantity = items[0]['quantity']
self.status = 'incomplete'
self.trial_end = trial_end
self.trial_start = None
self.trial_period_days = trial_period_days
self.latest_invoice = None
self.start_date = backdate_start_date or int(time.time())
self.billing_cycle_anchor = billing_cycle_anchor
self._enable_incomplete_payments = (
enable_incomplete_payments and
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))
payment_method.startswith('card_'))
except AssertionError:
raise UserError(400, 'Bad request')
if customer:
Customer._api_retrieve(customer) # to return 404 if not existant
if payment_method:
# return 404 if not existant
PaymentMethod._api_retrieve(payment_method)
# All exceptions must be raised before this point.
super().__init__()
self.amount = amount
self.currency = currency
self.charges = List('/v1/charges?payment_intent=' + self.id)
self.client_secret = self.id + '_secret_' + random_id(16)
self.customer = customer
self.payment_method = payment_method
self.metadata = metadata or {}
self.invoice = None
self.next_action = None
self._canceled = False
self._authentication_failed = False
self.description = description
self.email = email
self.phone = phone
self.address = address
self.invoice_settings = invoice_settings
self.business_vat_id = business_vat_id
self.preferred_locales = preferred_locales
self.metadata = metadata or {}
self.account_balance = 0
self.delinquent = False
self.discount = None
self.shipping = None
self.default_source = None
self.sources = List('/v1/customers/' + self.id + '/sources')
self.tax_ids = List('/v1/customers/' + self.id + '/tax_ids')
self.tax_ids._list = [TaxId(customer=self.id, **data)
for data in tax_id_data]
schedule_webhook(Event('customer.created', self))
self.starting_balance = 0
self.statement_descriptor = None
self.webhooks_delivered_at = self.date
self.status_transitions = {
'finalized_at': None,
'paid_at': None,
'voided_at': None,
}
self.period_start = None
self.period_end = None
if subscription is not None:
self.period_start = subscription_obj.current_period_start
self.period_end = subscription_obj.current_period_end
self.lines = List('/v1/invoices/' + self.id + '/lines')
for item in items:
item.invoice = self.id
self.lines._list.append(InvoiceLineItem(item))
pending_items = [ii for ii in InvoiceItem._api_list_all(
None, customer=self.customer, limit=99)._list
if ii.invoice is None]
for ii in pending_items:
if not simulation:
ii.invoice = self.id
self.lines._list.append(InvoiceLineItem(ii))
if len(self.lines._list):
self.currency = self.lines._list[0].currency
else:
self.currency = 'eur' # arbitrary default
self.name = name
self.description = description
self.email = email
self.phone = phone
self.address = address
self.invoice_settings = invoice_settings
self.business_vat_id = business_vat_id
self.preferred_locales = preferred_locales
self.metadata = metadata or {}
self.account_balance = 0
self.delinquent = False
self.discount = None
self.shipping = None
self.default_source = None
self.sources = List('/v1/customers/' + self.id + '/sources')
self.tax_ids = List('/v1/customers/' + self.id + '/tax_ids')
self.tax_ids._list = [TaxId(customer=self.id, **data)
for data in tax_id_data]
schedule_webhook(Event('customer.created', self))
def _api_list_all(cls, url, limit=None, **kwargs):
if kwargs:
raise UserError(400, 'Unexpected ' + ', '.join(kwargs.keys()))
li = List(url, limit=limit)
li._list = [value for key, value in store.items()
if key.startswith(cls.object + ':')]
return li
def __init__(self, id=None):
if not isinstance(self, List):
if id is None:
assert hasattr(self, '_id_prefix')
self.id = getattr(self, '_id_prefix') + random_id(14)
else:
self.id = id
self.created = int(time.time())
self.livemode = False
key = self.object + ':' + self.id
if key in store.keys():
raise UserError(409, 'Conflict')
store[key] = self
def _api_list_lines(cls, id, limit=None, **kwargs):
if kwargs:
raise UserError(400, 'Unexpected ' + ', '.join(kwargs.keys()))
obj = cls._api_retrieve(id)
lines = List('/v1/invoices/' + id + '/lines', limit=limit)
lines._list = obj.lines._list
return lines