Пример #1
0
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
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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
Пример #6
0
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