def create_customer_v3(self, email, first_name=None, last_name=None, auth0_uid=None): data = {} if email is not None and len(email) > 0: data['email'] = email if first_name is not None and len(first_name) > 0: data['first_name'] = first_name if last_name is not None and len(last_name) > 0: data['last_name'] = last_name # https://apidocs.chargebee.com/docs/api/v1/customers#customer_meta_data if auth0_uid is not None: data['meta_data'] = json.dumps({'auth0_uid': auth0_uid}) try: with MyTimer(f"creating crb user for email {email}", logger=logger) as _: result = chargebee.Customer.create(data) return result.customer except InvalidRequestError as e: return None
def get_subscription_for_user(self, crb_user_id): try: customer_data = {'customer_id[is]': crb_user_id} # https://github.com/chargebee/chargebee-python/blob/master/chargebee/models/subscription.py#L29 # customer_id with MyTimer( f"getting subscriptions list for crb_user_id {crb_user_id}", logger=logger) as _: result = chargebee.Subscription.list(customer_data) if len(result) >= 2: SentryInit().capture_exception( Exception( f"for user crb_user_id {crb_user_id} total of [{len(result)}] >= 2 subscriptions" )) logging.error( f"for user crb_user_id {crb_user_id} total of [{len(result)}] >= 2 subscriptions" ) if len(result) > 0: first_id = result[0].subscription.id return first_id return None except InvalidRequestError as ex: print(ex) SentryInit().capture_exception(ex) # logger.error(ex) raise ex
def get__jobs_list_response(self, page=1, per_page=10): with MyTimer('get__jobs_list_response api', logger): extra_url = '/v2/jobs' payload = {"page": int(page), "per_page": per_page} url = self.user_token_rm.get_server_and_port() + extra_url response = self.make_request(url=url, params={}, payload=payload, method='get') return response
def checkout_new_or_existing(self, crb_user_id, plan_id): # https://apidocs.chargebee.com/docs/api/hosted_pages#checkout_new_subscription checkout_new = False subscription_data = {'plan_id': plan_id} subscription_id = self.get_subscription_for_user(crb_user_id) logger.info( f"for crb_user_id [{crb_user_id}] got subscription_id [{subscription_id}]" ) if subscription_id is not None: subscription_data['id'] = subscription_id else: checkout_new = True checkout_data = ({ 'subscription': subscription_data, 'customer': { 'id': crb_user_id }, }) try: if checkout_new: with MyTimer( f"hostedpage checkout_new for crb_user_id [{crb_user_id}]", logger=logger) as _: result = chargebee.HostedPage.checkout_new(checkout_data) else: with MyTimer( f"hostedpage checkout_existing for crb_user_id [{crb_user_id}]", logger=logger) as _: result = chargebee.HostedPage.checkout_existing( checkout_data) return result # if checkout.hosted_page.state == 'created': # return checkout.hosted_page except InvalidRequestError as ex: print(ex) raise ex
def get_hosted_page_id(self, hosted_page_id): # https://django.cowhite.com/blog/integrating-chargebee-with-django/ # The page id is passed in as url parameter 'id' with MyTimer( f"retrieve-ing hosted page for hosted_page_id [{hosted_page_id}]", logger=logger) as _: plan = chargebee.HostedPage.retrieve(hosted_page_id) page = plan.hosted_page # if page is None: # # The page id is invalid handle it appropriately # if page is None: return None else: return page
def make_request(self, url, params, payload=None, method='get'): with MyTimer('make_request api', logger): headers = { 'Content-Type': 'application/json', } token = self.user_token_rm.get_token_jobs() if token is not None: headers['Authorization'] = token if payload is None: payload = {} payload = json.dumps(payload) response = self.session.request(method.upper(), url, headers=headers, data=payload, params=params) return response
def make_request(self, url, params, payload=None, method='get'): with MyTimer('make_request api', logger): headers = { 'Content-Type': 'application/json', } token = self.user_token_rm.get_token_stores() if token is None: if not self.user_token_rm.get_NO_PASSWORD_configured(): raise HttpResponseServerError() if token is not None: # API__SERVER_WITH_PORT__NO_PASS=True headers['Authorization'] = token if payload is None: payload = {} payload = json.dumps(payload) response = self.session.request(method.upper(), url, headers=headers, data=payload, params=params) return response
def post__add_vote(self, request, user_id=None, job_jsha=None, vote=None, search_id=None): with MyTimer('add_vote api', logger): # tok_instance = get_token__helper_with_request(request) extra_url = '/v1/votes' payload = { "user_id": user_id, "result_sha": job_jsha, "vote": vote, "search_id": search_id } url = self.user_token_rm.get_server_and_port() + extra_url response = self.make_request(url=url, params={}, payload=payload, method='post') return response.json()
def get_stores_list(self, page_index, per_page, payload=None): with MyTimer('get_stores_list api', logger): extra_url = f'/v2/stores/{page_index}/{per_page}' url = self.user_token_rm.get_server_and_port() + extra_url response = self.make_request(url=url, params={}, payload=payload, method='get') return response