velocity-python 0.1.49__tar.gz → 0.1.50__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.49 → velocity_python-0.1.50}/PKG-INFO +1 -1
- {velocity_python-0.1.49 → velocity_python-0.1.50}/pyproject.toml +1 -1
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/__init__.py +1 -1
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/ssm_config.py +28 -6
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity_python.egg-info/PKG-INFO +1 -1
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_ssm_config.py +55 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/LICENSE +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/README.md +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/setup.cfg +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/amplify.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/amplify_build.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/assets/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/assets/backfill.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/assets/indexing.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/assets/references.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/assets/service.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/assets/usage_index.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/dirty_pipeline.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/handlers/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/handlers/base_handler.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/handlers/context.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/handlers/context_factory.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/handlers/exceptions.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/handlers/lambda_handler.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/handlers/mixins/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/handlers/mixins/data_service.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/handlers/mixins/web_handler.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/handlers/perf.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/handlers/response.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/handlers/sqs_handler.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/s3.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/tests/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/tests/test_base_handler_error_response.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/tests/test_lambda_handler_json_serialization.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/tests/test_response.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/core/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/core/async_support.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/core/column.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/core/database.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/core/decorators.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/core/engine.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/core/result.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/core/row.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/core/sequence.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/core/table.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/core/transaction.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/core/view.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/exceptions.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/migrations.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/base/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/base/initializer.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/base/operators.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/base/sql.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/base/types.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/mysql/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/mysql/operators.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/mysql/reserved.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/mysql/sql.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/mysql/types.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/postgres/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/postgres/operators.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/postgres/reserved.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/postgres/sql.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/postgres/types.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/sqlite/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/sqlite/operators.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/sqlite/reserved.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/sqlite/sql.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/sqlite/types.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/sqlserver/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/sqlserver/operators.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/sqlserver/reserved.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/sqlserver/sql.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/sqlserver/types.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/tablehelper.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/common_db_test.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/common.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_column.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_connections.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_database.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_engine.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_general_usage.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_imports.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_result.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_row.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_row_comprehensive.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_schema_locking.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_schema_locking_unit.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_sequence.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_sql_comprehensive.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_table.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_table_comprehensive.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_transaction.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/sql/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/sql/common.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/sql/test_postgres_select_advanced.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/sql/test_postgres_select_variances.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/test_cursor_rowcount_fix.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/test_db_utils.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/test_postgres.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/test_postgres_unchanged.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/test_process_error_robustness.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/test_result_caching.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/test_result_sql_aware.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/test_row_get_missing_column.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/test_schema_locking_initializers.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/test_schema_locking_simple.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/test_sql_builder.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/test_tablehelper.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/test_view_helper.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/utils.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/logging.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/misc/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/misc/conv/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/misc/conv/iconv.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/misc/conv/oconv.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/misc/db.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/misc/export.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/misc/format.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/misc/mail.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/misc/merge.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/misc/pdf.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/misc/tests/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/misc/tests/test_db.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/misc/tests/test_fix.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/misc/tests/test_format.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/misc/tests/test_iconv.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/misc/tests/test_merge.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/misc/tests/test_oconv.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/misc/tests/test_original_error.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/misc/tests/test_timer.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/misc/timer.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/misc/tools.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/payment/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/payment/authorizenet_adapter.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/payment/authorizenet_mirror.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/payment/base_adapter.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/payment/braintree_adapter.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/payment/braintree_mirror.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/payment/charge_rules.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/payment/stripe_adapter.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/payment/stripe_mirror.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity_python.egg-info/SOURCES.txt +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity_python.egg-info/dependency_links.txt +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity_python.egg-info/entry_points.txt +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity_python.egg-info/requires.txt +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity_python.egg-info/top_level.txt +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_amplify_build.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_asset_indexing.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_asset_references.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_assets_service.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_async_support.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_batch_operations.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_concurrency_safety.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_connection_pool.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_connection_resilience.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_context_job_descriptions.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_decorators.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_dirty_pipeline_fast_path.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_email_processing.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_iconv_money_to_cents.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_lambda_handler.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_lambda_handler_auth.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_mixins_import.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_n_plus_one.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_observability.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_payment_authorizenet_adapter.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_payment_braintree_adapter.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_payment_braintree_mirror.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_payment_profile_sorting.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_payment_stripe_adapter.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_pdf.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_prepared_statements.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_psycopg3_upgrade.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_query_cache.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_row_batch_update.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_row_cache_staleness.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_row_dirty_tracking.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_schema_migrations.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_security_hardening.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_server_cursor.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_spreadsheet_functions.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_sqs_per_record_transactions.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_sys_modified_count_postgres_demo.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_table_alter.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_where_clause_validation.py +0 -0
|
@@ -5,6 +5,10 @@ SSM-backed configuration with environment-variable fallback.
|
|
|
5
5
|
|
|
6
6
|
/{ProjectName}/{stage}/{key}
|
|
7
7
|
|
|
8
|
+
and, on a project-scoped miss, then tries::
|
|
9
|
+
|
|
10
|
+
/Global/{stage}/{key}
|
|
11
|
+
|
|
8
12
|
when SSM loading is enabled. An explicit ``VELOCITY_SSM_ENABLED`` environment
|
|
9
13
|
variable still overrides the behavior, but Lambda runtimes now auto-enable SSM
|
|
10
14
|
when they can resolve both project and stage from the runtime environment.
|
|
@@ -118,19 +122,37 @@ def _ssm_prefix() -> str | None:
|
|
|
118
122
|
return None
|
|
119
123
|
|
|
120
124
|
|
|
121
|
-
def
|
|
122
|
-
"""Single SSM GetParameter call; returns value or None on any failure."""
|
|
125
|
+
def _ssm_parameter_names(key: str) -> list[str]:
|
|
123
126
|
prefix = _ssm_prefix()
|
|
124
127
|
if prefix is None:
|
|
128
|
+
return []
|
|
129
|
+
|
|
130
|
+
parameter_names = [f'{prefix}/{key}']
|
|
131
|
+
project = get_project_name()
|
|
132
|
+
stage = get_stage()
|
|
133
|
+
if project and stage and project != 'Global':
|
|
134
|
+
parameter_names.append(f'/Global/{stage}/{key}')
|
|
135
|
+
return parameter_names
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def _fetch(key: str) -> str | None:
|
|
139
|
+
"""Resolve one key from project SSM first, then Global fallback."""
|
|
140
|
+
parameter_names = _ssm_parameter_names(key)
|
|
141
|
+
if not parameter_names:
|
|
125
142
|
return None
|
|
126
|
-
|
|
143
|
+
|
|
127
144
|
try:
|
|
128
145
|
import boto3
|
|
129
146
|
ssm = boto3.client('ssm', region_name=get_region('us-east-1'))
|
|
130
|
-
|
|
131
|
-
|
|
147
|
+
for param_name in parameter_names:
|
|
148
|
+
try:
|
|
149
|
+
resp = ssm.get_parameter(Name=param_name, WithDecryption=True)
|
|
150
|
+
return resp['Parameter']['Value']
|
|
151
|
+
except Exception as exc:
|
|
152
|
+
logger.debug('SSM miss for %s: %s', param_name, exc)
|
|
153
|
+
return None
|
|
132
154
|
except Exception as exc:
|
|
133
|
-
logger.debug('SSM
|
|
155
|
+
logger.debug('SSM client failure while resolving %s: %s', key, exc)
|
|
134
156
|
return None
|
|
135
157
|
|
|
136
158
|
|
|
@@ -83,6 +83,61 @@ def test_getenv_auto_enables_ssm_in_lambda_with_inferred_project(monkeypatch):
|
|
|
83
83
|
client_factory.assert_called_once_with("ssm", region_name="us-west-2")
|
|
84
84
|
|
|
85
85
|
|
|
86
|
+
def test_getenv_falls_back_to_global_when_project_key_missing(monkeypatch):
|
|
87
|
+
ssm_config.clear_cache()
|
|
88
|
+
monkeypatch.setenv("VELOCITY_SSM_ENABLED", "true")
|
|
89
|
+
monkeypatch.setenv("ProjectName", "BackOffice")
|
|
90
|
+
monkeypatch.setenv("ENV", "demo")
|
|
91
|
+
|
|
92
|
+
class FakeSSM:
|
|
93
|
+
def __init__(self):
|
|
94
|
+
self.calls = []
|
|
95
|
+
|
|
96
|
+
def get_parameter(self, Name, WithDecryption):
|
|
97
|
+
self.calls.append((Name, WithDecryption))
|
|
98
|
+
if Name == "/BackOffice/demo/DBHost":
|
|
99
|
+
raise Exception("missing local")
|
|
100
|
+
if Name == "/Global/demo/DBHost":
|
|
101
|
+
return {"Parameter": {"Value": "global-host"}}
|
|
102
|
+
raise AssertionError(Name)
|
|
103
|
+
|
|
104
|
+
fake_ssm = FakeSSM()
|
|
105
|
+
|
|
106
|
+
with patch("boto3.client", return_value=fake_ssm):
|
|
107
|
+
assert ssm_config.getenv("DBHost") == "global-host"
|
|
108
|
+
|
|
109
|
+
assert fake_ssm.calls == [
|
|
110
|
+
("/BackOffice/demo/DBHost", True),
|
|
111
|
+
("/Global/demo/DBHost", True),
|
|
112
|
+
]
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def test_getenv_prefers_local_before_global(monkeypatch):
|
|
116
|
+
ssm_config.clear_cache()
|
|
117
|
+
monkeypatch.setenv("VELOCITY_SSM_ENABLED", "true")
|
|
118
|
+
monkeypatch.setenv("ProjectName", "BackOffice")
|
|
119
|
+
monkeypatch.setenv("ENV", "demo")
|
|
120
|
+
|
|
121
|
+
class FakeSSM:
|
|
122
|
+
def __init__(self):
|
|
123
|
+
self.calls = []
|
|
124
|
+
|
|
125
|
+
def get_parameter(self, Name, WithDecryption):
|
|
126
|
+
self.calls.append((Name, WithDecryption))
|
|
127
|
+
if Name == "/BackOffice/demo/DBHost":
|
|
128
|
+
return {"Parameter": {"Value": "local-host"}}
|
|
129
|
+
raise AssertionError(Name)
|
|
130
|
+
|
|
131
|
+
fake_ssm = FakeSSM()
|
|
132
|
+
|
|
133
|
+
with patch("boto3.client", return_value=fake_ssm):
|
|
134
|
+
assert ssm_config.getenv("DBHost") == "local-host"
|
|
135
|
+
|
|
136
|
+
assert fake_ssm.calls == [
|
|
137
|
+
("/BackOffice/demo/DBHost", True),
|
|
138
|
+
]
|
|
139
|
+
|
|
140
|
+
|
|
86
141
|
def test_getenv_raises_on_missing_when_disabled(monkeypatch):
|
|
87
142
|
ssm_config.clear_cache()
|
|
88
143
|
monkeypatch.delenv("VELOCITY_SSM_ENABLED", raising=False)
|
|
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.49 → velocity_python-0.1.50}/src/velocity/aws/handlers/context_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/handlers/lambda_handler.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/handlers/mixins/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/aws/handlers/mixins/data_service.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/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
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/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.49 → velocity_python-0.1.50}/src/velocity/db/servers/mysql/operators.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/postgres/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/postgres/operators.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/postgres/reserved.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/sqlite/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/sqlite/operators.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/sqlite/reserved.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/sqlserver/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/sqlserver/operators.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/sqlserver/reserved.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/servers/sqlserver/types.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_column.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_connections.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_database.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_engine.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_imports.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_result.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/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.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_sequence.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/postgres/test_table.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/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.49 → velocity_python-0.1.50}/src/velocity/db/tests/test_cursor_rowcount_fix.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/test_postgres_unchanged.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity/db/tests/test_result_caching.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/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.49 → velocity_python-0.1.50}/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.49 → velocity_python-0.1.50}/src/velocity/payment/authorizenet_adapter.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/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
|
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity_python.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/src/velocity_python.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/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
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/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
|
{velocity_python-0.1.49 → velocity_python-0.1.50}/tests/test_sys_modified_count_postgres_demo.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|