velocity-python 0.1.85__tar.gz → 0.1.86__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.85/src/velocity_python.egg-info → velocity_python-0.1.86}/PKG-INFO +1 -1
- {velocity_python-0.1.85 → velocity_python-0.1.86}/pyproject.toml +1 -1
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/__init__.py +1 -1
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/handlers/mixins/data_service.py +36 -1
- {velocity_python-0.1.85 → velocity_python-0.1.86/src/velocity_python.egg-info}/PKG-INFO +1 -1
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity_python.egg-info/SOURCES.txt +1 -0
- velocity_python-0.1.86/tests/test_delete_hook_fk_blocked.py +154 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/LICENSE +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/README.md +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/setup.cfg +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/amplify.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/amplify_build.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/assets/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/assets/backfill.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/assets/indexing.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/assets/references.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/assets/service.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/assets/usage_index.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/dirty_pipeline.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/handlers/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/handlers/base_handler.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/handlers/context.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/handlers/context_factory.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/handlers/exceptions.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/handlers/lambda_handler.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/handlers/masquerade.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/handlers/mixins/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/handlers/mixins/web_handler.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/handlers/perf.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/handlers/response.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/handlers/sqs_handler.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/s3.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/ssm_config.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/tests/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/tests/test_base_handler_error_response.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/tests/test_lambda_handler_json_serialization.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/tests/test_response.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/core/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/core/async_support.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/core/column.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/core/database.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/core/decorators.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/core/engine.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/core/jsonproxy.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/core/result.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/core/row.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/core/sequence.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/core/table.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/core/transaction.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/core/view.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/exceptions.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/maintenance.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/migrations.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/base/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/base/initializer.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/base/operators.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/base/sql.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/base/types.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/mysql/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/mysql/operators.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/mysql/reserved.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/mysql/sql.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/mysql/types.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/postgres/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/postgres/operators.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/postgres/reserved.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/postgres/sql.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/postgres/types.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/sqlite/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/sqlite/operators.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/sqlite/reserved.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/sqlite/sql.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/sqlite/types.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/sqlserver/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/sqlserver/operators.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/sqlserver/reserved.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/sqlserver/sql.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/sqlserver/types.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/tablehelper.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/common_db_test.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/common.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/conftest.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_column.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_connections.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_database.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_engine.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_general_usage.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_imports.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_result.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_row.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_row_comprehensive.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_schema_locking.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_schema_locking_unit.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_sequence.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_sql_comprehensive.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_table.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_table_comprehensive.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_transaction.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/sql/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/sql/common.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/sql/test_postgres_select_advanced.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/sql/test_postgres_select_variances.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/test_cursor_rowcount_fix.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/test_db_utils.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/test_postgres.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/test_postgres_unchanged.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/test_process_error_robustness.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/test_result_caching.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/test_result_sql_aware.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/test_row_get_missing_column.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/test_schema_locking_initializers.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/test_schema_locking_simple.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/test_sql_builder.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/test_tablehelper.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/test_view_helper.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/utils.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/logging.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/misc/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/misc/conv/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/misc/conv/iconv.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/misc/conv/oconv.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/misc/db.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/misc/export.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/misc/format.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/misc/mail.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/misc/merge.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/misc/pdf.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/misc/tests/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/misc/tests/test_db.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/misc/tests/test_fix.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/misc/tests/test_format.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/misc/tests/test_iconv.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/misc/tests/test_merge.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/misc/tests/test_oconv.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/misc/tests/test_original_error.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/misc/tests/test_timer.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/misc/timer.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/misc/tools.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/nosql/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/nosql/core/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/nosql/core/capabilities.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/nosql/core/store.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/nosql/core/where.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/nosql/exceptions.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/nosql/servers/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/nosql/servers/base/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/nosql/servers/cassandra/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/nosql/servers/cassandra/translation.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/nosql/servers/couchbase/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/nosql/servers/couchbase/translation.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/nosql/servers/dynamodb/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/nosql/servers/dynamodb/translation.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/nosql/servers/elasticsearch/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/nosql/servers/elasticsearch/translation.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/nosql/servers/memory/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/nosql/servers/mongodb/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/nosql/servers/mongodb/translation.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/nosql/servers/redis/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/payment/__init__.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/payment/authorizenet_adapter.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/payment/authorizenet_mirror.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/payment/base_adapter.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/payment/braintree_adapter.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/payment/braintree_mirror.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/payment/charge_rules.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/payment/stripe_adapter.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/payment/stripe_mirror.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity_python.egg-info/dependency_links.txt +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity_python.egg-info/entry_points.txt +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity_python.egg-info/requires.txt +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity_python.egg-info/top_level.txt +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_activity_tracking_aborted_tx.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_amplify_build.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_asset_indexing.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_asset_references.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_assets_service.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_async_support.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_batch_operations.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_column_tx_arg.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_concurrency_safety.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_connection_pool.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_connection_resilience.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_context_job_descriptions.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_db_credentials_ssm_cascade.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_db_maintenance.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_decorators.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_dirty_pipeline_fast_path.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_email_processing.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_enqueue_send_failures.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_get_cognito_user_provider.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_http_handler_rollback.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_iconv_money_to_cents.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_identifier_injection_guard.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_json_columns.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_jsonb_dict_adapter.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_lambda_handler.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_lambda_handler_auth.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_lambda_handler_masquerade.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_masquerade_grant.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_mixins_import.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_n_plus_one.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_nosql_dynamodb.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_nosql_memory.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_nosql_mongodb.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_nosql_redis.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_nosql_translation.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_nosql_where.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_observability.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_payment_authorizenet_adapter.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_payment_braintree_adapter.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_payment_braintree_mirror.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_payment_mirror_empty_table.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_payment_profile_sorting.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_payment_stripe_adapter.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_pdf.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_prepared_statements.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_psycopg3_upgrade.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_query_cache.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_restricted_direct_tables.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_retry_side_effect_guard.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_return_default_safety.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_row_batch_update.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_row_cache_staleness.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_schema_migrations.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_security_hardening.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_server_cursor.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_single_autocommit_safety.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_spreadsheet_functions.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_sqlite_backend.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_sqs_per_record_transactions.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_ssm_config.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_store_user_data.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_sys_modified_count_postgres_demo.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_table_alter.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_transaction_class_wrapping.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_transaction_commit_and_ownership.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_transaction_edge_cases.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_where_clause_validation.py +0 -0
- {velocity_python-0.1.85 → velocity_python-0.1.86}/tests/test_write_hook_create_flow.py +0 -0
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/handlers/mixins/data_service.py
RENAMED
|
@@ -17,10 +17,36 @@ from io import BytesIO, StringIO
|
|
|
17
17
|
|
|
18
18
|
from velocity.aws import dirty_pipeline
|
|
19
19
|
from velocity.aws.handlers.exceptions import AlertError
|
|
20
|
+
from velocity.db.exceptions import DbDataIntegrityError
|
|
20
21
|
from velocity.misc import export
|
|
21
22
|
|
|
22
23
|
logger = logging.getLogger(__name__)
|
|
23
24
|
|
|
25
|
+
# Postgres FK-violation text, e.g.:
|
|
26
|
+
# ... violates foreign key constraint "billing_formula_client_sys_id_fkey"
|
|
27
|
+
# on table "billing_formula"
|
|
28
|
+
# DETAIL: Key (sys_id)=(1364) is still referenced from table "billing_formula".
|
|
29
|
+
_REFERENCED_FROM_RE = re.compile(r'still referenced from table "([^"]+)"')
|
|
30
|
+
_FK_ON_TABLE_RE = re.compile(r'foreign key constraint "[^"]+" on table "([^"]+)"')
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _fk_blocked_delete_message(table, exc):
|
|
34
|
+
"""User-facing message for a delete blocked by a foreign key reference."""
|
|
35
|
+
text = str(exc)
|
|
36
|
+
match = _REFERENCED_FROM_RE.search(text) or _FK_ON_TABLE_RE.search(text)
|
|
37
|
+
label = table.replace("_", " ")
|
|
38
|
+
if match:
|
|
39
|
+
referencing = match.group(1).replace("_", " ")
|
|
40
|
+
return (
|
|
41
|
+
f"This {label} record can't be deleted because {referencing} "
|
|
42
|
+
f"records still reference it. Remove or reassign those related "
|
|
43
|
+
f"records first."
|
|
44
|
+
)
|
|
45
|
+
return (
|
|
46
|
+
f"This {label} record can't be deleted because related records "
|
|
47
|
+
f"still reference it."
|
|
48
|
+
)
|
|
49
|
+
|
|
24
50
|
|
|
25
51
|
class DataServiceMixin:
|
|
26
52
|
"""
|
|
@@ -463,7 +489,16 @@ class DataServiceMixin:
|
|
|
463
489
|
self._call_rwx_hook("before_delete", table, tx, table, sys_id, context)
|
|
464
490
|
row = tx.table(table).find(sys_id)
|
|
465
491
|
if row:
|
|
466
|
-
|
|
492
|
+
# A failed DELETE aborts the whole postgres transaction; the
|
|
493
|
+
# savepoint confines the abort so the outer tx (activity
|
|
494
|
+
# tracking, response writes) stays usable.
|
|
495
|
+
try:
|
|
496
|
+
with tx.savepoint():
|
|
497
|
+
row.clear()
|
|
498
|
+
except DbDataIntegrityError as exc:
|
|
499
|
+
raise AlertError(
|
|
500
|
+
_fk_blocked_delete_message(table, exc)
|
|
501
|
+
) from exc
|
|
467
502
|
self._call_rwx_hook("after_delete", "common", tx, table, sys_id, context)
|
|
468
503
|
self._call_rwx_hook("after_delete", table, tx, table, sys_id, context)
|
|
469
504
|
|
|
@@ -186,6 +186,7 @@ tests/test_context_job_descriptions.py
|
|
|
186
186
|
tests/test_db_credentials_ssm_cascade.py
|
|
187
187
|
tests/test_db_maintenance.py
|
|
188
188
|
tests/test_decorators.py
|
|
189
|
+
tests/test_delete_hook_fk_blocked.py
|
|
189
190
|
tests/test_dirty_pipeline_fast_path.py
|
|
190
191
|
tests/test_email_processing.py
|
|
191
192
|
tests/test_enqueue_send_failures.py
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"""delete_hook must convert an FK-blocked delete into a user-facing AlertError.
|
|
2
|
+
|
|
3
|
+
A DELETE that violates a foreign key (e.g. deleting a customers row still
|
|
4
|
+
referenced by billing_formula) previously escaped as an unhandled
|
|
5
|
+
DbDataIntegrityError — a 500 with a raw SQL traceback. delete_hook now
|
|
6
|
+
attempts the delete inside a savepoint (so the outer transaction survives
|
|
7
|
+
the aborted statement) and raises AlertError with a readable message naming
|
|
8
|
+
the referencing table.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import importlib.util
|
|
12
|
+
import pathlib
|
|
13
|
+
import unittest
|
|
14
|
+
|
|
15
|
+
MODULE_PATH = (
|
|
16
|
+
pathlib.Path(__file__).resolve().parents[1]
|
|
17
|
+
/ "src"
|
|
18
|
+
/ "velocity"
|
|
19
|
+
/ "aws"
|
|
20
|
+
/ "handlers"
|
|
21
|
+
/ "mixins"
|
|
22
|
+
/ "data_service.py"
|
|
23
|
+
)
|
|
24
|
+
_spec = importlib.util.spec_from_file_location("test_delete_hook_module", MODULE_PATH)
|
|
25
|
+
_mod = importlib.util.module_from_spec(_spec)
|
|
26
|
+
_spec.loader.exec_module(_mod)
|
|
27
|
+
DataServiceMixin = _mod.DataServiceMixin
|
|
28
|
+
AlertError = _mod.AlertError
|
|
29
|
+
DbDataIntegrityError = _mod.DbDataIntegrityError
|
|
30
|
+
|
|
31
|
+
FK_MESSAGE = (
|
|
32
|
+
'update or delete on table "customers" violates foreign key constraint '
|
|
33
|
+
'"billing_formula_client_sys_id_fkey" on table "billing_formula"\n'
|
|
34
|
+
"DETAIL: Key (sys_id)=(1364) is still referenced from table "
|
|
35
|
+
'"billing_formula".'
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class FakeRow:
|
|
40
|
+
def __init__(self, clear_exc=None):
|
|
41
|
+
self.clear_exc = clear_exc
|
|
42
|
+
self.cleared = False
|
|
43
|
+
|
|
44
|
+
def clear(self):
|
|
45
|
+
if self.clear_exc:
|
|
46
|
+
raise self.clear_exc
|
|
47
|
+
self.cleared = True
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class FakeTable:
|
|
51
|
+
def __init__(self, row):
|
|
52
|
+
self.row = row
|
|
53
|
+
|
|
54
|
+
def find(self, sys_id):
|
|
55
|
+
return self.row
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class FakeTx:
|
|
59
|
+
"""Mimics Transaction.savepoint(): rollback + re-raise on error."""
|
|
60
|
+
|
|
61
|
+
def __init__(self, table):
|
|
62
|
+
self._table = table
|
|
63
|
+
self.savepoints_opened = 0
|
|
64
|
+
self.savepoints_rolled_back = 0
|
|
65
|
+
self.savepoints_released = 0
|
|
66
|
+
|
|
67
|
+
def table(self, name):
|
|
68
|
+
return self._table
|
|
69
|
+
|
|
70
|
+
def savepoint(self, name=None):
|
|
71
|
+
tx = self
|
|
72
|
+
|
|
73
|
+
class _SP:
|
|
74
|
+
def __enter__(self):
|
|
75
|
+
tx.savepoints_opened += 1
|
|
76
|
+
return "sp1"
|
|
77
|
+
|
|
78
|
+
def __exit__(self, exc_type, exc, tb):
|
|
79
|
+
if exc_type:
|
|
80
|
+
tx.savepoints_rolled_back += 1
|
|
81
|
+
else:
|
|
82
|
+
tx.savepoints_released += 1
|
|
83
|
+
return False # re-raise, like the real context manager
|
|
84
|
+
|
|
85
|
+
return _SP()
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
class _Service(DataServiceMixin):
|
|
89
|
+
def __init__(self):
|
|
90
|
+
self.hooks_called = []
|
|
91
|
+
|
|
92
|
+
def _call_rwx_hook(self, hook_name, table, *args, **kwargs):
|
|
93
|
+
self.hooks_called.append((hook_name, table))
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
class DeleteHookFkBlockedTest(unittest.TestCase):
|
|
97
|
+
def test_fk_violation_becomes_alert_error(self):
|
|
98
|
+
row = FakeRow(clear_exc=DbDataIntegrityError(FK_MESSAGE))
|
|
99
|
+
tx = FakeTx(FakeTable(row))
|
|
100
|
+
service = _Service()
|
|
101
|
+
|
|
102
|
+
with self.assertRaises(AlertError) as ctx:
|
|
103
|
+
service.delete_hook(tx, "customers", 1364, object())
|
|
104
|
+
|
|
105
|
+
message = str(ctx.exception)
|
|
106
|
+
self.assertIn("billing formula", message)
|
|
107
|
+
self.assertIn("can't be deleted", message)
|
|
108
|
+
self.assertNotIn("DELETE", message) # no raw SQL leaks to the UI
|
|
109
|
+
# The savepoint was rolled back so the outer tx stays usable.
|
|
110
|
+
self.assertEqual(1, tx.savepoints_rolled_back)
|
|
111
|
+
# after_delete hooks must not run for a failed delete.
|
|
112
|
+
after_hooks = [h for h in service.hooks_called if h[0] == "after_delete"]
|
|
113
|
+
self.assertEqual([], after_hooks)
|
|
114
|
+
|
|
115
|
+
def test_successful_delete_releases_savepoint_and_runs_after_hooks(self):
|
|
116
|
+
row = FakeRow()
|
|
117
|
+
tx = FakeTx(FakeTable(row))
|
|
118
|
+
service = _Service()
|
|
119
|
+
|
|
120
|
+
service.delete_hook(tx, "customers", 1364, object())
|
|
121
|
+
|
|
122
|
+
self.assertTrue(row.cleared)
|
|
123
|
+
self.assertEqual(1, tx.savepoints_released)
|
|
124
|
+
self.assertEqual(0, tx.savepoints_rolled_back)
|
|
125
|
+
after_hooks = [h for h in service.hooks_called if h[0] == "after_delete"]
|
|
126
|
+
self.assertEqual([("after_delete", "common"), ("after_delete", "customers")], after_hooks)
|
|
127
|
+
|
|
128
|
+
def test_non_integrity_errors_propagate_unchanged(self):
|
|
129
|
+
row = FakeRow(clear_exc=RuntimeError("connection lost"))
|
|
130
|
+
tx = FakeTx(FakeTable(row))
|
|
131
|
+
service = _Service()
|
|
132
|
+
|
|
133
|
+
with self.assertRaises(RuntimeError):
|
|
134
|
+
service.delete_hook(tx, "customers", 1364, object())
|
|
135
|
+
|
|
136
|
+
def test_message_without_detail_still_names_referencing_table(self):
|
|
137
|
+
# Some drivers omit the DETAIL line; fall back to the constraint clause.
|
|
138
|
+
exc = DbDataIntegrityError(
|
|
139
|
+
'update or delete on table "customers" violates foreign key '
|
|
140
|
+
'constraint "billing_formula_client_sys_id_fkey" on table '
|
|
141
|
+
'"billing_formula"'
|
|
142
|
+
)
|
|
143
|
+
message = _mod._fk_blocked_delete_message("customers", exc)
|
|
144
|
+
self.assertIn("billing formula", message)
|
|
145
|
+
|
|
146
|
+
def test_unparseable_message_gets_generic_text(self):
|
|
147
|
+
message = _mod._fk_blocked_delete_message(
|
|
148
|
+
"customers", DbDataIntegrityError("something unexpected")
|
|
149
|
+
)
|
|
150
|
+
self.assertIn("related records", message)
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
if __name__ == "__main__":
|
|
154
|
+
unittest.main()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/handlers/context_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/handlers/lambda_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/handlers/mixins/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/aws/handlers/mixins/web_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/base/initializer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/mysql/operators.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/postgres/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/postgres/operators.py
RENAMED
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/postgres/reserved.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/sqlite/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/sqlite/operators.py
RENAMED
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/sqlite/reserved.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/sqlserver/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/sqlserver/operators.py
RENAMED
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/sqlserver/reserved.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/servers/sqlserver/types.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/conftest.py
RENAMED
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_column.py
RENAMED
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_connections.py
RENAMED
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_database.py
RENAMED
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_engine.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_imports.py
RENAMED
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_result.py
RENAMED
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_row.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_sequence.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_table.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/postgres/test_transaction.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/test_cursor_rowcount_fix.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/test_postgres_unchanged.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/test_result_caching.py
RENAMED
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/db/tests/test_result_sql_aware.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.85 → velocity_python-0.1.86}/src/velocity/misc/tests/test_original_error.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|