velocity-python 0.1.4__tar.gz → 0.1.7__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 (185) hide show
  1. velocity_python-0.1.7/PKG-INFO +336 -0
  2. velocity_python-0.1.7/README.md +276 -0
  3. {velocity_python-0.1.4 → velocity_python-0.1.7}/pyproject.toml +3 -1
  4. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/__init__.py +1 -1
  5. velocity_python-0.1.7/src/velocity/db/core/async_support.py +645 -0
  6. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/core/engine.py +14 -0
  7. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/core/result.py +22 -0
  8. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/core/row.py +29 -0
  9. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/core/table.py +31 -5
  10. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/core/transaction.py +25 -0
  11. velocity_python-0.1.7/src/velocity_python.egg-info/PKG-INFO +336 -0
  12. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity_python.egg-info/SOURCES.txt +3 -0
  13. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity_python.egg-info/requires.txt +2 -0
  14. velocity_python-0.1.7/tests/test_async_support.py +689 -0
  15. velocity_python-0.1.7/tests/test_n_plus_one.py +359 -0
  16. velocity_python-0.1.4/PKG-INFO +0 -1484
  17. velocity_python-0.1.4/README.md +0 -1426
  18. velocity_python-0.1.4/src/velocity_python.egg-info/PKG-INFO +0 -1484
  19. {velocity_python-0.1.4 → velocity_python-0.1.7}/LICENSE +0 -0
  20. {velocity_python-0.1.4 → velocity_python-0.1.7}/setup.cfg +0 -0
  21. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/app/__init__.py +0 -0
  22. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/app/formbuilder/__init__.py +0 -0
  23. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/app/formbuilder/reshaper.py +0 -0
  24. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/app/invoices.py +0 -0
  25. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/app/orders.py +0 -0
  26. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/app/payments.py +0 -0
  27. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/app/purchase_orders.py +0 -0
  28. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/app/tests/__init__.py +0 -0
  29. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/app/tests/test_email_processing.py +0 -0
  30. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/app/tests/test_payment_profile_sorting.py +0 -0
  31. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/app/tests/test_spreadsheet_functions.py +0 -0
  32. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/app/validators/__init__.py +0 -0
  33. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/app/validators/formbuilder_template.py +0 -0
  34. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/aws/__init__.py +0 -0
  35. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/aws/amplify.py +0 -0
  36. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/aws/amplify_build.py +0 -0
  37. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/aws/handlers/__init__.py +0 -0
  38. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/aws/handlers/base_handler.py +0 -0
  39. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/aws/handlers/context.py +0 -0
  40. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/aws/handlers/context_factory.py +0 -0
  41. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/aws/handlers/exceptions.py +0 -0
  42. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/aws/handlers/lambda_handler.py +0 -0
  43. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/aws/handlers/mixins/__init__.py +0 -0
  44. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/aws/handlers/mixins/data_service.py +0 -0
  45. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/aws/handlers/mixins/web_handler.py +0 -0
  46. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/aws/handlers/perf.py +0 -0
  47. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/aws/handlers/response.py +0 -0
  48. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/aws/handlers/sqs_handler.py +0 -0
  49. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/aws/tests/__init__.py +0 -0
  50. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/aws/tests/test_base_handler_error_response.py +0 -0
  51. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/aws/tests/test_lambda_handler_json_serialization.py +0 -0
  52. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/aws/tests/test_response.py +0 -0
  53. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/__init__.py +0 -0
  54. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/core/__init__.py +0 -0
  55. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/core/column.py +0 -0
  56. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/core/database.py +0 -0
  57. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/core/decorators.py +0 -0
  58. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/core/sequence.py +0 -0
  59. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/core/view.py +0 -0
  60. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/exceptions.py +0 -0
  61. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/__init__.py +0 -0
  62. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/base/__init__.py +0 -0
  63. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/base/initializer.py +0 -0
  64. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/base/operators.py +0 -0
  65. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/base/sql.py +0 -0
  66. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/base/types.py +0 -0
  67. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/mysql/__init__.py +0 -0
  68. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/mysql/operators.py +0 -0
  69. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/mysql/reserved.py +0 -0
  70. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/mysql/sql.py +0 -0
  71. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/mysql/types.py +0 -0
  72. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/postgres/__init__.py +0 -0
  73. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/postgres/operators.py +0 -0
  74. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/postgres/reserved.py +0 -0
  75. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/postgres/sql.py +0 -0
  76. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/postgres/types.py +0 -0
  77. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/sqlite/__init__.py +0 -0
  78. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/sqlite/operators.py +0 -0
  79. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/sqlite/reserved.py +0 -0
  80. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/sqlite/sql.py +0 -0
  81. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/sqlite/types.py +0 -0
  82. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/sqlserver/__init__.py +0 -0
  83. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/sqlserver/operators.py +0 -0
  84. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/sqlserver/reserved.py +0 -0
  85. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/sqlserver/sql.py +0 -0
  86. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/sqlserver/types.py +0 -0
  87. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/servers/tablehelper.py +0 -0
  88. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/__init__.py +0 -0
  89. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/common_db_test.py +0 -0
  90. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/postgres/__init__.py +0 -0
  91. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/postgres/common.py +0 -0
  92. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/postgres/test_column.py +0 -0
  93. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/postgres/test_connections.py +0 -0
  94. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/postgres/test_database.py +0 -0
  95. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/postgres/test_engine.py +0 -0
  96. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/postgres/test_general_usage.py +0 -0
  97. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/postgres/test_imports.py +0 -0
  98. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/postgres/test_result.py +0 -0
  99. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/postgres/test_row.py +0 -0
  100. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/postgres/test_row_comprehensive.py +0 -0
  101. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/postgres/test_schema_locking.py +0 -0
  102. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/postgres/test_schema_locking_unit.py +0 -0
  103. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/postgres/test_sequence.py +0 -0
  104. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/postgres/test_sql_comprehensive.py +0 -0
  105. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/postgres/test_table.py +0 -0
  106. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/postgres/test_table_comprehensive.py +0 -0
  107. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/postgres/test_transaction.py +0 -0
  108. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/sql/__init__.py +0 -0
  109. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/sql/common.py +0 -0
  110. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/sql/test_postgres_select_advanced.py +0 -0
  111. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/sql/test_postgres_select_variances.py +0 -0
  112. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/test_cursor_rowcount_fix.py +0 -0
  113. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/test_db_utils.py +0 -0
  114. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/test_postgres.py +0 -0
  115. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/test_postgres_unchanged.py +0 -0
  116. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/test_process_error_robustness.py +0 -0
  117. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/test_result_caching.py +0 -0
  118. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/test_result_sql_aware.py +0 -0
  119. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/test_row_get_missing_column.py +0 -0
  120. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/test_schema_locking_initializers.py +0 -0
  121. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/test_schema_locking_simple.py +0 -0
  122. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/test_sql_builder.py +0 -0
  123. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/test_tablehelper.py +0 -0
  124. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/tests/test_view_helper.py +0 -0
  125. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/db/utils.py +0 -0
  126. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/logging.py +0 -0
  127. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/misc/__init__.py +0 -0
  128. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/misc/conv/__init__.py +0 -0
  129. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/misc/conv/iconv.py +0 -0
  130. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/misc/conv/oconv.py +0 -0
  131. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/misc/db.py +0 -0
  132. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/misc/export.py +0 -0
  133. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/misc/format.py +0 -0
  134. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/misc/mail.py +0 -0
  135. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/misc/merge.py +0 -0
  136. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/misc/tests/__init__.py +0 -0
  137. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/misc/tests/test_db.py +0 -0
  138. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/misc/tests/test_fix.py +0 -0
  139. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/misc/tests/test_format.py +0 -0
  140. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/misc/tests/test_iconv.py +0 -0
  141. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/misc/tests/test_merge.py +0 -0
  142. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/misc/tests/test_oconv.py +0 -0
  143. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/misc/tests/test_original_error.py +0 -0
  144. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/misc/tests/test_timer.py +0 -0
  145. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/misc/timer.py +0 -0
  146. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/misc/tools.py +0 -0
  147. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/payment/__init__.py +0 -0
  148. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/payment/authorizenet_adapter.py +0 -0
  149. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/payment/base_adapter.py +0 -0
  150. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/payment/braintree_adapter.py +0 -0
  151. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/payment/charge_rules.py +0 -0
  152. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/payment/demo_profiles.py +0 -0
  153. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/payment/profiles.py +0 -0
  154. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/payment/router.py +0 -0
  155. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity/payment/stripe_adapter.py +0 -0
  156. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity_python.egg-info/dependency_links.txt +0 -0
  157. {velocity_python-0.1.4 → velocity_python-0.1.7}/src/velocity_python.egg-info/top_level.txt +0 -0
  158. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_amplify_build.py +0 -0
  159. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_batch_operations.py +0 -0
  160. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_concurrency_safety.py +0 -0
  161. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_connection_pool.py +0 -0
  162. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_connection_resilience.py +0 -0
  163. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_decorators.py +0 -0
  164. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_formbuilder_reshaper.py +0 -0
  165. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_formbuilder_template_validator.py +0 -0
  166. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_iconv_money_to_cents.py +0 -0
  167. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_lambda_handler.py +0 -0
  168. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_lambda_handler_auth.py +0 -0
  169. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_mixins_import.py +0 -0
  170. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_observability.py +0 -0
  171. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_payment_braintree_adapter.py +0 -0
  172. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_payment_demo_profiles.py +0 -0
  173. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_payment_profiles.py +0 -0
  174. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_payment_router.py +0 -0
  175. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_payment_stripe_adapter.py +0 -0
  176. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_prepared_statements.py +0 -0
  177. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_psycopg3_upgrade.py +0 -0
  178. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_query_cache.py +0 -0
  179. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_row_batch_update.py +0 -0
  180. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_row_cache_staleness.py +0 -0
  181. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_security_hardening.py +0 -0
  182. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_sqs_per_record_transactions.py +0 -0
  183. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_sys_modified_count_postgres_demo.py +0 -0
  184. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_table_alter.py +0 -0
  185. {velocity_python-0.1.4 → velocity_python-0.1.7}/tests/test_where_clause_validation.py +0 -0
@@ -0,0 +1,336 @@
1
+ Metadata-Version: 2.4
2
+ Name: velocity-python
3
+ Version: 0.1.7
4
+ Summary: A rapid application development library for interfacing with data storage
5
+ Author-email: Velocity Team <info@codeclubs.org>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://codeclubs.org/projects/velocity
8
+ Keywords: database,orm,sql,rapid-development,data-storage
9
+ Classifier: Development Status :: 4 - Beta
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Topic :: Database
12
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.9
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Operating System :: OS Independent
19
+ Requires-Python: >=3.9
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Requires-Dist: sqlparse>=0.5.0
23
+ Provides-Extra: aws
24
+ Requires-Dist: boto3>=1.35.0; extra == "aws"
25
+ Requires-Dist: requests>=2.32.0; extra == "aws"
26
+ Provides-Extra: excel
27
+ Requires-Dist: openpyxl>=3.1.0; extra == "excel"
28
+ Provides-Extra: templates
29
+ Requires-Dist: jinja2>=3.1.0; extra == "templates"
30
+ Provides-Extra: http
31
+ Requires-Dist: requests>=2.32.0; extra == "http"
32
+ Provides-Extra: mysql
33
+ Requires-Dist: mysql-connector-python>=9.0.0; extra == "mysql"
34
+ Provides-Extra: sqlserver
35
+ Requires-Dist: python-tds>=1.15.0; extra == "sqlserver"
36
+ Provides-Extra: postgres
37
+ Requires-Dist: psycopg[binary]>=3.2.0; extra == "postgres"
38
+ Provides-Extra: payment
39
+ Requires-Dist: stripe>=12.0.0; extra == "payment"
40
+ Requires-Dist: braintree>=4.30.0; extra == "payment"
41
+ Provides-Extra: all
42
+ Requires-Dist: velocity-python[aws,excel,http,payment,postgres,templates]; extra == "all"
43
+ Provides-Extra: dev
44
+ Requires-Dist: pytest>=8.0.0; extra == "dev"
45
+ Requires-Dist: pytest-cov>=6.0.0; extra == "dev"
46
+ Requires-Dist: pytest-asyncio>=1.0.0; extra == "dev"
47
+ Requires-Dist: black>=24.0.0; extra == "dev"
48
+ Requires-Dist: flake8>=7.0.0; extra == "dev"
49
+ Requires-Dist: mypy>=1.10.0; extra == "dev"
50
+ Requires-Dist: pre-commit>=4.0.0; extra == "dev"
51
+ Provides-Extra: test
52
+ Requires-Dist: pytest>=8.0.0; extra == "test"
53
+ Requires-Dist: pytest-cov>=6.0.0; extra == "test"
54
+ Requires-Dist: pytest-mock>=3.14.0; extra == "test"
55
+ Requires-Dist: pytest-asyncio>=1.0.0; extra == "test"
56
+ Provides-Extra: docs
57
+ Requires-Dist: sphinx>=8.0.0; extra == "docs"
58
+ Requires-Dist: sphinx-rtd-theme>=3.0.0; extra == "docs"
59
+ Dynamic: license-file
60
+
61
+ # Velocity-Python
62
+
63
+ A rapid application development library for Python that eliminates boilerplate between your code and your database. Write business logic, not SQL plumbing.
64
+
65
+ ```python
66
+ @engine.transaction
67
+ def create_order(tx, customer_email, items):
68
+ customer = tx.table("customers").find({"email": customer_email})
69
+ order = tx.table("orders").insert({
70
+ "customer_id": customer["sys_id"],
71
+ "status": "pending",
72
+ "total": sum(i["price"] for i in items),
73
+ })
74
+ tx.table("order_items").insert_many([
75
+ {"order_id": order["sys_id"], "product": i["name"], "price": i["price"]}
76
+ for i in items
77
+ ])
78
+ return order
79
+ ```
80
+
81
+ No connection management, no cursor juggling, no commit/rollback boilerplate. Velocity handles it all.
82
+
83
+ [![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)
84
+ [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
85
+
86
+ ---
87
+
88
+ ## Why Velocity?
89
+
90
+ Most Python database libraries fall into two camps:
91
+
92
+ 1. **Heavy ORMs** (SQLAlchemy, Django ORM) — powerful but complex. You write Python classes that map to tables, manage sessions, deal with migration frameworks, and learn a large API surface before writing your first query.
93
+
94
+ 2. **Raw drivers** (psycopg, sqlite3) — full control, but you're writing SQL strings, managing connections, handling cursors, serializing parameters, and building your own transaction/error-handling patterns from scratch.
95
+
96
+ Velocity occupies the middle ground: **a thin, opinionated layer** that gives you the convenience of an ORM with the transparency of raw SQL. Tables are just names. Rows are just dicts. Transactions are just context managers. You don't define models — Velocity discovers your schema at runtime and adapts to it.
97
+
98
+ ### Design Principles
99
+
100
+ | Principle | What It Means |
101
+ |-----------|---------------|
102
+ | **Convention over configuration** | Sensible defaults everywhere. Override only what you need. |
103
+ | **Dicts in, dicts out** | No custom model classes to learn. Rows are dictionaries. |
104
+ | **Transaction-scoped** | Every operation runs inside an explicit transaction. No surprise autocommit. |
105
+ | **Auto-schema** | Tables and columns are created on the fly in development. Locked down in production. |
106
+ | **Driver-agnostic** | PostgreSQL (primary), MySQL, SQLite, SQL Server — same API surface. |
107
+ | **Lambda-native** | Connection pooling, warm-start reuse, and SQS batch handling built in. |
108
+
109
+ ---
110
+
111
+ ## Installation
112
+
113
+ ```bash
114
+ # Core (no database driver — useful for testing or SQLite)
115
+ pip install velocity-python
116
+
117
+ # PostgreSQL (recommended)
118
+ pip install velocity-python[postgres]
119
+
120
+ # With AWS Lambda support
121
+ pip install velocity-python[postgres,aws]
122
+
123
+ # Everything
124
+ pip install velocity-python[all]
125
+ ```
126
+
127
+ ### Available Extras
128
+
129
+ | Extra | Packages | Use Case |
130
+ |-------|----------|----------|
131
+ | `postgres` | `psycopg[binary]>=3.2.0` | PostgreSQL connections |
132
+ | `aws` | `boto3`, `requests` | Lambda handlers, SQS, Amplify |
133
+ | `excel` | `openpyxl` | Excel export |
134
+ | `templates` | `jinja2` | Template rendering |
135
+ | `http` | `requests` | HTTP utilities |
136
+ | `payment` | `stripe`, `braintree` | Payment processing |
137
+ | `mysql` | `mysql-connector-python` | MySQL connections |
138
+ | `sqlserver` | `python-tds` | SQL Server connections |
139
+ | `all` | All of the above | Full install |
140
+
141
+ **Requires Python 3.9+** and uses **psycopg v3** (not psycopg2) for PostgreSQL.
142
+
143
+ ---
144
+
145
+ ## Quick Start
146
+
147
+ ### 1. Connect
148
+
149
+ ```python
150
+ from velocity.db.servers.postgres import initialize
151
+
152
+ # From environment variables (DBHost, DBDatabase, DBUser, DBPassword)
153
+ engine = initialize()
154
+
155
+ # Or explicit config
156
+ engine = initialize(config={
157
+ "host": "localhost",
158
+ "dbname": "myapp",
159
+ "user": "postgres",
160
+ "password": "secret",
161
+ })
162
+ ```
163
+
164
+ ### 2. Use Transactions
165
+
166
+ ```python
167
+ # As a decorator (recommended for Lambda handlers)
168
+ @engine.transaction
169
+ def get_active_users(tx):
170
+ return tx.table("users").select(where={"active": True}).all()
171
+
172
+ # As a context manager
173
+ with engine.transaction() as tx:
174
+ tx.table("users").insert({"name": "Alice", "email": "alice@example.com"})
175
+ ```
176
+
177
+ ### 3. CRUD Operations
178
+
179
+ ```python
180
+ @engine.transaction
181
+ def demo(tx):
182
+ users = tx.table("users")
183
+
184
+ # Insert
185
+ row = users.insert({"name": "Bob", "email": "bob@example.com"})
186
+
187
+ # Read
188
+ user = users.row(row["sys_id"]) # by primary key
189
+ user = users.find({"email": "bob@example.com"}) # by lookup
190
+
191
+ # Update
192
+ user["name"] = "Robert" # immediate write-through
193
+
194
+ # Delete
195
+ users.delete({"sys_id": row["sys_id"]})
196
+ ```
197
+
198
+ ### 4. Bulk Operations
199
+
200
+ ```python
201
+ @engine.transaction
202
+ def import_customers(tx, records):
203
+ tx.table("customers").insert_many(records) # multi-row INSERT
204
+ tx.table("customers").upsert_many(records, pk="email") # INSERT ... ON CONFLICT UPDATE
205
+ ```
206
+
207
+ ---
208
+
209
+ ## Documentation
210
+
211
+ Detailed guides with real-world examples:
212
+
213
+ | Guide | Description |
214
+ |-------|-------------|
215
+ | [Database ORM](docs/database.md) | Connections, transactions, tables, rows, results, queries, schema management |
216
+ | [Performance & Optimization](docs/performance.md) | Connection pooling, batch operations, query caching, prepared statements, N+1 prevention, observability |
217
+ | [Async Support](docs/async.md) | AsyncTransaction, AsyncTable, AsyncResult, parallel queries with gather() |
218
+ | [Configuration Reference](docs/configuration.md) | All environment variables, engine options, and connection settings |
219
+ | [AWS Lambda Handlers](docs/aws-handlers.md) | LambdaHandler, SqsHandler, auth modes, per-record transactions |
220
+ | [Payment Processing](docs/payment.md) | Stripe and Braintree adapters, payment lifecycle |
221
+ | [Utilities](docs/utilities.md) | Excel export, data conversion, formatting, timers, email parsing |
222
+
223
+ ### Additional Docs
224
+
225
+ | Doc | Description |
226
+ |-----|-------------|
227
+ | [Testing Guide](docs/TESTING.md) | Running tests, markers, coverage |
228
+ | [Security](docs/SECURITY.md) | Pre-commit hooks, credential scanning |
229
+ | [AWS Auth Modes](docs/AWS_HANDLERS_AUTH.md) | Cognito auth, public endpoints, webhooks |
230
+
231
+ ---
232
+
233
+ ## Architecture
234
+
235
+ ```
236
+ Engine (singleton — survives Lambda warm starts)
237
+ ├── ConnectionPool (thread-safe, configurable min/max)
238
+ └── Transaction (one per request, borrows from pool)
239
+ ├── Table (CRUD, batch ops, schema management)
240
+ │ ├── Row (dict-like, lazy-cache, write-through, batch_update)
241
+ │ └── Result (streaming cursor iteration, transforms)
242
+ ├── View (create, grant, ensure)
243
+ └── Sequence (create, next, current, configure)
244
+ ```
245
+
246
+ Transactions auto-commit on success, auto-rollback on exception. Connections are returned to the pool (or discarded on error). The Engine persists across Lambda invocations, so the pool stays warm.
247
+
248
+ ---
249
+
250
+ ## Multi-Database Support
251
+
252
+ | Database | Driver | Status |
253
+ |----------|--------|--------|
254
+ | PostgreSQL | `psycopg[binary]>=3.2.0` | Primary, fully tested |
255
+ | MySQL | `mysql-connector-python` | Supported |
256
+ | SQLite | `sqlite3` (stdlib) | Supported |
257
+ | SQL Server | `python-tds` | Supported |
258
+
259
+ ```python
260
+ # PostgreSQL
261
+ from velocity.db.servers.postgres import initialize
262
+ engine = initialize()
263
+
264
+ # MySQL
265
+ from velocity.db.servers.mysql import initialize
266
+ engine = initialize()
267
+
268
+ # SQLite
269
+ from velocity.db.servers.sqlite import initialize
270
+ engine = initialize(config={"database": "myapp.db"})
271
+
272
+ # SQL Server
273
+ from velocity.db.servers.mssql import initialize
274
+ engine = initialize()
275
+ ```
276
+
277
+ ---
278
+
279
+ ## Project Structure
280
+
281
+ ```
282
+ velocity-python/
283
+ ├── src/velocity/
284
+ │ ├── db/
285
+ │ │ ├── core/
286
+ │ │ │ ├── engine.py # Engine, ConnectionPool
287
+ │ │ │ ├── transaction.py # Transaction, query timing, caching
288
+ │ │ │ ├── table.py # Table CRUD, batch ops, schema
289
+ │ │ │ ├── row.py # Row (dict-like ORM object)
290
+ │ │ │ ├── result.py # Result (cursor wrapper, transforms)
291
+ │ │ │ ├── async_support.py # Async versions of core classes
292
+ │ │ │ ├── view.py # View management
293
+ │ │ │ ├── sequence.py # Sequence management
294
+ │ │ │ └── decorators.py # @create_missing, @return_default, etc.
295
+ │ │ └── servers/
296
+ │ │ ├── postgres/ # PostgreSQL dialect + initializer
297
+ │ │ ├── mysql/ # MySQL dialect
298
+ │ │ ├── sqlite/ # SQLite dialect
299
+ │ │ └── mssql/ # SQL Server dialect
300
+ │ ├── aws/
301
+ │ │ └── handlers/
302
+ │ │ ├── lambda_handler.py # HTTP Lambda handler
303
+ │ │ └── sqs_handler.py # SQS batch handler
304
+ │ ├── payment/
305
+ │ │ ├── base_adapter.py # Abstract payment interface
306
+ │ │ ├── stripe_adapter.py # Stripe implementation
307
+ │ │ └── braintree_adapter.py # Braintree implementation
308
+ │ └── misc/ # Utility modules
309
+ ├── tests/ # 400+ unit tests
310
+ ├── docs/ # Detailed documentation
311
+ └── pyproject.toml
312
+ ```
313
+
314
+ ---
315
+
316
+ ## Development
317
+
318
+ ```bash
319
+ # Install with dev dependencies
320
+ pip install -e ".[dev,test,postgres]"
321
+
322
+ # Run tests
323
+ pytest
324
+
325
+ # Run with coverage
326
+ pytest --cov=velocity --cov-report=html
327
+
328
+ # Run specific test file
329
+ pytest tests/test_connection_pool.py -v
330
+ ```
331
+
332
+ ---
333
+
334
+ ## License
335
+
336
+ MIT
@@ -0,0 +1,276 @@
1
+ # Velocity-Python
2
+
3
+ A rapid application development library for Python that eliminates boilerplate between your code and your database. Write business logic, not SQL plumbing.
4
+
5
+ ```python
6
+ @engine.transaction
7
+ def create_order(tx, customer_email, items):
8
+ customer = tx.table("customers").find({"email": customer_email})
9
+ order = tx.table("orders").insert({
10
+ "customer_id": customer["sys_id"],
11
+ "status": "pending",
12
+ "total": sum(i["price"] for i in items),
13
+ })
14
+ tx.table("order_items").insert_many([
15
+ {"order_id": order["sys_id"], "product": i["name"], "price": i["price"]}
16
+ for i in items
17
+ ])
18
+ return order
19
+ ```
20
+
21
+ No connection management, no cursor juggling, no commit/rollback boilerplate. Velocity handles it all.
22
+
23
+ [![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)
24
+ [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
25
+
26
+ ---
27
+
28
+ ## Why Velocity?
29
+
30
+ Most Python database libraries fall into two camps:
31
+
32
+ 1. **Heavy ORMs** (SQLAlchemy, Django ORM) — powerful but complex. You write Python classes that map to tables, manage sessions, deal with migration frameworks, and learn a large API surface before writing your first query.
33
+
34
+ 2. **Raw drivers** (psycopg, sqlite3) — full control, but you're writing SQL strings, managing connections, handling cursors, serializing parameters, and building your own transaction/error-handling patterns from scratch.
35
+
36
+ Velocity occupies the middle ground: **a thin, opinionated layer** that gives you the convenience of an ORM with the transparency of raw SQL. Tables are just names. Rows are just dicts. Transactions are just context managers. You don't define models — Velocity discovers your schema at runtime and adapts to it.
37
+
38
+ ### Design Principles
39
+
40
+ | Principle | What It Means |
41
+ |-----------|---------------|
42
+ | **Convention over configuration** | Sensible defaults everywhere. Override only what you need. |
43
+ | **Dicts in, dicts out** | No custom model classes to learn. Rows are dictionaries. |
44
+ | **Transaction-scoped** | Every operation runs inside an explicit transaction. No surprise autocommit. |
45
+ | **Auto-schema** | Tables and columns are created on the fly in development. Locked down in production. |
46
+ | **Driver-agnostic** | PostgreSQL (primary), MySQL, SQLite, SQL Server — same API surface. |
47
+ | **Lambda-native** | Connection pooling, warm-start reuse, and SQS batch handling built in. |
48
+
49
+ ---
50
+
51
+ ## Installation
52
+
53
+ ```bash
54
+ # Core (no database driver — useful for testing or SQLite)
55
+ pip install velocity-python
56
+
57
+ # PostgreSQL (recommended)
58
+ pip install velocity-python[postgres]
59
+
60
+ # With AWS Lambda support
61
+ pip install velocity-python[postgres,aws]
62
+
63
+ # Everything
64
+ pip install velocity-python[all]
65
+ ```
66
+
67
+ ### Available Extras
68
+
69
+ | Extra | Packages | Use Case |
70
+ |-------|----------|----------|
71
+ | `postgres` | `psycopg[binary]>=3.2.0` | PostgreSQL connections |
72
+ | `aws` | `boto3`, `requests` | Lambda handlers, SQS, Amplify |
73
+ | `excel` | `openpyxl` | Excel export |
74
+ | `templates` | `jinja2` | Template rendering |
75
+ | `http` | `requests` | HTTP utilities |
76
+ | `payment` | `stripe`, `braintree` | Payment processing |
77
+ | `mysql` | `mysql-connector-python` | MySQL connections |
78
+ | `sqlserver` | `python-tds` | SQL Server connections |
79
+ | `all` | All of the above | Full install |
80
+
81
+ **Requires Python 3.9+** and uses **psycopg v3** (not psycopg2) for PostgreSQL.
82
+
83
+ ---
84
+
85
+ ## Quick Start
86
+
87
+ ### 1. Connect
88
+
89
+ ```python
90
+ from velocity.db.servers.postgres import initialize
91
+
92
+ # From environment variables (DBHost, DBDatabase, DBUser, DBPassword)
93
+ engine = initialize()
94
+
95
+ # Or explicit config
96
+ engine = initialize(config={
97
+ "host": "localhost",
98
+ "dbname": "myapp",
99
+ "user": "postgres",
100
+ "password": "secret",
101
+ })
102
+ ```
103
+
104
+ ### 2. Use Transactions
105
+
106
+ ```python
107
+ # As a decorator (recommended for Lambda handlers)
108
+ @engine.transaction
109
+ def get_active_users(tx):
110
+ return tx.table("users").select(where={"active": True}).all()
111
+
112
+ # As a context manager
113
+ with engine.transaction() as tx:
114
+ tx.table("users").insert({"name": "Alice", "email": "alice@example.com"})
115
+ ```
116
+
117
+ ### 3. CRUD Operations
118
+
119
+ ```python
120
+ @engine.transaction
121
+ def demo(tx):
122
+ users = tx.table("users")
123
+
124
+ # Insert
125
+ row = users.insert({"name": "Bob", "email": "bob@example.com"})
126
+
127
+ # Read
128
+ user = users.row(row["sys_id"]) # by primary key
129
+ user = users.find({"email": "bob@example.com"}) # by lookup
130
+
131
+ # Update
132
+ user["name"] = "Robert" # immediate write-through
133
+
134
+ # Delete
135
+ users.delete({"sys_id": row["sys_id"]})
136
+ ```
137
+
138
+ ### 4. Bulk Operations
139
+
140
+ ```python
141
+ @engine.transaction
142
+ def import_customers(tx, records):
143
+ tx.table("customers").insert_many(records) # multi-row INSERT
144
+ tx.table("customers").upsert_many(records, pk="email") # INSERT ... ON CONFLICT UPDATE
145
+ ```
146
+
147
+ ---
148
+
149
+ ## Documentation
150
+
151
+ Detailed guides with real-world examples:
152
+
153
+ | Guide | Description |
154
+ |-------|-------------|
155
+ | [Database ORM](docs/database.md) | Connections, transactions, tables, rows, results, queries, schema management |
156
+ | [Performance & Optimization](docs/performance.md) | Connection pooling, batch operations, query caching, prepared statements, N+1 prevention, observability |
157
+ | [Async Support](docs/async.md) | AsyncTransaction, AsyncTable, AsyncResult, parallel queries with gather() |
158
+ | [Configuration Reference](docs/configuration.md) | All environment variables, engine options, and connection settings |
159
+ | [AWS Lambda Handlers](docs/aws-handlers.md) | LambdaHandler, SqsHandler, auth modes, per-record transactions |
160
+ | [Payment Processing](docs/payment.md) | Stripe and Braintree adapters, payment lifecycle |
161
+ | [Utilities](docs/utilities.md) | Excel export, data conversion, formatting, timers, email parsing |
162
+
163
+ ### Additional Docs
164
+
165
+ | Doc | Description |
166
+ |-----|-------------|
167
+ | [Testing Guide](docs/TESTING.md) | Running tests, markers, coverage |
168
+ | [Security](docs/SECURITY.md) | Pre-commit hooks, credential scanning |
169
+ | [AWS Auth Modes](docs/AWS_HANDLERS_AUTH.md) | Cognito auth, public endpoints, webhooks |
170
+
171
+ ---
172
+
173
+ ## Architecture
174
+
175
+ ```
176
+ Engine (singleton — survives Lambda warm starts)
177
+ ├── ConnectionPool (thread-safe, configurable min/max)
178
+ └── Transaction (one per request, borrows from pool)
179
+ ├── Table (CRUD, batch ops, schema management)
180
+ │ ├── Row (dict-like, lazy-cache, write-through, batch_update)
181
+ │ └── Result (streaming cursor iteration, transforms)
182
+ ├── View (create, grant, ensure)
183
+ └── Sequence (create, next, current, configure)
184
+ ```
185
+
186
+ Transactions auto-commit on success, auto-rollback on exception. Connections are returned to the pool (or discarded on error). The Engine persists across Lambda invocations, so the pool stays warm.
187
+
188
+ ---
189
+
190
+ ## Multi-Database Support
191
+
192
+ | Database | Driver | Status |
193
+ |----------|--------|--------|
194
+ | PostgreSQL | `psycopg[binary]>=3.2.0` | Primary, fully tested |
195
+ | MySQL | `mysql-connector-python` | Supported |
196
+ | SQLite | `sqlite3` (stdlib) | Supported |
197
+ | SQL Server | `python-tds` | Supported |
198
+
199
+ ```python
200
+ # PostgreSQL
201
+ from velocity.db.servers.postgres import initialize
202
+ engine = initialize()
203
+
204
+ # MySQL
205
+ from velocity.db.servers.mysql import initialize
206
+ engine = initialize()
207
+
208
+ # SQLite
209
+ from velocity.db.servers.sqlite import initialize
210
+ engine = initialize(config={"database": "myapp.db"})
211
+
212
+ # SQL Server
213
+ from velocity.db.servers.mssql import initialize
214
+ engine = initialize()
215
+ ```
216
+
217
+ ---
218
+
219
+ ## Project Structure
220
+
221
+ ```
222
+ velocity-python/
223
+ ├── src/velocity/
224
+ │ ├── db/
225
+ │ │ ├── core/
226
+ │ │ │ ├── engine.py # Engine, ConnectionPool
227
+ │ │ │ ├── transaction.py # Transaction, query timing, caching
228
+ │ │ │ ├── table.py # Table CRUD, batch ops, schema
229
+ │ │ │ ├── row.py # Row (dict-like ORM object)
230
+ │ │ │ ├── result.py # Result (cursor wrapper, transforms)
231
+ │ │ │ ├── async_support.py # Async versions of core classes
232
+ │ │ │ ├── view.py # View management
233
+ │ │ │ ├── sequence.py # Sequence management
234
+ │ │ │ └── decorators.py # @create_missing, @return_default, etc.
235
+ │ │ └── servers/
236
+ │ │ ├── postgres/ # PostgreSQL dialect + initializer
237
+ │ │ ├── mysql/ # MySQL dialect
238
+ │ │ ├── sqlite/ # SQLite dialect
239
+ │ │ └── mssql/ # SQL Server dialect
240
+ │ ├── aws/
241
+ │ │ └── handlers/
242
+ │ │ ├── lambda_handler.py # HTTP Lambda handler
243
+ │ │ └── sqs_handler.py # SQS batch handler
244
+ │ ├── payment/
245
+ │ │ ├── base_adapter.py # Abstract payment interface
246
+ │ │ ├── stripe_adapter.py # Stripe implementation
247
+ │ │ └── braintree_adapter.py # Braintree implementation
248
+ │ └── misc/ # Utility modules
249
+ ├── tests/ # 400+ unit tests
250
+ ├── docs/ # Detailed documentation
251
+ └── pyproject.toml
252
+ ```
253
+
254
+ ---
255
+
256
+ ## Development
257
+
258
+ ```bash
259
+ # Install with dev dependencies
260
+ pip install -e ".[dev,test,postgres]"
261
+
262
+ # Run tests
263
+ pytest
264
+
265
+ # Run with coverage
266
+ pytest --cov=velocity --cov-report=html
267
+
268
+ # Run specific test file
269
+ pytest tests/test_connection_pool.py -v
270
+ ```
271
+
272
+ ---
273
+
274
+ ## License
275
+
276
+ MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "velocity-python"
7
- version = "0.1.4"
7
+ version = "0.1.7"
8
8
  authors = [
9
9
  { name="Velocity Team", email="info@codeclubs.org" },
10
10
  ]
@@ -65,6 +65,7 @@ all = [
65
65
  dev = [
66
66
  "pytest>=8.0.0",
67
67
  "pytest-cov>=6.0.0",
68
+ "pytest-asyncio>=1.0.0",
68
69
  "black>=24.0.0",
69
70
  "flake8>=7.0.0",
70
71
  "mypy>=1.10.0",
@@ -74,6 +75,7 @@ test = [
74
75
  "pytest>=8.0.0",
75
76
  "pytest-cov>=6.0.0",
76
77
  "pytest-mock>=3.14.0",
78
+ "pytest-asyncio>=1.0.0",
77
79
  ]
78
80
  docs = [
79
81
  "sphinx>=8.0.0",
@@ -1,4 +1,4 @@
1
- __version__ = version = "0.1.4"
1
+ __version__ = version = "0.1.7"
2
2
 
3
3
  import importlib as _importlib
4
4