velocity-python 0.1.67__tar.gz → 0.1.68__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 (207) hide show
  1. {velocity_python-0.1.67 → velocity_python-0.1.68}/PKG-INFO +1 -1
  2. {velocity_python-0.1.67 → velocity_python-0.1.68}/pyproject.toml +1 -1
  3. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/__init__.py +1 -1
  4. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/payment/stripe_adapter.py +39 -1
  5. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity_python.egg-info/PKG-INFO +1 -1
  6. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_payment_stripe_adapter.py +73 -0
  7. {velocity_python-0.1.67 → velocity_python-0.1.68}/LICENSE +0 -0
  8. {velocity_python-0.1.67 → velocity_python-0.1.68}/README.md +0 -0
  9. {velocity_python-0.1.67 → velocity_python-0.1.68}/setup.cfg +0 -0
  10. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/__init__.py +0 -0
  11. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/amplify.py +0 -0
  12. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/amplify_build.py +0 -0
  13. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/assets/__init__.py +0 -0
  14. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/assets/backfill.py +0 -0
  15. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/assets/indexing.py +0 -0
  16. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/assets/references.py +0 -0
  17. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/assets/service.py +0 -0
  18. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/assets/usage_index.py +0 -0
  19. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/dirty_pipeline.py +0 -0
  20. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/handlers/__init__.py +0 -0
  21. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/handlers/base_handler.py +0 -0
  22. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/handlers/context.py +0 -0
  23. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/handlers/context_factory.py +0 -0
  24. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/handlers/exceptions.py +0 -0
  25. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/handlers/lambda_handler.py +0 -0
  26. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/handlers/masquerade.py +0 -0
  27. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/handlers/mixins/__init__.py +0 -0
  28. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/handlers/mixins/data_service.py +0 -0
  29. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/handlers/mixins/web_handler.py +0 -0
  30. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/handlers/perf.py +0 -0
  31. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/handlers/response.py +0 -0
  32. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/handlers/sqs_handler.py +0 -0
  33. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/s3.py +0 -0
  34. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/ssm_config.py +0 -0
  35. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/tests/__init__.py +0 -0
  36. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/tests/test_base_handler_error_response.py +0 -0
  37. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/tests/test_lambda_handler_json_serialization.py +0 -0
  38. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/aws/tests/test_response.py +0 -0
  39. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/__init__.py +0 -0
  40. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/core/__init__.py +0 -0
  41. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/core/async_support.py +0 -0
  42. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/core/column.py +0 -0
  43. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/core/database.py +0 -0
  44. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/core/decorators.py +0 -0
  45. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/core/engine.py +0 -0
  46. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/core/jsonproxy.py +0 -0
  47. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/core/result.py +0 -0
  48. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/core/row.py +0 -0
  49. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/core/sequence.py +0 -0
  50. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/core/table.py +0 -0
  51. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/core/transaction.py +0 -0
  52. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/core/view.py +0 -0
  53. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/exceptions.py +0 -0
  54. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/migrations.py +0 -0
  55. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/__init__.py +0 -0
  56. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/base/__init__.py +0 -0
  57. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/base/initializer.py +0 -0
  58. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/base/operators.py +0 -0
  59. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/base/sql.py +0 -0
  60. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/base/types.py +0 -0
  61. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/mysql/__init__.py +0 -0
  62. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/mysql/operators.py +0 -0
  63. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/mysql/reserved.py +0 -0
  64. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/mysql/sql.py +0 -0
  65. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/mysql/types.py +0 -0
  66. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/postgres/__init__.py +0 -0
  67. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/postgres/operators.py +0 -0
  68. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/postgres/reserved.py +0 -0
  69. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/postgres/sql.py +0 -0
  70. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/postgres/types.py +0 -0
  71. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/sqlite/__init__.py +0 -0
  72. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/sqlite/operators.py +0 -0
  73. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/sqlite/reserved.py +0 -0
  74. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/sqlite/sql.py +0 -0
  75. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/sqlite/types.py +0 -0
  76. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/sqlserver/__init__.py +0 -0
  77. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/sqlserver/operators.py +0 -0
  78. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/sqlserver/reserved.py +0 -0
  79. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/sqlserver/sql.py +0 -0
  80. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/sqlserver/types.py +0 -0
  81. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/servers/tablehelper.py +0 -0
  82. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/__init__.py +0 -0
  83. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/common_db_test.py +0 -0
  84. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/postgres/__init__.py +0 -0
  85. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/postgres/common.py +0 -0
  86. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/postgres/conftest.py +0 -0
  87. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/postgres/test_column.py +0 -0
  88. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/postgres/test_connections.py +0 -0
  89. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/postgres/test_database.py +0 -0
  90. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/postgres/test_engine.py +0 -0
  91. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/postgres/test_general_usage.py +0 -0
  92. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/postgres/test_imports.py +0 -0
  93. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/postgres/test_result.py +0 -0
  94. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/postgres/test_row.py +0 -0
  95. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/postgres/test_row_comprehensive.py +0 -0
  96. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/postgres/test_schema_locking.py +0 -0
  97. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/postgres/test_schema_locking_unit.py +0 -0
  98. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/postgres/test_sequence.py +0 -0
  99. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/postgres/test_sql_comprehensive.py +0 -0
  100. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/postgres/test_table.py +0 -0
  101. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/postgres/test_table_comprehensive.py +0 -0
  102. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/postgres/test_transaction.py +0 -0
  103. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/sql/__init__.py +0 -0
  104. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/sql/common.py +0 -0
  105. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/sql/test_postgres_select_advanced.py +0 -0
  106. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/sql/test_postgres_select_variances.py +0 -0
  107. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/test_cursor_rowcount_fix.py +0 -0
  108. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/test_db_utils.py +0 -0
  109. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/test_postgres.py +0 -0
  110. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/test_postgres_unchanged.py +0 -0
  111. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/test_process_error_robustness.py +0 -0
  112. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/test_result_caching.py +0 -0
  113. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/test_result_sql_aware.py +0 -0
  114. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/test_row_get_missing_column.py +0 -0
  115. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/test_schema_locking_initializers.py +0 -0
  116. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/test_schema_locking_simple.py +0 -0
  117. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/test_sql_builder.py +0 -0
  118. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/test_tablehelper.py +0 -0
  119. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/tests/test_view_helper.py +0 -0
  120. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/db/utils.py +0 -0
  121. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/logging.py +0 -0
  122. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/misc/__init__.py +0 -0
  123. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/misc/conv/__init__.py +0 -0
  124. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/misc/conv/iconv.py +0 -0
  125. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/misc/conv/oconv.py +0 -0
  126. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/misc/db.py +0 -0
  127. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/misc/export.py +0 -0
  128. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/misc/format.py +0 -0
  129. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/misc/mail.py +0 -0
  130. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/misc/merge.py +0 -0
  131. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/misc/pdf.py +0 -0
  132. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/misc/tests/__init__.py +0 -0
  133. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/misc/tests/test_db.py +0 -0
  134. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/misc/tests/test_fix.py +0 -0
  135. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/misc/tests/test_format.py +0 -0
  136. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/misc/tests/test_iconv.py +0 -0
  137. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/misc/tests/test_merge.py +0 -0
  138. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/misc/tests/test_oconv.py +0 -0
  139. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/misc/tests/test_original_error.py +0 -0
  140. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/misc/tests/test_timer.py +0 -0
  141. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/misc/timer.py +0 -0
  142. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/misc/tools.py +0 -0
  143. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/payment/__init__.py +0 -0
  144. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/payment/authorizenet_adapter.py +0 -0
  145. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/payment/authorizenet_mirror.py +0 -0
  146. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/payment/base_adapter.py +0 -0
  147. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/payment/braintree_adapter.py +0 -0
  148. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/payment/braintree_mirror.py +0 -0
  149. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/payment/charge_rules.py +0 -0
  150. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity/payment/stripe_mirror.py +0 -0
  151. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity_python.egg-info/SOURCES.txt +0 -0
  152. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity_python.egg-info/dependency_links.txt +0 -0
  153. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity_python.egg-info/entry_points.txt +0 -0
  154. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity_python.egg-info/requires.txt +0 -0
  155. {velocity_python-0.1.67 → velocity_python-0.1.68}/src/velocity_python.egg-info/top_level.txt +0 -0
  156. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_amplify_build.py +0 -0
  157. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_asset_indexing.py +0 -0
  158. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_asset_references.py +0 -0
  159. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_assets_service.py +0 -0
  160. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_async_support.py +0 -0
  161. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_batch_operations.py +0 -0
  162. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_concurrency_safety.py +0 -0
  163. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_connection_pool.py +0 -0
  164. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_connection_resilience.py +0 -0
  165. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_context_job_descriptions.py +0 -0
  166. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_db_credentials_ssm_cascade.py +0 -0
  167. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_decorators.py +0 -0
  168. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_dirty_pipeline_fast_path.py +0 -0
  169. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_email_processing.py +0 -0
  170. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_get_cognito_user_provider.py +0 -0
  171. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_http_handler_rollback.py +0 -0
  172. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_iconv_money_to_cents.py +0 -0
  173. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_identifier_injection_guard.py +0 -0
  174. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_json_columns.py +0 -0
  175. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_jsonb_dict_adapter.py +0 -0
  176. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_lambda_handler.py +0 -0
  177. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_lambda_handler_auth.py +0 -0
  178. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_lambda_handler_masquerade.py +0 -0
  179. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_masquerade_grant.py +0 -0
  180. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_mixins_import.py +0 -0
  181. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_n_plus_one.py +0 -0
  182. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_observability.py +0 -0
  183. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_payment_authorizenet_adapter.py +0 -0
  184. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_payment_braintree_adapter.py +0 -0
  185. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_payment_braintree_mirror.py +0 -0
  186. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_payment_profile_sorting.py +0 -0
  187. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_pdf.py +0 -0
  188. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_prepared_statements.py +0 -0
  189. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_psycopg3_upgrade.py +0 -0
  190. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_query_cache.py +0 -0
  191. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_restricted_direct_tables.py +0 -0
  192. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_retry_side_effect_guard.py +0 -0
  193. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_return_default_safety.py +0 -0
  194. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_row_batch_update.py +0 -0
  195. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_row_cache_staleness.py +0 -0
  196. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_row_dirty_tracking.py +0 -0
  197. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_schema_migrations.py +0 -0
  198. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_security_hardening.py +0 -0
  199. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_server_cursor.py +0 -0
  200. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_single_autocommit_safety.py +0 -0
  201. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_spreadsheet_functions.py +0 -0
  202. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_sqs_per_record_transactions.py +0 -0
  203. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_ssm_config.py +0 -0
  204. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_sys_modified_count_postgres_demo.py +0 -0
  205. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_table_alter.py +0 -0
  206. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_where_clause_validation.py +0 -0
  207. {velocity_python-0.1.67 → velocity_python-0.1.68}/tests/test_write_hook_create_flow.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: velocity-python
3
- Version: 0.1.67
3
+ Version: 0.1.68
4
4
  Summary: A rapid application development library for interfacing with data storage
5
5
  Author-email: Velocity Team <info@codeclubs.org>
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "velocity-python"
7
- version = "0.1.67"
7
+ version = "0.1.68"
8
8
  authors = [
9
9
  { name="Velocity Team", email="info@codeclubs.org" },
10
10
  ]
@@ -1,4 +1,4 @@
1
- __version__ = version = "0.1.67"
1
+ __version__ = version = "0.1.68"
2
2
 
3
3
  import importlib as _importlib
4
4
 
@@ -521,6 +521,10 @@ class StripeAdapter(PaymentProcessorAdapter):
521
521
  "platform_fee": platform_fee_cents,
522
522
  "application_fee": application_fee_cents,
523
523
  "client_amount": amount_cents - application_fee_cents,
524
+ # Real Stripe processing cost from the settled BalanceTransaction
525
+ # (None for an uncaptured manual auth); callers freeze it as the
526
+ # 'stripe_settled' processor fee, else keep their estimate (M6).
527
+ "actual_processor_fee": self._settled_processor_fee_cents(charge),
524
528
  },
525
529
  }
526
530
 
@@ -621,6 +625,10 @@ class StripeAdapter(PaymentProcessorAdapter):
621
625
  "platform_fee": platform_fee_cents,
622
626
  "application_fee": payment_intent.application_fee_amount or application_fee_cents,
623
627
  "client_amount": payment_intent.amount - (payment_intent.application_fee_amount or application_fee_cents),
628
+ # Real Stripe processing cost from the settled BalanceTransaction (None
629
+ # when not yet available); callers freeze it as the 'stripe_settled'
630
+ # processor fee, otherwise keep their formula estimate (FeeModel.md M6).
631
+ "actual_processor_fee": self._settled_processor_fee_cents(charge),
624
632
  "error_message": None,
625
633
  "metadata": {
626
634
  "payment_intent": payment_intent,
@@ -849,13 +857,43 @@ class StripeAdapter(PaymentProcessorAdapter):
849
857
  latest_charge_id = getattr(payment_intent, "latest_charge", None)
850
858
  if latest_charge_id:
851
859
  try:
852
- charge = stripe.Charge.retrieve(latest_charge_id, api_key=self._api_key)
860
+ charge = stripe.Charge.retrieve(
861
+ latest_charge_id,
862
+ expand=["balance_transaction"],
863
+ api_key=self._api_key,
864
+ )
853
865
  except stripe.error.StripeError:
854
866
  charge = None
855
867
  if charge:
856
868
  upsert_stripe_charge_record(tx, charge, source=source)
857
869
  return charge
858
870
 
871
+ def _settled_processor_fee_cents(self, charge):
872
+ """Return the processor's actual fee (cents) from the charge's BalanceTransaction.
873
+
874
+ Stripe exposes the real processing cost on the charge's BalanceTransaction
875
+ (``balance_transaction.fee``). Returns ``None`` when it is not yet available
876
+ (e.g. an uncaptured manual authorization) or cannot be fetched — callers then
877
+ keep their formula estimate rather than over-reporting. Never raises. This is the
878
+ ``stripe_settled`` actual-cost source in CaringCent's FeeModel.md (M6).
879
+ """
880
+ if not charge:
881
+ return None
882
+ bt = getattr(charge, "balance_transaction", None)
883
+ if bt is None and isinstance(charge, dict):
884
+ bt = charge.get("balance_transaction")
885
+ try:
886
+ if bt is None:
887
+ return None
888
+ if isinstance(bt, str):
889
+ bt = stripe.BalanceTransaction.retrieve(bt, api_key=self._api_key)
890
+ fee = getattr(bt, "fee", None)
891
+ if fee is None and isinstance(bt, dict):
892
+ fee = bt.get("fee")
893
+ return int(fee) if fee is not None else None
894
+ except stripe.error.StripeError:
895
+ return None
896
+
859
897
  def _determine_account_status(self, account) -> str:
860
898
  """
861
899
  Determine human-readable account status from Stripe Account object.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: velocity-python
3
- Version: 0.1.67
3
+ Version: 0.1.68
4
4
  Summary: A rapid application development library for interfacing with data storage
5
5
  Author-email: Velocity Team <info@codeclubs.org>
6
6
  License-Expression: MIT
@@ -238,6 +238,79 @@ def test_authorize_payment_upserts_payment_intent_mirror(adapter, monkeypatch):
238
238
  ]
239
239
 
240
240
 
241
+ def test_settled_processor_fee_from_expanded_balance_transaction(adapter):
242
+ # Stripe exposes the real processing cost on the charge's BalanceTransaction.
243
+ charge = SimpleNamespace(
244
+ id="ch_123",
245
+ balance_transaction=SimpleNamespace(id="txn_1", fee=332),
246
+ )
247
+ assert adapter._settled_processor_fee_cents(charge) == 332
248
+
249
+
250
+ def test_settled_processor_fee_retrieves_unexpanded_balance_transaction(adapter, monkeypatch):
251
+ monkeypatch.setattr(
252
+ "velocity.payment.stripe_adapter.stripe.BalanceTransaction.retrieve",
253
+ lambda txn_id, api_key=None: SimpleNamespace(id=txn_id, fee=288),
254
+ )
255
+ charge = SimpleNamespace(id="ch_123", balance_transaction="txn_1")
256
+ assert adapter._settled_processor_fee_cents(charge) == 288
257
+
258
+
259
+ def test_settled_processor_fee_none_when_unavailable(adapter):
260
+ # No charge, or no balance transaction yet (uncaptured auth) -> None, never raises.
261
+ assert adapter._settled_processor_fee_cents(None) is None
262
+ assert (
263
+ adapter._settled_processor_fee_cents(
264
+ SimpleNamespace(id="ch_1", balance_transaction=None)
265
+ )
266
+ is None
267
+ )
268
+
269
+
270
+ def test_charge_stored_payment_method_reports_actual_processor_fee(adapter, monkeypatch):
271
+ monkeypatch.setattr(
272
+ "velocity.payment.stripe_adapter.stripe.PaymentIntent.create",
273
+ lambda **kwargs: SimpleNamespace(
274
+ id="pi_123",
275
+ latest_charge="ch_123",
276
+ status="succeeded",
277
+ amount=10420,
278
+ currency="usd",
279
+ application_fee_amount=820,
280
+ ),
281
+ )
282
+ monkeypatch.setattr(
283
+ "velocity.payment.stripe_adapter.stripe.Charge.retrieve",
284
+ lambda charge_id, expand=None, api_key=None: SimpleNamespace(
285
+ id=charge_id,
286
+ balance_transaction=SimpleNamespace(id="txn_1", fee=332),
287
+ ),
288
+ )
289
+ monkeypatch.setattr(
290
+ "velocity.payment.stripe_adapter.upsert_stripe_payment_intent_record",
291
+ lambda *a, **k: None,
292
+ )
293
+ monkeypatch.setattr(
294
+ "velocity.payment.stripe_adapter.upsert_stripe_charge_record",
295
+ lambda *a, **k: None,
296
+ )
297
+
298
+ result = adapter.charge_stored_payment_method(
299
+ None,
300
+ {
301
+ "amount": 10420,
302
+ "payment_method": "pm_123",
303
+ "customer_profile_id": "cus_123",
304
+ "processor_account_id": "acct_123",
305
+ "revenue_split_percentage": 8,
306
+ "client_id": "client_1",
307
+ },
308
+ )
309
+
310
+ assert result["success"] is True
311
+ assert result["actual_processor_fee"] == 332
312
+
313
+
241
314
  def test_authorize_payment_uses_explicit_application_fee(adapter, monkeypatch):
242
315
  captured = {}
243
316