Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
assert type(customer) is str and customer.startswith('cus_')
if status is not None:
assert status in ('all', 'incomplete', 'incomplete_expired',
'trialing', 'active', 'past_due', 'unpaid',
'canceled')
except AssertionError:
raise UserError(400, 'Bad request')
li = super(Subscription, cls)._api_list_all(url, limit=limit)
if status is None:
li._list = [sub for sub in li._list if sub.status not in
('canceled', 'incomplete_expired')]
elif status != 'all':
li._list = [sub for sub in li._list if sub.status == status]
if customer is not None:
Customer._api_retrieve(customer) # to return 404 if not existant
li._list = [sub for sub in li._list if sub.customer == customer]
return li
assert type(amount) is int and amount >= 0
assert type(currency) is str and currency
if description is not None:
assert type(description) is str
if customer is not None:
assert type(customer) is str and customer.startswith('cus_')
if source is not None:
assert type(source) is str
assert (source.startswith('pm_') or source.startswith('src_')
or source.startswith('card_'))
assert type(capture) is bool
except AssertionError:
raise UserError(400, 'Bad request')
if source is None:
customer_obj = Customer._api_retrieve(customer)
source = customer_obj._get_default_payment_method_or_source()
if source is None:
raise UserError(404, 'This customer has no payment method')
else:
source = PaymentMethod._api_retrieve(source)
if customer is None:
customer = source.customer
# All exceptions must be raised before this point.
super().__init__()
self._authorized = not source._charging_is_declined()
self.amount = amount
self.currency = currency
assert all(type(tr) is str for tr in si['tax_rates'])
if subscription_default_tax_rates is not None:
assert subscription_tax_percent is None
assert type(subscription_default_tax_rates) is list
assert all(type(txr) is str and txr.startswith('txr_')
for txr in subscription_default_tax_rates)
assert all(type(tr) is str
for tr in subscription_default_tax_rates)
if subscription_proration_date is not None:
assert type(subscription_proration_date) is int
assert subscription_proration_date > 1500000000
except AssertionError:
raise UserError(400, 'Bad request')
# return 404 if not existant
customer_obj = Customer._api_retrieve(customer)
if subscription_items:
for si in subscription_items:
Plan._api_retrieve(si['plan']) # to return 404 if not existant
# To return 404 if not existant:
if si['tax_rates'] is not None:
[TaxRate._api_retrieve(tr) for tr in si['tax_rates']]
# To return 404 if not existant:
if subscription_default_tax_rates is not None:
[TaxRate._api_retrieve(tr)
for tr in subscription_default_tax_rates]
pending_items = [ii for ii in InvoiceItem._api_list_all(
None, customer=customer, limit=99)._list
if ii.invoice is None]
if (not upcoming and not subscription and
not subscription_items and not pending_items):
def _api_retrieve_source(cls, id, source_id, **kwargs):
if kwargs:
raise UserError(400, 'Unexpected ' + ', '.join(kwargs.keys()))
# return 404 if does not exist
Customer._api_retrieve(id)
if type(source_id) is str and source_id.startswith('src_'):
source_obj = Source._api_retrieve(source_id)
elif type(source_id) is str and source_id.startswith('card_'):
source_obj = Card._api_retrieve(source_id)
if source_obj.customer != id:
raise UserError(404, 'This customer does not own this card')
else:
raise UserError(400, 'Bad request')
return source_obj
else:
item['quantity'] = 1
item['tax_rates'] = item.get('tax_rates', None)
if item['tax_rates'] is not None:
assert type(item['tax_rates']) is list
assert all(type(tr) is str for tr in item['tax_rates'])
assert type(enable_incomplete_payments) is bool
assert payment_behavior in ('allow_incomplete',
'error_if_incomplete')
except AssertionError:
raise UserError(400, 'Bad request')
if len(items) != 1:
raise UserError(500, 'Not implemented')
Customer._api_retrieve(customer) # to return 404 if not existant
for item in items:
Plan._api_retrieve(item['plan']) # to return 404 if not existant
# To return 404 if not existant:
if item['tax_rates'] is not None:
[TaxRate._api_retrieve(tr) for tr in item['tax_rates']]
# To return 404 if not existant:
if default_tax_rates is not None:
default_tax_rates = [TaxRate._api_retrieve(tr)
for tr in default_tax_rates]
# All exceptions must be raised before this point.
super().__init__()
self.customer = customer
self.metadata = metadata or {}
self.tax_percent = tax_percent
def _api_pay_invoice(cls, id):
obj = Invoice._api_retrieve(id)
if obj.status == 'paid':
raise UserError(400, 'Invoice is already paid')
elif obj.status not in ('draft', 'open'):
raise UserError(400, 'Bad request')
obj._draft = False
if obj.total <= 0:
obj._on_payment_success()
else:
cus = Customer._api_retrieve(obj.customer)
if cus._get_default_payment_method_or_source() is None:
raise UserError(404, 'This customer has no payment method')
pm = cus._get_default_payment_method_or_source()
pi = PaymentIntent(amount=obj.total,
currency=obj.currency,
customer=obj.customer,
payment_method=pm.id)
obj.payment_intent = pi.id
pi.invoice = obj.id
PaymentIntent._api_confirm(obj.payment_intent)
return obj
def _api_attach(cls, id, customer=None, **kwargs):
if kwargs:
raise UserError(400, 'Unexpected ' + ', '.join(kwargs.keys()))
try:
assert type(id) is str and id.startswith('pm_')
assert type(customer) is str and customer.startswith('cus_')
except AssertionError:
raise UserError(400, 'Bad request')
obj = cls._api_retrieve(id)
Customer._api_retrieve(customer) # to return 404 if not existant
if obj._attaching_is_declined():
raise UserError(402, 'Your card was declined.',
{'code': 'card_declined'})
obj.customer = customer
return obj
**kwargs):
if kwargs:
raise UserError(400, 'Unexpected ' + ', '.join(kwargs.keys()))
try:
assert _type(customer) is str
assert customer.startswith('cus_')
assert type in ('eu_vat', 'nz_gst', 'au_abn')
assert _type(value) is str and len(value) > 10
if country is None:
country = value[0:2]
assert _type(country) is str
except AssertionError:
raise UserError(400, 'Bad request')
Customer._api_retrieve(customer) # to return 404 if not existant
# All exceptions must be raised before this point.
super().__init__()
self.country = country
self.customer = customer
self.type = type
self.value = value
self.verification = {'status': 'verified',
'verified_name': '',
'verified_address': ''}
# Test values from
# https://stripe.com/docs/billing/testing#customer-tax-id-verfication
if '111111111' in value:
self.verification['status'] = 'unverified'