dana-python 2.1.8__tar.gz → 2.1.10__tar.gz

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