Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
 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
Esempio n. 4
0
    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
Esempio n. 5
0
 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
Esempio n. 6
0
    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
Esempio n. 7
0
    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
Esempio n. 8
0
    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()
Esempio n. 9
0
 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