dana-python 2.1.8__tar.gz → 2.1.10__tar.gz
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.
- {dana_python-2.1.8/dana_python.egg-info → dana_python-2.1.10}/PKG-INFO +1 -1
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/webhook/shop_info.py +1 -1
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/webhook/webhook.py +191 -45
- {dana_python-2.1.8 → dana_python-2.1.10/dana_python.egg-info}/PKG-INFO +1 -1
- {dana_python-2.1.8 → dana_python-2.1.10}/pyproject.toml +1 -1
- {dana_python-2.1.8 → dana_python-2.1.10}/tests/test_merchant_management_api.py +22 -1
- dana_python-2.1.10/tests/test_webhook.py +314 -0
- dana_python-2.1.8/tests/test_webhook.py +0 -111
- {dana_python-2.1.8 → dana_python-2.1.10}/LICENSE +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/README.md +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/__init__.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/api_client.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/api_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/base/__init__.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/base/configuration.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/base/model.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/base/types.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/__init__.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/__init__.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/api/__init__.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/api/disbursement_api.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/enum.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/models/__init__.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/models/bank_account_inquiry_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/models/bank_account_inquiry_request_additional_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/models/bank_account_inquiry_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/models/bank_account_inquiry_response_additional_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/models/dana_account_inquiry_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/models/dana_account_inquiry_request_additional_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/models/dana_account_inquiry_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/models/money.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/models/transfer_to_bank_inquiry_status_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/models/transfer_to_bank_inquiry_status_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/models/transfer_to_bank_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/models/transfer_to_bank_request_additional_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/models/transfer_to_bank_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/models/transfer_to_dana_inquiry_status_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/models/transfer_to_dana_inquiry_status_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/models/transfer_to_dana_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/models/transfer_to_dana_request_additional_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/disbursement/v1/models/transfer_to_dana_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/exceptions.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/__init__.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/__init__.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/api/__init__.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/api/merchant_management_api.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/enum.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/__init__.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/address_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/asset_card_list_item.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/business_docs.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/create_division_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/create_division_request_ext_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/create_division_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/create_division_response_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/create_division_response_response_body.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/create_division_response_response_head.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/create_shop_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/create_shop_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/create_shop_response_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/create_shop_response_response_body.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/create_shop_response_response_head.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/division_resource_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/member_asset_result_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/merchant_account_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/merchant_certificate_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/merchant_contact_address.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/merchant_contact_email.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/merchant_contact_mobile_no.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/merchant_corporate_certificate.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/merchant_information.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/merchant_resource_information.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/mobile_no_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/pic_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_asset_card_list_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_asset_card_list_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_asset_card_list_response_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_asset_card_list_response_response_body.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_asset_card_list_response_response_head.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_division_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_division_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_division_response_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_division_response_response_body.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_division_response_response_head.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_merchant_info_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_merchant_info_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_merchant_info_response_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_merchant_info_response_response_body.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_merchant_info_response_response_head.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_merchant_resource_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_merchant_resource_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_merchant_resource_response_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_merchant_resource_response_response_body.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_merchant_resource_response_response_head.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_shop_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_shop_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_shop_response_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_shop_response_response_body.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/query_shop_response_response_head.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/result_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/shop_resource_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/update_division_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/update_division_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/update_division_response_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/update_division_response_response_body.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/update_division_response_response_head.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/update_shop_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/update_shop_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/update_shop_response_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/update_shop_response_response_head.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/merchant_management/v1/models/user_name.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/__init__.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/__init__.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/api/__init__.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/api/payment_gateway_api.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/custom_validation.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/enum.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/__init__.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/actor_context.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/amount_detail.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/audit_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/buyer.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/cancel_order_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/cancel_order_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/consult_pay_payment_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/consult_pay_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/consult_pay_request_additional_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/consult_pay_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/create_order_by_api_additional_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/create_order_by_api_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/create_order_by_redirect_additional_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/create_order_by_redirect_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/create_order_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/create_order_response_additional_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/env_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/goods.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/money.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/order_api_object.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/order_redirect_object.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/pay_option_additional_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/pay_option_detail.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/pay_option_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/payment_view.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/promo_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/query_payment_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/query_payment_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/query_payment_response_additional_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/refund_option_bill.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/refund_order_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/refund_order_request_additional_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/refund_order_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/seller.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/shipping_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/status_detail.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/time_detail.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/url_param.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/payment_gateway/v1/models/virtual_account_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/rest.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/utils/date_validation.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/utils/models.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/utils/open_api_configuration.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/utils/open_api_header.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/utils/script.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/utils/snap_configuration.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/utils/snap_header.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/utils/url.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/webhook/__init__.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/webhook/finish_notify_payment_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/webhook/finish_notify_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/webhook/finish_notify_request_additional_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/webhook/finish_notify_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/webhook/money.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/webhook/pay_option_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/__init__.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/__init__.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/api/__init__.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/api/widget_api.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/custom_validation.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/enum.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/__init__.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/account_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/account_unbinding_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/account_unbinding_request_additional_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/account_unbinding_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/amount_detail.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/apply_ott_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/apply_ott_request_additional_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/apply_ott_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/apply_ott_response_user_resources_inner.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/apply_token_authorization_code_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/apply_token_refresh_token_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/apply_token_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/apply_token_response_additional_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/apply_token_response_additional_info_user_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/balance_inquiry_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/balance_inquiry_request_additional_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/balance_inquiry_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/buyer.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/cancel_order_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/cancel_order_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/env_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/goods.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/international_order_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/international_order_info_exchange_rate.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/money.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/oauth2_url_data.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/oauth2_url_data_seamless_data.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/order.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/pay_option_detail.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/pay_option_detail_additional_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/pay_option_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/payment_promo_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/payment_view.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/query_payment_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/query_payment_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/query_payment_response_additional_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/query_user_profile_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/query_user_profile_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/query_user_profile_response_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/query_user_profile_response_response_body.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/query_user_profile_response_response_head.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/refund_order_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/refund_order_request_additional_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/refund_order_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/refund_promo_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/result_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/seller.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/service_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/shipping_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/status_detail.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/time_detail.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/url_param.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/user_resource_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/virtual_account_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/widget_payment_request.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/widget_payment_request_additional_info.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/models/widget_payment_response.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana/widget/v1/util.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana_python.egg-info/SOURCES.txt +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana_python.egg-info/dependency_links.txt +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana_python.egg-info/requires.txt +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/dana_python.egg-info/top_level.txt +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/setup.cfg +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/tests/test_disbursement_api.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/tests/test_payment_gateway_api.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/tests/test_payment_gateway_with_automation.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/tests/test_snap_header.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/tests/test_widget_api.py +0 -0
- {dana_python-2.1.8 → dana_python-2.1.10}/tests/test_widget_with_automation.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dana-python
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.10
|
|
4
4
|
Summary: API Client (SDK) for DANA APIs based on https://dashboard.dana.id/api-docs
|
|
5
5
|
Author-email: DANA Package Manager <package-manager@dana.id>
|
|
6
6
|
Maintainer-email: DANA Package Manager <package-manager@dana.id>
|
|
@@ -36,7 +36,7 @@ class ShopInfo(BaseModel, BaseSdkModel):
|
|
|
36
36
|
shop_id: Optional[Annotated[str, Field(strict=True, max_length=64)]] = Field(default=None, description="Information of shop identifier. Required if externalShopId is blank")
|
|
37
37
|
external_shop_id: Optional[Annotated[str, Field(strict=True, max_length=64)]] = Field(default=None, description="Information of external shop identifier. Required if shopId is blank")
|
|
38
38
|
operator_id: Optional[Annotated[str, Field(strict=True, max_length=32)]] = Field(default=None, description="Information of operator identifier")
|
|
39
|
-
shop_address: Optional[
|
|
39
|
+
shop_address: Optional[str] = Field(default=None, description="Information of shop address")
|
|
40
40
|
division_id: Optional[Annotated[str, Field(strict=True, max_length=64)]] = Field(default=None, description="Information of division identifier")
|
|
41
41
|
external_division_id: Optional[Annotated[str, Field(strict=True, max_length=64)]] = Field(default=None, description="Information of external division identifier")
|
|
42
42
|
division_type: Optional[Annotated[str, Field(strict=True, max_length=32)]] = Field(default=None, description="Information of division type")
|
|
@@ -141,6 +141,27 @@ class WebhookParser:
|
|
|
141
141
|
except Exception as e:
|
|
142
142
|
return "", Exception(f"MinifyJSON: failed to marshal JSON for minification: {e}")
|
|
143
143
|
|
|
144
|
+
@staticmethod
|
|
145
|
+
def _has_triple_escaped_json_string_field(json_str: str) -> bool:
|
|
146
|
+
return '":"{\\\\\\"' in json_str
|
|
147
|
+
|
|
148
|
+
@staticmethod
|
|
149
|
+
def _process_over_escaped_minified_json(json_str: str) -> str:
|
|
150
|
+
normalized = json_str.replace('\\\\"', '"')
|
|
151
|
+
return WebhookParser._process_nested_json_fields(normalized)
|
|
152
|
+
|
|
153
|
+
@staticmethod
|
|
154
|
+
def _process_nested_json_fields(json_str: str) -> str:
|
|
155
|
+
normalized_str = json_str.replace('\\\\"', '\\"')
|
|
156
|
+
|
|
157
|
+
def replace_func(match):
|
|
158
|
+
field_name = match.group(1)
|
|
159
|
+
json_value = match.group(2)
|
|
160
|
+
escaped_value = json_value.replace('"', '\\"')
|
|
161
|
+
return f'"{field_name}":"{escaped_value}"'
|
|
162
|
+
|
|
163
|
+
return re.sub(r'"(\w+)":"(\{.*?\})"', replace_func, normalized_str)
|
|
164
|
+
|
|
144
165
|
@staticmethod
|
|
145
166
|
def _ensure_minified_json(json_str: str) -> tuple[str, Exception]:
|
|
146
167
|
"""
|
|
@@ -148,27 +169,127 @@ class WebhookParser:
|
|
|
148
169
|
Returns tuple of (minified_json, error)
|
|
149
170
|
"""
|
|
150
171
|
try:
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
processed_str = re.sub(pattern, replace_func, normalized_str)
|
|
161
|
-
|
|
172
|
+
if WebhookParser._is_json_minified(json_str) and not WebhookParser._has_triple_escaped_json_string_field(json_str):
|
|
173
|
+
return json_str, None
|
|
174
|
+
|
|
175
|
+
if WebhookParser._is_json_minified(json_str):
|
|
176
|
+
return WebhookParser._process_over_escaped_minified_json(json_str), None
|
|
177
|
+
|
|
178
|
+
normalized_str = json_str.replace('\\\\"', '\\"')
|
|
179
|
+
processed_str = WebhookParser._process_nested_json_fields(normalized_str)
|
|
180
|
+
|
|
162
181
|
if WebhookParser._is_json_minified(processed_str):
|
|
163
182
|
return processed_str, None
|
|
164
|
-
|
|
183
|
+
|
|
165
184
|
return WebhookParser._minify_json(processed_str)
|
|
166
|
-
|
|
185
|
+
|
|
167
186
|
except json.JSONDecodeError as e:
|
|
168
187
|
return "", Exception(f"EnsureMinifiedJSON: failed to unmarshal JSON: {e}")
|
|
169
188
|
except Exception as e:
|
|
170
189
|
return "", Exception(f"EnsureMinifiedJSON: failed to marshal JSON for minification: {e}")
|
|
171
190
|
|
|
191
|
+
@staticmethod
|
|
192
|
+
def _is_valid_json(json_str: str) -> bool:
|
|
193
|
+
try:
|
|
194
|
+
json.loads(json_str)
|
|
195
|
+
return True
|
|
196
|
+
except json.JSONDecodeError:
|
|
197
|
+
return False
|
|
198
|
+
|
|
199
|
+
@staticmethod
|
|
200
|
+
def _collapse_triple_backslash_quotes(s: str) -> str:
|
|
201
|
+
if '\\\\\\"' not in s:
|
|
202
|
+
return s
|
|
203
|
+
return s.replace('\\\\\\"', '\\"')
|
|
204
|
+
|
|
205
|
+
@staticmethod
|
|
206
|
+
def _collapse_double_backslash_quotes(s: str) -> str:
|
|
207
|
+
if '\\\\"' not in s:
|
|
208
|
+
return s
|
|
209
|
+
return s.replace('\\\\"', '"')
|
|
210
|
+
|
|
211
|
+
@staticmethod
|
|
212
|
+
def _remove_colon_space_before_quoted_value(s: str) -> str:
|
|
213
|
+
if ': \\"' not in s:
|
|
214
|
+
return s
|
|
215
|
+
return s.replace(': \\"', ':\\"')
|
|
216
|
+
|
|
217
|
+
@staticmethod
|
|
218
|
+
def _normalize_over_escaped_quotes(s: str) -> str:
|
|
219
|
+
if '\\\\"' in s:
|
|
220
|
+
return s.replace('\\\\"', '\\"')
|
|
221
|
+
return s
|
|
222
|
+
|
|
223
|
+
@staticmethod
|
|
224
|
+
def _remove_spaces_in_json_key_names(body: str) -> str:
|
|
225
|
+
return re.sub(
|
|
226
|
+
r'(\\*)"((?:\w+\s)+\w+)(\\*)"(\s*:)',
|
|
227
|
+
lambda m: m.group(1) + '"' + m.group(2).replace(' ', '') + m.group(3) + '"' + m.group(4),
|
|
228
|
+
body
|
|
229
|
+
)
|
|
230
|
+
|
|
231
|
+
@staticmethod
|
|
232
|
+
def _body_forms_for_signature(request_body: str) -> list[str]:
|
|
233
|
+
seen: set[str] = set()
|
|
234
|
+
forms: list[str] = []
|
|
235
|
+
|
|
236
|
+
def add(form: str) -> None:
|
|
237
|
+
if form and form not in seen:
|
|
238
|
+
seen.add(form)
|
|
239
|
+
forms.append(form)
|
|
240
|
+
|
|
241
|
+
collapsed = WebhookParser._collapse_triple_backslash_quotes(request_body)
|
|
242
|
+
if collapsed != request_body and WebhookParser._is_valid_json(collapsed):
|
|
243
|
+
add(collapsed)
|
|
244
|
+
|
|
245
|
+
collapsed_spaced = WebhookParser._remove_colon_space_before_quoted_value(collapsed)
|
|
246
|
+
if collapsed_spaced != request_body and WebhookParser._is_valid_json(collapsed_spaced):
|
|
247
|
+
add(collapsed_spaced)
|
|
248
|
+
|
|
249
|
+
collapsed = WebhookParser._collapse_double_backslash_quotes(request_body)
|
|
250
|
+
if collapsed != request_body and WebhookParser._is_valid_json(collapsed):
|
|
251
|
+
add(collapsed)
|
|
252
|
+
|
|
253
|
+
spaced = WebhookParser._remove_colon_space_before_quoted_value(request_body)
|
|
254
|
+
if spaced != request_body and WebhookParser._is_valid_json(spaced):
|
|
255
|
+
add(spaced)
|
|
256
|
+
|
|
257
|
+
collapsed = WebhookParser._collapse_triple_backslash_quotes(spaced)
|
|
258
|
+
if collapsed != request_body and WebhookParser._is_valid_json(collapsed):
|
|
259
|
+
add(collapsed)
|
|
260
|
+
|
|
261
|
+
if WebhookParser._is_valid_json(request_body):
|
|
262
|
+
add(request_body)
|
|
263
|
+
|
|
264
|
+
normalized = WebhookParser._normalize_over_escaped_quotes(request_body)
|
|
265
|
+
if normalized != request_body and WebhookParser._is_json_minified(normalized) and WebhookParser._is_valid_json(normalized):
|
|
266
|
+
add(normalized)
|
|
267
|
+
|
|
268
|
+
nested_processed = WebhookParser._process_nested_json_fields(request_body)
|
|
269
|
+
if nested_processed != request_body:
|
|
270
|
+
add(nested_processed)
|
|
271
|
+
|
|
272
|
+
key_despace = WebhookParser._remove_spaces_in_json_key_names(request_body)
|
|
273
|
+
if key_despace != request_body:
|
|
274
|
+
add(key_despace)
|
|
275
|
+
|
|
276
|
+
key_despace_collapsed = WebhookParser._remove_spaces_in_json_key_names(
|
|
277
|
+
WebhookParser._collapse_triple_backslash_quotes(request_body)
|
|
278
|
+
)
|
|
279
|
+
if key_despace_collapsed != request_body:
|
|
280
|
+
add(key_despace_collapsed)
|
|
281
|
+
|
|
282
|
+
minified, err = WebhookParser._ensure_minified_json(request_body)
|
|
283
|
+
if err:
|
|
284
|
+
if not forms:
|
|
285
|
+
raise ValueError("failed to prepare any signature body form") from err
|
|
286
|
+
else:
|
|
287
|
+
add(minified)
|
|
288
|
+
|
|
289
|
+
if not forms:
|
|
290
|
+
raise ValueError("failed to prepare any signature body form")
|
|
291
|
+
return forms
|
|
292
|
+
|
|
172
293
|
@staticmethod
|
|
173
294
|
def _sha256_lower_hex(data: str) -> str:
|
|
174
295
|
return hashlib.sha256(data.encode("utf-8")).hexdigest()
|
|
@@ -179,13 +300,38 @@ class WebhookParser:
|
|
|
179
300
|
relative_path_url: str,
|
|
180
301
|
body: str,
|
|
181
302
|
x_timestamp: str
|
|
182
|
-
) ->
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
303
|
+
) -> str:
|
|
304
|
+
path = relative_path_url if relative_path_url.startswith("/") else f"/{relative_path_url}"
|
|
305
|
+
body_hash = self._sha256_lower_hex(body)
|
|
306
|
+
return f"{http_method.upper()}:{path}:{body_hash}:{x_timestamp}"
|
|
307
|
+
|
|
308
|
+
def _verify_signature(
|
|
309
|
+
self,
|
|
310
|
+
http_method: str,
|
|
311
|
+
relative_path_url: str,
|
|
312
|
+
body: str,
|
|
313
|
+
x_timestamp: str,
|
|
314
|
+
x_signature: str,
|
|
315
|
+
) -> None:
|
|
316
|
+
body_forms = self._body_forms_for_signature(body)
|
|
317
|
+
signature_bytes = base64.b64decode(x_signature)
|
|
318
|
+
|
|
319
|
+
for body_form in body_forms:
|
|
320
|
+
string_to_verify = self._construct_string_to_verify(
|
|
321
|
+
http_method, relative_path_url, body_form, x_timestamp
|
|
322
|
+
)
|
|
323
|
+
try:
|
|
324
|
+
self.public_key.verify(
|
|
325
|
+
signature_bytes,
|
|
326
|
+
string_to_verify.encode("utf-8"),
|
|
327
|
+
padding.PKCS1v15(),
|
|
328
|
+
hashes.SHA256(),
|
|
329
|
+
)
|
|
330
|
+
return
|
|
331
|
+
except InvalidSignature:
|
|
332
|
+
continue
|
|
333
|
+
|
|
334
|
+
raise ValueError("Signature verification failed.")
|
|
189
335
|
|
|
190
336
|
def parse_webhook(
|
|
191
337
|
self,
|
|
@@ -200,33 +346,33 @@ class WebhookParser:
|
|
|
200
346
|
if not x_signature or not x_timestamp:
|
|
201
347
|
raise ValueError("Missing X-SIGNATURE or X-TIMESTAMP header.")
|
|
202
348
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
349
|
+
self._verify_signature(http_method, relative_path_url, body, x_timestamp, x_signature)
|
|
350
|
+
|
|
351
|
+
# Try multiple body transformations for parsing in order of likelihood:
|
|
352
|
+
# 1. Collapsed triple-backslash form (handles over-escaped \\\" → \")
|
|
353
|
+
# 2. Process nested JSON fields (handles bare-quote inner JSON like "field":"{...}")
|
|
354
|
+
# 3. ensureMinifiedJson fallback for pretty-printed bodies
|
|
355
|
+
payload_dict = None
|
|
356
|
+
for candidate in [
|
|
357
|
+
self._collapse_triple_backslash_quotes(body),
|
|
358
|
+
self._process_nested_json_fields(body),
|
|
359
|
+
]:
|
|
360
|
+
try:
|
|
361
|
+
payload_dict = json.loads(candidate)
|
|
362
|
+
break
|
|
363
|
+
except json.JSONDecodeError:
|
|
364
|
+
continue
|
|
365
|
+
|
|
366
|
+
if payload_dict is None:
|
|
367
|
+
processed_body, err = self._ensure_minified_json(body)
|
|
368
|
+
if err:
|
|
369
|
+
raise ValueError(f"Failed to process JSON body: {err}")
|
|
370
|
+
try:
|
|
371
|
+
payload_dict = json.loads(processed_body)
|
|
372
|
+
except json.JSONDecodeError:
|
|
373
|
+
raise ValueError("Invalid JSON in request body.")
|
|
221
374
|
|
|
222
|
-
processed_body, err = self._ensure_minified_json(body)
|
|
223
|
-
if err:
|
|
224
|
-
raise ValueError(f"Failed to process JSON body: {err}")
|
|
225
|
-
|
|
226
375
|
try:
|
|
227
|
-
payload_dict = json.loads(processed_body)
|
|
228
376
|
return FinishNotifyRequest.from_dict(payload_dict)
|
|
229
|
-
except json.JSONDecodeError:
|
|
230
|
-
raise ValueError("Invalid JSON in request body.")
|
|
231
377
|
except Exception as e:
|
|
232
378
|
raise ValueError(f"Failed to parse body into FinishNotifyRequest: {e}")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dana-python
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.10
|
|
4
4
|
Summary: API Client (SDK) for DANA APIs based on https://dashboard.dana.id/api-docs
|
|
5
5
|
Author-email: DANA Package Manager <package-manager@dana.id>
|
|
6
6
|
Maintainer-email: DANA Package Manager <package-manager@dana.id>
|
|
@@ -39,7 +39,8 @@ class TestMerchantManagementApi:
|
|
|
39
39
|
"""Test class for Merchant Management API endpoints"""
|
|
40
40
|
def test_create_shop_and_query_shop_success(self, api_instance_merchant_management: MerchantManagementApi, create_shop_request: CreateShopRequest, query_shop_request: QueryShopRequest):
|
|
41
41
|
"""Should successfully create a shop and return success response"""
|
|
42
|
-
|
|
42
|
+
pytest.skip("Temporarily skipped")
|
|
43
|
+
|
|
43
44
|
# Act
|
|
44
45
|
api_response = api_instance_merchant_management.create_shop(create_shop_request)
|
|
45
46
|
|
|
@@ -87,6 +88,26 @@ class TestMerchantManagementApi:
|
|
|
87
88
|
assert hasattr(query_shop_response.response.body, 'shop_resource_info')
|
|
88
89
|
assert query_shop_response.response.body.shop_resource_info is not None
|
|
89
90
|
|
|
91
|
+
def test_query_shop_success(self, api_instance_merchant_management: MerchantManagementApi, query_shop_request: QueryShopRequest):
|
|
92
|
+
"""Should successfully query a shop using a static shop ID"""
|
|
93
|
+
query_shop_request.shop_id = "216660000003429526679"
|
|
94
|
+
|
|
95
|
+
query_shop_response = api_instance_merchant_management.query_shop(query_shop_request)
|
|
96
|
+
print(f"Raw query shop response: {query_shop_response}")
|
|
97
|
+
|
|
98
|
+
assert query_shop_response is not None
|
|
99
|
+
assert hasattr(query_shop_response, 'response')
|
|
100
|
+
assert hasattr(query_shop_response.response, 'body')
|
|
101
|
+
assert hasattr(query_shop_response.response.body, 'result_info')
|
|
102
|
+
|
|
103
|
+
query_result_info = query_shop_response.response.body.result_info
|
|
104
|
+
assert query_result_info.result_status is not None
|
|
105
|
+
assert query_result_info.result_code is not None
|
|
106
|
+
|
|
107
|
+
if query_result_info.result_code == "SUCCESS":
|
|
108
|
+
assert hasattr(query_shop_response.response.body, 'shop_resource_info')
|
|
109
|
+
assert query_shop_response.response.body.shop_resource_info is not None
|
|
110
|
+
|
|
90
111
|
def test_query_merchant_resource_success(self, api_instance_merchant_management: MerchantManagementApi, query_merchant_resource_request: QueryMerchantResourceRequest):
|
|
91
112
|
"""Should successfully query merchant resource and return balance information"""
|
|
92
113
|
|