velocity-python 0.1.130__tar.gz → 0.1.134__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.
- {velocity_python-0.1.130 → velocity_python-0.1.134}/PKG-INFO +82 -38
- {velocity_python-0.1.130 → velocity_python-0.1.134}/README.md +70 -27
- {velocity_python-0.1.130 → velocity_python-0.1.134}/pyproject.toml +25 -13
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/__init__.py +1 -1
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/__init__.py +11 -36
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/amplify.py +67 -36
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/assets/__init__.py +6 -2
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/assets/backfill.py +3 -16
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/assets/indexing.py +40 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/assets/service.py +30 -0
- velocity_python-0.1.134/src/velocity/aws/blobs.py +256 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/capabilities/__init__.py +10 -1
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/capabilities/dispatch.py +2 -2
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/capabilities/provisioning.py +144 -4
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/capabilities/security.py +2 -2
- velocity_python-0.1.134/src/velocity/aws/deploy/__init__.py +159 -0
- velocity_python-0.1.134/src/velocity/aws/deploy/ci_gate.py +660 -0
- velocity_python-0.1.134/src/velocity/aws/deploy/config.py +458 -0
- velocity_python-0.1.134/src/velocity/aws/deploy/frontend_checks.py +200 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/deploy/operations.py +229 -21
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/deploy/policies.py +270 -43
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/deploy/reconcile.py +250 -12
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/dirty_pipeline.py +6 -1
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/facets.py +132 -55
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/failures.py +258 -28
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/feature_flags.py +4 -0
- velocity_python-0.1.134/src/velocity/aws/handlers/__init__.py +25 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/handlers/base_handler.py +22 -18
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/handlers/context.py +119 -4
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/handlers/exceptions.py +17 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/handlers/lambda_handler.py +68 -3
- velocity_python-0.1.134/src/velocity/aws/handlers/mixins/__init__.py +39 -0
- velocity_python-0.1.134/src/velocity/aws/handlers/mixins/audit_trail.py +421 -0
- velocity_python-0.1.134/src/velocity/aws/handlers/mixins/client_errors.py +477 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/handlers/mixins/client_input.py +95 -11
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/handlers/mixins/data_service.py +1007 -360
- velocity_python-0.1.134/src/velocity/aws/handlers/mixins/row_scoped.py +286 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/handlers/mixins/session_control.py +26 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/handlers/mixins/web_handler.py +84 -1
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/handlers/response.py +17 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/handlers/sqs_handler.py +7 -2
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/job_lifecycle.py +25 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/job_results.py +156 -12
- velocity_python-0.1.134/src/velocity/aws/queue_defaults.py +13 -0
- velocity_python-0.1.134/src/velocity/aws/s3.py +790 -0
- velocity_python-0.1.134/src/velocity/aws/schema.py +124 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/sms.py +209 -3
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/ssm_config.py +35 -0
- velocity_python-0.1.130/src/velocity/aws/tests/test_amplify_build_policy_size.py → velocity_python-0.1.134/src/velocity/aws/tests/test_deploy_policy_size.py +5 -3
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/core/column.py +5 -2
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/core/table.py +328 -10
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/core/transaction.py +7 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/migrations.py +14 -8
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/base/initializer.py +32 -1
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/base/sql.py +8 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/mysql/__init__.py +6 -5
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/mysql/types.py +93 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/postgres/__init__.py +83 -7
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/postgres/sql.py +247 -2
- velocity_python-0.1.134/src/velocity/db/servers/postgres/types.py +260 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/sqlite/__init__.py +6 -4
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/sqlite/types.py +90 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/sqlserver/__init__.py +6 -5
- velocity_python-0.1.134/src/velocity/db/servers/sqlserver/types.py +209 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/tablehelper.py +42 -24
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tunnel.py +5 -2
- velocity_python-0.1.134/src/velocity/misc/conv/__init__.py +5 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/misc/conv/iconv.py +101 -17
- velocity_python-0.1.134/src/velocity/misc/export.py +563 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/nosql/core/store.py +6 -2
- velocity_python-0.1.134/src/velocity/payment/__init__.py +89 -0
- velocity_python-0.1.134/src/velocity/payment/_mirror_core.py +180 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/payment/authorizenet_adapter.py +22 -22
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/payment/authorizenet_mirror.py +10 -14
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/payment/braintree_adapter.py +49 -29
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/payment/braintree_mirror.py +11 -20
- velocity_python-0.1.134/src/velocity/payment/plaid_api.py +240 -0
- velocity_python-0.1.134/src/velocity/payment/plaid_webhook.py +347 -0
- velocity_python-0.1.134/src/velocity/payment/schema.py +253 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/payment/stripe_adapter.py +18 -23
- velocity_python-0.1.134/src/velocity/payment/stripe_mirror.py +303 -0
- velocity_python-0.1.134/src/velocity/testing/__init__.py +27 -0
- velocity_python-0.1.134/src/velocity/testing/fake_db.py +1468 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity_python.egg-info/PKG-INFO +82 -38
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity_python.egg-info/SOURCES.txt +60 -4
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity_python.egg-info/requires.txt +11 -7
- velocity_python-0.1.134/tests/test_amplify_redirects.py +84 -0
- velocity_python-0.1.134/tests/test_audit_mixin.py +496 -0
- velocity_python-0.1.134/tests/test_aws_package_hygiene.py +223 -0
- velocity_python-0.1.134/tests/test_blob_store.py +217 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_capabilities.py +144 -1
- velocity_python-0.1.134/tests/test_check_changelog.py +298 -0
- velocity_python-0.1.134/tests/test_ci_gate.py +772 -0
- velocity_python-0.1.134/tests/test_client_errors_mixin.py +704 -0
- velocity_python-0.1.134/tests/test_client_input_contract_export.py +109 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_client_sql_boundary.py +29 -3
- velocity_python-0.1.134/tests/test_client_table_gate_case_and_pointers.py +234 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_connection_resilience.py +12 -3
- velocity_python-0.1.134/tests/test_context_queue_job.py +248 -0
- velocity_python-0.1.134/tests/test_conv_combine.py +83 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_data_service_query_cap.py +5 -1
- velocity_python-0.1.134/tests/test_data_service_row_number.py +435 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_data_service_save_as.py +2 -0
- velocity_python-0.1.134/tests/test_data_service_security_gates.py +568 -0
- velocity_python-0.1.134/tests/test_declared_column_types.py +526 -0
- velocity_python-0.1.134/tests/test_deploy_config_fields.py +750 -0
- velocity_python-0.1.130/tests/test_amplify_build.py → velocity_python-0.1.134/tests/test_deploy_engine.py +34 -37
- velocity_python-0.1.134/tests/test_deploy_frontend_checks.py +163 -0
- velocity_python-0.1.134/tests/test_deploy_operations_queue.py +283 -0
- velocity_python-0.1.134/tests/test_deploy_policies.py +443 -0
- velocity_python-0.1.134/tests/test_dlq_constant.py +35 -0
- velocity_python-0.1.134/tests/test_docs_snippets.py +175 -0
- velocity_python-0.1.134/tests/test_ensure_infrastructure.py +596 -0
- velocity_python-0.1.134/tests/test_export_workbook.py +164 -0
- velocity_python-0.1.134/tests/test_facets_and_where.py +238 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_failures.py +168 -0
- velocity_python-0.1.134/tests/test_iconv_money_to_cents.py +113 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_job_results.py +188 -6
- velocity_python-0.1.134/tests/test_merge_on_conflict.py +214 -0
- velocity_python-0.1.134/tests/test_mirror_upsert_public.py +350 -0
- velocity_python-0.1.134/tests/test_on_action_default.py +96 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_payment_authorizenet_adapter.py +36 -11
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_payment_braintree_adapter.py +92 -11
- velocity_python-0.1.134/tests/test_payment_business_agnostic.py +225 -0
- velocity_python-0.1.134/tests/test_payment_extra_bounds.py +63 -0
- velocity_python-0.1.134/tests/test_payment_lazy_imports.py +107 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_payment_stripe_adapter.py +61 -14
- velocity_python-0.1.134/tests/test_pgserver_capability_types.py +149 -0
- velocity_python-0.1.134/tests/test_pgserver_ensure_infrastructure.py +122 -0
- velocity_python-0.1.134/tests/test_pgserver_get_tables.py +73 -0
- velocity_python-0.1.134/tests/test_pgserver_search_export.py +109 -0
- velocity_python-0.1.134/tests/test_plaid_api.py +293 -0
- velocity_python-0.1.134/tests/test_plaid_webhook.py +418 -0
- velocity_python-0.1.134/tests/test_postgres_initializer_config.py +246 -0
- velocity_python-0.1.134/tests/test_postgres_py_type.py +120 -0
- velocity_python-0.1.134/tests/test_readme_imports.py +59 -0
- velocity_python-0.1.134/tests/test_restricted_direct_tables.py +212 -0
- velocity_python-0.1.134/tests/test_row_scoped_data_service.py +706 -0
- velocity_python-0.1.134/tests/test_s3_upload.py +597 -0
- velocity_python-0.1.134/tests/test_schema_lock_config_other_backends.py +94 -0
- velocity_python-0.1.134/tests/test_search_paging_export.py +661 -0
- velocity_python-0.1.134/tests/test_sms_twilio_signature.py +194 -0
- velocity_python-0.1.134/tests/test_ssm_config_require.py +96 -0
- velocity_python-0.1.134/tests/test_table_claim.py +199 -0
- velocity_python-0.1.134/tests/test_testing_fake_db.py +652 -0
- velocity_python-0.1.134/tests/test_user_not_provisioned.py +257 -0
- velocity_python-0.1.130/src/velocity/aws/amplify_build.py +0 -144
- velocity_python-0.1.130/src/velocity/aws/blobs.py +0 -91
- velocity_python-0.1.130/src/velocity/aws/deploy/__init__.py +0 -87
- velocity_python-0.1.130/src/velocity/aws/deploy/config.py +0 -115
- velocity_python-0.1.130/src/velocity/aws/handlers/__init__.py +0 -5
- velocity_python-0.1.130/src/velocity/aws/handlers/mixins/__init__.py +0 -24
- velocity_python-0.1.130/src/velocity/aws/s3.py +0 -269
- velocity_python-0.1.130/src/velocity/aws/tests/test_amplify_build_shim.py +0 -74
- velocity_python-0.1.130/src/velocity/db/servers/postgres/types.py +0 -120
- velocity_python-0.1.130/src/velocity/db/servers/sqlserver/types.py +0 -114
- velocity_python-0.1.130/src/velocity/misc/conv/__init__.py +0 -4
- velocity_python-0.1.130/src/velocity/misc/export.py +0 -268
- velocity_python-0.1.130/src/velocity/payment/__init__.py +0 -43
- velocity_python-0.1.130/src/velocity/payment/_mirror_core.py +0 -107
- velocity_python-0.1.130/src/velocity/payment/stripe_mirror.py +0 -307
- velocity_python-0.1.130/tests/test_blob_store.py +0 -64
- velocity_python-0.1.130/tests/test_iconv_money_to_cents.py +0 -20
- velocity_python-0.1.130/tests/test_restricted_direct_tables.py +0 -59
- {velocity_python-0.1.130 → velocity_python-0.1.134}/LICENSE +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/setup.cfg +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/assets/references.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/assets/usage_index.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/capabilities/base.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/capabilities/infra.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/capabilities/jobs.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/capabilities/retention.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/capabilities/single_session.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/deploy/targets.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/email.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/handlers/context_factory.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/handlers/masquerade.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/handlers/mixins/job_handler.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/handlers/perf.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/mirror.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/ops.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/tests/__init__.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/tests/test_base_handler_error_response.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/tests/test_deploy_least_privilege.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/tests/test_deploy_policies.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/tests/test_deploy_reconcile.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/tests/test_email.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/tests/test_lambda_handler_json_serialization.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/tests/test_response.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/aws/tests/test_sms.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/cache.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/__init__.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/core/__init__.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/core/async_support.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/core/database.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/core/decorators.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/core/engine.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/core/jsonproxy.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/core/lazy_engine.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/core/result.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/core/row.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/core/sequence.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/core/view.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/exceptions.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/fragments.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/maintenance.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/__init__.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/base/__init__.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/base/operators.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/base/types.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/mysql/operators.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/mysql/reserved.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/mysql/sql.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/postgres/operators.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/postgres/reserved.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/sqlite/operators.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/sqlite/reserved.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/sqlite/sql.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/sqlserver/operators.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/sqlserver/reserved.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/servers/sqlserver/sql.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/__init__.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/common_db_test.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/postgres/__init__.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/postgres/common.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/postgres/conftest.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/postgres/test_column.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/postgres/test_connections.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/postgres/test_database.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/postgres/test_engine.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/postgres/test_general_usage.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/postgres/test_imports.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/postgres/test_result.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/postgres/test_row.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/postgres/test_row_comprehensive.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/postgres/test_schema_locking.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/postgres/test_schema_locking_unit.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/postgres/test_sequence.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/postgres/test_sql_comprehensive.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/postgres/test_table.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/postgres/test_table_comprehensive.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/postgres/test_transaction.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/sql/__init__.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/sql/common.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/sql/test_postgres_select_advanced.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/sql/test_postgres_select_variances.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/test_cursor_rowcount_fix.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/test_db_utils.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/test_postgres.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/test_postgres_unchanged.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/test_process_error_robustness.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/test_result_caching.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/test_result_sql_aware.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/test_row_get_missing_column.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/test_schema_locking_initializers.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/test_schema_locking_simple.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/test_sql_builder.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/test_tablehelper.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/tests/test_view_helper.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/db/utils.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/logging.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/misc/__init__.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/misc/conv/oconv.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/misc/db.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/misc/format.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/misc/mail.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/misc/merge.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/misc/pdf.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/misc/tests/__init__.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/misc/tests/test_db.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/misc/tests/test_fix.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/misc/tests/test_format.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/misc/tests/test_iconv.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/misc/tests/test_mail_send.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/misc/tests/test_merge.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/misc/tests/test_oconv.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/misc/tests/test_original_error.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/misc/tests/test_timer.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/misc/timer.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/misc/tools.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/nosql/__init__.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/nosql/core/__init__.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/nosql/core/capabilities.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/nosql/core/where.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/nosql/exceptions.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/nosql/servers/__init__.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/nosql/servers/base/__init__.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/nosql/servers/cassandra/__init__.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/nosql/servers/cassandra/translation.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/nosql/servers/couchbase/__init__.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/nosql/servers/couchbase/translation.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/nosql/servers/dynamodb/__init__.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/nosql/servers/dynamodb/translation.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/nosql/servers/elasticsearch/__init__.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/nosql/servers/elasticsearch/translation.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/nosql/servers/memory/__init__.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/nosql/servers/mongodb/__init__.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/nosql/servers/mongodb/translation.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/nosql/servers/redis/__init__.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/payment/base_adapter.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/payment/charge_rules.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/payment/money.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity/payment/redact.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity_python.egg-info/dependency_links.txt +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity_python.egg-info/entry_points.txt +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/src/velocity_python.egg-info/top_level.txt +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_access_error_403.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_activity_tracking_aborted_tx.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_asset_indexing.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_asset_references.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_assets_service.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_async_support.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_batch_operations.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_capability_catalog.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_cognito_user_cache.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_column_tx_arg.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_concurrency_safety.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_connection_pool.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_context_flags_loader.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_context_job_descriptions.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_data_service_renumber.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_db_credentials_ssm_cascade.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_db_maintenance.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_db_tunnel.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_decorators.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_delete_hook_fk_blocked.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_dirty_pipeline_fast_path.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_email_processing.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_enqueue_metric_namespace.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_enqueue_send_failures.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_facets.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_feature_flags.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_get_cognito_user_provider.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_http_handler_rollback.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_identifier_injection_guard.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_job_handler.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_job_lifecycle.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_json_columns.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_jsonb_dict_adapter.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_lambda_handler.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_lambda_handler_auth.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_lambda_handler_masquerade.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_lambda_handler_user_cache.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_lazy_engine.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_masquerade_grant.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_mirror.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_mixins_import.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_n_plus_one.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_nosql_dynamodb.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_nosql_memory.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_nosql_mongodb.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_nosql_redis.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_nosql_translation.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_nosql_where.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_observability.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_on_commit.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_ops.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_payment_audit_fixes.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_payment_braintree_mirror.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_payment_mirror_empty_table.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_payment_profile_sorting.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_pdf.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_pgserver_bulk_cache.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_pgserver_pointer_joins.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_pointer_join_sql.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_prepared_statements.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_psycopg3_upgrade.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_query_cache.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_query_missing_table_unlocked.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_raw_sql_prefix_policy.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_read_cache.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_response.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_result_returning.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_retry_side_effect_guard.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_return_default_safety.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_row_batch_update.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_row_cache_staleness.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_s3_bucket_config.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_s3_list_client_files.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_schema_migrations.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_security_capability.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_security_hardening.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_server_cursor.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_session_control.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_single_autocommit_safety.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_single_session_capability.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_spreadsheet_functions.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_sqlite_backend.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_sqs_per_record_transactions.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_ssm_config.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_store_user_data.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_sys_modified_count_postgres_demo.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_table_alter.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_table_find_cache.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_table_purge.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_transaction_class_wrapping.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_transaction_commit_and_ownership.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_transaction_edge_cases.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_tx_lifecycle_retry.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_tx_read_cache_and_bulk.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_where_clause_validation.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_write_hook_create_flow.py +0 -0
- {velocity_python-0.1.130 → velocity_python-0.1.134}/tests/test_write_hook_empty_strings.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: velocity-python
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.134
|
|
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
|
|
@@ -13,12 +13,10 @@ Classifier: Intended Audience :: Developers
|
|
|
13
13
|
Classifier: Topic :: Database
|
|
14
14
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
15
15
|
Classifier: Programming Language :: Python :: 3
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
18
16
|
Classifier: Programming Language :: Python :: 3.11
|
|
19
17
|
Classifier: Programming Language :: Python :: 3.12
|
|
20
18
|
Classifier: Operating System :: OS Independent
|
|
21
|
-
Requires-Python: >=3.
|
|
19
|
+
Requires-Python: >=3.11
|
|
22
20
|
Description-Content-Type: text/markdown
|
|
23
21
|
License-File: LICENSE
|
|
24
22
|
Requires-Dist: sqlparse>=0.5.0
|
|
@@ -54,11 +52,13 @@ Requires-Dist: python-tds>=1.15.0; extra == "sqlserver"
|
|
|
54
52
|
Provides-Extra: postgres
|
|
55
53
|
Requires-Dist: psycopg[binary]>=3.2.0; extra == "postgres"
|
|
56
54
|
Provides-Extra: payment
|
|
57
|
-
Requires-Dist: stripe
|
|
58
|
-
Requires-Dist: braintree
|
|
59
|
-
Requires-Dist: xmltodict
|
|
55
|
+
Requires-Dist: stripe<17,>=15.0.0; extra == "payment"
|
|
56
|
+
Requires-Dist: braintree<5,>=4.30.0; extra == "payment"
|
|
57
|
+
Requires-Dist: xmltodict<2,>=0.13.0; extra == "payment"
|
|
58
|
+
Provides-Extra: plaid
|
|
59
|
+
Requires-Dist: ecdsa>=0.19.0; extra == "plaid"
|
|
60
60
|
Provides-Extra: all
|
|
61
|
-
Requires-Dist: velocity-python[aws,excel,http,payment,pdf,postgres,templates]; extra == "all"
|
|
61
|
+
Requires-Dist: velocity-python[aws,excel,http,payment,pdf,plaid,postgres,templates]; extra == "all"
|
|
62
62
|
Provides-Extra: dev
|
|
63
63
|
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
64
64
|
Requires-Dist: pytest-cov>=6.0.0; extra == "dev"
|
|
@@ -75,10 +75,11 @@ Requires-Dist: pytest-asyncio>=1.0.0; extra == "test"
|
|
|
75
75
|
Requires-Dist: psycopg[binary]>=3.2.0; extra == "test"
|
|
76
76
|
Requires-Dist: boto3>=1.35.0; extra == "test"
|
|
77
77
|
Requires-Dist: requests>=2.32.0; extra == "test"
|
|
78
|
-
Requires-Dist: stripe
|
|
79
|
-
Requires-Dist: braintree
|
|
80
|
-
Requires-Dist: xmltodict
|
|
78
|
+
Requires-Dist: stripe<17,>=15.0.0; extra == "test"
|
|
79
|
+
Requires-Dist: braintree<5,>=4.30.0; extra == "test"
|
|
80
|
+
Requires-Dist: xmltodict<2,>=0.13.0; extra == "test"
|
|
81
81
|
Requires-Dist: authorizenet>=1.1.3; extra == "test"
|
|
82
|
+
Requires-Dist: ecdsa>=0.19.0; extra == "test"
|
|
82
83
|
Requires-Dist: openpyxl>=3.1.0; extra == "test"
|
|
83
84
|
Requires-Dist: redis>=5.0.0; extra == "test"
|
|
84
85
|
Requires-Dist: fakeredis>=2.23.0; extra == "test"
|
|
@@ -163,12 +164,16 @@ pip install velocity-python[all]
|
|
|
163
164
|
| `postgres` | `psycopg[binary]>=3.2.0` | PostgreSQL connections |
|
|
164
165
|
| `aws` | `boto3`, `requests` | Lambda handlers, SQS, Amplify |
|
|
165
166
|
| `excel` | `openpyxl` | Excel export |
|
|
167
|
+
| `parquet` | `pyarrow` | Parquet export |
|
|
168
|
+
| `ods` | `odfpy` | OpenDocument spreadsheet export |
|
|
166
169
|
| `templates` | `jinja2` | Template rendering |
|
|
170
|
+
| `pdf` | `weasyprint` | HTML → PDF rendering (native Pango/Cairo from the OS or a layer) |
|
|
167
171
|
| `http` | `requests` | HTTP utilities |
|
|
168
|
-
| `payment` | `stripe`, `braintree` |
|
|
172
|
+
| `payment` | `stripe`, `braintree`, `xmltodict` | Stripe and Braintree adapters (Authorize.Net additionally needs `authorizenet`, installed separately — see `docs/payment.md`) |
|
|
169
173
|
| `mysql` | `mysql-connector-python` | MySQL connections |
|
|
170
174
|
| `sqlserver` | `python-tds` | SQL Server connections |
|
|
171
|
-
| `
|
|
175
|
+
| `redis`, `mongodb`, `elasticsearch`, `cassandra`, `couchbase` | the matching client | NoSQL adapters (`docs/nosql.md`) |
|
|
176
|
+
| `all` | `postgres`, `aws`, `excel`, `templates`, `http`, `payment`, `pdf` | Typical full install |
|
|
172
177
|
|
|
173
178
|
**Requires Python 3.9+** and uses **psycopg v3** (not psycopg2) for PostgreSQL.
|
|
174
179
|
|
|
@@ -241,21 +246,28 @@ def import_customers(tx, records):
|
|
|
241
246
|
## Documentation
|
|
242
247
|
|
|
243
248
|
Full documentation is included in the `docs/` directory of the source distribution.
|
|
249
|
+
What changed in each release, and what callers must do before upgrading, is in
|
|
250
|
+
[`CHANGELOG.md`](CHANGELOG.md) (Breaking / Deploy ordering / Added / Fixed per version).
|
|
244
251
|
|
|
245
252
|
| Guide | File | Description |
|
|
246
253
|
|-------|------|-------------|
|
|
247
|
-
| Database ORM | `docs/database.md` | Connections, transactions, tables, rows, results, queries, schema management |
|
|
254
|
+
| Database ORM | `docs/database.md` | Connections, `DB_TUNNEL`, transactions, tables, rows, results, queries, purge, schema management |
|
|
255
|
+
| Schema Management | `docs/schema-management.md` | Runtime auto-heal, declarative `ensure_schema()`, schema locking, conflict handling |
|
|
248
256
|
| Performance & Optimization | `docs/performance.md` | Connection pooling, batch operations, query caching, prepared statements, N+1 prevention, observability |
|
|
249
257
|
| Async Support | `docs/async.md` | AsyncTransaction, AsyncTable, AsyncResult, parallel queries with gather() |
|
|
250
|
-
| Configuration Reference | `docs/configuration.md` |
|
|
251
|
-
| AWS Lambda Handlers | `docs/aws-handlers.md` | LambdaHandler, SqsHandler, auth modes, per-record transactions, async jobs (JobHandler + job result stores) |
|
|
258
|
+
| Configuration Reference | `docs/configuration.md` | Every environment variable and SSM config key velocity reads, `ssm_config`, S3 buckets, engine options |
|
|
259
|
+
| AWS Lambda Handlers | `docs/aws-handlers.md` | LambdaHandler, SqsHandler, auth modes, per-record transactions, DataService client boundary, async jobs (JobHandler + job result stores), failure events |
|
|
260
|
+
| AWS Auth Modes | `docs/AWS_HANDLERS_AUTH.md` | Cognito auth, public endpoints, webhooks |
|
|
261
|
+
| Deployment | `docs/deploy.md` | `velocity.aws.deploy`: least-privilege IAM, function settings, layers, SQS queue reconcile |
|
|
252
262
|
| Cross-database Mirroring | `docs/mirroring.md` | Keep a table identical in two databases (demo ↔ production) by natural key; rwx hooks, FK translation, reconcile |
|
|
253
263
|
| Operations Dashboard | `docs/operations.md` | What the automation is doing: schedules, jobs, failures, stuck work, with drill-down (`velocity.aws.ops` + velocity-react `OpsDashboard`) |
|
|
254
264
|
| NoSQL Adapters | `docs/nosql.md` | Redis, DynamoDB, MongoDB, Elasticsearch, Cassandra, Couchbase behind one capability-honest contract |
|
|
255
|
-
| Payment Processing | `docs/payment.md` | Stripe and
|
|
256
|
-
| Utilities | `docs/utilities.md` | Excel export, data conversion, formatting, timers, email parsing and SMTP sending |
|
|
265
|
+
| Payment Processing | `docs/payment.md` | Stripe, Braintree and Authorize.Net adapters, processor mirrors, payment lifecycle |
|
|
266
|
+
| Utilities | `docs/utilities.md` | Excel/PDF export, data conversion, formatting, timers, email parsing and SMTP sending |
|
|
257
267
|
| Testing Guide | `docs/TESTING.md` | Running tests, markers, coverage |
|
|
258
268
|
| Security | `docs/SECURITY.md` | Pre-commit hooks, credential scanning |
|
|
269
|
+
| Changelog | `CHANGELOG.md` | Per-release breaking changes, deploy ordering, additions and fixes |
|
|
270
|
+
| Improvement Backlog | `docs/IMPROVEMENT_BACKLOG.md` | Proposed and deferred library improvements |
|
|
259
271
|
|
|
260
272
|
---
|
|
261
273
|
|
|
@@ -266,7 +278,7 @@ Engine (singleton — survives Lambda warm starts)
|
|
|
266
278
|
├── ConnectionPool (thread-safe, configurable min/max)
|
|
267
279
|
└── Transaction (one per request, borrows from pool)
|
|
268
280
|
├── Table (CRUD, batch ops, schema management)
|
|
269
|
-
│ ├── Row (dict-like, lazy-cache, write-through, batch_update)
|
|
281
|
+
│ ├── Row (dict-like, lazy-cache, write-through, batch_update())
|
|
270
282
|
│ └── Result (streaming cursor iteration, transforms)
|
|
271
283
|
├── View (create, grant, ensure)
|
|
272
284
|
└── Sequence (create, next, current, configure)
|
|
@@ -299,7 +311,7 @@ from velocity.db.servers.sqlite import initialize
|
|
|
299
311
|
engine = initialize(config={"database": "myapp.db"})
|
|
300
312
|
|
|
301
313
|
# SQL Server
|
|
302
|
-
from velocity.db.servers.
|
|
314
|
+
from velocity.db.servers.sqlserver import initialize
|
|
303
315
|
engine = initialize()
|
|
304
316
|
```
|
|
305
317
|
|
|
@@ -310,32 +322,61 @@ engine = initialize()
|
|
|
310
322
|
```
|
|
311
323
|
velocity-python/
|
|
312
324
|
├── src/velocity/
|
|
325
|
+
│ ├── cache.py # Process-level read cache (cache_ttl / memo)
|
|
326
|
+
│ ├── logging.py # Logging setup (JSON in Lambda, text elsewhere)
|
|
313
327
|
│ ├── db/
|
|
314
328
|
│ │ ├── core/
|
|
315
|
-
│ │ │ ├── engine.py # Engine, ConnectionPool
|
|
316
|
-
│ │ │ ├──
|
|
317
|
-
│ │ │ ├──
|
|
318
|
-
│ │ │ ├──
|
|
329
|
+
│ │ │ ├── engine.py # Engine, ConnectionPool, @engine.transaction
|
|
330
|
+
│ │ │ ├── lazy_engine.py # LazyEngine (build on first use)
|
|
331
|
+
│ │ │ ├── transaction.py # Transaction, query timing, caching, on_commit
|
|
332
|
+
│ │ │ ├── table.py # Table CRUD, batch ops, purge, schema
|
|
333
|
+
│ │ │ ├── row.py # Row (dict-like, write-through, batch_update())
|
|
319
334
|
│ │ │ ├── result.py # Result (cursor wrapper, transforms)
|
|
335
|
+
│ │ │ ├── column.py # Column helpers
|
|
336
|
+
│ │ │ ├── database.py # Database-level operations
|
|
337
|
+
│ │ │ ├── jsonproxy.py # Live list/dict values for JSON columns
|
|
320
338
|
│ │ │ ├── async_support.py # Async versions of core classes
|
|
321
339
|
│ │ │ ├── view.py # View management
|
|
322
340
|
│ │ │ ├── sequence.py # Sequence management
|
|
323
|
-
│ │ │ └── decorators.py # @create_missing, @return_default,
|
|
324
|
-
│ │
|
|
325
|
-
│ │
|
|
326
|
-
│ │
|
|
327
|
-
│ │
|
|
328
|
-
│ │
|
|
341
|
+
│ │ │ └── decorators.py # @create_missing, @return_default, retries
|
|
342
|
+
│ │ ├── servers/
|
|
343
|
+
│ │ │ ├── postgres/ # PostgreSQL dialect + initializer (primary)
|
|
344
|
+
│ │ │ ├── mysql/ # MySQL dialect
|
|
345
|
+
│ │ │ ├── sqlite/ # SQLite dialect
|
|
346
|
+
│ │ │ ├── sqlserver/ # SQL Server dialect
|
|
347
|
+
│ │ │ └── tablehelper.py # Where/column/pointer-join compiler
|
|
348
|
+
│ │ ├── fragments.py # Literal / @@ token handling
|
|
349
|
+
│ │ ├── maintenance.py # DatabaseMaintenance (clone, snapshot, prune)
|
|
350
|
+
│ │ ├── migrations.py # `velocity` CLI: migration runner
|
|
351
|
+
│ │ ├── tunnel.py # DB_TUNNEL support
|
|
352
|
+
│ │ └── exceptions.py # Db* exception hierarchy
|
|
329
353
|
│ ├── aws/
|
|
330
|
-
│ │
|
|
331
|
-
│ │
|
|
332
|
-
│ │
|
|
354
|
+
│ │ ├── handlers/ # LambdaHandler, SqsHandler, context, mixins
|
|
355
|
+
│ │ │ └── mixins/ # DataService, client-input guard, jobs, sessions, web
|
|
356
|
+
│ │ ├── capabilities/ # Per-site capability registry and provisioning
|
|
357
|
+
│ │ ├── assets/ # Asset store: indexing, references, usage
|
|
358
|
+
│ │ ├── deploy/ # Platform-neutral deployment engine
|
|
359
|
+
│ │ ├── ssm_config.py # SSM-backed config (project, then /Global)
|
|
360
|
+
│ │ ├── s3.py # Presigned URLs, configured buckets
|
|
361
|
+
│ │ ├── failures.py # Failure events (SNS)
|
|
362
|
+
│ │ ├── feature_flags.py # sys_feature_flags cache + mirror
|
|
363
|
+
│ │ ├── mirror.py # Cross-database table mirroring
|
|
364
|
+
│ │ ├── job_lifecycle.py # Job status tracking
|
|
365
|
+
│ │ ├── job_results.py # Job result stores
|
|
366
|
+
│ │ ├── dirty_pipeline.py # sys_dirty / on_dirty pipeline
|
|
367
|
+
│ │ ├── ops.py # Operations dashboard data
|
|
368
|
+
│ │ ├── email.py / sms.py # SES email, SMS
|
|
369
|
+
│ │ └── amplify.py, amplify_build.py, blobs.py, facets.py
|
|
370
|
+
│ ├── nosql/ # NoSQL store contract + adapters
|
|
333
371
|
│ ├── payment/
|
|
334
372
|
│ │ ├── base_adapter.py # Abstract payment interface
|
|
335
|
-
│ │ ├── stripe_adapter.py # Stripe
|
|
336
|
-
│ │
|
|
337
|
-
│
|
|
338
|
-
├──
|
|
373
|
+
│ │ ├── stripe_adapter.py # Stripe
|
|
374
|
+
│ │ ├── braintree_adapter.py # Braintree
|
|
375
|
+
│ │ ├── authorizenet_adapter.py # Authorize.Net (CIM)
|
|
376
|
+
│ │ ├── *_mirror.py # Processor mirror tables
|
|
377
|
+
│ │ └── money.py, charge_rules.py, redact.py
|
|
378
|
+
│ └── misc/ # conv (iconv/oconv), export, format, mail, pdf, timer, ...
|
|
379
|
+
├── tests/ # Unit tests (make test-unit)
|
|
339
380
|
├── docs/ # Detailed documentation
|
|
340
381
|
└── pyproject.toml
|
|
341
382
|
```
|
|
@@ -348,7 +389,10 @@ velocity-python/
|
|
|
348
389
|
# Install with dev dependencies
|
|
349
390
|
pip install -e ".[dev,test,postgres]"
|
|
350
391
|
|
|
351
|
-
# Run
|
|
392
|
+
# Run the unit suite (no database needed)
|
|
393
|
+
make test-unit
|
|
394
|
+
|
|
395
|
+
# Or directly
|
|
352
396
|
pytest
|
|
353
397
|
|
|
354
398
|
# Run with coverage
|
|
@@ -71,12 +71,16 @@ pip install velocity-python[all]
|
|
|
71
71
|
| `postgres` | `psycopg[binary]>=3.2.0` | PostgreSQL connections |
|
|
72
72
|
| `aws` | `boto3`, `requests` | Lambda handlers, SQS, Amplify |
|
|
73
73
|
| `excel` | `openpyxl` | Excel export |
|
|
74
|
+
| `parquet` | `pyarrow` | Parquet export |
|
|
75
|
+
| `ods` | `odfpy` | OpenDocument spreadsheet export |
|
|
74
76
|
| `templates` | `jinja2` | Template rendering |
|
|
77
|
+
| `pdf` | `weasyprint` | HTML → PDF rendering (native Pango/Cairo from the OS or a layer) |
|
|
75
78
|
| `http` | `requests` | HTTP utilities |
|
|
76
|
-
| `payment` | `stripe`, `braintree` |
|
|
79
|
+
| `payment` | `stripe`, `braintree`, `xmltodict` | Stripe and Braintree adapters (Authorize.Net additionally needs `authorizenet`, installed separately — see `docs/payment.md`) |
|
|
77
80
|
| `mysql` | `mysql-connector-python` | MySQL connections |
|
|
78
81
|
| `sqlserver` | `python-tds` | SQL Server connections |
|
|
79
|
-
| `
|
|
82
|
+
| `redis`, `mongodb`, `elasticsearch`, `cassandra`, `couchbase` | the matching client | NoSQL adapters (`docs/nosql.md`) |
|
|
83
|
+
| `all` | `postgres`, `aws`, `excel`, `templates`, `http`, `payment`, `pdf` | Typical full install |
|
|
80
84
|
|
|
81
85
|
**Requires Python 3.9+** and uses **psycopg v3** (not psycopg2) for PostgreSQL.
|
|
82
86
|
|
|
@@ -149,21 +153,28 @@ def import_customers(tx, records):
|
|
|
149
153
|
## Documentation
|
|
150
154
|
|
|
151
155
|
Full documentation is included in the `docs/` directory of the source distribution.
|
|
156
|
+
What changed in each release, and what callers must do before upgrading, is in
|
|
157
|
+
[`CHANGELOG.md`](CHANGELOG.md) (Breaking / Deploy ordering / Added / Fixed per version).
|
|
152
158
|
|
|
153
159
|
| Guide | File | Description |
|
|
154
160
|
|-------|------|-------------|
|
|
155
|
-
| Database ORM | `docs/database.md` | Connections, transactions, tables, rows, results, queries, schema management |
|
|
161
|
+
| Database ORM | `docs/database.md` | Connections, `DB_TUNNEL`, transactions, tables, rows, results, queries, purge, schema management |
|
|
162
|
+
| Schema Management | `docs/schema-management.md` | Runtime auto-heal, declarative `ensure_schema()`, schema locking, conflict handling |
|
|
156
163
|
| Performance & Optimization | `docs/performance.md` | Connection pooling, batch operations, query caching, prepared statements, N+1 prevention, observability |
|
|
157
164
|
| Async Support | `docs/async.md` | AsyncTransaction, AsyncTable, AsyncResult, parallel queries with gather() |
|
|
158
|
-
| Configuration Reference | `docs/configuration.md` |
|
|
159
|
-
| AWS Lambda Handlers | `docs/aws-handlers.md` | LambdaHandler, SqsHandler, auth modes, per-record transactions, async jobs (JobHandler + job result stores) |
|
|
165
|
+
| Configuration Reference | `docs/configuration.md` | Every environment variable and SSM config key velocity reads, `ssm_config`, S3 buckets, engine options |
|
|
166
|
+
| AWS Lambda Handlers | `docs/aws-handlers.md` | LambdaHandler, SqsHandler, auth modes, per-record transactions, DataService client boundary, async jobs (JobHandler + job result stores), failure events |
|
|
167
|
+
| AWS Auth Modes | `docs/AWS_HANDLERS_AUTH.md` | Cognito auth, public endpoints, webhooks |
|
|
168
|
+
| Deployment | `docs/deploy.md` | `velocity.aws.deploy`: least-privilege IAM, function settings, layers, SQS queue reconcile |
|
|
160
169
|
| Cross-database Mirroring | `docs/mirroring.md` | Keep a table identical in two databases (demo ↔ production) by natural key; rwx hooks, FK translation, reconcile |
|
|
161
170
|
| Operations Dashboard | `docs/operations.md` | What the automation is doing: schedules, jobs, failures, stuck work, with drill-down (`velocity.aws.ops` + velocity-react `OpsDashboard`) |
|
|
162
171
|
| NoSQL Adapters | `docs/nosql.md` | Redis, DynamoDB, MongoDB, Elasticsearch, Cassandra, Couchbase behind one capability-honest contract |
|
|
163
|
-
| Payment Processing | `docs/payment.md` | Stripe and
|
|
164
|
-
| Utilities | `docs/utilities.md` | Excel export, data conversion, formatting, timers, email parsing and SMTP sending |
|
|
172
|
+
| Payment Processing | `docs/payment.md` | Stripe, Braintree and Authorize.Net adapters, processor mirrors, payment lifecycle |
|
|
173
|
+
| Utilities | `docs/utilities.md` | Excel/PDF export, data conversion, formatting, timers, email parsing and SMTP sending |
|
|
165
174
|
| Testing Guide | `docs/TESTING.md` | Running tests, markers, coverage |
|
|
166
175
|
| Security | `docs/SECURITY.md` | Pre-commit hooks, credential scanning |
|
|
176
|
+
| Changelog | `CHANGELOG.md` | Per-release breaking changes, deploy ordering, additions and fixes |
|
|
177
|
+
| Improvement Backlog | `docs/IMPROVEMENT_BACKLOG.md` | Proposed and deferred library improvements |
|
|
167
178
|
|
|
168
179
|
---
|
|
169
180
|
|
|
@@ -174,7 +185,7 @@ Engine (singleton — survives Lambda warm starts)
|
|
|
174
185
|
├── ConnectionPool (thread-safe, configurable min/max)
|
|
175
186
|
└── Transaction (one per request, borrows from pool)
|
|
176
187
|
├── Table (CRUD, batch ops, schema management)
|
|
177
|
-
│ ├── Row (dict-like, lazy-cache, write-through, batch_update)
|
|
188
|
+
│ ├── Row (dict-like, lazy-cache, write-through, batch_update())
|
|
178
189
|
│ └── Result (streaming cursor iteration, transforms)
|
|
179
190
|
├── View (create, grant, ensure)
|
|
180
191
|
└── Sequence (create, next, current, configure)
|
|
@@ -207,7 +218,7 @@ from velocity.db.servers.sqlite import initialize
|
|
|
207
218
|
engine = initialize(config={"database": "myapp.db"})
|
|
208
219
|
|
|
209
220
|
# SQL Server
|
|
210
|
-
from velocity.db.servers.
|
|
221
|
+
from velocity.db.servers.sqlserver import initialize
|
|
211
222
|
engine = initialize()
|
|
212
223
|
```
|
|
213
224
|
|
|
@@ -218,32 +229,61 @@ engine = initialize()
|
|
|
218
229
|
```
|
|
219
230
|
velocity-python/
|
|
220
231
|
├── src/velocity/
|
|
232
|
+
│ ├── cache.py # Process-level read cache (cache_ttl / memo)
|
|
233
|
+
│ ├── logging.py # Logging setup (JSON in Lambda, text elsewhere)
|
|
221
234
|
│ ├── db/
|
|
222
235
|
│ │ ├── core/
|
|
223
|
-
│ │ │ ├── engine.py # Engine, ConnectionPool
|
|
224
|
-
│ │ │ ├──
|
|
225
|
-
│ │ │ ├──
|
|
226
|
-
│ │ │ ├──
|
|
236
|
+
│ │ │ ├── engine.py # Engine, ConnectionPool, @engine.transaction
|
|
237
|
+
│ │ │ ├── lazy_engine.py # LazyEngine (build on first use)
|
|
238
|
+
│ │ │ ├── transaction.py # Transaction, query timing, caching, on_commit
|
|
239
|
+
│ │ │ ├── table.py # Table CRUD, batch ops, purge, schema
|
|
240
|
+
│ │ │ ├── row.py # Row (dict-like, write-through, batch_update())
|
|
227
241
|
│ │ │ ├── result.py # Result (cursor wrapper, transforms)
|
|
242
|
+
│ │ │ ├── column.py # Column helpers
|
|
243
|
+
│ │ │ ├── database.py # Database-level operations
|
|
244
|
+
│ │ │ ├── jsonproxy.py # Live list/dict values for JSON columns
|
|
228
245
|
│ │ │ ├── async_support.py # Async versions of core classes
|
|
229
246
|
│ │ │ ├── view.py # View management
|
|
230
247
|
│ │ │ ├── sequence.py # Sequence management
|
|
231
|
-
│ │ │ └── decorators.py # @create_missing, @return_default,
|
|
232
|
-
│ │
|
|
233
|
-
│ │
|
|
234
|
-
│ │
|
|
235
|
-
│ │
|
|
236
|
-
│ │
|
|
248
|
+
│ │ │ └── decorators.py # @create_missing, @return_default, retries
|
|
249
|
+
│ │ ├── servers/
|
|
250
|
+
│ │ │ ├── postgres/ # PostgreSQL dialect + initializer (primary)
|
|
251
|
+
│ │ │ ├── mysql/ # MySQL dialect
|
|
252
|
+
│ │ │ ├── sqlite/ # SQLite dialect
|
|
253
|
+
│ │ │ ├── sqlserver/ # SQL Server dialect
|
|
254
|
+
│ │ │ └── tablehelper.py # Where/column/pointer-join compiler
|
|
255
|
+
│ │ ├── fragments.py # Literal / @@ token handling
|
|
256
|
+
│ │ ├── maintenance.py # DatabaseMaintenance (clone, snapshot, prune)
|
|
257
|
+
│ │ ├── migrations.py # `velocity` CLI: migration runner
|
|
258
|
+
│ │ ├── tunnel.py # DB_TUNNEL support
|
|
259
|
+
│ │ └── exceptions.py # Db* exception hierarchy
|
|
237
260
|
│ ├── aws/
|
|
238
|
-
│ │
|
|
239
|
-
│ │
|
|
240
|
-
│ │
|
|
261
|
+
│ │ ├── handlers/ # LambdaHandler, SqsHandler, context, mixins
|
|
262
|
+
│ │ │ └── mixins/ # DataService, client-input guard, jobs, sessions, web
|
|
263
|
+
│ │ ├── capabilities/ # Per-site capability registry and provisioning
|
|
264
|
+
│ │ ├── assets/ # Asset store: indexing, references, usage
|
|
265
|
+
│ │ ├── deploy/ # Platform-neutral deployment engine
|
|
266
|
+
│ │ ├── ssm_config.py # SSM-backed config (project, then /Global)
|
|
267
|
+
│ │ ├── s3.py # Presigned URLs, configured buckets
|
|
268
|
+
│ │ ├── failures.py # Failure events (SNS)
|
|
269
|
+
│ │ ├── feature_flags.py # sys_feature_flags cache + mirror
|
|
270
|
+
│ │ ├── mirror.py # Cross-database table mirroring
|
|
271
|
+
│ │ ├── job_lifecycle.py # Job status tracking
|
|
272
|
+
│ │ ├── job_results.py # Job result stores
|
|
273
|
+
│ │ ├── dirty_pipeline.py # sys_dirty / on_dirty pipeline
|
|
274
|
+
│ │ ├── ops.py # Operations dashboard data
|
|
275
|
+
│ │ ├── email.py / sms.py # SES email, SMS
|
|
276
|
+
│ │ └── amplify.py, amplify_build.py, blobs.py, facets.py
|
|
277
|
+
│ ├── nosql/ # NoSQL store contract + adapters
|
|
241
278
|
│ ├── payment/
|
|
242
279
|
│ │ ├── base_adapter.py # Abstract payment interface
|
|
243
|
-
│ │ ├── stripe_adapter.py # Stripe
|
|
244
|
-
│ │
|
|
245
|
-
│
|
|
246
|
-
├──
|
|
280
|
+
│ │ ├── stripe_adapter.py # Stripe
|
|
281
|
+
│ │ ├── braintree_adapter.py # Braintree
|
|
282
|
+
│ │ ├── authorizenet_adapter.py # Authorize.Net (CIM)
|
|
283
|
+
│ │ ├── *_mirror.py # Processor mirror tables
|
|
284
|
+
│ │ └── money.py, charge_rules.py, redact.py
|
|
285
|
+
│ └── misc/ # conv (iconv/oconv), export, format, mail, pdf, timer, ...
|
|
286
|
+
├── tests/ # Unit tests (make test-unit)
|
|
247
287
|
├── docs/ # Detailed documentation
|
|
248
288
|
└── pyproject.toml
|
|
249
289
|
```
|
|
@@ -256,7 +296,10 @@ velocity-python/
|
|
|
256
296
|
# Install with dev dependencies
|
|
257
297
|
pip install -e ".[dev,test,postgres]"
|
|
258
298
|
|
|
259
|
-
# Run
|
|
299
|
+
# Run the unit suite (no database needed)
|
|
300
|
+
make test-unit
|
|
301
|
+
|
|
302
|
+
# Or directly
|
|
260
303
|
pytest
|
|
261
304
|
|
|
262
305
|
# Run with coverage
|
|
@@ -4,14 +4,14 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "velocity-python"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.134"
|
|
8
8
|
authors = [
|
|
9
9
|
{ name="Velocity Team", email="info@codeclubs.org" },
|
|
10
10
|
]
|
|
11
11
|
description = "A rapid application development library for interfacing with data storage"
|
|
12
12
|
readme = "README.md"
|
|
13
13
|
license = "MIT"
|
|
14
|
-
requires-python = ">=3.
|
|
14
|
+
requires-python = ">=3.11"
|
|
15
15
|
keywords = ["database", "orm", "sql", "rapid-development", "data-storage"]
|
|
16
16
|
classifiers = [
|
|
17
17
|
"Development Status :: 4 - Beta",
|
|
@@ -19,8 +19,6 @@ classifiers = [
|
|
|
19
19
|
"Topic :: Database",
|
|
20
20
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
21
21
|
"Programming Language :: Python :: 3",
|
|
22
|
-
"Programming Language :: Python :: 3.9",
|
|
23
|
-
"Programming Language :: Python :: 3.10",
|
|
24
22
|
"Programming Language :: Python :: 3.11",
|
|
25
23
|
"Programming Language :: Python :: 3.12",
|
|
26
24
|
"Operating System :: OS Independent",
|
|
@@ -85,13 +83,26 @@ sqlserver = [
|
|
|
85
83
|
postgres = [
|
|
86
84
|
"psycopg[binary]>=3.2.0",
|
|
87
85
|
]
|
|
86
|
+
# Tested bounds: the unit suite passes on stripe 15.0.x and 16.0.0 and on
|
|
87
|
+
# braintree 4.42 and 4.47. Raise an upper bound only after `make test-unit`
|
|
88
|
+
# passes on the new major (stripe objects stopped being dicts in 13; each
|
|
89
|
+
# stripe major also moves the default API version, so callers should pin
|
|
90
|
+
# stripe.api_version). Apps pin exact versions inside these bounds (see
|
|
91
|
+
# docs/payment.md "Installation").
|
|
88
92
|
payment = [
|
|
89
|
-
"stripe>=
|
|
90
|
-
"braintree>=4.30.0",
|
|
91
|
-
"xmltodict>=0.13.0",
|
|
93
|
+
"stripe>=15.0.0,<17",
|
|
94
|
+
"braintree>=4.30.0,<5",
|
|
95
|
+
"xmltodict>=0.13.0,<2",
|
|
96
|
+
]
|
|
97
|
+
# Plaid webhook ES256 verification (velocity.payment.plaid_webhook). ecdsa is
|
|
98
|
+
# pure Python, so it fits a Lambda layer where `cryptography` does not.
|
|
99
|
+
# velocity/payment/__init__.py imports the processor adapters lazily, so
|
|
100
|
+
# importing plaid_webhook needs no stripe/braintree (tests/test_payment_lazy_imports.py).
|
|
101
|
+
plaid = [
|
|
102
|
+
"ecdsa>=0.19.0",
|
|
92
103
|
]
|
|
93
104
|
all = [
|
|
94
|
-
"velocity-python[postgres,aws,excel,templates,http,payment,pdf]",
|
|
105
|
+
"velocity-python[postgres,aws,excel,templates,http,payment,plaid,pdf]",
|
|
95
106
|
]
|
|
96
107
|
dev = [
|
|
97
108
|
"pytest>=8.0.0",
|
|
@@ -113,10 +124,11 @@ test = [
|
|
|
113
124
|
"psycopg[binary]>=3.2.0",
|
|
114
125
|
"boto3>=1.35.0",
|
|
115
126
|
"requests>=2.32.0",
|
|
116
|
-
"stripe>=
|
|
117
|
-
"braintree>=4.30.0",
|
|
118
|
-
"xmltodict>=0.13.0",
|
|
127
|
+
"stripe>=15.0.0,<17",
|
|
128
|
+
"braintree>=4.30.0,<5",
|
|
129
|
+
"xmltodict>=0.13.0,<2",
|
|
119
130
|
"authorizenet>=1.1.3",
|
|
131
|
+
"ecdsa>=0.19.0",
|
|
120
132
|
"openpyxl>=3.1.0",
|
|
121
133
|
# NoSQL adapter unit tests run against in-process fakes (real clients for
|
|
122
134
|
# the wire formats, fakes for the servers). ES/Cassandra/Couchbase have
|
|
@@ -140,7 +152,7 @@ where = ["src"]
|
|
|
140
152
|
|
|
141
153
|
[tool.black]
|
|
142
154
|
line-length = 88
|
|
143
|
-
target-version = ['
|
|
155
|
+
target-version = ['py311', 'py312']
|
|
144
156
|
include = '\.pyi?$'
|
|
145
157
|
extend-exclude = '''
|
|
146
158
|
/(
|
|
@@ -163,7 +175,7 @@ line_length = 88
|
|
|
163
175
|
known_first_party = ["velocity"]
|
|
164
176
|
|
|
165
177
|
[tool.mypy]
|
|
166
|
-
python_version = "3.
|
|
178
|
+
python_version = "3.11"
|
|
167
179
|
mypy_path = "src"
|
|
168
180
|
explicit_package_bases = true
|
|
169
181
|
exclude = "(?x)(^src/velocity/.*/tests/)"
|
|
@@ -1,37 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
import os
|
|
3
|
-
|
|
4
|
-
_APP_STAGE = os.environ.get("AppStage") or os.environ.get("AWS_BRANCH") or "demo"
|
|
5
|
-
DEBUG = (_APP_STAGE != "production") or (os.environ.get("DEBUG") == "Y")
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
# This is helpful for running HTTPS clients on lambda.
|
|
9
|
-
if os.path.exists("/opt/python/ca-certificates.crt"):
|
|
10
|
-
os.environ["REQUESTS_CA_BUNDLE"] = "/opt/python/ca-certificates.crt"
|
|
1
|
+
"""AWS helpers for velocity: handlers, SSM config, deploy, S3 and assets.
|
|
11
2
|
|
|
3
|
+
Importing this package has no side effects: stage resolution lives in
|
|
4
|
+
``velocity.aws.ssm_config`` and the Lambda CA bundle is exported as
|
|
5
|
+
``REQUESTS_CA_BUNDLE`` when a handler is constructed (``BaseHandler.__init__``
|
|
6
|
+
via ``_update_lambda_ca_certificates``; override the path with
|
|
7
|
+
``VELOCITY_CA_BUNDLE``).
|
|
8
|
+
"""
|
|
12
9
|
|
|
13
|
-
|
|
14
|
-
# Get AWS EC2 Instance ID. Must run this from the EC2 instance itself to get the ID
|
|
15
|
-
@staticmethod
|
|
16
|
-
def instance_id(cls):
|
|
17
|
-
import requests
|
|
18
|
-
|
|
19
|
-
response = requests.get("http://169.254.169.254/latest/meta-data/instance-id")
|
|
20
|
-
instance_id = response.text
|
|
21
|
-
return instance_id
|
|
22
|
-
|
|
10
|
+
import importlib as _importlib
|
|
23
11
|
|
|
24
12
|
# Lazy-load heavy modules (boto3-dependent) on first access
|
|
25
13
|
_LAZY_ATTRS = {
|
|
26
14
|
"AmplifyProject": "velocity.aws.amplify",
|
|
27
|
-
#
|
|
28
|
-
# policy mode). New projects: import from velocity.aws.deploy directly.
|
|
29
|
-
"BackendDeploymentConfig": "velocity.aws.amplify_build",
|
|
30
|
-
"get_amplify_app_id_and_branch": "velocity.aws.amplify_build",
|
|
31
|
-
"initialize_build_environment": "velocity.aws.amplify_build",
|
|
32
|
-
"run_backend_deployment": "velocity.aws.amplify_build",
|
|
33
|
-
"update_lambda_layers_to_latest": "velocity.aws.amplify_build",
|
|
34
|
-
# Platform-neutral deployment API
|
|
15
|
+
# Platform-neutral deployment API (the full set is in velocity.aws.deploy)
|
|
35
16
|
"AmplifyTarget": "velocity.aws.deploy",
|
|
36
17
|
"DeploymentConfig": "velocity.aws.deploy",
|
|
37
18
|
"PlainTarget": "velocity.aws.deploy",
|
|
@@ -39,6 +20,7 @@ _LAZY_ATTRS = {
|
|
|
39
20
|
# S3 utilities
|
|
40
21
|
"generate_presigned_get": "velocity.aws.s3",
|
|
41
22
|
"generate_presigned_put": "velocity.aws.s3",
|
|
23
|
+
"iter_objects": "velocity.aws.s3",
|
|
42
24
|
"list_client_files": "velocity.aws.s3",
|
|
43
25
|
"normalize_client_prefix": "velocity.aws.s3",
|
|
44
26
|
"CLIENT_FILES_BUCKET": "velocity.aws.s3",
|
|
@@ -62,7 +44,6 @@ _LAZY_ATTRS = {
|
|
|
62
44
|
"extract_asset_references_from_html": "velocity.aws.assets",
|
|
63
45
|
"extract_asset_references_from_record": "velocity.aws.assets",
|
|
64
46
|
"extract_asset_references_from_value": "velocity.aws.assets",
|
|
65
|
-
"iter_s3_objects": "velocity.aws.assets",
|
|
66
47
|
"list_assets": "velocity.aws.assets",
|
|
67
48
|
"normalize_asset_record": "velocity.aws.assets",
|
|
68
49
|
"reconcile_asset_usages": "velocity.aws.assets",
|
|
@@ -80,18 +61,13 @@ def __getattr__(name: str):
|
|
|
80
61
|
__all__ = [
|
|
81
62
|
"AmplifyProject",
|
|
82
63
|
"AmplifyTarget",
|
|
83
|
-
"AWS",
|
|
84
|
-
"BackendDeploymentConfig",
|
|
85
64
|
"DeploymentConfig",
|
|
86
65
|
"PlainTarget",
|
|
87
|
-
"get_amplify_app_id_and_branch",
|
|
88
|
-
"initialize_build_environment",
|
|
89
|
-
"run_backend_deployment",
|
|
90
66
|
"run_deployment",
|
|
91
|
-
"update_lambda_layers_to_latest",
|
|
92
67
|
# S3 utilities
|
|
93
68
|
"generate_presigned_get",
|
|
94
69
|
"generate_presigned_put",
|
|
70
|
+
"iter_objects",
|
|
95
71
|
"list_client_files",
|
|
96
72
|
"normalize_client_prefix",
|
|
97
73
|
"CLIENT_FILES_BUCKET",
|
|
@@ -114,7 +90,6 @@ __all__ = [
|
|
|
114
90
|
"extract_asset_references_from_record",
|
|
115
91
|
"extract_asset_references_from_value",
|
|
116
92
|
"find_existing_asset",
|
|
117
|
-
"iter_s3_objects",
|
|
118
93
|
"list_assets",
|
|
119
94
|
"normalize_asset_record",
|
|
120
95
|
"reconcile_asset_usages",
|