def create_update_data(customer) -> dict: """ Provide readable data for customer update to display :param customer: :return: return_data dict """ payment_sources = customer["sources"]["data"] return_data = dict() return_data["subscriptions"] = [] if len(payment_sources) > 0: first_payment_source = payment_sources[0] return_data["payment_type"] = first_payment_source.get("funding") return_data["last4"] = first_payment_source.get("last4") return_data["exp_month"] = first_payment_source.get("exp_month") return_data["exp_year"] = first_payment_source.get("exp_year") else: return_data["payment_type"] = "" return_data["last4"] = "" return_data["exp_month"] = "" return_data["exp_year"] = "" for subscription in customer["subscriptions"]["data"]: if subscription["status"] == "incomplete": invoice = Invoice.retrieve(subscription["latest_invoice"]) if invoice["charge"]: intents = Charge.retrieve(invoice["charge"]) return_data["subscriptions"].append({ "current_period_end": subscription["current_period_end"], "current_period_start": subscription["current_period_start"], "ended_at": subscription["ended_at"], "plan_name": subscription["plan"]["nickname"], "plan_id": subscription["plan"]["id"], "status": subscription["status"], "cancel_at_period_end": subscription["cancel_at_period_end"], "subscription_id": subscription["id"], "failure_code": intents["failure_code"], "failure_message": intents["failure_message"], }) else: return_data["cancel_at_period_end"] = subscription[ "cancel_at_period_end"] return_data["subscriptions"].append( create_subscription_object_without_failure(subscription)) else: return_data["cancel_at_period_end"] = subscription[ "cancel_at_period_end"] return_data["subscriptions"].append( create_subscription_object_without_failure(subscription)) return return_data
def create_update_data(customer) -> Dict[str, Any]: """ Provide readable data for customer update to display :param customer: :return: return_data dict """ payment_sources = customer["sources"]["data"] return_data: Dict[str, Any] = dict() return_data["subscriptions"] = [] return_data["payment_type"] = "" return_data["last4"] = "" return_data["exp_month"] = "" return_data["exp_year"] = "" if len(payment_sources) > 0: first_payment_source = payment_sources[0] return_data["payment_type"] = first_payment_source.get("funding") return_data["last4"] = first_payment_source.get("last4") return_data["exp_month"] = first_payment_source.get("exp_month") return_data["exp_year"] = first_payment_source.get("exp_year") products = {} # type: Dict for subscription in customer["subscriptions"]["data"]: try: product = products[subscription["plan"]["product"]] except KeyError: product = Product.retrieve(subscription["plan"]["product"]) products[subscription["plan"]["product"]] = product plan_name = format_plan_nickname( product_name=product["name"], plan_interval=subscription["plan"]["interval"] ) if subscription["status"] == "incomplete": invoice = Invoice.retrieve(subscription["latest_invoice"]) if invoice["charge"]: intents = Charge.retrieve(invoice["charge"]) return_data["subscriptions"].append( { "current_period_end": subscription["current_period_end"], "current_period_start": subscription["current_period_start"], "ended_at": subscription["ended_at"], "plan_name": plan_name, "plan_id": subscription["plan"]["id"], "status": subscription["status"], "cancel_at_period_end": subscription["cancel_at_period_end"], "subscription_id": subscription["id"], "failure_code": intents["failure_code"], "failure_message": intents["failure_message"], } ) continue return_data["cancel_at_period_end"] = subscription["cancel_at_period_end"] return_data["subscriptions"].append( create_subscription_object_without_failure(subscription, plan_name) ) return return_data
def retrieve_stripe_charge(charge_id: str) -> Charge: """ Retrive Stripe Charge :param charge_id: :return: Charge """ if charge_id is None: logger.error( "hub::shared::vendor::retrieve_stripe_charge received a None charge_id, ignoring." ) return None else: try: charge = Charge.retrieve(charge_id) logger.debug("retrieve stripe charge", charge=charge) return charge except ( InvalidRequestError, APIConnectionError, APIError, RateLimitError, IdempotencyError, StripeErrorWithParamCode, ) as e: logger.error("retrieve stripe error", error=str(e)) raise e
def create_return_data(subscriptions) -> JsonDict: """ Create json object subscriptions object :param subscriptions: :return: JSON data to be consumed by client. """ return_data: Dict[str, Any] = {} return_data["subscriptions"] = [] products = {} # type: Dict for subscription in subscriptions["data"]: try: product = products[subscription["plan"]["product"]] except KeyError: product = Product.retrieve(subscription["plan"]["product"]) products[subscription["plan"]["product"]] = product plan_name = format_plan_nickname( product_name=product["name"], plan_interval=subscription["plan"]["interval"] ) if subscription["status"] == "incomplete": invoice = Invoice.retrieve(subscription["latest_invoice"]) if invoice["charge"]: intents = Charge.retrieve(invoice["charge"]) logger.debug("intents", intents=intents) return_data["subscriptions"].append( { "current_period_end": subscription["current_period_end"], "current_period_start": subscription["current_period_start"], "ended_at": subscription["ended_at"], "plan_name": plan_name, "plan_id": subscription["plan"]["id"], "status": subscription["status"], "subscription_id": subscription["id"], "cancel_at_period_end": subscription["cancel_at_period_end"], "failure_code": intents["failure_code"], "failure_message": intents["failure_message"], } ) continue return_data["subscriptions"].append( create_subscription_object_without_failure(subscription, plan_name) ) return return_data
def retrieve_stripe_charge(charge_id: str) -> Charge: """ Retrive Stripe Charge :param charge_id: :return: Charge """ try: charge = Charge.retrieve(charge_id) return charge except ( InvalidRequestError, APIConnectionError, APIError, RateLimitError, IdempotencyError, StripeErrorWithParamCode, ) as e: logger.error("retrieve stripe error", error=str(e)) raise e
def create_return_data(subscriptions) -> JsonDict: """ Create json object subscriptions object :param subscriptions: :return: JSON data to be consumed by client. """ return_data = dict() return_data["subscriptions"] = [] for subscription in subscriptions["data"]: if subscription["status"] == "incomplete": invoice = Invoice.retrieve(subscription["latest_invoice"]) if invoice["charge"]: intents = Charge.retrieve(invoice["charge"]) logger.debug("intents", intents=intents) return_data["subscriptions"].append({ "current_period_end": subscription["current_period_end"], "current_period_start": subscription["current_period_start"], "ended_at": subscription["ended_at"], "plan_name": subscription["plan"]["nickname"], "plan_id": subscription["plan"]["id"], "status": subscription["status"], "subscription_id": subscription["id"], "cancel_at_period_end": subscription["cancel_at_period_end"], "failure_code": intents["failure_code"], "failure_message": intents["failure_message"], }) else: return_data["subscriptions"].append( create_subscription_object_without_failure(subscription)) else: return_data["subscriptions"].append( create_subscription_object_without_failure(subscription)) return return_data