dana-python 2.1.2__tar.gz → 2.1.4__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.
Files changed (229) hide show
  1. {dana_python-2.1.2/dana_python.egg-info → dana_python-2.1.4}/PKG-INFO +1 -1
  2. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/custom_validation.py +1 -1
  3. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/enum.py +1 -0
  4. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/consult_pay_payment_info.py +3 -3
  5. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/pay_option_detail.py +3 -3
  6. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/pay_option_info.py +3 -3
  7. {dana_python-2.1.2 → dana_python-2.1.4}/dana/utils/snap_header.py +1 -6
  8. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/enum.py +1 -0
  9. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/pay_option_info.py +3 -3
  10. {dana_python-2.1.2 → dana_python-2.1.4/dana_python.egg-info}/PKG-INFO +1 -1
  11. {dana_python-2.1.2 → dana_python-2.1.4}/pyproject.toml +1 -1
  12. {dana_python-2.1.2 → dana_python-2.1.4}/tests/test_payment_gateway_api.py +1 -1
  13. {dana_python-2.1.2 → dana_python-2.1.4}/tests/test_widget_with_automation.py +35 -165
  14. {dana_python-2.1.2 → dana_python-2.1.4}/LICENSE +0 -0
  15. {dana_python-2.1.2 → dana_python-2.1.4}/README.md +0 -0
  16. {dana_python-2.1.2 → dana_python-2.1.4}/dana/__init__.py +0 -0
  17. {dana_python-2.1.2 → dana_python-2.1.4}/dana/api_client.py +0 -0
  18. {dana_python-2.1.2 → dana_python-2.1.4}/dana/api_response.py +0 -0
  19. {dana_python-2.1.2 → dana_python-2.1.4}/dana/base/__init__.py +0 -0
  20. {dana_python-2.1.2 → dana_python-2.1.4}/dana/base/configuration.py +0 -0
  21. {dana_python-2.1.2 → dana_python-2.1.4}/dana/base/model.py +0 -0
  22. {dana_python-2.1.2 → dana_python-2.1.4}/dana/base/types.py +0 -0
  23. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/__init__.py +0 -0
  24. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/__init__.py +0 -0
  25. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/api/__init__.py +0 -0
  26. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/api/disbursement_api.py +0 -0
  27. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/enum.py +0 -0
  28. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/models/__init__.py +0 -0
  29. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/models/bank_account_inquiry_request.py +0 -0
  30. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/models/bank_account_inquiry_request_additional_info.py +0 -0
  31. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/models/bank_account_inquiry_response.py +0 -0
  32. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/models/bank_account_inquiry_response_additional_info.py +0 -0
  33. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/models/dana_account_inquiry_request.py +0 -0
  34. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/models/dana_account_inquiry_request_additional_info.py +0 -0
  35. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/models/dana_account_inquiry_response.py +0 -0
  36. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/models/money.py +0 -0
  37. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/models/transfer_to_bank_inquiry_status_request.py +0 -0
  38. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/models/transfer_to_bank_inquiry_status_response.py +0 -0
  39. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/models/transfer_to_bank_request.py +0 -0
  40. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/models/transfer_to_bank_request_additional_info.py +0 -0
  41. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/models/transfer_to_bank_response.py +0 -0
  42. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/models/transfer_to_dana_inquiry_status_request.py +0 -0
  43. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/models/transfer_to_dana_inquiry_status_response.py +0 -0
  44. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/models/transfer_to_dana_request.py +0 -0
  45. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/models/transfer_to_dana_request_additional_info.py +0 -0
  46. {dana_python-2.1.2 → dana_python-2.1.4}/dana/disbursement/v1/models/transfer_to_dana_response.py +0 -0
  47. {dana_python-2.1.2 → dana_python-2.1.4}/dana/exceptions.py +0 -0
  48. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/__init__.py +0 -0
  49. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/__init__.py +0 -0
  50. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/api/__init__.py +0 -0
  51. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/api/merchant_management_api.py +0 -0
  52. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/enum.py +0 -0
  53. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/__init__.py +0 -0
  54. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/address_info.py +0 -0
  55. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/business_docs.py +0 -0
  56. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/create_division_request.py +0 -0
  57. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/create_division_request_ext_info.py +0 -0
  58. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/create_division_response.py +0 -0
  59. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/create_division_response_response.py +0 -0
  60. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/create_division_response_response_body.py +0 -0
  61. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/create_division_response_response_head.py +0 -0
  62. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/create_shop_request.py +0 -0
  63. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/create_shop_response.py +0 -0
  64. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/create_shop_response_response.py +0 -0
  65. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/create_shop_response_response_body.py +0 -0
  66. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/create_shop_response_response_head.py +0 -0
  67. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/division_resource_info.py +0 -0
  68. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/merchant_resource_information.py +0 -0
  69. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/mobile_no_info.py +0 -0
  70. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/pic_info.py +0 -0
  71. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/query_division_request.py +0 -0
  72. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/query_division_response.py +0 -0
  73. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/query_division_response_response.py +0 -0
  74. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/query_division_response_response_body.py +0 -0
  75. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/query_division_response_response_head.py +0 -0
  76. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/query_merchant_resource_request.py +0 -0
  77. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/query_merchant_resource_response.py +0 -0
  78. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/query_merchant_resource_response_response.py +0 -0
  79. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/query_merchant_resource_response_response_body.py +0 -0
  80. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/query_merchant_resource_response_response_head.py +0 -0
  81. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/query_shop_request.py +0 -0
  82. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/query_shop_response.py +0 -0
  83. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/query_shop_response_response.py +0 -0
  84. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/query_shop_response_response_body.py +0 -0
  85. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/query_shop_response_response_head.py +0 -0
  86. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/result_info.py +0 -0
  87. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/shop_resource_info.py +0 -0
  88. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/update_division_request.py +0 -0
  89. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/update_division_response.py +0 -0
  90. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/update_division_response_response.py +0 -0
  91. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/update_division_response_response_body.py +0 -0
  92. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/update_division_response_response_head.py +0 -0
  93. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/update_shop_request.py +0 -0
  94. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/update_shop_response.py +0 -0
  95. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/update_shop_response_response.py +0 -0
  96. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/update_shop_response_response_head.py +0 -0
  97. {dana_python-2.1.2 → dana_python-2.1.4}/dana/merchant_management/v1/models/user_name.py +0 -0
  98. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/__init__.py +0 -0
  99. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/__init__.py +0 -0
  100. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/api/__init__.py +0 -0
  101. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/api/payment_gateway_api.py +0 -0
  102. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/__init__.py +0 -0
  103. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/actor_context.py +0 -0
  104. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/amount_detail.py +0 -0
  105. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/audit_info.py +0 -0
  106. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/buyer.py +0 -0
  107. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/cancel_order_request.py +0 -0
  108. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/cancel_order_response.py +0 -0
  109. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/consult_pay_request.py +0 -0
  110. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/consult_pay_request_additional_info.py +0 -0
  111. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/consult_pay_response.py +0 -0
  112. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/create_order_by_api_additional_info.py +0 -0
  113. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/create_order_by_api_request.py +0 -0
  114. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/create_order_by_redirect_additional_info.py +0 -0
  115. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/create_order_by_redirect_request.py +0 -0
  116. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/create_order_response.py +0 -0
  117. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/create_order_response_additional_info.py +0 -0
  118. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/env_info.py +0 -0
  119. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/goods.py +0 -0
  120. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/money.py +0 -0
  121. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/order_api_object.py +0 -0
  122. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/order_redirect_object.py +0 -0
  123. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/pay_option_additional_info.py +0 -0
  124. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/payment_view.py +0 -0
  125. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/promo_info.py +0 -0
  126. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/query_payment_request.py +0 -0
  127. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/query_payment_response.py +0 -0
  128. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/query_payment_response_additional_info.py +0 -0
  129. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/refund_option_bill.py +0 -0
  130. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/refund_order_request.py +0 -0
  131. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/refund_order_request_additional_info.py +0 -0
  132. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/refund_order_response.py +0 -0
  133. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/seller.py +0 -0
  134. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/shipping_info.py +0 -0
  135. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/status_detail.py +0 -0
  136. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/time_detail.py +0 -0
  137. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/url_param.py +0 -0
  138. {dana_python-2.1.2 → dana_python-2.1.4}/dana/payment_gateway/v1/models/virtual_account_info.py +0 -0
  139. {dana_python-2.1.2 → dana_python-2.1.4}/dana/rest.py +0 -0
  140. {dana_python-2.1.2 → dana_python-2.1.4}/dana/utils/date_validation.py +0 -0
  141. {dana_python-2.1.2 → dana_python-2.1.4}/dana/utils/models.py +0 -0
  142. {dana_python-2.1.2 → dana_python-2.1.4}/dana/utils/open_api_configuration.py +0 -0
  143. {dana_python-2.1.2 → dana_python-2.1.4}/dana/utils/open_api_header.py +0 -0
  144. {dana_python-2.1.2 → dana_python-2.1.4}/dana/utils/script.py +0 -0
  145. {dana_python-2.1.2 → dana_python-2.1.4}/dana/utils/snap_configuration.py +0 -0
  146. {dana_python-2.1.2 → dana_python-2.1.4}/dana/utils/url.py +0 -0
  147. {dana_python-2.1.2 → dana_python-2.1.4}/dana/webhook/__init__.py +0 -0
  148. {dana_python-2.1.2 → dana_python-2.1.4}/dana/webhook/finish_notify_payment_info.py +0 -0
  149. {dana_python-2.1.2 → dana_python-2.1.4}/dana/webhook/finish_notify_request.py +0 -0
  150. {dana_python-2.1.2 → dana_python-2.1.4}/dana/webhook/finish_notify_request_additional_info.py +0 -0
  151. {dana_python-2.1.2 → dana_python-2.1.4}/dana/webhook/finish_notify_response.py +0 -0
  152. {dana_python-2.1.2 → dana_python-2.1.4}/dana/webhook/money.py +0 -0
  153. {dana_python-2.1.2 → dana_python-2.1.4}/dana/webhook/pay_option_info.py +0 -0
  154. {dana_python-2.1.2 → dana_python-2.1.4}/dana/webhook/shop_info.py +0 -0
  155. {dana_python-2.1.2 → dana_python-2.1.4}/dana/webhook/webhook.py +0 -0
  156. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/__init__.py +0 -0
  157. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/__init__.py +0 -0
  158. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/api/__init__.py +0 -0
  159. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/api/widget_api.py +0 -0
  160. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/custom_validation.py +0 -0
  161. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/__init__.py +0 -0
  162. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/account_info.py +0 -0
  163. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/account_unbinding_request.py +0 -0
  164. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/account_unbinding_request_additional_info.py +0 -0
  165. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/account_unbinding_response.py +0 -0
  166. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/amount_detail.py +0 -0
  167. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/apply_ott_request.py +0 -0
  168. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/apply_ott_request_additional_info.py +0 -0
  169. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/apply_ott_response.py +0 -0
  170. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/apply_ott_response_user_resources_inner.py +0 -0
  171. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/apply_token_authorization_code_request.py +0 -0
  172. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/apply_token_refresh_token_request.py +0 -0
  173. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/apply_token_response.py +0 -0
  174. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/apply_token_response_additional_info.py +0 -0
  175. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/apply_token_response_additional_info_user_info.py +0 -0
  176. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/balance_inquiry_request.py +0 -0
  177. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/balance_inquiry_request_additional_info.py +0 -0
  178. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/balance_inquiry_response.py +0 -0
  179. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/buyer.py +0 -0
  180. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/cancel_order_request.py +0 -0
  181. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/cancel_order_response.py +0 -0
  182. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/env_info.py +0 -0
  183. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/goods.py +0 -0
  184. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/international_order_info.py +0 -0
  185. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/international_order_info_exchange_rate.py +0 -0
  186. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/money.py +0 -0
  187. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/oauth2_url_data.py +0 -0
  188. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/oauth2_url_data_seamless_data.py +0 -0
  189. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/order.py +0 -0
  190. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/pay_option_detail.py +0 -0
  191. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/pay_option_detail_additional_info.py +0 -0
  192. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/payment_promo_info.py +0 -0
  193. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/payment_view.py +0 -0
  194. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/query_payment_request.py +0 -0
  195. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/query_payment_response.py +0 -0
  196. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/query_payment_response_additional_info.py +0 -0
  197. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/query_user_profile_request.py +0 -0
  198. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/query_user_profile_response.py +0 -0
  199. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/query_user_profile_response_response.py +0 -0
  200. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/query_user_profile_response_response_body.py +0 -0
  201. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/query_user_profile_response_response_head.py +0 -0
  202. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/refund_order_request.py +0 -0
  203. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/refund_order_request_additional_info.py +0 -0
  204. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/refund_order_response.py +0 -0
  205. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/refund_promo_info.py +0 -0
  206. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/result_info.py +0 -0
  207. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/seller.py +0 -0
  208. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/service_info.py +0 -0
  209. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/shipping_info.py +0 -0
  210. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/status_detail.py +0 -0
  211. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/time_detail.py +0 -0
  212. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/url_param.py +0 -0
  213. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/user_resource_info.py +0 -0
  214. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/virtual_account_info.py +0 -0
  215. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/widget_payment_request.py +0 -0
  216. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/widget_payment_request_additional_info.py +0 -0
  217. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/models/widget_payment_response.py +0 -0
  218. {dana_python-2.1.2 → dana_python-2.1.4}/dana/widget/v1/util.py +0 -0
  219. {dana_python-2.1.2 → dana_python-2.1.4}/dana_python.egg-info/SOURCES.txt +0 -0
  220. {dana_python-2.1.2 → dana_python-2.1.4}/dana_python.egg-info/dependency_links.txt +0 -0
  221. {dana_python-2.1.2 → dana_python-2.1.4}/dana_python.egg-info/requires.txt +0 -0
  222. {dana_python-2.1.2 → dana_python-2.1.4}/dana_python.egg-info/top_level.txt +0 -0
  223. {dana_python-2.1.2 → dana_python-2.1.4}/setup.cfg +0 -0
  224. {dana_python-2.1.2 → dana_python-2.1.4}/tests/test_disbursement_api.py +0 -0
  225. {dana_python-2.1.2 → dana_python-2.1.4}/tests/test_merchant_management_api.py +0 -0
  226. {dana_python-2.1.2 → dana_python-2.1.4}/tests/test_payment_gateway_with_automation.py +0 -0
  227. {dana_python-2.1.2 → dana_python-2.1.4}/tests/test_snap_header.py +0 -0
  228. {dana_python-2.1.2 → dana_python-2.1.4}/tests/test_webhook.py +0 -0
  229. {dana_python-2.1.2 → dana_python-2.1.4}/tests/test_widget_api.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dana-python
3
- Version: 2.1.2
3
+ Version: 2.1.4
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>
@@ -34,7 +34,7 @@ SANDBOX_ALLOWED_PAY_METHODS: FrozenSet[str] = frozenset({
34
34
  })
35
35
 
36
36
  SANDBOX_ALLOWED_PAY_OPTIONS: FrozenSet[str] = frozenset({
37
- 'CARD', 'QRIS', 'BRI', 'PANIN', 'CIMB', 'MANDIRI', 'BTPN',
37
+ 'CARD', 'QRIS', 'BRI', 'PANIN', 'CIMB', 'MANDIRI', 'BTPN', 'BSI',
38
38
  })
39
39
 
40
40
  CREDIT_DEBIT_CARD_PAY_METHODS: Set[str] = {'CREDIT_CARD', 'DEBIT_CARD'}
@@ -39,6 +39,7 @@ class PayOption(str, Enum):
39
39
  VIRTUAL_ACCOUNT_BCA = "VIRTUAL_ACCOUNT_BCA"
40
40
  VIRTUAL_ACCOUNT_BNI = "VIRTUAL_ACCOUNT_BNI"
41
41
  VIRTUAL_ACCOUNT_MANDIRI = "VIRTUAL_ACCOUNT_MANDIRI"
42
+ VIRTUAL_ACCOUNT_BSI_PAYMENT = "VIRTUAL_ACCOUNT_BSI_PAYMENT"
42
43
  VIRTUAL_ACCOUNT_BRI = "VIRTUAL_ACCOUNT_BRI"
43
44
  VIRTUAL_ACCOUNT_BTPN = "VIRTUAL_ACCOUNT_BTPN"
44
45
  VIRTUAL_ACCOUNT_CIMB = "VIRTUAL_ACCOUNT_CIMB"
@@ -48,7 +48,7 @@ class ConsultPayPaymentInfo(BaseModel, BaseSdkModel):
48
48
  ConsultPayPaymentInfo
49
49
  """ # noqa: E501
50
50
  pay_method: Annotated[str, Field(strict=True, max_length=64)] = Field(description="Payment method that used to payment. The enums:<br> * BALANCE - Payment method with balance<br> * COUPON - Payment method with coupon<br> * NET_BANKING - Payment method with internet banking<br> * CREDIT_CARD - Payment method with credit card<br> * DEBIT_CARD - Payment method with debit card<br> * VIRTUAL_ACCOUNT - Payment method with virtual account<br> * OTC - Payment method with OTC<br> * DIRECT_DEBIT_CREDIT_CARD - Payment method with direct debit of credit card<br> * DIRECT_DEBIT_DEBIT_CARD - Payment method with direct debit of debit card<br> * ONLINE_CREDIT - Payment method with online Credit<br> * LOAN_CREDIT - Payment method with DANA Cicil<br> * NETWORK_PAY - Payment method with e-wallet<br> * CARD - Payment method with card<br> ")
51
- pay_option: Optional[Annotated[str, Field(strict=True, max_length=128)]] = Field(default=None, description="Payment option that available to used to payment, depends on the payment method. The enums:<br> * NETWORK_PAY_PG_SPAY - Payment method with ShopeePay e-wallet<br> * NETWORK_PAY_PG_OVO - Payment method with OVO e-wallet<br> * NETWORK_PAY_PG_GOPAY - Payment method with GoPay e-wallet<br> * NETWORK_PAY_PG_LINKAJA - Payment method with LinkAja e-wallet<br> * NETWORK_PAY_PG_CARD - Payment method with Card<br> * NETWORK_PAY_PC_INDOMARET - Payment method with Indomaret<br> * NETWORK_PAY_PG_QRIS - Payment method with QRIS<br> * NETWORK_PAY_PL_INDODANA - Payment method with Paylater Indodana<br> * VIRTUAL_ACCOUNT_BCA - Payment method with BCA virtual account<br> * VIRTUAL_ACCOUNT_BNI - Payment method with BNI virtual account<br> * VIRTUAL_ACCOUNT_MANDIRI - Payment method with Mandiri virtual account<br> * VIRTUAL_ACCOUNT_BRI - Payment method with BRI virtual account<br> * VIRTUAL_ACCOUNT_BTPN - Payment method with BTPN virtual account<br> * VIRTUAL_ACCOUNT_CIMB - Payment method with CIMB virtual account<br> * VIRTUAL_ACCOUNT_PERMATA - Payment method with Permata virtual account<br> * VIRTUAL_ACCOUNT_PANI - Payment method with Panin virtual account<br> ")
51
+ pay_option: Optional[Annotated[str, Field(strict=True, max_length=128)]] = Field(default=None, description="Payment option that available to used to payment, depends on the payment method. The enums:<br> * NETWORK_PAY_PG_SPAY - Payment method with ShopeePay e-wallet<br> * NETWORK_PAY_PG_OVO - Payment method with OVO e-wallet<br> * NETWORK_PAY_PG_GOPAY - Payment method with GoPay e-wallet<br> * NETWORK_PAY_PG_LINKAJA - Payment method with LinkAja e-wallet<br> * NETWORK_PAY_PG_CARD - Payment method with Card<br> * NETWORK_PAY_PC_INDOMARET - Payment method with Indomaret<br> * NETWORK_PAY_PG_QRIS - Payment method with QRIS<br> * NETWORK_PAY_PL_INDODANA - Payment method with Paylater Indodana<br> * VIRTUAL_ACCOUNT_BCA - Payment method with BCA virtual account<br> * VIRTUAL_ACCOUNT_BNI - Payment method with BNI virtual account<br> * VIRTUAL_ACCOUNT_MANDIRI - Payment method with Mandiri virtual account<br> * VIRTUAL_ACCOUNT_BSI_PAYMENT - Payment method with BSI virtual account<br> * VIRTUAL_ACCOUNT_BRI - Payment method with BRI virtual account<br> * VIRTUAL_ACCOUNT_BTPN - Payment method with BTPN virtual account<br> * VIRTUAL_ACCOUNT_CIMB - Payment method with CIMB virtual account<br> * VIRTUAL_ACCOUNT_PERMATA - Payment method with Permata virtual account<br> * VIRTUAL_ACCOUNT_PANI - Payment method with Panin virtual account<br> ")
52
52
  promo_infos: Optional[List[PromoInfo]] = Field(default=None, description="Additional Information of promotion")
53
53
  __properties: ClassVar[List[str]] = ["payMethod", "payOption", "promoInfos"]
54
54
 
@@ -67,8 +67,8 @@ class ConsultPayPaymentInfo(BaseModel, BaseSdkModel):
67
67
  if not value:
68
68
  return value
69
69
 
70
- if value not in set(['NETWORK_PAY_PG_SPAY', 'NETWORK_PAY_PG_OVO', 'NETWORK_PAY_PG_GOPAY', 'NETWORK_PAY_PG_LINKAJA', 'NETWORK_PAY_PG_CARD', 'NETWORK_PAY_PC_INDOMARET', 'NETWORK_PAY_PG_QRIS', 'NETWORK_PAY_PL_INDODANA', 'VIRTUAL_ACCOUNT_BCA', 'VIRTUAL_ACCOUNT_BNI', 'VIRTUAL_ACCOUNT_MANDIRI', 'VIRTUAL_ACCOUNT_BRI', 'VIRTUAL_ACCOUNT_BTPN', 'VIRTUAL_ACCOUNT_CIMB', 'VIRTUAL_ACCOUNT_PERMATA', 'VIRTUAL_ACCOUNT_PANI']):
71
- raise ValueError("must be one of enum values ('NETWORK_PAY_PG_SPAY', 'NETWORK_PAY_PG_OVO', 'NETWORK_PAY_PG_GOPAY', 'NETWORK_PAY_PG_LINKAJA', 'NETWORK_PAY_PG_CARD', 'NETWORK_PAY_PC_INDOMARET', 'NETWORK_PAY_PG_QRIS', 'NETWORK_PAY_PL_INDODANA', 'VIRTUAL_ACCOUNT_BCA', 'VIRTUAL_ACCOUNT_BNI', 'VIRTUAL_ACCOUNT_MANDIRI', 'VIRTUAL_ACCOUNT_BRI', 'VIRTUAL_ACCOUNT_BTPN', 'VIRTUAL_ACCOUNT_CIMB', 'VIRTUAL_ACCOUNT_PERMATA', 'VIRTUAL_ACCOUNT_PANI')")
70
+ if value not in set(['NETWORK_PAY_PG_SPAY', 'NETWORK_PAY_PG_OVO', 'NETWORK_PAY_PG_GOPAY', 'NETWORK_PAY_PG_LINKAJA', 'NETWORK_PAY_PG_CARD', 'NETWORK_PAY_PC_INDOMARET', 'NETWORK_PAY_PG_QRIS', 'NETWORK_PAY_PL_INDODANA', 'VIRTUAL_ACCOUNT_BCA', 'VIRTUAL_ACCOUNT_BNI', 'VIRTUAL_ACCOUNT_MANDIRI', 'VIRTUAL_ACCOUNT_BSI_PAYMENT', 'VIRTUAL_ACCOUNT_BRI', 'VIRTUAL_ACCOUNT_BTPN', 'VIRTUAL_ACCOUNT_CIMB', 'VIRTUAL_ACCOUNT_PERMATA', 'VIRTUAL_ACCOUNT_PANI']):
71
+ raise ValueError("must be one of enum values ('NETWORK_PAY_PG_SPAY', 'NETWORK_PAY_PG_OVO', 'NETWORK_PAY_PG_GOPAY', 'NETWORK_PAY_PG_LINKAJA', 'NETWORK_PAY_PG_CARD', 'NETWORK_PAY_PC_INDOMARET', 'NETWORK_PAY_PG_QRIS', 'NETWORK_PAY_PL_INDODANA', 'VIRTUAL_ACCOUNT_BCA', 'VIRTUAL_ACCOUNT_BNI', 'VIRTUAL_ACCOUNT_MANDIRI', 'VIRTUAL_ACCOUNT_BSI_PAYMENT', 'VIRTUAL_ACCOUNT_BRI', 'VIRTUAL_ACCOUNT_BTPN', 'VIRTUAL_ACCOUNT_CIMB', 'VIRTUAL_ACCOUNT_PERMATA', 'VIRTUAL_ACCOUNT_PANI')")
72
72
  return value
73
73
 
74
74
  model_config = ConfigDict(
@@ -49,7 +49,7 @@ class PayOptionDetail(BaseModel, BaseSdkModel):
49
49
  PayOptionDetail
50
50
  """ # noqa: E501
51
51
  pay_method: Annotated[str, Field(strict=True, max_length=64)] = Field(description="Payment method that used to payment. The enums:<br> * BALANCE - Payment method with balance<br> * COUPON - Payment method with coupon<br> * NET_BANKING - Payment method with internet banking<br> * CREDIT_CARD - Payment method with credit card<br> * DEBIT_CARD - Payment method with debit card<br> * VIRTUAL_ACCOUNT - Payment method with virtual account<br> * OTC - Payment method with OTC<br> * DIRECT_DEBIT_CREDIT_CARD - Payment method with direct debit of credit card<br> * DIRECT_DEBIT_DEBIT_CARD - Payment method with direct debit of debit card<br> * ONLINE_CREDIT - Payment method with online Credit<br> * LOAN_CREDIT - Payment method with DANA Cicil<br> * NETWORK_PAY - Payment method with e-wallet<br> * CARD - Payment method with card<br> ")
52
- pay_option: Annotated[str, Field(strict=True, max_length=64)] = Field(description="Payment option that available to used to payment, depends on the payment method. The enums:<br> * NETWORK_PAY_PG_SPAY - Payment method with ShopeePay e-wallet<br> * NETWORK_PAY_PG_OVO - Payment method with OVO e-wallet<br> * NETWORK_PAY_PG_GOPAY - Payment method with GoPay e-wallet<br> * NETWORK_PAY_PG_LINKAJA - Payment method with LinkAja e-wallet<br> * NETWORK_PAY_PG_CARD - Payment method with Card<br> * NETWORK_PAY_PG_QRIS - Payment method with QRIS<br> * NETWORK_PAY_PL_INDODANA - Payment method with Paylater Indodana<br> * NETWORK_PAY_PC_INDOMARET - Payment method with Indomaret<br> * VIRTUAL_ACCOUNT_BCA - Payment method with BCA virtual account<br> * VIRTUAL_ACCOUNT_BNI - Payment method with BNI virtual account<br> * VIRTUAL_ACCOUNT_MANDIRI - Payment method with Mandiri virtual account<br> * VIRTUAL_ACCOUNT_BRI - Payment method with BRI virtual account<br> * VIRTUAL_ACCOUNT_BTPN - Payment method with BTPN virtual account<br> * VIRTUAL_ACCOUNT_CIMB - Payment method with CIMB virtual account<br> * VIRTUAL_ACCOUNT_PERMATA - Payment method with Permata virtual account<br> * VIRTUAL_ACCOUNT_PANI - Payment method with Panin virtual account<br> ")
52
+ pay_option: Annotated[str, Field(strict=True, max_length=64)] = Field(description="Payment option that available to used to payment, depends on the payment method. The enums:<br> * NETWORK_PAY_PG_SPAY - Payment method with ShopeePay e-wallet<br> * NETWORK_PAY_PG_OVO - Payment method with OVO e-wallet<br> * NETWORK_PAY_PG_GOPAY - Payment method with GoPay e-wallet<br> * NETWORK_PAY_PG_LINKAJA - Payment method with LinkAja e-wallet<br> * NETWORK_PAY_PG_CARD - Payment method with Card<br> * NETWORK_PAY_PG_QRIS - Payment method with QRIS<br> * NETWORK_PAY_PL_INDODANA - Payment method with Paylater Indodana<br> * NETWORK_PAY_PC_INDOMARET - Payment method with Indomaret<br> * VIRTUAL_ACCOUNT_BCA - Payment method with BCA virtual account<br> * VIRTUAL_ACCOUNT_BNI - Payment method with BNI virtual account<br> * VIRTUAL_ACCOUNT_MANDIRI - Payment method with Mandiri virtual account<br> * VIRTUAL_ACCOUNT_BSI_PAYMENT - Payment method with BSI virtual account<br> * VIRTUAL_ACCOUNT_BRI - Payment method with BRI virtual account<br> * VIRTUAL_ACCOUNT_BTPN - Payment method with BTPN virtual account<br> * VIRTUAL_ACCOUNT_CIMB - Payment method with CIMB virtual account<br> * VIRTUAL_ACCOUNT_PERMATA - Payment method with Permata virtual account<br> * VIRTUAL_ACCOUNT_PANI - Payment method with Panin virtual account<br> ")
53
53
  trans_amount: Money = Field()
54
54
  fee_amount: Optional[Money] = Field(default=None)
55
55
  card_token: Optional[Annotated[str, Field(strict=True, max_length=64)]] = Field(default=None, description="Token that used for payment with card")
@@ -71,8 +71,8 @@ class PayOptionDetail(BaseModel, BaseSdkModel):
71
71
  """Validates the enum"""
72
72
  if value == "":
73
73
  return value
74
- if value not in set(['NETWORK_PAY_PG_SPAY', 'NETWORK_PAY_PG_OVO', 'NETWORK_PAY_PG_GOPAY', 'NETWORK_PAY_PG_LINKAJA', 'NETWORK_PAY_PG_CARD', 'NETWORK_PAY_PG_QRIS', 'NETWORK_PAY_PL_INDODANA', 'NETWORK_PAY_PC_INDOMARET', 'VIRTUAL_ACCOUNT_BCA', 'VIRTUAL_ACCOUNT_BNI', 'VIRTUAL_ACCOUNT_MANDIRI', 'VIRTUAL_ACCOUNT_BRI', 'VIRTUAL_ACCOUNT_BTPN', 'VIRTUAL_ACCOUNT_CIMB', 'VIRTUAL_ACCOUNT_PERMATA', 'VIRTUAL_ACCOUNT_PANI']):
75
- raise ValueError("must be one of enum values ('NETWORK_PAY_PG_SPAY', 'NETWORK_PAY_PG_OVO', 'NETWORK_PAY_PG_GOPAY', 'NETWORK_PAY_PG_LINKAJA', 'NETWORK_PAY_PG_CARD', 'NETWORK_PAY_PG_QRIS', 'NETWORK_PAY_PL_INDODANA', 'NETWORK_PAY_PC_INDOMARET', 'VIRTUAL_ACCOUNT_BCA', 'VIRTUAL_ACCOUNT_BNI', 'VIRTUAL_ACCOUNT_MANDIRI', 'VIRTUAL_ACCOUNT_BRI', 'VIRTUAL_ACCOUNT_BTPN', 'VIRTUAL_ACCOUNT_CIMB', 'VIRTUAL_ACCOUNT_PERMATA', 'VIRTUAL_ACCOUNT_PANI')")
74
+ if value not in set(['NETWORK_PAY_PG_SPAY', 'NETWORK_PAY_PG_OVO', 'NETWORK_PAY_PG_GOPAY', 'NETWORK_PAY_PG_LINKAJA', 'NETWORK_PAY_PG_CARD', 'NETWORK_PAY_PG_QRIS', 'NETWORK_PAY_PL_INDODANA', 'NETWORK_PAY_PC_INDOMARET', 'VIRTUAL_ACCOUNT_BCA', 'VIRTUAL_ACCOUNT_BNI', 'VIRTUAL_ACCOUNT_MANDIRI', 'VIRTUAL_ACCOUNT_BSI_PAYMENT', 'VIRTUAL_ACCOUNT_BRI', 'VIRTUAL_ACCOUNT_BTPN', 'VIRTUAL_ACCOUNT_CIMB', 'VIRTUAL_ACCOUNT_PERMATA', 'VIRTUAL_ACCOUNT_PANI']):
75
+ raise ValueError("must be one of enum values ('NETWORK_PAY_PG_SPAY', 'NETWORK_PAY_PG_OVO', 'NETWORK_PAY_PG_GOPAY', 'NETWORK_PAY_PG_LINKAJA', 'NETWORK_PAY_PG_CARD', 'NETWORK_PAY_PG_QRIS', 'NETWORK_PAY_PL_INDODANA', 'NETWORK_PAY_PC_INDOMARET', 'VIRTUAL_ACCOUNT_BCA', 'VIRTUAL_ACCOUNT_BNI', 'VIRTUAL_ACCOUNT_MANDIRI', 'VIRTUAL_ACCOUNT_BSI_PAYMENT', 'VIRTUAL_ACCOUNT_BRI', 'VIRTUAL_ACCOUNT_BTPN', 'VIRTUAL_ACCOUNT_CIMB', 'VIRTUAL_ACCOUNT_PERMATA', 'VIRTUAL_ACCOUNT_PANI')")
76
76
  return value
77
77
 
78
78
  model_config = ConfigDict(
@@ -48,7 +48,7 @@ class PayOptionInfo(BaseModel, BaseSdkModel):
48
48
  PayOptionInfo
49
49
  """ # noqa: E501
50
50
  pay_method: Annotated[str, Field(strict=True, max_length=64)] = Field(description="Payment method name. The enums:<br> * BALANCE - Payment method with balance<br> * COUPON - Payment method with coupon<br> * NET_BANKING - Payment method with internet banking<br> * CREDIT_CARD - Payment method with credit card<br> * DEBIT_CARD - Payment method with debit card<br> * VIRTUAL_ACCOUNT - Payment method with virtual account<br> * OTC - Payment method with OTC<br> * DIRECT_DEBIT_CREDIT_CARD - Payment method with direct debit of credit card<br> * DIRECT_DEBIT_DEBIT_CARD - Payment method with direct debit of debit card<br> * ONLINE_CREDIT - Payment method with online Credit<br> * LOAN_CREDIT - Payment method with DANA Cicil<br> * NETWORK_PAY - Payment method with e-wallet * CARD - Payment method with Card ")
51
- pay_option: Optional[Annotated[str, Field(strict=True, max_length=64)]] = Field(default=None, description="Payment option which shows the provider of this payment. The enums:<br> * NETWORK_PAY_PG_SPAY - Payment method with ShopeePay e-wallet<br> * NETWORK_PAY_PG_OVO - Payment method with OVO e-wallet<br> * NETWORK_PAY_PG_GOPAY - Payment method with GoPay e-wallet<br> * NETWORK_PAY_PG_LINKAJA - Payment method with LinkAja e-wallet<br> * NETWORK_PAY_PG_CARD - Payment method with Card<br> * NETWORK_PAY_PC_INDOMARET - Payment method with Indomaret<br> * NETWORK_PAY_PG_QRIS - Payment method with QRIS<br> * NETWORK_PAY_PL_INDODANA - Payment method with Paylater Indodana<br> * VIRTUAL_ACCOUNT_BCA - Payment method with BCA virtual account<br> * VIRTUAL_ACCOUNT_BNI - Payment method with BNI virtual account<br> * VIRTUAL_ACCOUNT_MANDIRI - Payment method with Mandiri virtual account<br> * VIRTUAL_ACCOUNT_BRI - Payment method with BRI virtual account<br> * VIRTUAL_ACCOUNT_BTPN - Payment method with BTPN virtual account<br> * VIRTUAL_ACCOUNT_CIMB - Payment method with CIMB virtual account<br> * VIRTUAL_ACCOUNT_PERMATA - Payment method with Permata virtual account<br> * VIRTUAL_ACCOUNT_PANI - Payment method with Panin virtual account<br> ")
51
+ pay_option: Optional[Annotated[str, Field(strict=True, max_length=64)]] = Field(default=None, description="Payment option which shows the provider of this payment. The enums:<br> * NETWORK_PAY_PG_SPAY - Payment method with ShopeePay e-wallet<br> * NETWORK_PAY_PG_OVO - Payment method with OVO e-wallet<br> * NETWORK_PAY_PG_GOPAY - Payment method with GoPay e-wallet<br> * NETWORK_PAY_PG_LINKAJA - Payment method with LinkAja e-wallet<br> * NETWORK_PAY_PG_CARD - Payment method with Card<br> * NETWORK_PAY_PC_INDOMARET - Payment method with Indomaret<br> * NETWORK_PAY_PG_QRIS - Payment method with QRIS<br> * NETWORK_PAY_PL_INDODANA - Payment method with Paylater Indodana<br> * VIRTUAL_ACCOUNT_BCA - Payment method with BCA virtual account<br> * VIRTUAL_ACCOUNT_BNI - Payment method with BNI virtual account<br> * VIRTUAL_ACCOUNT_MANDIRI - Payment method with Mandiri virtual account<br> * VIRTUAL_ACCOUNT_BRI - Payment method with BRI virtual account<br> * VIRTUAL_ACCOUNT_BTPN - Payment method with BTPN virtual account<br> * VIRTUAL_ACCOUNT_CIMB - Payment method with CIMB virtual account<br> * VIRTUAL_ACCOUNT_PERMATA - Payment method with Permata virtual account<br> * VIRTUAL_ACCOUNT_PANI - Payment method with Panin virtual account<br> * VIRTUAL_ACCOUNT_BSI_PAYMENT - Payment method with BSI virtual account<br> ")
52
52
  pay_amount: Optional[Money] = Field(default=None, description="Pay amount. Contains two sub-fields:<br> 1. Value: Transaction amount, including the cents<br> 2. Currency: Currency code based on ISO<br> ")
53
53
  trans_amount: Optional[Money] = Field(default=None, description="Trans amount. Contains two sub-fields:<br> 1. Value: Transaction amount, including the cents<br> 2. Currency: Currency code based on ISO<br> ")
54
54
  charge_amount: Optional[Money] = Field(default=None, description="Charge amount. Contains two sub-fields:<br> 1. Value: Transaction amount, including the cents<br> 2. Currency: Currency code based on ISO<br> ")
@@ -72,8 +72,8 @@ class PayOptionInfo(BaseModel, BaseSdkModel):
72
72
  if not value:
73
73
  return value
74
74
 
75
- if value not in set(['NETWORK_PAY_PG_SPAY', 'NETWORK_PAY_PG_OVO', 'NETWORK_PAY_PG_GOPAY', 'NETWORK_PAY_PG_LINKAJA', 'NETWORK_PAY_PG_CARD', 'NETWORK_PAY_PC_INDOMARET', 'NETWORK_PAY_PG_QRIS', 'NETWORK_PAY_PL_INDODANA', 'VIRTUAL_ACCOUNT_BCA', 'VIRTUAL_ACCOUNT_BNI', 'VIRTUAL_ACCOUNT_MANDIRI', 'VIRTUAL_ACCOUNT_BRI', 'VIRTUAL_ACCOUNT_BTPN', 'VIRTUAL_ACCOUNT_CIMB', 'VIRTUAL_ACCOUNT_PERMATA', 'VIRTUAL_ACCOUNT_PANI']):
76
- raise ValueError("must be one of enum values ('NETWORK_PAY_PG_SPAY', 'NETWORK_PAY_PG_OVO', 'NETWORK_PAY_PG_GOPAY', 'NETWORK_PAY_PG_LINKAJA', 'NETWORK_PAY_PG_CARD', 'NETWORK_PAY_PC_INDOMARET', 'NETWORK_PAY_PG_QRIS', 'NETWORK_PAY_PL_INDODANA', 'VIRTUAL_ACCOUNT_BCA', 'VIRTUAL_ACCOUNT_BNI', 'VIRTUAL_ACCOUNT_MANDIRI', 'VIRTUAL_ACCOUNT_BRI', 'VIRTUAL_ACCOUNT_BTPN', 'VIRTUAL_ACCOUNT_CIMB', 'VIRTUAL_ACCOUNT_PERMATA', 'VIRTUAL_ACCOUNT_PANI')")
75
+ if value not in set(['NETWORK_PAY_PG_SPAY', 'NETWORK_PAY_PG_OVO', 'NETWORK_PAY_PG_GOPAY', 'NETWORK_PAY_PG_LINKAJA', 'NETWORK_PAY_PG_CARD', 'NETWORK_PAY_PC_INDOMARET', 'NETWORK_PAY_PG_QRIS', 'NETWORK_PAY_PL_INDODANA', 'VIRTUAL_ACCOUNT_BCA', 'VIRTUAL_ACCOUNT_BNI', 'VIRTUAL_ACCOUNT_MANDIRI', 'VIRTUAL_ACCOUNT_BRI', 'VIRTUAL_ACCOUNT_BTPN', 'VIRTUAL_ACCOUNT_CIMB', 'VIRTUAL_ACCOUNT_PERMATA', 'VIRTUAL_ACCOUNT_PANI', 'VIRTUAL_ACCOUNT_BSI_PAYMENT']):
76
+ raise ValueError("must be one of enum values ('NETWORK_PAY_PG_SPAY', 'NETWORK_PAY_PG_OVO', 'NETWORK_PAY_PG_GOPAY', 'NETWORK_PAY_PG_LINKAJA', 'NETWORK_PAY_PG_CARD', 'NETWORK_PAY_PC_INDOMARET', 'NETWORK_PAY_PG_QRIS', 'NETWORK_PAY_PL_INDODANA', 'VIRTUAL_ACCOUNT_BCA', 'VIRTUAL_ACCOUNT_BNI', 'VIRTUAL_ACCOUNT_MANDIRI', 'VIRTUAL_ACCOUNT_BRI', 'VIRTUAL_ACCOUNT_BTPN', 'VIRTUAL_ACCOUNT_CIMB', 'VIRTUAL_ACCOUNT_PERMATA', 'VIRTUAL_ACCOUNT_PANI', 'VIRTUAL_ACCOUNT_BSI_PAYMENT')")
77
77
  return value
78
78
 
79
79
  model_config = ConfigDict(
@@ -47,7 +47,7 @@ class SnapHeader:
47
47
  ]
48
48
  SnapApplyTokenRuntimeHeaders: List[str] = [
49
49
  X_TIMESTAMP, X_SIGNATURE,
50
- X_CLIENT_KEY, CHANNEL_ID
50
+ X_CLIENT_KEY, X_PARTNER_ID, CHANNEL_ID
51
51
  ]
52
52
  SnapApplyOTTRuntimeHeaders: List[str] = [
53
53
  AUTHORIZATION_CUSTOMER, X_TIMESTAMP, X_SIGNATURE,
@@ -76,11 +76,6 @@ class SnapHeader:
76
76
  ]
77
77
 
78
78
  if scenario == "apply_token":
79
- # Remove X-PARTNER-ID as it's replaced by X-CLIENT-KEY in apply_token scenario
80
- filtered_auth = [
81
- auth for auth in filtered_auth
82
- if auth != X_PARTNER_ID # Explicitly exclude X-PARTNER-ID
83
- ]
84
79
  return list(set(filtered_auth).union(SnapHeader.SnapApplyTokenRuntimeHeaders))
85
80
 
86
81
  elif scenario == "apply_ott" or scenario == "unbinding_account":
@@ -108,6 +108,7 @@ class PayOption(str, Enum):
108
108
  VIRTUAL_ACCOUNT_CIMB = "VIRTUAL_ACCOUNT_CIMB"
109
109
  VIRTUAL_ACCOUNT_PERMATA = "VIRTUAL_ACCOUNT_PERMATA"
110
110
  VIRTUAL_ACCOUNT_PANI = "VIRTUAL_ACCOUNT_PANI"
111
+ VIRTUAL_ACCOUNT_BSI_PAYMENT = "VIRTUAL_ACCOUNT_BSI_PAYMENT"
111
112
 
112
113
  class Type(str, Enum):
113
114
  PAY_RETURN = "PAY_RETURN"
@@ -48,7 +48,7 @@ class PayOptionInfo(BaseModel, BaseSdkModel):
48
48
  PayOptionInfo
49
49
  """ # noqa: E501
50
50
  pay_method: Annotated[str, Field(strict=True, max_length=64)] = Field(description="Payment method name. The enums:<br> * BALANCE - Payment method with balance<br> * COUPON - Payment method with coupon<br> * NET_BANKING - Payment method with internet banking<br> * CREDIT_CARD - Payment method with credit card<br> * DEBIT_CARD - Payment method with debit card<br> * VIRTUAL_ACCOUNT - Payment method with virtual account<br> * OTC - Payment method with OTC<br> * DIRECT_DEBIT_CREDIT_CARD - Payment method with direct debit of credit card<br> * DIRECT_DEBIT_DEBIT_CARD - Payment method with direct debit of debit card<br> * ONLINE_CREDIT - Payment method with online Credit<br> * LOAN_CREDIT - Payment method with DANA Cicil<br> * NETWORK_PAY - Payment method with e-wallet * CARD - Payment method with Card ")
51
- pay_option: Optional[Annotated[str, Field(strict=True, max_length=64)]] = Field(default=None, description="Payment option which shows the provider of this payment. The enums:<br> * NETWORK_PAY_PG_SPAY - Payment method with ShopeePay e-wallet<br> * NETWORK_PAY_PG_OVO - Payment method with OVO e-wallet<br> * NETWORK_PAY_PG_GOPAY - Payment method with GoPay e-wallet<br> * NETWORK_PAY_PG_LINKAJA - Payment method with LinkAja e-wallet<br> * NETWORK_PAY_PG_CARD - Payment method with Card<br> * NETWORK_PAY_PC_INDOMARET - Payment method with Indomaret<br> * NETWORK_PAY_PG_QRIS - Payment method with QRIS<br> * NETWORK_PAY_PL_INDODANA - Payment method with Paylater Indodana<br> * VIRTUAL_ACCOUNT_BCA - Payment method with BCA virtual account<br> * VIRTUAL_ACCOUNT_BNI - Payment method with BNI virtual account<br> * VIRTUAL_ACCOUNT_MANDIRI - Payment method with Mandiri virtual account<br> * VIRTUAL_ACCOUNT_BRI - Payment method with BRI virtual account<br> * VIRTUAL_ACCOUNT_BTPN - Payment method with BTPN virtual account<br> * VIRTUAL_ACCOUNT_CIMB - Payment method with CIMB virtual account<br> * VIRTUAL_ACCOUNT_PERMATA - Payment method with Permata virtual account<br> * VIRTUAL_ACCOUNT_PANI - Payment method with Panin virtual account<br> ")
51
+ pay_option: Optional[Annotated[str, Field(strict=True, max_length=64)]] = Field(default=None, description="Payment option which shows the provider of this payment. The enums:<br> * NETWORK_PAY_PG_SPAY - Payment method with ShopeePay e-wallet<br> * NETWORK_PAY_PG_OVO - Payment method with OVO e-wallet<br> * NETWORK_PAY_PG_GOPAY - Payment method with GoPay e-wallet<br> * NETWORK_PAY_PG_LINKAJA - Payment method with LinkAja e-wallet<br> * NETWORK_PAY_PG_CARD - Payment method with Card<br> * NETWORK_PAY_PC_INDOMARET - Payment method with Indomaret<br> * NETWORK_PAY_PG_QRIS - Payment method with QRIS<br> * NETWORK_PAY_PL_INDODANA - Payment method with Paylater Indodana<br> * VIRTUAL_ACCOUNT_BCA - Payment method with BCA virtual account<br> * VIRTUAL_ACCOUNT_BNI - Payment method with BNI virtual account<br> * VIRTUAL_ACCOUNT_MANDIRI - Payment method with Mandiri virtual account<br> * VIRTUAL_ACCOUNT_BRI - Payment method with BRI virtual account<br> * VIRTUAL_ACCOUNT_BTPN - Payment method with BTPN virtual account<br> * VIRTUAL_ACCOUNT_CIMB - Payment method with CIMB virtual account<br> * VIRTUAL_ACCOUNT_PERMATA - Payment method with Permata virtual account<br> * VIRTUAL_ACCOUNT_PANI - Payment method with Panin virtual account<br> * VIRTUAL_ACCOUNT_BSI_PAYMENT - Payment method with BSI virtual account<br> ")
52
52
  pay_amount: Optional[Money] = Field(default=None, description="Pay amount. Contains two sub-fields:<br> 1. Value: Transaction amount, including the cents<br> 2. Currency: Currency code based on ISO<br> ")
53
53
  trans_amount: Optional[Money] = Field(default=None, description="Trans amount. Contains two sub-fields:<br> 1. Value: Transaction amount, including the cents<br> 2. Currency: Currency code based on ISO<br> ")
54
54
  charge_amount: Optional[Money] = Field(default=None, description="Charge amount. Contains two sub-fields:<br> 1. Value: Transaction amount, including the cents<br> 2. Currency: Currency code based on ISO<br> ")
@@ -70,8 +70,8 @@ class PayOptionInfo(BaseModel, BaseSdkModel):
70
70
  if value is None:
71
71
  return value
72
72
 
73
- if value not in set(['NETWORK_PAY_PG_SPAY', 'NETWORK_PAY_PG_OVO', 'NETWORK_PAY_PG_GOPAY', 'NETWORK_PAY_PG_LINKAJA', 'NETWORK_PAY_PG_CARD', 'NETWORK_PAY_PC_INDOMARET', 'NETWORK_PAY_PG_QRIS', 'NETWORK_PAY_PL_INDODANA', 'VIRTUAL_ACCOUNT_BCA', 'VIRTUAL_ACCOUNT_BNI', 'VIRTUAL_ACCOUNT_MANDIRI', 'VIRTUAL_ACCOUNT_BRI', 'VIRTUAL_ACCOUNT_BTPN', 'VIRTUAL_ACCOUNT_CIMB', 'VIRTUAL_ACCOUNT_PERMATA', 'VIRTUAL_ACCOUNT_PANI']):
74
- raise ValueError("must be one of enum values ('NETWORK_PAY_PG_SPAY', 'NETWORK_PAY_PG_OVO', 'NETWORK_PAY_PG_GOPAY', 'NETWORK_PAY_PG_LINKAJA', 'NETWORK_PAY_PG_CARD', 'NETWORK_PAY_PC_INDOMARET', 'NETWORK_PAY_PG_QRIS', 'NETWORK_PAY_PL_INDODANA', 'VIRTUAL_ACCOUNT_BCA', 'VIRTUAL_ACCOUNT_BNI', 'VIRTUAL_ACCOUNT_MANDIRI', 'VIRTUAL_ACCOUNT_BRI', 'VIRTUAL_ACCOUNT_BTPN', 'VIRTUAL_ACCOUNT_CIMB', 'VIRTUAL_ACCOUNT_PERMATA', 'VIRTUAL_ACCOUNT_PANI')")
73
+ if value not in set(['NETWORK_PAY_PG_SPAY', 'NETWORK_PAY_PG_OVO', 'NETWORK_PAY_PG_GOPAY', 'NETWORK_PAY_PG_LINKAJA', 'NETWORK_PAY_PG_CARD', 'NETWORK_PAY_PC_INDOMARET', 'NETWORK_PAY_PG_QRIS', 'NETWORK_PAY_PL_INDODANA', 'VIRTUAL_ACCOUNT_BCA', 'VIRTUAL_ACCOUNT_BNI', 'VIRTUAL_ACCOUNT_MANDIRI', 'VIRTUAL_ACCOUNT_BRI', 'VIRTUAL_ACCOUNT_BTPN', 'VIRTUAL_ACCOUNT_CIMB', 'VIRTUAL_ACCOUNT_PERMATA', 'VIRTUAL_ACCOUNT_PANI', 'VIRTUAL_ACCOUNT_BSI_PAYMENT']):
74
+ raise ValueError("must be one of enum values ('NETWORK_PAY_PG_SPAY', 'NETWORK_PAY_PG_OVO', 'NETWORK_PAY_PG_GOPAY', 'NETWORK_PAY_PG_LINKAJA', 'NETWORK_PAY_PG_CARD', 'NETWORK_PAY_PC_INDOMARET', 'NETWORK_PAY_PG_QRIS', 'NETWORK_PAY_PL_INDODANA', 'VIRTUAL_ACCOUNT_BCA', 'VIRTUAL_ACCOUNT_BNI', 'VIRTUAL_ACCOUNT_MANDIRI', 'VIRTUAL_ACCOUNT_BRI', 'VIRTUAL_ACCOUNT_BTPN', 'VIRTUAL_ACCOUNT_CIMB', 'VIRTUAL_ACCOUNT_PERMATA', 'VIRTUAL_ACCOUNT_PANI', 'VIRTUAL_ACCOUNT_BSI_PAYMENT')")
75
75
  return value
76
76
 
77
77
  model_config = ConfigDict(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dana-python
3
- Version: 2.1.2
3
+ Version: 2.1.4
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>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "dana-python"
3
- version = "2.1.2"
3
+ version = "2.1.4"
4
4
  readme = "README.md"
5
5
  description = "API Client (SDK) for DANA APIs based on https://dashboard.dana.id/api-docs"
6
6
  license = "Apache-2.0"
@@ -463,7 +463,7 @@ class TestPaymentGatewaySandboxPayMethodPayOptionValidation:
463
463
  pytest.skip("Sandbox payMethod/payOption validation only runs in sandbox")
464
464
 
465
465
  request = PaymentGatewayFixtures.get_create_order_by_api_request()
466
- # OVO is not in allowed list (CARD, QRIS, BRI, PANIN, CIMB, MANDIRI, BTPN)
466
+ # OVO is not in allowed list (CARD, QRIS, BRI, PANIN, CIMB, MANDIRI, BTPN, BSI)
467
467
  request.pay_option_details = [
468
468
  PayOptionDetail(
469
469
  pay_method=PayMethod.NETWORK_PAY,
@@ -65,7 +65,7 @@ class TestWidgetWithAutomation:
65
65
  redirect_url='https://google.com',
66
66
  merchant_id=merchant_id,
67
67
  seamless_data={
68
- 'mobileNumber': '087875849373'
68
+ 'mobileNumber': '083811223355'
69
69
  },
70
70
  external_id=str(uuid.uuid4())
71
71
  )
@@ -101,8 +101,8 @@ class TestWidgetWithAutomation:
101
101
  print('Starting OAuth automation process...')
102
102
  generated_auth_code = get_auth_code(
103
103
  oauth_url=oauth_url,
104
- phone_number='087875849373', # Optional: override phone number if needed
105
- pin=None # Use default PIN
104
+ phone_number='083811223355', # Optional: override phone number if needed
105
+ pin='181818'
106
106
  )
107
107
 
108
108
  if generated_auth_code:
@@ -208,21 +208,38 @@ class TestWidgetWithAutomation:
208
208
  except Exception as e:
209
209
  pytest.fail(f'Error during WidgetPayment execution: {e}')
210
210
 
211
- # Construct full payment URL with OTT from binding process
212
- payment_url = Util.generate_complete_payment_url(
213
- widget_payment_response=payment_response,
214
- apply_ott_response=ott_response
215
- )
216
- print(f"Payment URL: {payment_url}")
211
+ # Construct full payment URL with OTT and automate payment.
212
+ # OTTs are short-lived, so we re-apply OTT on each attempt to avoid
213
+ # "OTT not valid" errors caused by the time taken by prior test steps.
214
+ from tests.web_automation import automate_payment_widget
215
+ max_payment_retries = 3
216
+ payment_success = False
217
+ for payment_attempt in range(1, max_payment_retries + 1):
218
+ try:
219
+ print(f'Applying fresh OTT for payment attempt {payment_attempt}...')
220
+ fresh_ott_response = api_instance_widget.apply_ott(apply_ott_request)
221
+ assert fresh_ott_response.response_code == '2004900', \
222
+ f'OTT failed: {fresh_ott_response.response_code}'
223
+ self.__class__.ott = fresh_ott_response.user_resources[0].value
217
224
 
218
- try:
219
- # Run the payment automation script (this would be implemented separately)
220
- from tests.web_automation import automate_payment_widget
221
- print("Running payment automation script...")
222
- success = automate_payment_widget(payment_url)
223
- assert success, "Payment automation failed"
224
- except Exception as e:
225
- pytest.fail(f'Error during payment automation: {e}')
225
+ payment_url = Util.generate_complete_payment_url(
226
+ widget_payment_response=payment_response,
227
+ apply_ott_response=fresh_ott_response
228
+ )
229
+ print(f"Payment URL (attempt {payment_attempt}): {payment_url}")
230
+
231
+ print("Running payment automation script...")
232
+ success = automate_payment_widget(payment_url)
233
+ if success:
234
+ payment_success = True
235
+ break
236
+ print(f"Payment automation returned False on attempt {payment_attempt}")
237
+ except Exception as e:
238
+ print(f"Payment attempt {payment_attempt} error: {e}")
239
+ if payment_attempt < max_payment_retries:
240
+ print(f"Retrying payment in 3 seconds...")
241
+ time.sleep(3)
242
+ assert payment_success, f"Payment automation failed after {max_payment_retries} attempts"
226
243
 
227
244
  time.sleep(5)
228
245
 
@@ -255,154 +272,7 @@ class TestWidgetWithAutomation:
255
272
  # Query User Profile
256
273
  print("Querying user profile...")
257
274
  query_user_profile_req = query_user_profile_request(self.__class__.binding_access_token)
258
-
259
- print("=== QueryUserProfile Request Debug ===")
260
- print(f"Request object: {query_user_profile_req}")
261
- print(f"User Resources: {query_user_profile_req.user_resources}")
262
- print(f"Access Token: {query_user_profile_req.access_token}")
263
- print("=== End Request Debug ===")
264
-
265
- # Add comprehensive HTTP request debugging
266
- import urllib3
267
- import json as json_module
268
-
269
- # Monkey patch urllib3 to log requests and responses
270
- original_urlopen = urllib3.poolmanager.PoolManager.urlopen
271
-
272
- def debug_urlopen(self, method, url, *args, **kwargs):
273
- print("\n" + "="*60)
274
- print("=== PYTHON HTTP REQUEST DEBUG ===")
275
- print("="*60)
276
- print(f"Method: {method}")
277
- print(f"URL: {url}")
278
-
279
- # Log all headers
280
- headers = kwargs.get('headers', {})
281
- if headers:
282
- print("HTTP Headers:")
283
- for key, value in headers.items():
284
- print(f" {key}: {value}")
285
-
286
- # Log request body with detailed analysis
287
- body = kwargs.get('body')
288
- if body:
289
- print("\nRequest Body Analysis:")
290
- print(f" Body type: {type(body)}")
291
- print(f" Body length: {len(body) if body else 0}")
292
-
293
- try:
294
- # Handle different body types
295
- if isinstance(body, bytes):
296
- body_str = body.decode('utf-8')
297
- elif isinstance(body, str):
298
- body_str = body
299
- else:
300
- body_str = str(body)
301
-
302
- print(f" Body (literal): {repr(body_str)}")
303
-
304
- # Try to parse and pretty print JSON
305
- try:
306
- parsed_json = json_module.loads(body_str)
307
- print(" Body (parsed JSON):")
308
- print(json_module.dumps(parsed_json, indent=4))
309
-
310
- # Analyze DANA request structure
311
- if isinstance(parsed_json, dict):
312
- if 'request' in parsed_json:
313
- print(" ✅ Contains 'request' wrapper")
314
- request_part = parsed_json['request']
315
- if 'head' in request_part:
316
- head = request_part['head']
317
- print(f" ✅ Head section with {len(head)} fields:")
318
- for k, v in head.items():
319
- if k == 'accessToken':
320
- print(f" ✅ {k}: {v}")
321
- else:
322
- print(f" - {k}: {v}")
323
- if 'body' in request_part:
324
- body_part = request_part['body']
325
- print(f" ✅ Body section: {body_part}")
326
- if 'signature' in parsed_json:
327
- sig = parsed_json['signature']
328
- print(f" ✅ Signature: {sig[:50]}...")
329
- else:
330
- print(" ❌ Missing signature!")
331
- else:
332
- print(f" ❌ Unexpected structure: {list(parsed_json.keys())}")
333
-
334
- except json_module.JSONDecodeError as e:
335
- print(f" ❌ Failed to parse JSON: {e}")
336
- except Exception as e:
337
- print(f" ❌ Failed to process body: {e}")
338
- else:
339
- print(" No request body")
340
-
341
- print("="*60)
342
-
343
- # Make the actual request
344
- response = original_urlopen(self, method, url, *args, **kwargs)
345
-
346
- # Log response details
347
- print("=== PYTHON HTTP RESPONSE DEBUG ===")
348
- print("="*60)
349
- print(f"Status: {response.status}")
350
- print(f"Status reason: {getattr(response, 'reason', 'N/A')}")
351
-
352
- print("Response Headers:")
353
- for key, value in response.headers.items():
354
- print(f" {key}: {value}")
355
-
356
- # Read response body without consuming it for the client
357
- print("\nResponse Body Analysis:")
358
- try:
359
- # Get response data
360
- response_data = response.data
361
- if isinstance(response_data, bytes):
362
- response_text = response_data.decode('utf-8')
363
- else:
364
- response_text = str(response_data)
365
-
366
- print(f"Response body type: {type(response_data)}")
367
- print(f"Response body length: {len(response_text)}")
368
- print(f"Response body (literal): {repr(response_text)}")
369
-
370
- # Parse and analyze JSON response
371
- try:
372
- parsed_response = json_module.loads(response_text)
373
- print("Response body (parsed JSON):")
374
- print(json_module.dumps(parsed_response, indent=4))
375
-
376
- # Analyze DANA response structure
377
- if 'response' in parsed_response:
378
- resp = parsed_response['response']
379
- if 'body' in resp and 'resultInfo' in resp['body']:
380
- result = resp['body']['resultInfo']
381
- print(f"\n📊 API Result: {result.get('resultStatus', 'N/A')} - {result.get('resultCode', 'N/A')}")
382
- if result.get('resultMsg'):
383
- print(f"📋 Message: {result['resultMsg']}")
384
-
385
- except json_module.JSONDecodeError:
386
- print("❌ Response is not valid JSON")
387
-
388
- except Exception as e:
389
- print(f"❌ Could not read response body: {e}")
390
- print(f"Response object type: {type(response)}")
391
- print(f"Response attributes: {[attr for attr in dir(response) if not attr.startswith('_')]}")
392
-
393
- print("="*60)
394
- print()
395
-
396
- return response
397
-
398
- # Apply the monkey patch
399
- urllib3.poolmanager.PoolManager.urlopen = debug_urlopen
400
-
401
- try:
402
- query_user_profile_response = api_instance_widget.query_user_profile(query_user_profile_req)
403
- finally:
404
- # Restore original method
405
- urllib3.poolmanager.PoolManager.urlopen = original_urlopen
275
+ query_user_profile_response = api_instance_widget.query_user_profile(query_user_profile_req)
406
276
 
407
277
  assert query_user_profile_response is not None
408
278
  assert query_user_profile_response.response is not None
File without changes
File without changes