dana-python 2.1.3__tar.gz → 2.1.5__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.3/dana_python.egg-info → dana_python-2.1.5}/PKG-INFO +1 -1
  2. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/custom_validation.py +1 -1
  3. {dana_python-2.1.3 → dana_python-2.1.5}/dana/utils/snap_header.py +1 -6
  4. {dana_python-2.1.3 → dana_python-2.1.5/dana_python.egg-info}/PKG-INFO +1 -1
  5. {dana_python-2.1.3 → dana_python-2.1.5}/pyproject.toml +1 -1
  6. {dana_python-2.1.3 → dana_python-2.1.5}/tests/test_widget_with_automation.py +35 -165
  7. {dana_python-2.1.3 → dana_python-2.1.5}/LICENSE +0 -0
  8. {dana_python-2.1.3 → dana_python-2.1.5}/README.md +0 -0
  9. {dana_python-2.1.3 → dana_python-2.1.5}/dana/__init__.py +0 -0
  10. {dana_python-2.1.3 → dana_python-2.1.5}/dana/api_client.py +0 -0
  11. {dana_python-2.1.3 → dana_python-2.1.5}/dana/api_response.py +0 -0
  12. {dana_python-2.1.3 → dana_python-2.1.5}/dana/base/__init__.py +0 -0
  13. {dana_python-2.1.3 → dana_python-2.1.5}/dana/base/configuration.py +0 -0
  14. {dana_python-2.1.3 → dana_python-2.1.5}/dana/base/model.py +0 -0
  15. {dana_python-2.1.3 → dana_python-2.1.5}/dana/base/types.py +0 -0
  16. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/__init__.py +0 -0
  17. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/__init__.py +0 -0
  18. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/api/__init__.py +0 -0
  19. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/api/disbursement_api.py +0 -0
  20. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/enum.py +0 -0
  21. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/models/__init__.py +0 -0
  22. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/models/bank_account_inquiry_request.py +0 -0
  23. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/models/bank_account_inquiry_request_additional_info.py +0 -0
  24. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/models/bank_account_inquiry_response.py +0 -0
  25. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/models/bank_account_inquiry_response_additional_info.py +0 -0
  26. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/models/dana_account_inquiry_request.py +0 -0
  27. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/models/dana_account_inquiry_request_additional_info.py +0 -0
  28. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/models/dana_account_inquiry_response.py +0 -0
  29. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/models/money.py +0 -0
  30. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/models/transfer_to_bank_inquiry_status_request.py +0 -0
  31. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/models/transfer_to_bank_inquiry_status_response.py +0 -0
  32. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/models/transfer_to_bank_request.py +0 -0
  33. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/models/transfer_to_bank_request_additional_info.py +0 -0
  34. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/models/transfer_to_bank_response.py +0 -0
  35. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/models/transfer_to_dana_inquiry_status_request.py +0 -0
  36. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/models/transfer_to_dana_inquiry_status_response.py +0 -0
  37. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/models/transfer_to_dana_request.py +0 -0
  38. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/models/transfer_to_dana_request_additional_info.py +0 -0
  39. {dana_python-2.1.3 → dana_python-2.1.5}/dana/disbursement/v1/models/transfer_to_dana_response.py +0 -0
  40. {dana_python-2.1.3 → dana_python-2.1.5}/dana/exceptions.py +0 -0
  41. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/__init__.py +0 -0
  42. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/__init__.py +0 -0
  43. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/api/__init__.py +0 -0
  44. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/api/merchant_management_api.py +0 -0
  45. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/enum.py +0 -0
  46. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/__init__.py +0 -0
  47. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/address_info.py +0 -0
  48. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/business_docs.py +0 -0
  49. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/create_division_request.py +0 -0
  50. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/create_division_request_ext_info.py +0 -0
  51. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/create_division_response.py +0 -0
  52. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/create_division_response_response.py +0 -0
  53. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/create_division_response_response_body.py +0 -0
  54. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/create_division_response_response_head.py +0 -0
  55. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/create_shop_request.py +0 -0
  56. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/create_shop_response.py +0 -0
  57. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/create_shop_response_response.py +0 -0
  58. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/create_shop_response_response_body.py +0 -0
  59. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/create_shop_response_response_head.py +0 -0
  60. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/division_resource_info.py +0 -0
  61. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/merchant_resource_information.py +0 -0
  62. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/mobile_no_info.py +0 -0
  63. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/pic_info.py +0 -0
  64. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/query_division_request.py +0 -0
  65. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/query_division_response.py +0 -0
  66. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/query_division_response_response.py +0 -0
  67. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/query_division_response_response_body.py +0 -0
  68. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/query_division_response_response_head.py +0 -0
  69. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/query_merchant_resource_request.py +0 -0
  70. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/query_merchant_resource_response.py +0 -0
  71. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/query_merchant_resource_response_response.py +0 -0
  72. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/query_merchant_resource_response_response_body.py +0 -0
  73. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/query_merchant_resource_response_response_head.py +0 -0
  74. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/query_shop_request.py +0 -0
  75. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/query_shop_response.py +0 -0
  76. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/query_shop_response_response.py +0 -0
  77. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/query_shop_response_response_body.py +0 -0
  78. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/query_shop_response_response_head.py +0 -0
  79. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/result_info.py +0 -0
  80. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/shop_resource_info.py +0 -0
  81. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/update_division_request.py +0 -0
  82. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/update_division_response.py +0 -0
  83. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/update_division_response_response.py +0 -0
  84. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/update_division_response_response_body.py +0 -0
  85. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/update_division_response_response_head.py +0 -0
  86. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/update_shop_request.py +0 -0
  87. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/update_shop_response.py +0 -0
  88. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/update_shop_response_response.py +0 -0
  89. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/update_shop_response_response_head.py +0 -0
  90. {dana_python-2.1.3 → dana_python-2.1.5}/dana/merchant_management/v1/models/user_name.py +0 -0
  91. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/__init__.py +0 -0
  92. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/__init__.py +0 -0
  93. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/api/__init__.py +0 -0
  94. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/api/payment_gateway_api.py +0 -0
  95. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/enum.py +0 -0
  96. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/__init__.py +0 -0
  97. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/actor_context.py +0 -0
  98. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/amount_detail.py +0 -0
  99. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/audit_info.py +0 -0
  100. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/buyer.py +0 -0
  101. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/cancel_order_request.py +0 -0
  102. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/cancel_order_response.py +0 -0
  103. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/consult_pay_payment_info.py +0 -0
  104. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/consult_pay_request.py +0 -0
  105. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/consult_pay_request_additional_info.py +0 -0
  106. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/consult_pay_response.py +0 -0
  107. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/create_order_by_api_additional_info.py +0 -0
  108. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/create_order_by_api_request.py +0 -0
  109. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/create_order_by_redirect_additional_info.py +0 -0
  110. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/create_order_by_redirect_request.py +0 -0
  111. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/create_order_response.py +0 -0
  112. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/create_order_response_additional_info.py +0 -0
  113. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/env_info.py +0 -0
  114. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/goods.py +0 -0
  115. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/money.py +0 -0
  116. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/order_api_object.py +0 -0
  117. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/order_redirect_object.py +0 -0
  118. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/pay_option_additional_info.py +0 -0
  119. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/pay_option_detail.py +0 -0
  120. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/pay_option_info.py +0 -0
  121. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/payment_view.py +0 -0
  122. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/promo_info.py +0 -0
  123. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/query_payment_request.py +0 -0
  124. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/query_payment_response.py +0 -0
  125. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/query_payment_response_additional_info.py +0 -0
  126. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/refund_option_bill.py +0 -0
  127. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/refund_order_request.py +0 -0
  128. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/refund_order_request_additional_info.py +0 -0
  129. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/refund_order_response.py +0 -0
  130. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/seller.py +0 -0
  131. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/shipping_info.py +0 -0
  132. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/status_detail.py +0 -0
  133. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/time_detail.py +0 -0
  134. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/url_param.py +0 -0
  135. {dana_python-2.1.3 → dana_python-2.1.5}/dana/payment_gateway/v1/models/virtual_account_info.py +0 -0
  136. {dana_python-2.1.3 → dana_python-2.1.5}/dana/rest.py +0 -0
  137. {dana_python-2.1.3 → dana_python-2.1.5}/dana/utils/date_validation.py +0 -0
  138. {dana_python-2.1.3 → dana_python-2.1.5}/dana/utils/models.py +0 -0
  139. {dana_python-2.1.3 → dana_python-2.1.5}/dana/utils/open_api_configuration.py +0 -0
  140. {dana_python-2.1.3 → dana_python-2.1.5}/dana/utils/open_api_header.py +0 -0
  141. {dana_python-2.1.3 → dana_python-2.1.5}/dana/utils/script.py +0 -0
  142. {dana_python-2.1.3 → dana_python-2.1.5}/dana/utils/snap_configuration.py +0 -0
  143. {dana_python-2.1.3 → dana_python-2.1.5}/dana/utils/url.py +0 -0
  144. {dana_python-2.1.3 → dana_python-2.1.5}/dana/webhook/__init__.py +0 -0
  145. {dana_python-2.1.3 → dana_python-2.1.5}/dana/webhook/finish_notify_payment_info.py +0 -0
  146. {dana_python-2.1.3 → dana_python-2.1.5}/dana/webhook/finish_notify_request.py +0 -0
  147. {dana_python-2.1.3 → dana_python-2.1.5}/dana/webhook/finish_notify_request_additional_info.py +0 -0
  148. {dana_python-2.1.3 → dana_python-2.1.5}/dana/webhook/finish_notify_response.py +0 -0
  149. {dana_python-2.1.3 → dana_python-2.1.5}/dana/webhook/money.py +0 -0
  150. {dana_python-2.1.3 → dana_python-2.1.5}/dana/webhook/pay_option_info.py +0 -0
  151. {dana_python-2.1.3 → dana_python-2.1.5}/dana/webhook/shop_info.py +0 -0
  152. {dana_python-2.1.3 → dana_python-2.1.5}/dana/webhook/webhook.py +0 -0
  153. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/__init__.py +0 -0
  154. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/__init__.py +0 -0
  155. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/api/__init__.py +0 -0
  156. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/api/widget_api.py +0 -0
  157. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/custom_validation.py +0 -0
  158. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/enum.py +0 -0
  159. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/__init__.py +0 -0
  160. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/account_info.py +0 -0
  161. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/account_unbinding_request.py +0 -0
  162. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/account_unbinding_request_additional_info.py +0 -0
  163. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/account_unbinding_response.py +0 -0
  164. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/amount_detail.py +0 -0
  165. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/apply_ott_request.py +0 -0
  166. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/apply_ott_request_additional_info.py +0 -0
  167. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/apply_ott_response.py +0 -0
  168. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/apply_ott_response_user_resources_inner.py +0 -0
  169. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/apply_token_authorization_code_request.py +0 -0
  170. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/apply_token_refresh_token_request.py +0 -0
  171. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/apply_token_response.py +0 -0
  172. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/apply_token_response_additional_info.py +0 -0
  173. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/apply_token_response_additional_info_user_info.py +0 -0
  174. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/balance_inquiry_request.py +0 -0
  175. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/balance_inquiry_request_additional_info.py +0 -0
  176. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/balance_inquiry_response.py +0 -0
  177. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/buyer.py +0 -0
  178. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/cancel_order_request.py +0 -0
  179. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/cancel_order_response.py +0 -0
  180. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/env_info.py +0 -0
  181. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/goods.py +0 -0
  182. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/international_order_info.py +0 -0
  183. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/international_order_info_exchange_rate.py +0 -0
  184. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/money.py +0 -0
  185. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/oauth2_url_data.py +0 -0
  186. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/oauth2_url_data_seamless_data.py +0 -0
  187. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/order.py +0 -0
  188. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/pay_option_detail.py +0 -0
  189. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/pay_option_detail_additional_info.py +0 -0
  190. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/pay_option_info.py +0 -0
  191. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/payment_promo_info.py +0 -0
  192. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/payment_view.py +0 -0
  193. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/query_payment_request.py +0 -0
  194. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/query_payment_response.py +0 -0
  195. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/query_payment_response_additional_info.py +0 -0
  196. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/query_user_profile_request.py +0 -0
  197. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/query_user_profile_response.py +0 -0
  198. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/query_user_profile_response_response.py +0 -0
  199. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/query_user_profile_response_response_body.py +0 -0
  200. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/query_user_profile_response_response_head.py +0 -0
  201. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/refund_order_request.py +0 -0
  202. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/refund_order_request_additional_info.py +0 -0
  203. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/refund_order_response.py +0 -0
  204. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/refund_promo_info.py +0 -0
  205. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/result_info.py +0 -0
  206. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/seller.py +0 -0
  207. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/service_info.py +0 -0
  208. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/shipping_info.py +0 -0
  209. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/status_detail.py +0 -0
  210. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/time_detail.py +0 -0
  211. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/url_param.py +0 -0
  212. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/user_resource_info.py +0 -0
  213. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/virtual_account_info.py +0 -0
  214. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/widget_payment_request.py +0 -0
  215. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/widget_payment_request_additional_info.py +0 -0
  216. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/models/widget_payment_response.py +0 -0
  217. {dana_python-2.1.3 → dana_python-2.1.5}/dana/widget/v1/util.py +0 -0
  218. {dana_python-2.1.3 → dana_python-2.1.5}/dana_python.egg-info/SOURCES.txt +0 -0
  219. {dana_python-2.1.3 → dana_python-2.1.5}/dana_python.egg-info/dependency_links.txt +0 -0
  220. {dana_python-2.1.3 → dana_python-2.1.5}/dana_python.egg-info/requires.txt +0 -0
  221. {dana_python-2.1.3 → dana_python-2.1.5}/dana_python.egg-info/top_level.txt +0 -0
  222. {dana_python-2.1.3 → dana_python-2.1.5}/setup.cfg +0 -0
  223. {dana_python-2.1.3 → dana_python-2.1.5}/tests/test_disbursement_api.py +0 -0
  224. {dana_python-2.1.3 → dana_python-2.1.5}/tests/test_merchant_management_api.py +0 -0
  225. {dana_python-2.1.3 → dana_python-2.1.5}/tests/test_payment_gateway_api.py +0 -0
  226. {dana_python-2.1.3 → dana_python-2.1.5}/tests/test_payment_gateway_with_automation.py +0 -0
  227. {dana_python-2.1.3 → dana_python-2.1.5}/tests/test_snap_header.py +0 -0
  228. {dana_python-2.1.3 → dana_python-2.1.5}/tests/test_webhook.py +0 -0
  229. {dana_python-2.1.3 → dana_python-2.1.5}/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.3
3
+ Version: 2.1.5
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', 'BSI',
37
+ 'CARD', 'QRIS', 'BRI', 'PANI', 'CIMB', 'MANDIRI', 'BTPN', 'BSI_PAYMENT',
38
38
  })
39
39
 
40
40
  CREDIT_DEBIT_CARD_PAY_METHODS: Set[str] = {'CREDIT_CARD', 'DEBIT_CARD'}
@@ -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":
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dana-python
3
- Version: 2.1.3
3
+ Version: 2.1.5
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.3"
3
+ version = "2.1.5"
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"
@@ -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