velocity-python 0.1.66__tar.gz → 0.1.67__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.66 → velocity_python-0.1.67}/PKG-INFO +1 -1
- {velocity_python-0.1.66 → velocity_python-0.1.67}/pyproject.toml +1 -1
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/__init__.py +1 -1
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/handlers/context.py +19 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity_python.egg-info/PKG-INFO +1 -1
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity_python.egg-info/SOURCES.txt +1 -0
- velocity_python-0.1.67/tests/test_get_cognito_user_provider.py +66 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/LICENSE +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/README.md +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/setup.cfg +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/__init__.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/amplify.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/amplify_build.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/assets/__init__.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/assets/backfill.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/assets/indexing.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/assets/references.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/assets/service.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/assets/usage_index.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/dirty_pipeline.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/handlers/__init__.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/handlers/base_handler.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/handlers/context_factory.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/handlers/exceptions.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/handlers/lambda_handler.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/handlers/masquerade.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/handlers/mixins/__init__.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/handlers/mixins/data_service.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/handlers/mixins/web_handler.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/handlers/perf.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/handlers/response.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/handlers/sqs_handler.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/s3.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/ssm_config.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/tests/__init__.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/tests/test_base_handler_error_response.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/tests/test_lambda_handler_json_serialization.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/tests/test_response.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/__init__.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/core/__init__.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/core/async_support.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/core/column.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/core/database.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/core/decorators.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/core/engine.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/core/jsonproxy.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/core/result.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/core/row.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/core/sequence.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/core/table.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/core/transaction.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/core/view.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/exceptions.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/migrations.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/__init__.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/base/__init__.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/base/initializer.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/base/operators.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/base/sql.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/base/types.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/mysql/__init__.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/mysql/operators.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/mysql/reserved.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/mysql/sql.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/mysql/types.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/postgres/__init__.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/postgres/operators.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/postgres/reserved.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/postgres/sql.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/postgres/types.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/sqlite/__init__.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/sqlite/operators.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/sqlite/reserved.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/sqlite/sql.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/sqlite/types.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/sqlserver/__init__.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/sqlserver/operators.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/sqlserver/reserved.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/sqlserver/sql.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/sqlserver/types.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/tablehelper.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/__init__.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/common_db_test.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/__init__.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/common.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/conftest.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_column.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_connections.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_database.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_engine.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_general_usage.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_imports.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_result.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_row.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_row_comprehensive.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_schema_locking.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_schema_locking_unit.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_sequence.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_sql_comprehensive.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_table.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_table_comprehensive.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_transaction.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/sql/__init__.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/sql/common.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/sql/test_postgres_select_advanced.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/sql/test_postgres_select_variances.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/test_cursor_rowcount_fix.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/test_db_utils.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/test_postgres.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/test_postgres_unchanged.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/test_process_error_robustness.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/test_result_caching.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/test_result_sql_aware.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/test_row_get_missing_column.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/test_schema_locking_initializers.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/test_schema_locking_simple.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/test_sql_builder.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/test_tablehelper.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/test_view_helper.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/utils.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/logging.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/misc/__init__.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/misc/conv/__init__.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/misc/conv/iconv.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/misc/conv/oconv.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/misc/db.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/misc/export.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/misc/format.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/misc/mail.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/misc/merge.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/misc/pdf.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/misc/tests/__init__.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/misc/tests/test_db.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/misc/tests/test_fix.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/misc/tests/test_format.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/misc/tests/test_iconv.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/misc/tests/test_merge.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/misc/tests/test_oconv.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/misc/tests/test_original_error.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/misc/tests/test_timer.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/misc/timer.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/misc/tools.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/payment/__init__.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/payment/authorizenet_adapter.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/payment/authorizenet_mirror.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/payment/base_adapter.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/payment/braintree_adapter.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/payment/braintree_mirror.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/payment/charge_rules.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/payment/stripe_adapter.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/payment/stripe_mirror.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity_python.egg-info/dependency_links.txt +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity_python.egg-info/entry_points.txt +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity_python.egg-info/requires.txt +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity_python.egg-info/top_level.txt +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_amplify_build.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_asset_indexing.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_asset_references.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_assets_service.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_async_support.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_batch_operations.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_concurrency_safety.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_connection_pool.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_connection_resilience.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_context_job_descriptions.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_db_credentials_ssm_cascade.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_decorators.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_dirty_pipeline_fast_path.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_email_processing.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_http_handler_rollback.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_iconv_money_to_cents.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_identifier_injection_guard.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_json_columns.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_jsonb_dict_adapter.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_lambda_handler.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_lambda_handler_auth.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_lambda_handler_masquerade.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_masquerade_grant.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_mixins_import.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_n_plus_one.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_observability.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_payment_authorizenet_adapter.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_payment_braintree_adapter.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_payment_braintree_mirror.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_payment_profile_sorting.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_payment_stripe_adapter.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_pdf.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_prepared_statements.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_psycopg3_upgrade.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_query_cache.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_restricted_direct_tables.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_retry_side_effect_guard.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_return_default_safety.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_row_batch_update.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_row_cache_staleness.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_row_dirty_tracking.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_schema_migrations.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_security_hardening.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_server_cursor.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_single_autocommit_safety.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_spreadsheet_functions.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_sqs_per_record_transactions.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_ssm_config.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_sys_modified_count_postgres_demo.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_table_alter.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_where_clause_validation.py +0 -0
- {velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_write_hook_create_flow.py +0 -0
|
@@ -24,6 +24,10 @@ engine = velocity.db.postgres.initialize()
|
|
|
24
24
|
cognito_client = boto3.client("cognito-idp")
|
|
25
25
|
logger = get_logger("velocity.aws.handlers.context")
|
|
26
26
|
|
|
27
|
+
# Cognito User Pool id shape, e.g. "us-east-1_aBcD1234". Used to distinguish a
|
|
28
|
+
# real user-pool identity from other Identity Pool providers (developer-auth).
|
|
29
|
+
_COGNITO_USER_POOL_ID_RE = re.compile(r"^[\w-]+_[0-9a-zA-Z]+$")
|
|
30
|
+
|
|
27
31
|
|
|
28
32
|
def _get_work_queue_name() -> str:
|
|
29
33
|
queue_name = str(config_getenv("SqsWorkQueue", "") or "").strip()
|
|
@@ -656,6 +660,21 @@ class Context:
|
|
|
656
660
|
if not user_pool_id or not user_sub:
|
|
657
661
|
raise AlertError("Incomplete Cognito identity provider data") from None
|
|
658
662
|
|
|
663
|
+
# Federated identities that are not Cognito User Pool logins — e.g.
|
|
664
|
+
# developer-authenticated Identity Pool identities used for admin
|
|
665
|
+
# masquerade — carry a provider name (like "login.caringcent.masquerade")
|
|
666
|
+
# that is not a user-pool id. Detect that and fail with a clear message
|
|
667
|
+
# rather than passing an invalid value to admin_get_user (which raises a
|
|
668
|
+
# cryptic "userPoolId failed to satisfy constraint" error).
|
|
669
|
+
if "cognito-idp" not in provider or not _COGNITO_USER_POOL_ID_RE.match(
|
|
670
|
+
user_pool_id
|
|
671
|
+
):
|
|
672
|
+
raise AlertError(
|
|
673
|
+
"Request identity is not a Cognito User Pool user "
|
|
674
|
+
f"(authentication provider '{provider[:120]}'); "
|
|
675
|
+
"cannot resolve a Cognito user"
|
|
676
|
+
) from None
|
|
677
|
+
|
|
659
678
|
try:
|
|
660
679
|
self.perf.start("cognito admin_get_user")
|
|
661
680
|
response = cognito_client.admin_get_user(
|
|
@@ -164,6 +164,7 @@ tests/test_db_credentials_ssm_cascade.py
|
|
|
164
164
|
tests/test_decorators.py
|
|
165
165
|
tests/test_dirty_pipeline_fast_path.py
|
|
166
166
|
tests/test_email_processing.py
|
|
167
|
+
tests/test_get_cognito_user_provider.py
|
|
167
168
|
tests/test_http_handler_rollback.py
|
|
168
169
|
tests/test_iconv_money_to_cents.py
|
|
169
170
|
tests/test_identifier_injection_guard.py
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
from unittest.mock import patch
|
|
3
|
+
|
|
4
|
+
from velocity.aws.handlers import context as handler_context
|
|
5
|
+
from velocity.aws.handlers.context import Context
|
|
6
|
+
from velocity.aws.handlers.exceptions import AlertError
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def _ctx(provider):
|
|
10
|
+
event = {
|
|
11
|
+
"requestContext": {"identity": {"cognitoAuthenticationProvider": provider}}
|
|
12
|
+
}
|
|
13
|
+
ctx = Context(
|
|
14
|
+
aws_event=event,
|
|
15
|
+
aws_context=None,
|
|
16
|
+
args={},
|
|
17
|
+
postdata={},
|
|
18
|
+
response=None,
|
|
19
|
+
session={},
|
|
20
|
+
)
|
|
21
|
+
return ctx, event
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# A real Cognito User Pool federation looks like
|
|
25
|
+
# "cognito-idp.<region>.amazonaws.com/<poolId>,...:CognitoSignIn:<sub>".
|
|
26
|
+
VALID_PROVIDER = (
|
|
27
|
+
"cognito-idp.us-east-1.amazonaws.com/us-east-1_Abc12345,"
|
|
28
|
+
"cognito-idp.us-east-1.amazonaws.com/us-east-1_Abc12345:CognitoSignIn:sub-123"
|
|
29
|
+
)
|
|
30
|
+
# A developer-authenticated Identity Pool identity (admin masquerade) carries
|
|
31
|
+
# only the developer provider name.
|
|
32
|
+
DEV_PROVIDER = "login.caringcent.masquerade"
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class TestGetCognitoUserProvider(unittest.TestCase):
|
|
36
|
+
def test_developer_provider_is_rejected_cleanly(self):
|
|
37
|
+
ctx, event = _ctx(DEV_PROVIDER)
|
|
38
|
+
with patch.object(handler_context, "cognito_client") as mock_cognito:
|
|
39
|
+
with self.assertRaises(AlertError) as cm:
|
|
40
|
+
ctx.get_cognito_user(event)
|
|
41
|
+
mock_cognito.admin_get_user.assert_not_called()
|
|
42
|
+
self.assertIn("not a Cognito User Pool user", str(cm.exception))
|
|
43
|
+
|
|
44
|
+
def test_developer_provider_optional_returns_none(self):
|
|
45
|
+
ctx, event = _ctx(DEV_PROVIDER)
|
|
46
|
+
with patch.object(handler_context, "cognito_client"):
|
|
47
|
+
self.assertIsNone(ctx.get_cognito_user_optional(event))
|
|
48
|
+
|
|
49
|
+
def test_valid_provider_passes_the_gate(self):
|
|
50
|
+
ctx, event = _ctx(VALID_PROVIDER)
|
|
51
|
+
with patch.object(handler_context, "cognito_client") as mock_cognito:
|
|
52
|
+
mock_cognito.admin_get_user.return_value = {
|
|
53
|
+
"Username": "user-1",
|
|
54
|
+
"UserAttributes": [{"Name": "email", "Value": "user@example.com"}],
|
|
55
|
+
"Enabled": True,
|
|
56
|
+
"UserStatus": "CONFIRMED",
|
|
57
|
+
}
|
|
58
|
+
user = ctx.get_cognito_user(event)
|
|
59
|
+
mock_cognito.admin_get_user.assert_called_once()
|
|
60
|
+
_, kwargs = mock_cognito.admin_get_user.call_args
|
|
61
|
+
self.assertEqual(kwargs["UserPoolId"], "us-east-1_Abc12345")
|
|
62
|
+
self.assertEqual(user["email"], "user@example.com")
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
if __name__ == "__main__":
|
|
66
|
+
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
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/handlers/context_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/handlers/lambda_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/handlers/mixins/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/aws/handlers/mixins/data_service.py
RENAMED
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/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
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/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.66 → velocity_python-0.1.67}/src/velocity/db/servers/mysql/operators.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/postgres/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/postgres/operators.py
RENAMED
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/postgres/reserved.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/sqlite/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/sqlite/operators.py
RENAMED
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/sqlite/reserved.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/sqlserver/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/sqlserver/operators.py
RENAMED
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/sqlserver/reserved.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/servers/sqlserver/types.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/conftest.py
RENAMED
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_column.py
RENAMED
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_connections.py
RENAMED
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_database.py
RENAMED
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_engine.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_imports.py
RENAMED
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_result.py
RENAMED
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/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.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_sequence.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/postgres/test_table.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/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.66 → velocity_python-0.1.67}/src/velocity/db/tests/test_cursor_rowcount_fix.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/test_postgres_unchanged.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/db/tests/test_result_caching.py
RENAMED
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/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.66 → velocity_python-0.1.67}/src/velocity/misc/tests/test_original_error.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/payment/authorizenet_adapter.py
RENAMED
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity/payment/authorizenet_mirror.py
RENAMED
|
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.66 → velocity_python-0.1.67}/src/velocity_python.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity_python.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/src/velocity_python.egg-info/top_level.txt
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
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_payment_authorizenet_adapter.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
|
{velocity_python-0.1.66 → velocity_python-0.1.67}/tests/test_sys_modified_count_postgres_demo.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|