simplifying store operations

legacy
Steve L. Nyemba 5 years ago
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…
Cancel
Save