parent
cd6ccf1b34
commit
968bda4c0a
@ -0,0 +1,127 @@
|
|||||||
|
"""
|
||||||
|
This file is a wrapper for stripe and store handling operations :
|
||||||
|
- subscribe
|
||||||
|
- user
|
||||||
|
- upgrade
|
||||||
|
- downgrade
|
||||||
|
- plans (for a given product)
|
||||||
|
"""
|
||||||
|
import stripe
|
||||||
|
from utils.params import PARAMS as SYS_ARGS
|
||||||
|
from utils import void
|
||||||
|
|
||||||
|
class Store :
|
||||||
|
# stripe_keys = {
|
||||||
|
# "secret_key":SYS_ARGS['stripe']['secret'].strip(),
|
||||||
|
# "publishable_key":SYS_ARGS['stripe']['pub'].strip()
|
||||||
|
# }
|
||||||
|
# stripe.api_key = self.stripe_keys['secret_key']
|
||||||
|
|
||||||
|
def __init__(self,**args):
|
||||||
|
self.get = void()
|
||||||
|
self.get.user = self._get_user
|
||||||
|
self.get.plans = self._get_plans
|
||||||
|
product_name = args['product']
|
||||||
|
stripe.api_key = args['secret'] if 'secret' in args else stripe.api_key
|
||||||
|
if stripe.api_key :
|
||||||
|
|
||||||
|
self.__init_product(product_name)
|
||||||
|
else:
|
||||||
|
print (['secret' in args, stripe.api_key is None])
|
||||||
|
pass
|
||||||
|
def __init_product(self,product_name):
|
||||||
|
PRODUCT_INDEX = 2
|
||||||
|
DATA_TYPE_INDEX = 1
|
||||||
|
STATUS_INDEX = 0
|
||||||
|
resp = stripe.product.Product.list().to_dict_recursive()['data']
|
||||||
|
self.product = []
|
||||||
|
self.plan = []
|
||||||
|
|
||||||
|
if resp :
|
||||||
|
|
||||||
|
if resp :
|
||||||
|
self.product = [p for p in resp if p['name'] == product_name]
|
||||||
|
self.product = self.product[0] if self.product else []
|
||||||
|
else:
|
||||||
|
self.product = resp[0]
|
||||||
|
|
||||||
|
if 'id' in self.product :
|
||||||
|
self.__init_plan(self.product['id'])
|
||||||
|
|
||||||
|
def __init_plan(self,id):
|
||||||
|
"""
|
||||||
|
This function will retrieve plan information associated with the given product id
|
||||||
|
"""
|
||||||
|
self.plans = stripe.plan.Plan.list(product=id).to_dict_recursive()['data']
|
||||||
|
|
||||||
|
|
||||||
|
def _get_user(self,**args):
|
||||||
|
"""
|
||||||
|
This function will return a customer information and associated plan (hopefully)
|
||||||
|
:email
|
||||||
|
"""
|
||||||
|
email = args['email']
|
||||||
|
customers = stripe.customer.Customer.list(email=email).to_dict_recursive()['data']
|
||||||
|
if not customers:
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
customers = customers[0]
|
||||||
|
return {"email":email,"id":customers['id']}
|
||||||
|
|
||||||
|
pass
|
||||||
|
def __cancel_plan(self,**args) :
|
||||||
|
pass
|
||||||
|
def __set_charge(self,**args):
|
||||||
|
pass
|
||||||
|
def __set_plan(self,**args):
|
||||||
|
"""
|
||||||
|
This function is effectively a subscription for the current user
|
||||||
|
"""
|
||||||
|
plan = args['plan']
|
||||||
|
email = args['email']
|
||||||
|
user_plan = args['user_plan'] if 'user_plan' in args else self.get.plans(email=email)
|
||||||
|
if plan == user_plan :
|
||||||
|
#
|
||||||
|
# There is nothing to do here
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
#
|
||||||
|
# we need to cancel, the user_plan unless it is free
|
||||||
|
|
||||||
|
pass
|
||||||
|
pass
|
||||||
|
def _get_plans(self,**args) :
|
||||||
|
"""
|
||||||
|
The product name is provided in the constructor and at this poit, if a user email is not provided,
|
||||||
|
This function operates as an accessor to the plans attribute. If an email is provided
|
||||||
|
The function will return the plans associated for a user given the current product.
|
||||||
|
|
||||||
|
:email user email
|
||||||
|
"""
|
||||||
|
if 'email' in args :
|
||||||
|
#
|
||||||
|
email = args['email']
|
||||||
|
info = stripe.customer.Customer.list(email=email).to_dict_recursive()['data']
|
||||||
|
|
||||||
|
if info :
|
||||||
|
#
|
||||||
|
#
|
||||||
|
_found = None
|
||||||
|
ids = [plan['id'] for plan in self.plans ]
|
||||||
|
subscriptions = info[0]['subscriptions']['data']
|
||||||
|
for sub in subscriptions :
|
||||||
|
aplan = sub['plan']
|
||||||
|
if set([aplan['id']]) & set(ids):
|
||||||
|
_found = sub
|
||||||
|
break
|
||||||
|
|
||||||
|
info = _found if _found else None
|
||||||
|
|
||||||
|
else:
|
||||||
|
info = None
|
||||||
|
return info
|
||||||
|
else :
|
||||||
|
|
||||||
|
return self.plans
|
||||||
|
|
||||||
|
|
Loading…
Reference in new issue