pinelabs-python 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pinelabs/__init__.py +1679 -0
- pinelabs/_default_clients.py +30 -0
- pinelabs/affordability_suite/__init__.py +325 -0
- pinelabs/affordability_suite/client.py +1007 -0
- pinelabs/affordability_suite/raw_client.py +1095 -0
- pinelabs/affordability_suite/types/__init__.py +477 -0
- pinelabs/affordability_suite/types/downpayment_details_request_issuer.py +26 -0
- pinelabs/affordability_suite/types/imei_validation_request_request_type.py +5 -0
- pinelabs/affordability_suite/types/offer_discovery_cardless_request_payment_option.py +29 -0
- pinelabs/affordability_suite/types/offer_discovery_cardless_request_payment_option_cardless_details.py +31 -0
- pinelabs/affordability_suite/types/offer_discovery_request_cart_coupon_discount_amount.py +31 -0
- pinelabs/affordability_suite/types/offer_discovery_request_customer_details.py +26 -0
- pinelabs/affordability_suite/types/offer_discovery_request_downpayment_details.py +31 -0
- pinelabs/affordability_suite/types/offer_discovery_request_downpayment_details_downpayment_amount.py +31 -0
- pinelabs/affordability_suite/types/offer_discovery_request_issuer.py +42 -0
- pinelabs/affordability_suite/types/offer_discovery_request_issuer_issuer_type.py +10 -0
- pinelabs/affordability_suite/types/offer_discovery_request_order_amount.py +31 -0
- pinelabs/affordability_suite/types/offer_discovery_request_payment_options.py +37 -0
- pinelabs/affordability_suite/types/offer_discovery_request_payment_options_card_details.py +26 -0
- pinelabs/affordability_suite/types/offer_discovery_request_payment_options_card_token_details.py +31 -0
- pinelabs/affordability_suite/types/offer_discovery_request_product_details_item.py +40 -0
- pinelabs/affordability_suite/types/offer_discovery_request_product_details_item_product_amount.py +31 -0
- pinelabs/affordability_suite/types/offer_discovery_request_product_details_item_product_coupon_discount_amount.py +31 -0
- pinelabs/affordability_suite/types/offer_validation_request_customer_details.py +26 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data.py +27 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details.py +52 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure.py +146 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_auth_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_cart_coupon_discount_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_convenience_fee_breakdown.py +60 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_convenience_fee_breakdown_additional_fee_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_convenience_fee_breakdown_applicable_fee_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_convenience_fee_breakdown_fee_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_convenience_fee_breakdown_fee_calculated_on_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_convenience_fee_breakdown_maximum_fee_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_convenience_fee_breakdown_subvented_fee_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_convenience_fee_breakdown_tax_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item.py +119 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_after_downpayment_reduced_product_amount.py +22 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_cart_coupon_discount_product_share.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount.py +48 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount_breakup.py +36 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount_breakup_brand.py +24 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount_breakup_brand_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount_breakup_dealer.py +24 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount_breakup_dealer_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount_breakup_issuer.py +24 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount_breakup_issuer_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount_breakup_merchant.py +24 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount_breakup_merchant_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount_max_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount_min_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_downpayment_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_interest_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_product_amount.py +31 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_product_coupon_discount_amount.py +24 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_product_offer_parameters_item.py +32 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention.py +40 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_breakup.py +36 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_breakup_brand.py +24 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_breakup_brand_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_breakup_dealer.py +24 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_breakup_dealer_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_breakup_issuer.py +24 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_breakup_issuer_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_breakup_merchant.py +24 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_breakup_merchant_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_max_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_min_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount.py +40 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount_breakup.py +34 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount_breakup_brand.py +22 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount_breakup_brand_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount_breakup_dealer.py +22 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount_breakup_dealer_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount_breakup_issuer.py +22 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount_breakup_issuer_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount_breakup_merchant.py +22 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount_breakup_merchant_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount_max_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount_min_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_downpayment_details.py +28 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_downpayment_details_downpayment_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_interest_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_loan_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_monthly_emi_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_net_payment_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_processing_fee_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_processing_fee_details.py +22 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_processing_fee_details_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_split_emi_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_total_coupon_discount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_total_discount_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_total_emi_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_total_subvention_amount.py +20 -0
- pinelabs/affordability_suite/types/offer_validation_request_order_amount.py +31 -0
- pinelabs/affordability_suite/types/offer_validation_request_payment_amount.py +31 -0
- pinelabs/affordability_suite/types/offer_validation_request_payment_option.py +43 -0
- pinelabs/affordability_suite/types/offer_validation_request_payment_option_card_details.py +31 -0
- pinelabs/affordability_suite/types/offer_validation_request_payment_option_card_token_details.py +46 -0
- pinelabs/affordability_suite/types/offer_validation_request_payment_option_cardless_details.py +31 -0
- pinelabs/apple_pay/__init__.py +49 -0
- pinelabs/apple_pay/client.py +190 -0
- pinelabs/apple_pay/raw_client.py +283 -0
- pinelabs/apple_pay/types/__init__.py +53 -0
- pinelabs/apple_pay/types/authorize_payment_request_decrypted_card_details.py +62 -0
- pinelabs/apple_pay/types/authorize_payment_request_decrypted_card_details_card_meta_data.py +37 -0
- pinelabs/apple_pay/types/authorize_payment_request_decrypted_card_details_card_meta_data_card_type.py +7 -0
- pinelabs/apple_pay/types/authorize_payment_request_decrypted_card_details_card_meta_data_network_name.py +7 -0
- pinelabs/authentication/__init__.py +4 -0
- pinelabs/authentication/client.py +155 -0
- pinelabs/authentication/raw_client.py +226 -0
- pinelabs/bnpl/__init__.py +46 -0
- pinelabs/bnpl/client.py +200 -0
- pinelabs/bnpl/raw_client.py +273 -0
- pinelabs/bnpl/types/__init__.py +46 -0
- pinelabs/bnpl/types/bnpl_check_eligibility_request_device_info.py +56 -0
- pinelabs/bnpl/types/bnpl_check_eligibility_request_device_info_operating_system.py +7 -0
- pinelabs/bnpl/types/bnpl_check_eligibility_request_pay_code.py +5 -0
- pinelabs/card_payments/__init__.py +4 -0
- pinelabs/card_payments/client.py +547 -0
- pinelabs/card_payments/raw_client.py +1085 -0
- pinelabs/checkout/__init__.py +37 -0
- pinelabs/checkout/client.py +225 -0
- pinelabs/checkout/raw_client.py +318 -0
- pinelabs/checkout/types/__init__.py +40 -0
- pinelabs/checkout/types/generate_checkout_link_request_allowed_payment_methods_item.py +7 -0
- pinelabs/checkout/types/generate_checkout_link_request_integration_mode.py +5 -0
- pinelabs/client.py +612 -0
- pinelabs/convenience_fee/__init__.py +4 -0
- pinelabs/convenience_fee/client.py +156 -0
- pinelabs/convenience_fee/raw_client.py +247 -0
- pinelabs/core/__init__.py +127 -0
- pinelabs/core/api_error.py +23 -0
- pinelabs/core/client_wrapper.py +132 -0
- pinelabs/core/datetime_utils.py +70 -0
- pinelabs/core/file.py +67 -0
- pinelabs/core/force_multipart.py +18 -0
- pinelabs/core/http_client.py +840 -0
- pinelabs/core/http_response.py +59 -0
- pinelabs/core/http_sse/__init__.py +42 -0
- pinelabs/core/http_sse/_api.py +112 -0
- pinelabs/core/http_sse/_decoders.py +61 -0
- pinelabs/core/http_sse/_exceptions.py +7 -0
- pinelabs/core/http_sse/_models.py +17 -0
- pinelabs/core/jsonable_encoder.py +120 -0
- pinelabs/core/logging.py +107 -0
- pinelabs/core/parse_error.py +36 -0
- pinelabs/core/pydantic_utilities.py +634 -0
- pinelabs/core/query_encoder.py +58 -0
- pinelabs/core/remove_none_from_dict.py +11 -0
- pinelabs/core/request_options.py +35 -0
- pinelabs/core/serialization.py +276 -0
- pinelabs/customers/__init__.py +34 -0
- pinelabs/customers/client.py +590 -0
- pinelabs/customers/raw_client.py +1061 -0
- pinelabs/customers/types/__init__.py +34 -0
- pinelabs/customers/types/update_customer_request_status.py +5 -0
- pinelabs/e_challans/__init__.py +55 -0
- pinelabs/e_challans/client.py +323 -0
- pinelabs/e_challans/raw_client.py +386 -0
- pinelabs/e_challans/types/__init__.py +63 -0
- pinelabs/e_challans/types/create_challan_request_convenience_fee_breakdown.py +67 -0
- pinelabs/e_challans/types/create_challan_request_convenience_fee_breakdown_additional_fee_amount.py +32 -0
- pinelabs/e_challans/types/create_challan_request_convenience_fee_breakdown_applicable_fee_amount.py +32 -0
- pinelabs/e_challans/types/create_challan_request_convenience_fee_breakdown_fee_amount.py +32 -0
- pinelabs/e_challans/types/create_challan_request_convenience_fee_breakdown_maximum_fee_amount.py +32 -0
- pinelabs/e_challans/types/create_challan_request_convenience_fee_breakdown_tax_amount.py +32 -0
- pinelabs/environment.py +7 -0
- pinelabs/errors/__init__.py +62 -0
- pinelabs/errors/bad_request_error.py +10 -0
- pinelabs/errors/conflict_error.py +11 -0
- pinelabs/errors/forbidden_error.py +11 -0
- pinelabs/errors/internal_server_error.py +11 -0
- pinelabs/errors/method_not_allowed_error.py +11 -0
- pinelabs/errors/not_found_error.py +11 -0
- pinelabs/errors/service_unavailable_error.py +11 -0
- pinelabs/errors/unauthorized_error.py +11 -0
- pinelabs/errors/unprocessable_entity_error.py +10 -0
- pinelabs/international_payments/__init__.py +4 -0
- pinelabs/international_payments/client.py +187 -0
- pinelabs/international_payments/raw_client.py +201 -0
- pinelabs/orders/__init__.py +37 -0
- pinelabs/orders/client.py +613 -0
- pinelabs/orders/raw_client.py +1132 -0
- pinelabs/orders/types/__init__.py +38 -0
- pinelabs/orders/types/create_order_request_allowed_payment_methods_item.py +8 -0
- pinelabs/orders/types/create_order_request_purchase_details.py +28 -0
- pinelabs/pay_by_points/__init__.py +49 -0
- pinelabs/pay_by_points/client.py +177 -0
- pinelabs/pay_by_points/raw_client.py +246 -0
- pinelabs/pay_by_points/types/__init__.py +49 -0
- pinelabs/pay_by_points/types/check_point_balance_request_order_details.py +27 -0
- pinelabs/pay_by_points/types/check_point_balance_request_order_details_order_amount.py +31 -0
- pinelabs/pay_by_points/types/check_point_balance_request_payment_option.py +26 -0
- pinelabs/pay_by_points/types/check_point_balance_request_payment_option_points_card_details.py +32 -0
- pinelabs/payment_links/__init__.py +34 -0
- pinelabs/payment_links/client.py +642 -0
- pinelabs/payment_links/raw_client.py +797 -0
- pinelabs/payment_links/types/__init__.py +38 -0
- pinelabs/payment_links/types/create_payment_link_request_allowed_payment_methods_item.py +7 -0
- pinelabs/payouts/__init__.py +38 -0
- pinelabs/payouts/client.py +810 -0
- pinelabs/payouts/raw_client.py +1427 -0
- pinelabs/payouts/types/__init__.py +40 -0
- pinelabs/payouts/types/create_payout_request_mode.py +5 -0
- pinelabs/payouts/types/list_payouts_request_mode.py +5 -0
- pinelabs/payouts/types/list_payouts_request_status.py +7 -0
- pinelabs/refunds/__init__.py +52 -0
- pinelabs/refunds/client.py +211 -0
- pinelabs/refunds/raw_client.py +324 -0
- pinelabs/refunds/types/__init__.py +52 -0
- pinelabs/refunds/types/create_refund_request_order_amount.py +31 -0
- pinelabs/refunds/types/create_refund_request_products_item.py +27 -0
- pinelabs/refunds/types/create_refund_request_split_info.py +29 -0
- pinelabs/refunds/types/create_refund_request_split_info_split_details_item.py +32 -0
- pinelabs/refunds/types/create_refund_request_split_info_split_details_item_amount.py +20 -0
- pinelabs/settlements/__init__.py +4 -0
- pinelabs/settlements/client.py +283 -0
- pinelabs/settlements/raw_client.py +421 -0
- pinelabs/split_settlements/__init__.py +34 -0
- pinelabs/split_settlements/client.py +254 -0
- pinelabs/split_settlements/raw_client.py +414 -0
- pinelabs/split_settlements/types/__init__.py +36 -0
- pinelabs/split_settlements/types/release_settlement_request_release_amount.py +31 -0
- pinelabs/subscriptions_plans/__init__.py +37 -0
- pinelabs/subscriptions_plans/client.py +872 -0
- pinelabs/subscriptions_plans/raw_client.py +1111 -0
- pinelabs/subscriptions_plans/types/__init__.py +38 -0
- pinelabs/subscriptions_plans/types/create_plan_request_frequency.py +10 -0
- pinelabs/subscriptions_plans/types/list_plans_request_amount_range.py +5 -0
- pinelabs/subscriptions_presentations/__init__.py +4 -0
- pinelabs/subscriptions_presentations/client.py +886 -0
- pinelabs/subscriptions_presentations/raw_client.py +1168 -0
- pinelabs/subscriptions_subscriptions/__init__.py +46 -0
- pinelabs/subscriptions_subscriptions/client.py +1014 -0
- pinelabs/subscriptions_subscriptions/raw_client.py +1281 -0
- pinelabs/subscriptions_subscriptions/types/__init__.py +46 -0
- pinelabs/subscriptions_subscriptions/types/create_subscription_request_allowed_payment_methods_item.py +7 -0
- pinelabs/subscriptions_subscriptions/types/create_subscription_request_integration_mode.py +5 -0
- pinelabs/subscriptions_subscriptions/types/list_subscriptions_request_amount_range.py +5 -0
- pinelabs/tokenization/__init__.py +37 -0
- pinelabs/tokenization/client.py +809 -0
- pinelabs/tokenization/raw_client.py +1643 -0
- pinelabs/tokenization/types/__init__.py +38 -0
- pinelabs/tokenization/types/generate_card_token_request_payment_method.py +5 -0
- pinelabs/tokenization/types/get_service_provider_token_response.py +8 -0
- pinelabs/types/__init__.py +1320 -0
- pinelabs/types/acquirer_data.py +41 -0
- pinelabs/types/address.py +72 -0
- pinelabs/types/address_address_category.py +5 -0
- pinelabs/types/amount.py +31 -0
- pinelabs/types/authorize_payment_response.py +24 -0
- pinelabs/types/authorize_payment_response_data.py +45 -0
- pinelabs/types/authorize_payment_response_data_integration_mode.py +5 -0
- pinelabs/types/authorize_payment_response_data_order_amount.py +20 -0
- pinelabs/types/authorize_payment_response_data_payments_item.py +41 -0
- pinelabs/types/authorize_payment_response_data_payments_item_acquirer_data.py +23 -0
- pinelabs/types/authorize_payment_response_data_payments_item_payment_amount.py +20 -0
- pinelabs/types/authorize_payment_response_data_payments_item_payment_method.py +7 -0
- pinelabs/types/authorize_payment_response_data_payments_item_payment_option.py +22 -0
- pinelabs/types/authorize_payment_response_data_payments_item_payment_option_wallet_data.py +25 -0
- pinelabs/types/authorize_payment_response_data_payments_item_payment_option_wallet_data_wallet_card_data.py +38 -0
- pinelabs/types/authorize_payment_response_data_payments_item_payment_option_wallet_data_wallet_card_data_card_type.py +7 -0
- pinelabs/types/authorize_payment_response_data_payments_item_payment_option_wallet_data_wallet_card_data_token_txn_type.py +7 -0
- pinelabs/types/authorize_payment_response_data_payments_item_status.py +7 -0
- pinelabs/types/authorize_payment_response_data_purchase_details.py +24 -0
- pinelabs/types/authorize_payment_response_data_purchase_details_customer.py +27 -0
- pinelabs/types/authorize_payment_response_data_status.py +18 -0
- pinelabs/types/authorize_payment_response_data_type.py +5 -0
- pinelabs/types/bank_account.py +36 -0
- pinelabs/types/bnpl_check_eligibility_response.py +32 -0
- pinelabs/types/bnpl_check_eligibility_response_metadata.py +36 -0
- pinelabs/types/bnpl_check_eligibility_response_metadata_installments_item.py +33 -0
- pinelabs/types/bnpl_resend_otp_response.py +37 -0
- pinelabs/types/bnpl_resend_otp_response_meta_data.py +26 -0
- pinelabs/types/bnpl_submit_otp_response.py +26 -0
- pinelabs/types/calculate_convenience_fee_response.py +27 -0
- pinelabs/types/calculate_convenience_fee_response_data_item.py +50 -0
- pinelabs/types/calculate_convenience_fee_response_data_item_convenience_fee_breakdown.py +28 -0
- pinelabs/types/calculate_convenience_fee_response_data_item_payment_method_metadata.py +31 -0
- pinelabs/types/capture_data_item.py +34 -0
- pinelabs/types/card_data.py +76 -0
- pinelabs/types/card_data_card_category.py +22 -0
- pinelabs/types/card_data_card_type.py +21 -0
- pinelabs/types/card_data_token_txn_type.py +5 -0
- pinelabs/types/card_detail_lookup_item.py +35 -0
- pinelabs/types/card_detail_lookup_item_payment_reference_type.py +7 -0
- pinelabs/types/card_payment_detail_item.py +66 -0
- pinelabs/types/card_token_response.py +49 -0
- pinelabs/types/cart_details.py +27 -0
- pinelabs/types/cart_item.py +66 -0
- pinelabs/types/challan_response.py +77 -0
- pinelabs/types/check_point_balance_response.py +43 -0
- pinelabs/types/check_point_balance_response_balance.py +28 -0
- pinelabs/types/check_point_balance_response_redeemable_amount.py +28 -0
- pinelabs/types/checkout_customer.py +55 -0
- pinelabs/types/checkout_product.py +29 -0
- pinelabs/types/checkout_purchase_details.py +29 -0
- pinelabs/types/create_bulk_payout_response.py +48 -0
- pinelabs/types/create_bulk_payout_response_status.py +7 -0
- pinelabs/types/create_debit_response.py +56 -0
- pinelabs/types/create_debit_response_status.py +7 -0
- pinelabs/types/create_payout_response.py +100 -0
- pinelabs/types/create_payout_response_mode.py +5 -0
- pinelabs/types/create_payout_response_status.py +7 -0
- pinelabs/types/create_presentation_response.py +58 -0
- pinelabs/types/create_presentation_response_status.py +10 -0
- pinelabs/types/create_subscription_response.py +146 -0
- pinelabs/types/create_subscription_response_allowed_payment_methods_item.py +7 -0
- pinelabs/types/create_subscription_response_integration_mode.py +5 -0
- pinelabs/types/create_subscription_response_payment_mode.py +5 -0
- pinelabs/types/create_subscription_response_status.py +23 -0
- pinelabs/types/cryptogram_response.py +39 -0
- pinelabs/types/currency_conversion_response.py +56 -0
- pinelabs/types/customer_details.py +59 -0
- pinelabs/types/customer_response.py +83 -0
- pinelabs/types/customer_response_status.py +5 -0
- pinelabs/types/customer_token_detail.py +74 -0
- pinelabs/types/customer_token_detail_payment_method.py +5 -0
- pinelabs/types/customer_tokens_response.py +48 -0
- pinelabs/types/delete_customer_token_response.py +41 -0
- pinelabs/types/delete_token_by_token_id_response.py +31 -0
- pinelabs/types/downpayment_details_response.py +27 -0
- pinelabs/types/downpayment_details_response_downpayment_details.py +47 -0
- pinelabs/types/downpayment_details_response_downpayment_details_allowed_payment_methods_item.py +7 -0
- pinelabs/types/downpayment_details_response_downpayment_details_amount_range.py +25 -0
- pinelabs/types/error_response.py +41 -0
- pinelabs/types/error_response_additional_error_details.py +36 -0
- pinelabs/types/generate_checkout_link_response.py +46 -0
- pinelabs/types/generate_token_response.py +32 -0
- pinelabs/types/get_account_balance_response.py +36 -0
- pinelabs/types/get_card_details_response.py +27 -0
- pinelabs/types/get_payouts_payment_item.py +98 -0
- pinelabs/types/get_payouts_payment_item_mode.py +5 -0
- pinelabs/types/get_payouts_payment_item_status.py +7 -0
- pinelabs/types/get_payouts_response.py +51 -0
- pinelabs/types/imei_product.py +41 -0
- pinelabs/types/imei_validation_response.py +37 -0
- pinelabs/types/imei_validation_response_products_item.py +57 -0
- pinelabs/types/imei_validation_response_products_item_product_brand_response.py +31 -0
- pinelabs/types/imei_validation_response_products_item_product_imei_status.py +5 -0
- pinelabs/types/issuer_offer.py +59 -0
- pinelabs/types/issuer_offer_issuer_data.py +79 -0
- pinelabs/types/issuer_offer_issuer_data_auth_type.py +5 -0
- pinelabs/types/issuer_offer_issuer_data_penny_transaction_amount.py +20 -0
- pinelabs/types/issuer_offer_issuer_type.py +10 -0
- pinelabs/types/list_plans_response.py +31 -0
- pinelabs/types/list_presentations_response.py +31 -0
- pinelabs/types/list_settlements_response.py +42 -0
- pinelabs/types/list_subscriptions_response.py +31 -0
- pinelabs/types/merchant_metadata.py +8 -0
- pinelabs/types/net_banking_data_response.py +32 -0
- pinelabs/types/net_banking_data_response_txn_mode.py +5 -0
- pinelabs/types/offer_discovery_error_response.py +34 -0
- pinelabs/types/offer_discovery_error_response_additional_error_details.py +22 -0
- pinelabs/types/offer_discovery_response.py +27 -0
- pinelabs/types/offer_validation_error_response.py +22 -0
- pinelabs/types/offer_validation_error_response_additional_error_details.py +22 -0
- pinelabs/types/offer_validation_response.py +24 -0
- pinelabs/types/order_response.py +24 -0
- pinelabs/types/order_response_data.py +127 -0
- pinelabs/types/order_response_data_integration_mode.py +5 -0
- pinelabs/types/order_response_data_purchase_details.py +26 -0
- pinelabs/types/order_response_data_status.py +18 -0
- pinelabs/types/order_response_data_type.py +5 -0
- pinelabs/types/otp_generate_response.py +33 -0
- pinelabs/types/otp_generate_response_meta_data.py +26 -0
- pinelabs/types/otp_generate_response_next_item.py +5 -0
- pinelabs/types/page_info.py +41 -0
- pinelabs/types/pagination_links.py +34 -0
- pinelabs/types/pagination_links_first.py +22 -0
- pinelabs/types/pagination_links_last.py +22 -0
- pinelabs/types/pagination_links_next.py +22 -0
- pinelabs/types/pagination_links_self.py +22 -0
- pinelabs/types/pagination_meta.py +41 -0
- pinelabs/types/payment_item.py +87 -0
- pinelabs/types/payment_item_error_detail.py +31 -0
- pinelabs/types/payment_item_payment_method.py +8 -0
- pinelabs/types/payment_item_payment_option.py +28 -0
- pinelabs/types/payment_item_status.py +7 -0
- pinelabs/types/payment_link_account_details.py +24 -0
- pinelabs/types/payment_link_address.py +56 -0
- pinelabs/types/payment_link_bank_details.py +36 -0
- pinelabs/types/payment_link_cart_details.py +27 -0
- pinelabs/types/payment_link_cart_item.py +29 -0
- pinelabs/types/payment_link_customer.py +64 -0
- pinelabs/types/payment_link_product_detail.py +30 -0
- pinelabs/types/payment_link_response.py +113 -0
- pinelabs/types/payment_link_response_allowed_payment_methods_item.py +7 -0
- pinelabs/types/payment_link_response_status.py +8 -0
- pinelabs/types/payment_link_split_detail.py +57 -0
- pinelabs/types/payment_link_split_detail_status.py +5 -0
- pinelabs/types/payment_link_split_info.py +32 -0
- pinelabs/types/payment_object.py +51 -0
- pinelabs/types/payment_object_acquirer_data.py +23 -0
- pinelabs/types/payment_object_payment_amount.py +20 -0
- pinelabs/types/payment_object_payment_method.py +5 -0
- pinelabs/types/payment_object_status.py +7 -0
- pinelabs/types/payment_request_item.py +54 -0
- pinelabs/types/payment_request_item_device_info.py +53 -0
- pinelabs/types/payment_request_item_device_info_operating_system.py +7 -0
- pinelabs/types/payment_request_item_offer_data.py +27 -0
- pinelabs/types/payment_request_item_offer_data_offer_details.py +52 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure.py +136 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_auth_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_cart_coupon_discount_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_convenience_fee_breakdown.py +56 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_convenience_fee_breakdown_additional_fee_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_convenience_fee_breakdown_applicable_fee_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_convenience_fee_breakdown_fee_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_convenience_fee_breakdown_fee_calculated_on_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_convenience_fee_breakdown_maximum_fee_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_convenience_fee_breakdown_subvented_fee_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_convenience_fee_breakdown_tax_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item.py +73 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_after_downpayment_reduced_product_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_cart_coupon_discount_product_share.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount.py +36 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount_breakup.py +34 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount_breakup_brand.py +22 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount_breakup_brand_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount_breakup_dealer.py +22 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount_breakup_dealer_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount_breakup_issuer.py +22 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount_breakup_issuer_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount_breakup_merchant.py +24 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount_breakup_merchant_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount_max_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount_min_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_downpayment_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_interest_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_product_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_product_coupon_discount_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_product_offer_parameters_item.py +21 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention.py +36 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_breakup.py +34 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_breakup_brand.py +22 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_breakup_brand_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_breakup_dealer.py +24 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_breakup_dealer_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_breakup_issuer.py +24 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_breakup_issuer_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_breakup_merchant.py +24 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_breakup_merchant_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_max_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_min_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_downpayment_details.py +28 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_downpayment_details_downpayment_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_intrest_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_loan_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_monthly_emi_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_net_payment_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_processing_fee_details.py +22 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_processing_fee_details_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_split_emi_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_total_coupon_discount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_total_discount_amount.py +20 -0
- pinelabs/types/payment_request_item_offer_data_offer_details_tenure_total_emi_amount.py +20 -0
- pinelabs/types/payment_request_item_payment_method.py +8 -0
- pinelabs/types/payment_request_item_payment_option.py +53 -0
- pinelabs/types/payment_request_item_payment_option_bnpl_details.py +34 -0
- pinelabs/types/payment_request_item_payment_option_bnpl_details_bnpl_pay_code.py +5 -0
- pinelabs/types/payment_request_item_payment_option_card_details.py +51 -0
- pinelabs/types/payment_request_item_payment_option_card_token_details.py +61 -0
- pinelabs/types/payment_request_item_payment_option_cardless_details.py +31 -0
- pinelabs/types/payment_request_item_payment_option_points_card_details.py +36 -0
- pinelabs/types/payout_amount.py +31 -0
- pinelabs/types/payout_detail.py +117 -0
- pinelabs/types/payout_detail_mode.py +5 -0
- pinelabs/types/payout_detail_status.py +7 -0
- pinelabs/types/payout_link.py +31 -0
- pinelabs/types/plan_response.py +96 -0
- pinelabs/types/plan_response_frequency.py +10 -0
- pinelabs/types/plan_response_status.py +5 -0
- pinelabs/types/presentation_detail.py +82 -0
- pinelabs/types/presentation_detail_pdn_status.py +7 -0
- pinelabs/types/presentation_detail_status.py +18 -0
- pinelabs/types/product_detail.py +38 -0
- pinelabs/types/refund_response.py +24 -0
- pinelabs/types/refund_response_data.py +77 -0
- pinelabs/types/refund_response_data_integration_mode.py +5 -0
- pinelabs/types/refund_response_data_order_amount.py +20 -0
- pinelabs/types/refund_response_data_purchase_details.py +24 -0
- pinelabs/types/refund_response_data_purchase_details_customer.py +31 -0
- pinelabs/types/refund_response_data_purchase_details_split_info.py +21 -0
- pinelabs/types/refund_response_data_status.py +5 -0
- pinelabs/types/refund_response_data_type.py +5 -0
- pinelabs/types/resend_otp_error_response.py +36 -0
- pinelabs/types/service_provider_token_response.py +62 -0
- pinelabs/types/service_provider_token_response_payment_method.py +5 -0
- pinelabs/types/service_provider_tokens_list_response.py +32 -0
- pinelabs/types/settlement_by_utr_response.py +146 -0
- pinelabs/types/settlement_by_utr_response_pagination.py +27 -0
- pinelabs/types/settlement_summary.py +76 -0
- pinelabs/types/settlement_transaction.py +96 -0
- pinelabs/types/simple_amount.py +31 -0
- pinelabs/types/split_detail.py +55 -0
- pinelabs/types/split_detail_refund.py +51 -0
- pinelabs/types/split_detail_refund_amount.py +20 -0
- pinelabs/types/split_detail_refund_status.py +5 -0
- pinelabs/types/split_detail_status.py +5 -0
- pinelabs/types/split_info.py +32 -0
- pinelabs/types/split_payment_object.py +49 -0
- pinelabs/types/split_payment_object_acquirer_data.py +22 -0
- pinelabs/types/split_payment_object_additional_detail.py +26 -0
- pinelabs/types/split_payment_object_capture_data_item.py +23 -0
- pinelabs/types/split_payment_object_capture_data_item_capture_amount.py +20 -0
- pinelabs/types/split_payment_object_payment_amount.py +20 -0
- pinelabs/types/split_payment_object_payment_method.py +7 -0
- pinelabs/types/split_payment_object_payment_option.py +20 -0
- pinelabs/types/split_payment_object_payment_option_card_data.py +40 -0
- pinelabs/types/split_payment_object_payment_option_card_data_card_type.py +5 -0
- pinelabs/types/split_payment_object_payment_option_card_data_token_txn_type.py +7 -0
- pinelabs/types/split_payment_object_status.py +7 -0
- pinelabs/types/split_settlement_detail.py +52 -0
- pinelabs/types/split_settlement_detail_amount.py +20 -0
- pinelabs/types/split_settlement_detail_release_amount.py +24 -0
- pinelabs/types/split_settlement_detail_status.py +5 -0
- pinelabs/types/split_settlement_response.py +24 -0
- pinelabs/types/split_settlement_response_data.py +43 -0
- pinelabs/types/split_settlement_response_data_allowed_payment_methods_item.py +7 -0
- pinelabs/types/split_settlement_response_data_integration_mode.py +5 -0
- pinelabs/types/split_settlement_response_data_order_amount.py +20 -0
- pinelabs/types/split_settlement_response_data_purchase_details.py +26 -0
- pinelabs/types/split_settlement_response_data_purchase_details_customer.py +28 -0
- pinelabs/types/split_settlement_response_data_purchase_details_split_info.py +21 -0
- pinelabs/types/split_settlement_response_data_status.py +18 -0
- pinelabs/types/split_settlement_response_data_type.py +5 -0
- pinelabs/types/submit_otp_error_response.py +42 -0
- pinelabs/types/submit_otp_error_response_meta_data.py +26 -0
- pinelabs/types/subscription_amount.py +31 -0
- pinelabs/types/subscription_detail.py +115 -0
- pinelabs/types/subscription_detail_allowed_payment_methods_item.py +7 -0
- pinelabs/types/subscription_detail_integration_mode.py +5 -0
- pinelabs/types/subscription_detail_payment_mode.py +5 -0
- pinelabs/types/subscription_detail_status.py +23 -0
- pinelabs/types/subscription_notification_response.py +56 -0
- pinelabs/types/subscription_notification_response_pdn_status.py +7 -0
- pinelabs/types/subscription_notification_response_status.py +10 -0
- pinelabs/types/tenure.py +127 -0
- pinelabs/types/tenure_auth_amount.py +20 -0
- pinelabs/types/tenure_cart_coupon_discount_amount.py +20 -0
- pinelabs/types/tenure_convenience_fee_breakdown.py +38 -0
- pinelabs/types/tenure_convenience_fee_breakdown_additional_fee_amount.py +20 -0
- pinelabs/types/tenure_convenience_fee_breakdown_applicable_fee_amount.py +20 -0
- pinelabs/types/tenure_convenience_fee_breakdown_fee_amount.py +20 -0
- pinelabs/types/tenure_convenience_fee_breakdown_fee_calculated_on_amount.py +20 -0
- pinelabs/types/tenure_convenience_fee_breakdown_maximum_fee_amount.py +20 -0
- pinelabs/types/tenure_convenience_fee_breakdown_subvented_fee_amount.py +20 -0
- pinelabs/types/tenure_convenience_fee_breakdown_tax_amount.py +20 -0
- pinelabs/types/tenure_details_item.py +49 -0
- pinelabs/types/tenure_details_item_after_downpayment_reduced_product_amount.py +20 -0
- pinelabs/types/tenure_details_item_cart_coupon_discount_product_share.py +20 -0
- pinelabs/types/tenure_details_item_discount.py +33 -0
- pinelabs/types/tenure_details_item_discount_amount.py +20 -0
- pinelabs/types/tenure_details_item_discount_breakup.py +22 -0
- pinelabs/types/tenure_details_item_discount_breakup_brand.py +20 -0
- pinelabs/types/tenure_details_item_discount_breakup_brand_amount.py +20 -0
- pinelabs/types/tenure_details_item_discount_breakup_merchant.py +20 -0
- pinelabs/types/tenure_details_item_discount_breakup_merchant_amount.py +20 -0
- pinelabs/types/tenure_details_item_discount_discount_deferred_duration_type.py +5 -0
- pinelabs/types/tenure_details_item_discount_discount_type.py +5 -0
- pinelabs/types/tenure_details_item_discount_max_amount.py +20 -0
- pinelabs/types/tenure_details_item_downpayment_amount.py +20 -0
- pinelabs/types/tenure_details_item_interest_amount.py +20 -0
- pinelabs/types/tenure_details_item_product_amount.py +20 -0
- pinelabs/types/tenure_details_item_product_coupon_discount_amount.py +20 -0
- pinelabs/types/tenure_details_item_product_offer_parameters_item.py +21 -0
- pinelabs/types/tenure_details_item_subvention.py +31 -0
- pinelabs/types/tenure_details_item_subvention_amount.py +20 -0
- pinelabs/types/tenure_details_item_subvention_breakup.py +20 -0
- pinelabs/types/tenure_details_item_subvention_breakup_brand.py +20 -0
- pinelabs/types/tenure_details_item_subvention_breakup_brand_amount.py +20 -0
- pinelabs/types/tenure_details_item_subvention_max_amount.py +20 -0
- pinelabs/types/tenure_details_item_subvention_min_amount.py +20 -0
- pinelabs/types/tenure_details_item_subvention_offer_type.py +5 -0
- pinelabs/types/tenure_details_item_subvention_subvention_type.py +5 -0
- pinelabs/types/tenure_discount.py +35 -0
- pinelabs/types/tenure_discount_amount.py +20 -0
- pinelabs/types/tenure_discount_breakup.py +26 -0
- pinelabs/types/tenure_discount_breakup_brand.py +20 -0
- pinelabs/types/tenure_discount_breakup_brand_amount.py +20 -0
- pinelabs/types/tenure_discount_breakup_dealer.py +20 -0
- pinelabs/types/tenure_discount_breakup_dealer_amount.py +20 -0
- pinelabs/types/tenure_discount_breakup_issuer.py +20 -0
- pinelabs/types/tenure_discount_breakup_issuer_amount.py +20 -0
- pinelabs/types/tenure_discount_breakup_merchant.py +20 -0
- pinelabs/types/tenure_discount_breakup_merchant_amount.py +20 -0
- pinelabs/types/tenure_discount_discount_deferred_duration_type.py +5 -0
- pinelabs/types/tenure_discount_discount_type.py +5 -0
- pinelabs/types/tenure_discount_max_amount.py +20 -0
- pinelabs/types/tenure_downpayment_details.py +24 -0
- pinelabs/types/tenure_downpayment_details_downpayment_amount.py +20 -0
- pinelabs/types/tenure_emi_type.py +5 -0
- pinelabs/types/tenure_interest_amount.py +20 -0
- pinelabs/types/tenure_issuer_offer_parameters_item.py +32 -0
- pinelabs/types/tenure_loan_amount.py +20 -0
- pinelabs/types/tenure_monthly_emi_amount.py +20 -0
- pinelabs/types/tenure_net_payment_amount.py +20 -0
- pinelabs/types/tenure_processing_fee_amount.py +20 -0
- pinelabs/types/tenure_processing_fee_details.py +25 -0
- pinelabs/types/tenure_processing_fee_details_amount.py +20 -0
- pinelabs/types/tenure_split_emi_amount.py +20 -0
- pinelabs/types/tenure_tenure_type.py +5 -0
- pinelabs/types/tenure_total_coupon_discount.py +20 -0
- pinelabs/types/tenure_total_discount_amount.py +20 -0
- pinelabs/types/tenure_total_down_payment_amount.py +20 -0
- pinelabs/types/tenure_total_emi_amount.py +20 -0
- pinelabs/types/tenure_total_subvention_amount.py +20 -0
- pinelabs/types/token_card_data.py +69 -0
- pinelabs/types/token_card_data_card_type.py +5 -0
- pinelabs/types/token_payment.py +27 -0
- pinelabs/types/token_payment_acquirer_data.py +41 -0
- pinelabs/types/token_payment_option.py +26 -0
- pinelabs/types/token_status.py +5 -0
- pinelabs/types/token_transactional_data.py +46 -0
- pinelabs/types/upi_details_response.py +30 -0
- pinelabs/types/upi_details_response_payer.py +22 -0
- pinelabs/types/upi_details_response_txn_mode.py +5 -0
- pinelabs_python-0.1.0.dist-info/METADATA +213 -0
- pinelabs_python-0.1.0.dist-info/RECORD +626 -0
- pinelabs_python-0.1.0.dist-info/WHEEL +4 -0
- pinelabs_python-0.1.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
from typing import Dict, Generic, TypeVar
|
|
4
|
+
|
|
5
|
+
import httpx
|
|
6
|
+
|
|
7
|
+
# Generic to represent the underlying type of the data wrapped by the HTTP response.
|
|
8
|
+
T = TypeVar("T")
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class BaseHttpResponse:
|
|
12
|
+
"""Minimalist HTTP response wrapper that exposes response headers and status code."""
|
|
13
|
+
|
|
14
|
+
_response: httpx.Response
|
|
15
|
+
|
|
16
|
+
def __init__(self, response: httpx.Response):
|
|
17
|
+
self._response = response
|
|
18
|
+
|
|
19
|
+
@property
|
|
20
|
+
def headers(self) -> Dict[str, str]:
|
|
21
|
+
return dict(self._response.headers)
|
|
22
|
+
|
|
23
|
+
@property
|
|
24
|
+
def status_code(self) -> int:
|
|
25
|
+
return self._response.status_code
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class HttpResponse(Generic[T], BaseHttpResponse):
|
|
29
|
+
"""HTTP response wrapper that exposes response headers and data."""
|
|
30
|
+
|
|
31
|
+
_data: T
|
|
32
|
+
|
|
33
|
+
def __init__(self, response: httpx.Response, data: T):
|
|
34
|
+
super().__init__(response)
|
|
35
|
+
self._data = data
|
|
36
|
+
|
|
37
|
+
@property
|
|
38
|
+
def data(self) -> T:
|
|
39
|
+
return self._data
|
|
40
|
+
|
|
41
|
+
def close(self) -> None:
|
|
42
|
+
self._response.close()
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class AsyncHttpResponse(Generic[T], BaseHttpResponse):
|
|
46
|
+
"""HTTP response wrapper that exposes response headers and data."""
|
|
47
|
+
|
|
48
|
+
_data: T
|
|
49
|
+
|
|
50
|
+
def __init__(self, response: httpx.Response, data: T):
|
|
51
|
+
super().__init__(response)
|
|
52
|
+
self._data = data
|
|
53
|
+
|
|
54
|
+
@property
|
|
55
|
+
def data(self) -> T:
|
|
56
|
+
return self._data
|
|
57
|
+
|
|
58
|
+
async def close(self) -> None:
|
|
59
|
+
await self._response.aclose()
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
# isort: skip_file
|
|
4
|
+
|
|
5
|
+
import typing
|
|
6
|
+
from importlib import import_module
|
|
7
|
+
|
|
8
|
+
if typing.TYPE_CHECKING:
|
|
9
|
+
from ._api import EventSource, aconnect_sse, connect_sse
|
|
10
|
+
from ._exceptions import SSEError
|
|
11
|
+
from ._models import ServerSentEvent
|
|
12
|
+
_dynamic_imports: typing.Dict[str, str] = {
|
|
13
|
+
"EventSource": "._api",
|
|
14
|
+
"SSEError": "._exceptions",
|
|
15
|
+
"ServerSentEvent": "._models",
|
|
16
|
+
"aconnect_sse": "._api",
|
|
17
|
+
"connect_sse": "._api",
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def __getattr__(attr_name: str) -> typing.Any:
|
|
22
|
+
module_name = _dynamic_imports.get(attr_name)
|
|
23
|
+
if module_name is None:
|
|
24
|
+
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
|
|
25
|
+
try:
|
|
26
|
+
module = import_module(module_name, __package__)
|
|
27
|
+
if module_name == f".{attr_name}":
|
|
28
|
+
return module
|
|
29
|
+
else:
|
|
30
|
+
return getattr(module, attr_name)
|
|
31
|
+
except ImportError as e:
|
|
32
|
+
raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
|
|
33
|
+
except AttributeError as e:
|
|
34
|
+
raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def __dir__():
|
|
38
|
+
lazy_attrs = list(_dynamic_imports.keys())
|
|
39
|
+
return sorted(lazy_attrs)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
__all__ = ["EventSource", "SSEError", "ServerSentEvent", "aconnect_sse", "connect_sse"]
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import re
|
|
4
|
+
from contextlib import asynccontextmanager, contextmanager
|
|
5
|
+
from typing import Any, AsyncGenerator, AsyncIterator, Iterator, cast
|
|
6
|
+
|
|
7
|
+
import httpx
|
|
8
|
+
from ._decoders import SSEDecoder
|
|
9
|
+
from ._exceptions import SSEError
|
|
10
|
+
from ._models import ServerSentEvent
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class EventSource:
|
|
14
|
+
def __init__(self, response: httpx.Response) -> None:
|
|
15
|
+
self._response = response
|
|
16
|
+
|
|
17
|
+
def _check_content_type(self) -> None:
|
|
18
|
+
content_type = self._response.headers.get("content-type", "").partition(";")[0]
|
|
19
|
+
if "text/event-stream" not in content_type:
|
|
20
|
+
raise SSEError(
|
|
21
|
+
f"Expected response header Content-Type to contain 'text/event-stream', got {content_type!r}"
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
def _get_charset(self) -> str:
|
|
25
|
+
"""Extract charset from Content-Type header, fallback to UTF-8."""
|
|
26
|
+
content_type = self._response.headers.get("content-type", "")
|
|
27
|
+
|
|
28
|
+
# Parse charset parameter using regex
|
|
29
|
+
charset_match = re.search(r"charset=([^;\s]+)", content_type, re.IGNORECASE)
|
|
30
|
+
if charset_match:
|
|
31
|
+
charset = charset_match.group(1).strip("\"'")
|
|
32
|
+
# Validate that it's a known encoding
|
|
33
|
+
try:
|
|
34
|
+
# Test if the charset is valid by trying to encode/decode
|
|
35
|
+
"test".encode(charset).decode(charset)
|
|
36
|
+
return charset
|
|
37
|
+
except (LookupError, UnicodeError):
|
|
38
|
+
# If charset is invalid, fall back to UTF-8
|
|
39
|
+
pass
|
|
40
|
+
|
|
41
|
+
# Default to UTF-8 if no charset specified or invalid charset
|
|
42
|
+
return "utf-8"
|
|
43
|
+
|
|
44
|
+
@property
|
|
45
|
+
def response(self) -> httpx.Response:
|
|
46
|
+
return self._response
|
|
47
|
+
|
|
48
|
+
def iter_sse(self) -> Iterator[ServerSentEvent]:
|
|
49
|
+
self._check_content_type()
|
|
50
|
+
decoder = SSEDecoder()
|
|
51
|
+
charset = self._get_charset()
|
|
52
|
+
|
|
53
|
+
buffer = ""
|
|
54
|
+
for chunk in self._response.iter_bytes():
|
|
55
|
+
# Decode chunk using detected charset
|
|
56
|
+
text_chunk = chunk.decode(charset, errors="replace")
|
|
57
|
+
buffer += text_chunk
|
|
58
|
+
|
|
59
|
+
# Process complete lines
|
|
60
|
+
while "\n" in buffer:
|
|
61
|
+
line, buffer = buffer.split("\n", 1)
|
|
62
|
+
line = line.rstrip("\r")
|
|
63
|
+
sse = decoder.decode(line)
|
|
64
|
+
# when we reach a "\n\n" => line = ''
|
|
65
|
+
# => decoder will attempt to return an SSE Event
|
|
66
|
+
if sse is not None:
|
|
67
|
+
yield sse
|
|
68
|
+
|
|
69
|
+
# Process any remaining data in buffer
|
|
70
|
+
if buffer.strip():
|
|
71
|
+
line = buffer.rstrip("\r")
|
|
72
|
+
sse = decoder.decode(line)
|
|
73
|
+
if sse is not None:
|
|
74
|
+
yield sse
|
|
75
|
+
|
|
76
|
+
async def aiter_sse(self) -> AsyncGenerator[ServerSentEvent, None]:
|
|
77
|
+
self._check_content_type()
|
|
78
|
+
decoder = SSEDecoder()
|
|
79
|
+
lines = cast(AsyncGenerator[str, None], self._response.aiter_lines())
|
|
80
|
+
try:
|
|
81
|
+
async for line in lines:
|
|
82
|
+
line = line.rstrip("\n")
|
|
83
|
+
sse = decoder.decode(line)
|
|
84
|
+
if sse is not None:
|
|
85
|
+
yield sse
|
|
86
|
+
finally:
|
|
87
|
+
await lines.aclose()
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
@contextmanager
|
|
91
|
+
def connect_sse(client: httpx.Client, method: str, url: str, **kwargs: Any) -> Iterator[EventSource]:
|
|
92
|
+
headers = kwargs.pop("headers", {})
|
|
93
|
+
headers["Accept"] = "text/event-stream"
|
|
94
|
+
headers["Cache-Control"] = "no-store"
|
|
95
|
+
|
|
96
|
+
with client.stream(method, url, headers=headers, **kwargs) as response:
|
|
97
|
+
yield EventSource(response)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
@asynccontextmanager
|
|
101
|
+
async def aconnect_sse(
|
|
102
|
+
client: httpx.AsyncClient,
|
|
103
|
+
method: str,
|
|
104
|
+
url: str,
|
|
105
|
+
**kwargs: Any,
|
|
106
|
+
) -> AsyncIterator[EventSource]:
|
|
107
|
+
headers = kwargs.pop("headers", {})
|
|
108
|
+
headers["Accept"] = "text/event-stream"
|
|
109
|
+
headers["Cache-Control"] = "no-store"
|
|
110
|
+
|
|
111
|
+
async with client.stream(method, url, headers=headers, **kwargs) as response:
|
|
112
|
+
yield EventSource(response)
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
from typing import List, Optional
|
|
4
|
+
|
|
5
|
+
from ._models import ServerSentEvent
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class SSEDecoder:
|
|
9
|
+
def __init__(self) -> None:
|
|
10
|
+
self._event = ""
|
|
11
|
+
self._data: List[str] = []
|
|
12
|
+
self._last_event_id = ""
|
|
13
|
+
self._retry: Optional[int] = None
|
|
14
|
+
|
|
15
|
+
def decode(self, line: str) -> Optional[ServerSentEvent]:
|
|
16
|
+
# See: https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation # noqa: E501
|
|
17
|
+
|
|
18
|
+
if not line:
|
|
19
|
+
if not self._event and not self._data and not self._last_event_id and self._retry is None:
|
|
20
|
+
return None
|
|
21
|
+
|
|
22
|
+
sse = ServerSentEvent(
|
|
23
|
+
event=self._event,
|
|
24
|
+
data="\n".join(self._data),
|
|
25
|
+
id=self._last_event_id,
|
|
26
|
+
retry=self._retry,
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
# NOTE: as per the SSE spec, do not reset last_event_id.
|
|
30
|
+
self._event = ""
|
|
31
|
+
self._data = []
|
|
32
|
+
self._retry = None
|
|
33
|
+
|
|
34
|
+
return sse
|
|
35
|
+
|
|
36
|
+
if line.startswith(":"):
|
|
37
|
+
return None
|
|
38
|
+
|
|
39
|
+
fieldname, _, value = line.partition(":")
|
|
40
|
+
|
|
41
|
+
if value.startswith(" "):
|
|
42
|
+
value = value[1:]
|
|
43
|
+
|
|
44
|
+
if fieldname == "event":
|
|
45
|
+
self._event = value
|
|
46
|
+
elif fieldname == "data":
|
|
47
|
+
self._data.append(value)
|
|
48
|
+
elif fieldname == "id":
|
|
49
|
+
if "\0" in value:
|
|
50
|
+
pass
|
|
51
|
+
else:
|
|
52
|
+
self._last_event_id = value
|
|
53
|
+
elif fieldname == "retry":
|
|
54
|
+
try:
|
|
55
|
+
self._retry = int(value)
|
|
56
|
+
except (TypeError, ValueError):
|
|
57
|
+
pass
|
|
58
|
+
else:
|
|
59
|
+
pass # Field is ignored.
|
|
60
|
+
|
|
61
|
+
return None
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
from dataclasses import dataclass
|
|
5
|
+
from typing import Any, Optional
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass(frozen=True)
|
|
9
|
+
class ServerSentEvent:
|
|
10
|
+
event: str = "message"
|
|
11
|
+
data: str = ""
|
|
12
|
+
id: str = ""
|
|
13
|
+
retry: Optional[int] = None
|
|
14
|
+
|
|
15
|
+
def json(self) -> Any:
|
|
16
|
+
"""Parse the data field as JSON."""
|
|
17
|
+
return json.loads(self.data)
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
jsonable_encoder converts a Python object to a JSON-friendly dict
|
|
5
|
+
(e.g. datetimes to strings, Pydantic models to dicts).
|
|
6
|
+
|
|
7
|
+
Taken from FastAPI, and made a bit simpler
|
|
8
|
+
https://github.com/tiangolo/fastapi/blob/master/fastapi/encoders.py
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import base64
|
|
12
|
+
import dataclasses
|
|
13
|
+
import datetime as dt
|
|
14
|
+
from enum import Enum
|
|
15
|
+
from pathlib import PurePath
|
|
16
|
+
from types import GeneratorType
|
|
17
|
+
from typing import Any, Callable, Dict, List, Optional, Set, Union
|
|
18
|
+
|
|
19
|
+
import pydantic
|
|
20
|
+
from .datetime_utils import serialize_datetime
|
|
21
|
+
from .pydantic_utilities import (
|
|
22
|
+
IS_PYDANTIC_V2,
|
|
23
|
+
encode_by_type,
|
|
24
|
+
to_jsonable_with_fallback,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
SetIntStr = Set[Union[int, str]]
|
|
28
|
+
DictIntStrAny = Dict[Union[int, str], Any]
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def jsonable_encoder(obj: Any, custom_encoder: Optional[Dict[Any, Callable[[Any], Any]]] = None) -> Any:
|
|
32
|
+
custom_encoder = custom_encoder or {}
|
|
33
|
+
# Generated SDKs use Ellipsis (`...`) as the sentinel value for "OMIT".
|
|
34
|
+
# OMIT values should be excluded from serialized payloads.
|
|
35
|
+
if obj is Ellipsis:
|
|
36
|
+
return None
|
|
37
|
+
if custom_encoder:
|
|
38
|
+
if type(obj) in custom_encoder:
|
|
39
|
+
return custom_encoder[type(obj)](obj)
|
|
40
|
+
else:
|
|
41
|
+
for encoder_type, encoder_instance in custom_encoder.items():
|
|
42
|
+
if isinstance(obj, encoder_type):
|
|
43
|
+
return encoder_instance(obj)
|
|
44
|
+
if isinstance(obj, pydantic.BaseModel):
|
|
45
|
+
if IS_PYDANTIC_V2:
|
|
46
|
+
encoder = getattr(obj.model_config, "json_encoders", {}) # type: ignore # Pydantic v2
|
|
47
|
+
else:
|
|
48
|
+
encoder = getattr(obj.__config__, "json_encoders", {}) # type: ignore # Pydantic v1
|
|
49
|
+
if custom_encoder:
|
|
50
|
+
encoder.update(custom_encoder)
|
|
51
|
+
obj_dict = obj.dict(by_alias=True)
|
|
52
|
+
if "__root__" in obj_dict:
|
|
53
|
+
obj_dict = obj_dict["__root__"]
|
|
54
|
+
if "root" in obj_dict:
|
|
55
|
+
obj_dict = obj_dict["root"]
|
|
56
|
+
return jsonable_encoder(obj_dict, custom_encoder=encoder)
|
|
57
|
+
if dataclasses.is_dataclass(obj):
|
|
58
|
+
obj_dict = dataclasses.asdict(obj) # type: ignore
|
|
59
|
+
return jsonable_encoder(obj_dict, custom_encoder=custom_encoder)
|
|
60
|
+
if isinstance(obj, bytes):
|
|
61
|
+
return base64.b64encode(obj).decode("utf-8")
|
|
62
|
+
if isinstance(obj, Enum):
|
|
63
|
+
return obj.value
|
|
64
|
+
if isinstance(obj, PurePath):
|
|
65
|
+
return str(obj)
|
|
66
|
+
if isinstance(obj, (str, int, float, type(None))):
|
|
67
|
+
return obj
|
|
68
|
+
if isinstance(obj, dt.datetime):
|
|
69
|
+
return serialize_datetime(obj)
|
|
70
|
+
if isinstance(obj, dt.date):
|
|
71
|
+
return str(obj)
|
|
72
|
+
if isinstance(obj, dict):
|
|
73
|
+
encoded_dict = {}
|
|
74
|
+
allowed_keys = set(obj.keys())
|
|
75
|
+
for key, value in obj.items():
|
|
76
|
+
if key in allowed_keys:
|
|
77
|
+
if value is Ellipsis:
|
|
78
|
+
continue
|
|
79
|
+
encoded_key = jsonable_encoder(key, custom_encoder=custom_encoder)
|
|
80
|
+
encoded_value = jsonable_encoder(value, custom_encoder=custom_encoder)
|
|
81
|
+
encoded_dict[encoded_key] = encoded_value
|
|
82
|
+
return encoded_dict
|
|
83
|
+
if isinstance(obj, (list, set, frozenset, GeneratorType, tuple)):
|
|
84
|
+
encoded_list = []
|
|
85
|
+
for item in obj:
|
|
86
|
+
if item is Ellipsis:
|
|
87
|
+
continue
|
|
88
|
+
encoded_list.append(jsonable_encoder(item, custom_encoder=custom_encoder))
|
|
89
|
+
return encoded_list
|
|
90
|
+
|
|
91
|
+
def fallback_serializer(o: Any) -> Any:
|
|
92
|
+
attempt_encode = encode_by_type(o)
|
|
93
|
+
if attempt_encode is not None:
|
|
94
|
+
return attempt_encode
|
|
95
|
+
|
|
96
|
+
try:
|
|
97
|
+
data = dict(o)
|
|
98
|
+
except Exception as e:
|
|
99
|
+
errors: List[Exception] = []
|
|
100
|
+
errors.append(e)
|
|
101
|
+
try:
|
|
102
|
+
data = vars(o)
|
|
103
|
+
except Exception as e:
|
|
104
|
+
errors.append(e)
|
|
105
|
+
raise ValueError(errors) from e
|
|
106
|
+
return jsonable_encoder(data, custom_encoder=custom_encoder)
|
|
107
|
+
|
|
108
|
+
return to_jsonable_with_fallback(obj, fallback_serializer)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def encode_path_param(obj: Any) -> str:
|
|
112
|
+
"""Encode a value for use in a URL path segment.
|
|
113
|
+
|
|
114
|
+
Ensures proper string conversion for all types, including
|
|
115
|
+
booleans which need lowercase 'true'/'false' rather than
|
|
116
|
+
Python's 'True'/'False'.
|
|
117
|
+
"""
|
|
118
|
+
if isinstance(obj, bool):
|
|
119
|
+
return "true" if obj else "false"
|
|
120
|
+
return str(jsonable_encoder(obj))
|
pinelabs/core/logging.py
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
import typing
|
|
5
|
+
|
|
6
|
+
LogLevel = typing.Literal["debug", "info", "warn", "error"]
|
|
7
|
+
|
|
8
|
+
_LOG_LEVEL_MAP: typing.Dict[LogLevel, int] = {
|
|
9
|
+
"debug": 1,
|
|
10
|
+
"info": 2,
|
|
11
|
+
"warn": 3,
|
|
12
|
+
"error": 4,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class ILogger(typing.Protocol):
|
|
17
|
+
def debug(self, message: str, **kwargs: typing.Any) -> None: ...
|
|
18
|
+
def info(self, message: str, **kwargs: typing.Any) -> None: ...
|
|
19
|
+
def warn(self, message: str, **kwargs: typing.Any) -> None: ...
|
|
20
|
+
def error(self, message: str, **kwargs: typing.Any) -> None: ...
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ConsoleLogger:
|
|
24
|
+
_logger: logging.Logger
|
|
25
|
+
|
|
26
|
+
def __init__(self) -> None:
|
|
27
|
+
self._logger = logging.getLogger("fern")
|
|
28
|
+
if not self._logger.handlers:
|
|
29
|
+
handler = logging.StreamHandler()
|
|
30
|
+
handler.setFormatter(logging.Formatter("%(levelname)s - %(message)s"))
|
|
31
|
+
self._logger.addHandler(handler)
|
|
32
|
+
self._logger.setLevel(logging.DEBUG)
|
|
33
|
+
|
|
34
|
+
def debug(self, message: str, **kwargs: typing.Any) -> None:
|
|
35
|
+
self._logger.debug(message, extra=kwargs)
|
|
36
|
+
|
|
37
|
+
def info(self, message: str, **kwargs: typing.Any) -> None:
|
|
38
|
+
self._logger.info(message, extra=kwargs)
|
|
39
|
+
|
|
40
|
+
def warn(self, message: str, **kwargs: typing.Any) -> None:
|
|
41
|
+
self._logger.warning(message, extra=kwargs)
|
|
42
|
+
|
|
43
|
+
def error(self, message: str, **kwargs: typing.Any) -> None:
|
|
44
|
+
self._logger.error(message, extra=kwargs)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class LogConfig(typing.TypedDict, total=False):
|
|
48
|
+
level: LogLevel
|
|
49
|
+
logger: ILogger
|
|
50
|
+
silent: bool
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class Logger:
|
|
54
|
+
_level: int
|
|
55
|
+
_logger: ILogger
|
|
56
|
+
_silent: bool
|
|
57
|
+
|
|
58
|
+
def __init__(self, *, level: LogLevel, logger: ILogger, silent: bool) -> None:
|
|
59
|
+
self._level = _LOG_LEVEL_MAP[level]
|
|
60
|
+
self._logger = logger
|
|
61
|
+
self._silent = silent
|
|
62
|
+
|
|
63
|
+
def _should_log(self, level: LogLevel) -> bool:
|
|
64
|
+
return not self._silent and self._level <= _LOG_LEVEL_MAP[level]
|
|
65
|
+
|
|
66
|
+
def is_debug(self) -> bool:
|
|
67
|
+
return self._should_log("debug")
|
|
68
|
+
|
|
69
|
+
def is_info(self) -> bool:
|
|
70
|
+
return self._should_log("info")
|
|
71
|
+
|
|
72
|
+
def is_warn(self) -> bool:
|
|
73
|
+
return self._should_log("warn")
|
|
74
|
+
|
|
75
|
+
def is_error(self) -> bool:
|
|
76
|
+
return self._should_log("error")
|
|
77
|
+
|
|
78
|
+
def debug(self, message: str, **kwargs: typing.Any) -> None:
|
|
79
|
+
if self.is_debug():
|
|
80
|
+
self._logger.debug(message, **kwargs)
|
|
81
|
+
|
|
82
|
+
def info(self, message: str, **kwargs: typing.Any) -> None:
|
|
83
|
+
if self.is_info():
|
|
84
|
+
self._logger.info(message, **kwargs)
|
|
85
|
+
|
|
86
|
+
def warn(self, message: str, **kwargs: typing.Any) -> None:
|
|
87
|
+
if self.is_warn():
|
|
88
|
+
self._logger.warn(message, **kwargs)
|
|
89
|
+
|
|
90
|
+
def error(self, message: str, **kwargs: typing.Any) -> None:
|
|
91
|
+
if self.is_error():
|
|
92
|
+
self._logger.error(message, **kwargs)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
_default_logger: Logger = Logger(level="info", logger=ConsoleLogger(), silent=True)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def create_logger(config: typing.Optional[typing.Union[LogConfig, Logger]] = None) -> Logger:
|
|
99
|
+
if config is None:
|
|
100
|
+
return _default_logger
|
|
101
|
+
if isinstance(config, Logger):
|
|
102
|
+
return config
|
|
103
|
+
return Logger(
|
|
104
|
+
level=config.get("level", "info"),
|
|
105
|
+
logger=config.get("logger", ConsoleLogger()),
|
|
106
|
+
silent=config.get("silent", True),
|
|
107
|
+
)
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
from typing import Any, Dict, Optional
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ParsingError(Exception):
|
|
7
|
+
"""
|
|
8
|
+
Raised when the SDK fails to parse/validate a response from the server.
|
|
9
|
+
This typically indicates that the server returned a response whose shape
|
|
10
|
+
does not match the expected schema.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
headers: Optional[Dict[str, str]]
|
|
14
|
+
status_code: Optional[int]
|
|
15
|
+
body: Any
|
|
16
|
+
cause: Optional[Exception]
|
|
17
|
+
|
|
18
|
+
def __init__(
|
|
19
|
+
self,
|
|
20
|
+
*,
|
|
21
|
+
headers: Optional[Dict[str, str]] = None,
|
|
22
|
+
status_code: Optional[int] = None,
|
|
23
|
+
body: Any = None,
|
|
24
|
+
cause: Optional[Exception] = None,
|
|
25
|
+
) -> None:
|
|
26
|
+
self.headers = headers
|
|
27
|
+
self.status_code = status_code
|
|
28
|
+
self.body = body
|
|
29
|
+
self.cause = cause
|
|
30
|
+
super().__init__()
|
|
31
|
+
if cause is not None:
|
|
32
|
+
self.__cause__ = cause
|
|
33
|
+
|
|
34
|
+
def __str__(self) -> str:
|
|
35
|
+
cause_str = f", cause: {self.cause}" if self.cause is not None else ""
|
|
36
|
+
return f"headers: {self.headers}, status_code: {self.status_code}, body: {self.body}{cause_str}"
|