velocity-python 0.1.49__tar.gz → 0.1.51__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.51}/PKG-INFO +1 -1
- {velocity_python-0.1.49 → velocity_python-0.1.51}/pyproject.toml +1 -1
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/__init__.py +1 -1
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/__init__.py +2 -1
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/amplify_build.py +17 -17
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/handlers/context.py +3 -2
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/handlers/mixins/web_handler.py +9 -4
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/ssm_config.py +33 -11
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity_python.egg-info/PKG-INFO +1 -1
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_ssm_config.py +55 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/LICENSE +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/README.md +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/setup.cfg +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/amplify.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/assets/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/assets/backfill.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/assets/indexing.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/assets/references.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/assets/service.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/assets/usage_index.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/dirty_pipeline.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/handlers/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/handlers/base_handler.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/handlers/context_factory.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/handlers/exceptions.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/handlers/lambda_handler.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/handlers/mixins/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/handlers/mixins/data_service.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/handlers/perf.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/handlers/response.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/handlers/sqs_handler.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/s3.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/tests/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/tests/test_base_handler_error_response.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/tests/test_lambda_handler_json_serialization.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/tests/test_response.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/core/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/core/async_support.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/core/column.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/core/database.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/core/decorators.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/core/engine.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/core/result.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/core/row.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/core/sequence.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/core/table.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/core/transaction.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/core/view.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/exceptions.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/migrations.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/base/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/base/initializer.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/base/operators.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/base/sql.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/base/types.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/mysql/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/mysql/operators.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/mysql/reserved.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/mysql/sql.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/mysql/types.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/postgres/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/postgres/operators.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/postgres/reserved.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/postgres/sql.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/postgres/types.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/sqlite/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/sqlite/operators.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/sqlite/reserved.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/sqlite/sql.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/sqlite/types.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/sqlserver/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/sqlserver/operators.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/sqlserver/reserved.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/sqlserver/sql.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/sqlserver/types.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/tablehelper.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/common_db_test.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/common.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_column.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_connections.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_database.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_engine.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_general_usage.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_imports.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_result.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_row.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_row_comprehensive.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_schema_locking.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_schema_locking_unit.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_sequence.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_sql_comprehensive.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_table.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_table_comprehensive.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_transaction.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/sql/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/sql/common.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/sql/test_postgres_select_advanced.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/sql/test_postgres_select_variances.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/test_cursor_rowcount_fix.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/test_db_utils.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/test_postgres.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/test_postgres_unchanged.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/test_process_error_robustness.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/test_result_caching.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/test_result_sql_aware.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/test_row_get_missing_column.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/test_schema_locking_initializers.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/test_schema_locking_simple.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/test_sql_builder.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/test_tablehelper.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/test_view_helper.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/utils.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/logging.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/misc/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/misc/conv/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/misc/conv/iconv.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/misc/conv/oconv.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/misc/db.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/misc/export.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/misc/format.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/misc/mail.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/misc/merge.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/misc/pdf.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/misc/tests/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/misc/tests/test_db.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/misc/tests/test_fix.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/misc/tests/test_format.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/misc/tests/test_iconv.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/misc/tests/test_merge.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/misc/tests/test_oconv.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/misc/tests/test_original_error.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/misc/tests/test_timer.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/misc/timer.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/misc/tools.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/payment/__init__.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/payment/authorizenet_adapter.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/payment/authorizenet_mirror.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/payment/base_adapter.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/payment/braintree_adapter.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/payment/braintree_mirror.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/payment/charge_rules.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/payment/stripe_adapter.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/payment/stripe_mirror.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity_python.egg-info/SOURCES.txt +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity_python.egg-info/dependency_links.txt +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity_python.egg-info/entry_points.txt +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity_python.egg-info/requires.txt +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity_python.egg-info/top_level.txt +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_amplify_build.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_asset_indexing.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_asset_references.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_assets_service.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_async_support.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_batch_operations.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_concurrency_safety.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_connection_pool.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_connection_resilience.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_context_job_descriptions.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_decorators.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_dirty_pipeline_fast_path.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_email_processing.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_iconv_money_to_cents.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_lambda_handler.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_lambda_handler_auth.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_mixins_import.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_n_plus_one.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_observability.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_payment_authorizenet_adapter.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_payment_braintree_adapter.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_payment_braintree_mirror.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_payment_profile_sorting.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_payment_stripe_adapter.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_pdf.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_prepared_statements.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_psycopg3_upgrade.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_query_cache.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_row_batch_update.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_row_cache_staleness.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_row_dirty_tracking.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_schema_migrations.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_security_hardening.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_server_cursor.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_spreadsheet_functions.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_sqs_per_record_transactions.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_sys_modified_count_postgres_demo.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_table_alter.py +0 -0
- {velocity_python-0.1.49 → velocity_python-0.1.51}/tests/test_where_clause_validation.py +0 -0
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import importlib as _importlib
|
|
2
2
|
import os
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
_APP_STAGE = os.environ.get("AppStage") or os.environ.get("AWS_BRANCH") or "demo"
|
|
5
|
+
DEBUG = (_APP_STAGE != "production") or (os.environ.get("DEBUG") == "Y")
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
# This is helpful for running HTTPS clients on lambda.
|
|
@@ -176,6 +176,7 @@ def initialize_build_environment(
|
|
|
176
176
|
app_id, branch = get_amplify_app_id_and_branch(project_root)
|
|
177
177
|
print(f"[INFO] Setting environment to: {branch}")
|
|
178
178
|
env.set(branch)
|
|
179
|
+
os.environ["AppStage"] = branch
|
|
179
180
|
os.environ["AWS_BRANCH"] = branch
|
|
180
181
|
os.environ["AWS_APP_ID"] = app_id
|
|
181
182
|
if include_run_on_build_env:
|
|
@@ -203,8 +204,8 @@ def build_environment_variables(
|
|
|
203
204
|
|
|
204
205
|
build_datetime = _format_build_datetime(timezone_name)
|
|
205
206
|
env_vars["BUILD_DATETIME"] = build_datetime
|
|
206
|
-
env_vars["
|
|
207
|
-
env_vars["
|
|
207
|
+
env_vars["AppStage"] = branch
|
|
208
|
+
env_vars["AWS_BRANCH"] = branch
|
|
208
209
|
env_vars["USER_REGION"] = app.get_region()
|
|
209
210
|
env_vars["LOGLEVEL"] = "WARNING" if branch == "production" else "INFO"
|
|
210
211
|
|
|
@@ -338,32 +339,31 @@ def ensure_lambda_policies_and_attach(
|
|
|
338
339
|
iam_client = boto3.client("iam")
|
|
339
340
|
|
|
340
341
|
account_id = app.get_account_id()
|
|
341
|
-
lambda_layer_policy = {
|
|
342
|
-
"Version": "2012-10-17",
|
|
343
|
-
"Statement": [
|
|
344
|
-
{
|
|
345
|
-
"Effect": "Allow",
|
|
346
|
-
"Action": ["lambda:GetFunctionConfiguration"],
|
|
347
|
-
"Resource": f"arn:aws:lambda:*:{account_id}:function:*",
|
|
348
|
-
}
|
|
349
|
-
],
|
|
350
|
-
}
|
|
351
342
|
|
|
352
343
|
lambda_vpc_policy = app.get_lambda_vpc_policy_template()
|
|
353
344
|
if config is not None:
|
|
354
345
|
lambda_vpc_policy = config.build_lambda_policy_document(lambda_vpc_policy)
|
|
355
346
|
|
|
347
|
+
lambda_layer_statement = {
|
|
348
|
+
"Effect": "Allow",
|
|
349
|
+
"Action": ["lambda:GetFunctionConfiguration"],
|
|
350
|
+
"Resource": f"arn:aws:lambda:*:{account_id}:function:*",
|
|
351
|
+
}
|
|
352
|
+
statements = list(lambda_vpc_policy.get("Statement", []))
|
|
353
|
+
if not any(
|
|
354
|
+
statement.get("Action") == ["lambda:GetFunctionConfiguration"]
|
|
355
|
+
and statement.get("Resource") == f"arn:aws:lambda:*:{account_id}:function:*"
|
|
356
|
+
for statement in statements
|
|
357
|
+
):
|
|
358
|
+
statements.append(lambda_layer_statement)
|
|
359
|
+
lambda_vpc_policy["Statement"] = statements
|
|
360
|
+
|
|
356
361
|
required_policies = [
|
|
357
362
|
(
|
|
358
363
|
"lambda-vpc-execution",
|
|
359
364
|
f"arn:aws:iam::{account_id}:policy/lambda-vpc-execution",
|
|
360
365
|
lambda_vpc_policy,
|
|
361
366
|
),
|
|
362
|
-
(
|
|
363
|
-
"lambda-layer-access",
|
|
364
|
-
f"arn:aws:iam::{account_id}:policy/lambda-layer-access",
|
|
365
|
-
lambda_layer_policy,
|
|
366
|
-
),
|
|
367
367
|
("AmazonSQSFullAccess", "arn:aws:iam::aws:policy/AmazonSQSFullAccess", None),
|
|
368
368
|
]
|
|
369
369
|
|
|
@@ -33,8 +33,9 @@ def _get_work_queue_name() -> str:
|
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
def _get_controls_vars() -> dict:
|
|
36
|
+
app_stage = config_get_stage()
|
|
36
37
|
return {
|
|
37
|
-
"
|
|
38
|
+
"AppStage": app_stage,
|
|
38
39
|
"AWS_JOB_ID": os.environ.get("AWS_JOB_ID"),
|
|
39
40
|
"LOGLEVEL": config_getenv("LOGLEVEL"),
|
|
40
41
|
"USER_REGION": config_get_region(),
|
|
@@ -449,7 +450,7 @@ class Context:
|
|
|
449
450
|
return str(config_get_stage("") or "").lower() == "production"
|
|
450
451
|
|
|
451
452
|
def get_environment(self):
|
|
452
|
-
"""Return the current
|
|
453
|
+
"""Return the current AppStage value (defaults to demo)."""
|
|
453
454
|
return config_get_stage("demo")
|
|
454
455
|
|
|
455
456
|
def get_current_lambda_layers(self):
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/handlers/mixins/web_handler.py
RENAMED
|
@@ -18,6 +18,7 @@ from datetime import date, datetime
|
|
|
18
18
|
from typing import Any, Dict, List
|
|
19
19
|
|
|
20
20
|
from velocity.aws.handlers.exceptions import AlertError
|
|
21
|
+
from velocity.aws.ssm_config import get_stage as config_get_stage
|
|
21
22
|
|
|
22
23
|
logger = logging.getLogger(__name__)
|
|
23
24
|
|
|
@@ -60,13 +61,14 @@ class WebHandler(ABC):
|
|
|
60
61
|
session_data = context.session() or {}
|
|
61
62
|
|
|
62
63
|
perf.start("track_activity_start build activity_data")
|
|
64
|
+
app_stage = config_get_stage("Unknown")
|
|
63
65
|
self.activity_data = {
|
|
64
66
|
"action": context.action(),
|
|
65
67
|
"args": json.dumps(context.args()),
|
|
66
68
|
"postdata": self._sanitize_postdata(postdata),
|
|
67
69
|
"handler_name": self.__class__.__name__,
|
|
68
70
|
"function_name": os.environ.get("AWS_LAMBDA_FUNCTION_NAME", "Unknown"),
|
|
69
|
-
"
|
|
71
|
+
"app_stage": app_stage,
|
|
70
72
|
"start_timestamp": self.start_time,
|
|
71
73
|
}
|
|
72
74
|
perf.log(
|
|
@@ -239,6 +241,7 @@ class WebHandler(ABC):
|
|
|
239
241
|
|
|
240
242
|
def log_error_to_system(self, tx, context, exception: Exception, tb_string: str):
|
|
241
243
|
"""Log error to the sys_log table"""
|
|
244
|
+
app_stage = config_get_stage("Unknown")
|
|
242
245
|
error_data = {
|
|
243
246
|
"level": "ERROR",
|
|
244
247
|
"message": str(exception),
|
|
@@ -247,7 +250,7 @@ class WebHandler(ABC):
|
|
|
247
250
|
"exception_type": exception.__class__.__name__,
|
|
248
251
|
"handler_name": self.__class__.__name__,
|
|
249
252
|
"action": context.action(),
|
|
250
|
-
"
|
|
253
|
+
"app_stage": app_stage,
|
|
251
254
|
"function_name": os.environ.get("AWS_LAMBDA_FUNCTION_NAME", "Unknown"),
|
|
252
255
|
"app_name": os.environ.get("ProjectName", "Unknown"),
|
|
253
256
|
"user_agent": "AWS Lambda",
|
|
@@ -271,7 +274,7 @@ class WebHandler(ABC):
|
|
|
271
274
|
logger.debug("No sendmail callable configured; skipping notification.")
|
|
272
275
|
return
|
|
273
276
|
|
|
274
|
-
environment =
|
|
277
|
+
environment = config_get_stage("Unknown").title()
|
|
275
278
|
function_name = os.environ.get("AWS_LAMBDA_FUNCTION_NAME", "Unknown")
|
|
276
279
|
|
|
277
280
|
subject = f"{environment} Lambda Error - {function_name}"
|
|
@@ -414,12 +417,14 @@ Request Details:
|
|
|
414
417
|
def log_error_metrics(self, tx, context, exception: Exception):
|
|
415
418
|
"""Log error metrics for monitoring"""
|
|
416
419
|
try:
|
|
420
|
+
app_stage = config_get_stage("Unknown")
|
|
417
421
|
metrics_data = {
|
|
418
422
|
"metric_type": "error_count",
|
|
419
423
|
"handler_name": self.__class__.__name__,
|
|
420
424
|
"action": context.action(),
|
|
421
425
|
"exception_type": exception.__class__.__name__,
|
|
422
|
-
"environment":
|
|
426
|
+
"environment": app_stage,
|
|
427
|
+
"app_stage": app_stage,
|
|
423
428
|
"function_name": os.environ.get("AWS_LAMBDA_FUNCTION_NAME", "Unknown"),
|
|
424
429
|
"timestamp": time.time(),
|
|
425
430
|
"sys_modified_by": "Lambda",
|
|
@@ -3,17 +3,21 @@ SSM-backed configuration with environment-variable fallback.
|
|
|
3
3
|
|
|
4
4
|
``getenv(key)`` reads from SSM at::
|
|
5
5
|
|
|
6
|
-
/{ProjectName}/{
|
|
6
|
+
/{ProjectName}/{AppStage}/{key}
|
|
7
|
+
|
|
8
|
+
and, on a project-scoped miss, then tries::
|
|
9
|
+
|
|
10
|
+
/Global/{stage}/{key}
|
|
7
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
|
-
when they can resolve both project and
|
|
14
|
+
when they can resolve both project and AppStage from the runtime environment.
|
|
11
15
|
|
|
12
16
|
On an SSM miss or any other SSM error, ``getenv`` falls back to ``os.environ``.
|
|
13
17
|
Results are cached for the process lifetime so SSM is called at most once per
|
|
14
18
|
key per Lambda cold start.
|
|
15
19
|
|
|
16
|
-
Outside Lambda, or when project/
|
|
20
|
+
Outside Lambda, or when project/AppStage cannot be resolved, ``getenv`` remains a
|
|
17
21
|
thin wrapper around ``os.environ.get`` with no SSM call.
|
|
18
22
|
"""
|
|
19
23
|
|
|
@@ -81,7 +85,7 @@ def _infer_project_name_from_lambda_name() -> str | None:
|
|
|
81
85
|
if function_name is None:
|
|
82
86
|
return None
|
|
83
87
|
|
|
84
|
-
stage = _first_nonempty_env('AppStage', '
|
|
88
|
+
stage = _first_nonempty_env('AppStage', 'AWS_BRANCH')
|
|
85
89
|
base_name = function_name
|
|
86
90
|
if stage:
|
|
87
91
|
suffix = f'-{stage}'
|
|
@@ -102,7 +106,7 @@ def get_project_name(default: Optional[str] = None) -> Optional[str]:
|
|
|
102
106
|
|
|
103
107
|
|
|
104
108
|
def get_stage(default: Optional[str] = None) -> Optional[str]:
|
|
105
|
-
return _first_nonempty_env('AppStage', '
|
|
109
|
+
return _first_nonempty_env('AppStage', 'AWS_BRANCH') or default
|
|
106
110
|
|
|
107
111
|
|
|
108
112
|
def get_region(default: Optional[str] = 'us-east-1') -> Optional[str]:
|
|
@@ -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
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/handlers/context_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/handlers/lambda_handler.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/handlers/mixins/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/aws/handlers/mixins/data_service.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.51}/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.51}/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.51}/src/velocity/db/servers/postgres/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/postgres/operators.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/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.51}/src/velocity/db/servers/sqlite/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/sqlite/operators.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/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.51}/src/velocity/db/servers/sqlserver/__init__.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/sqlserver/operators.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/servers/sqlserver/reserved.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/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.51}/src/velocity/db/tests/postgres/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_column.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_connections.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_database.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_engine.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_imports.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_result.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/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.51}/src/velocity/db/tests/postgres/test_sequence.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/postgres/test_table.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/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.51}/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.51}/src/velocity/db/tests/test_postgres_unchanged.py
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity/db/tests/test_result_caching.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/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.51}/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.51}/src/velocity/payment/authorizenet_adapter.py
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/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.51}/src/velocity_python.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/src/velocity_python.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
{velocity_python-0.1.49 → velocity_python-0.1.51}/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.51}/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.51}/tests/test_sys_modified_count_postgres_demo.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|