pyplaykit 1.30.1__tar.gz → 1.30.2__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.
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/CHANGELOG.md +8 -0
- {pyplaykit-1.30.1/pyplaykit.egg-info → pyplaykit-1.30.2}/PKG-INFO +1 -1
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/pyplaykit/cli.py +81 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2/pyplaykit.egg-info}/PKG-INFO +1 -1
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/pyplaykit.egg-info/SOURCES.txt +0 -3
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/pyproject.toml +1 -1
- pyplaykit-1.30.1/pyplaykit/config/projects/customs_modernization.yaml +0 -78
- pyplaykit-1.30.1/pyplaykit/config/projects/dispatcho.yaml +0 -71
- pyplaykit-1.30.1/pyplaykit/config/projects/timelyquote.yaml +0 -66
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/.github/copilot-instructions.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/.github/prompts/review-execution-plan-and-implement-next-task.prompt.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/.github/prompts/run-unit-tests-and-coverage.prompt.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/.github/prompts/security-audit-and-consolidated-report.prompt.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/CHOOSE_YOUR_STRUCTURE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/CLAUDE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/COLUMN_MAPPING_AND_IGNORE_FIELDS_GUIDE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/COMMANDS_FOR_YOUR_PROJECTS.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/COMMIT_SUMMARY.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/CONTRIBUTING.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/CORRECTED_PROJECT_NAMES.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/DATABASE_IMPLEMENTATION_SUMMARY.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/DELIVERABLES_SUMMARY.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/ENTERPRISE_TEST_STRUCTURE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/FINAL_PROJECT_SETUP.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/GAP_TRACKER.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/HOW_TO_ACCESS_DOCS.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/INIT_COMMAND_EXAMPLES.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/KEY_BASED_MATCHING_SOLUTION.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/MANIFEST.in +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/MIGRATION_COMPLETE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/MIGRATION_PLAN.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/PIP_INSTALL_GUIDE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/PYPLAYKIT_CLIENT_OVERVIEW.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/QUICK_DB_REFERENCE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/QUICK_REFERENCE_COMPARISON_FEATURES.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/QUICK_START_QE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/README.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/STRUCTURE_COMPARISON.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/TEST_LOCATION_CHEATSHEET.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/VISUAL_COMPARISON.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/WINDOWS_INSTALL_GUIDE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/YOUR_PROJECTS_IMPLEMENTATION_GUIDE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/YOUR_SETUP_SUMMARY.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/bin/README.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/components/__init__.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/components/base_component.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/components/data_table.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/components/form_field.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/components/modal.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/config/config.yaml +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/config/data_comparison_profiles.yaml +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/config/environments.yaml +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/config/projects/customs_modernization.yaml +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/config/projects/dispatcho.yaml +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/config/projects/timelyquote.yaml +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/core/__init__.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/core/base_page.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/core/base_test.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/core/browser_factory.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/core/playwright_manager.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/core/quality_gate.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/demo/README.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/demo/functional/database/file_comparison/README.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/demo/functional/database/postgres_src_tgt/README.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/dist_pkg/__init__.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/dist_pkg/distribution.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/API_TESTING_GUIDE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/ARCHITECTURE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/CI_INTEGRATION.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/CLI_REFERENCE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/COMPETITIVE_ANALYSIS.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/COVERAGE_IMPROVEMENTS.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/CUSTOMER_SCENARIOS.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/DATABASE_SUPPORT.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/DATA_VALIDATION_GUIDE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/DELIVERABLES_INDEX.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/EXAMPLE_TESTS_SUMMARY.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/Enterprise-Framework-Assessment-REVISED.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/Enterprise-Readiness-Assessment.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/Example-Tests-Guide.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/Execution-Plan-Backlog-and-Closure-Tracker.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/FRAMEWORK_CONTRIBUTION_GUIDE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/KT/01_ARCHITECTURE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/KT/02_DEPLOYMENT_RUNBOOK.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/KT/03_ACCESS_MATRIX.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/KT/04_CLIENT_CONTACT_MATRIX.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/KT/05_OPEN_RISKS_REGISTER.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/KT/06_PENDING_ENHANCEMENTS.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/KT/07_PRODUCT_ROADMAP.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/KT/08_ENVIRONMENT_DETAILS.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/KT/09_OPERATIONAL_SOPS.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/KT/10_ESCALATION_MATRIX.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/KT/11_KT_RECORDINGS_INDEX.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/KT/12_REVERSE_KT_SIGNOFF.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/KT/13_LEADERSHIP_SIGNOFF.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/KT/README.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/MCP_SERVER_DESIGN.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/MULTI_DB_VALIDATION_GUIDE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/MULTI_PROJECT_STRUCTURE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/OBSERVABILITY.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/PIP_INSTALL_GUIDE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/PLUGIN_AUTHORING_GUIDE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/PyPlayKit-Framework-Overview.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/PyPlayKit-Usage-Scenarios.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/QE_VISUAL_GUIDE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/RESILIENCE_GUIDE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/RUN_TESTS_QUICK_REFERENCE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/SECRETS_AND_GOVERNANCE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/TEST_ORGANIZATION.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/docs/Usage-Scenarios-Feasibility-Analysis.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/integrations/__init__.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/integrations/adapters.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/mcp_server/__init__.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/mcp_server/_ast_utils.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/mcp_server/_config_utils.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/mcp_server/cli.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/mcp_server/server.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/mcp_server/tools/__init__.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/mcp_server/tools/package_discovery.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/mcp_server/tools/project_introspection.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/mcp_server/tools/project_state.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/orchestration/__init__.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/orchestration/enforcer.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/orchestration/planner.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/pages/__init__.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/pages/dashboard_page.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/pages/login_page.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/pages/orangehrm_login_page.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/pages/saucedemo_inventory_page.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/pages/saucedemo_login_page.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/plugins/__init__.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/plugins/api_plugin.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/plugins/base.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/plugins/data_plugin.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/plugins/manifest.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/plugins/registry.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/plugins/security_plugin.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/pyplaykit/PIP_INSTALL_GUIDE.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/pyplaykit/README.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/pyplaykit/__init__.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/pyplaykit/config/__init__.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/pyplaykit/config/config.yaml +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/pyplaykit/config/environments.yaml +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/pyplaykit/plugin.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/pyplaykit/show_docs.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/pyplaykit.egg-info/dependency_links.txt +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/pyplaykit.egg-info/entry_points.txt +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/pyplaykit.egg-info/requires.txt +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/pyplaykit.egg-info/top_level.txt +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/resilience/__init__.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/resilience/locator_recovery.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/setup.cfg +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/test_data/api/ecom/auth_payloads.json +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/test_data/api/ecom/product_payloads.json +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/test_data/api_test_data.json +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/test_data/data_validation_test_data.json +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/test_data/login_test_data.json +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/test_data/orangehrm_login_data.json +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/test_data/pacts/README.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/test_data/ui_test_data.json +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/tests/projects/README.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/tests/projects/customs_modernization/README.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/tests/projects/demo/functional/README.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/tests/projects/demo/functional/api/README.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/tests/projects/demo/functional/database/README.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/tests/projects/demo/functional/ui/README.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/tests/projects/demo/integration/README.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/tests/projects/dispatcho/README.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/tests/projects/timelyquote/README.md +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/__init__.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/api_client.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/api_test_helper.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/assertion_helper.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/auth_manager.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/comparison_config_loader.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/contract/__init__.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/contract/pact_consumer.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/dashboard.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/data_comparison_report.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/data_comparison_utils.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/data_loader.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/data_source.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/data_validator.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/database_clients.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/db_client.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/db_drivers/__init__.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/db_drivers/db2.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/db_drivers/informix.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/db_drivers/mongodb.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/db_drivers/mysql.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/db_drivers/oracle.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/db_drivers/snowflake.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/db_drivers/sqlite.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/db_drivers/sqlserver.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/db_factory.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/db_fixtures.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/db_pool.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/db_validation_helper.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/environment_validator.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/file_reader.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/governance.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/graphql_client.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/logger.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/observability.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/observability_report.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/org_governance.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/project_config.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/response_validator.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/screenshot_helper.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/secrets/__init__.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/secrets/aws_provider.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/secrets/azure_provider.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/secrets/base.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/secrets/env_provider.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/secrets/vault_provider.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/soap_client.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/tdm.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/telemetry.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/transformation_validator.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/ui_db_validator.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/version_checker.py +0 -0
- {pyplaykit-1.30.1 → pyplaykit-1.30.2}/utils/yaml_config_reader.py +0 -0
|
@@ -11,6 +11,14 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
11
11
|
|
|
12
12
|
---
|
|
13
13
|
|
|
14
|
+
## [1.30.2] — 2026-08-20
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- **`pyplaykit init` now scaffolds a clean, complete project surface.** Two `init` corrections make a freshly-scaffolded project self-consistent: (1) the three example project configs that used to ship in the bundled package config (`customs_modernization.yaml`, `dispatcho.yaml`, `timelyquote.yaml`) are no longer bundled, so `config/projects/` no longer contains stray sample projects unrelated to the user's own scaffold; and (2) a fully-populated **`config/projects/demo.yaml`** is now written on every `init`, so the runnable reference tests under `tests/demo/` resolve to a real `demo` project (auto-detected by path, or via `--pyplaykit-project demo`) instead of silently falling back to the flat `environments.yaml` defaults. The demo project is environment-agnostic — every environment targets the same public, zero-setup services the reference tests already use (saucedemo.com UI, JSONPlaceholder API, the bundled SQLite `test_data/demo.db`) — so it doubles as a complete worked example of the multi-project environment-resolution construct. After this change a default `pyplaykit init` yields exactly `config/projects/{demo,project1}.yaml`. Covered by two new unit tests (`test_init_creates_demo_project_config`, `test_init_omits_stray_sample_projects`).
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
14
22
|
## [1.30.1] — 2026-08-20
|
|
15
23
|
|
|
16
24
|
### Fixed
|
|
@@ -177,6 +177,80 @@ project:
|
|
|
177
177
|
retries: 2
|
|
178
178
|
'''
|
|
179
179
|
|
|
180
|
+
# Fully-populated example project config that backs the runnable reference tests
|
|
181
|
+
# under tests/demo/. It is always written by `pyplaykit init` so tests/demo/
|
|
182
|
+
# resolves to a real 'demo' project and serves as a worked multi-project example.
|
|
183
|
+
# The demo is environment-agnostic: every environment targets the same public,
|
|
184
|
+
# zero-setup services (saucedemo.com UI, JSONPlaceholder API, bundled SQLite
|
|
185
|
+
# test_data/demo.db), so the reference tests run out of the box on any env.
|
|
186
|
+
_DEMO_PROJECT_CONFIG = '''\
|
|
187
|
+
# demo Project Configuration (written by `pyplaykit init`)
|
|
188
|
+
#
|
|
189
|
+
# This is a fully-populated, working example that backs the runnable reference
|
|
190
|
+
# tests under tests/demo/. Because tests/demo/ maps to this 'demo' project,
|
|
191
|
+
# running `pytest tests/demo/` (or `--pyplaykit-project demo`) resolves these
|
|
192
|
+
# settings, deep-merged over the global config/environments.yaml defaults.
|
|
193
|
+
|
|
194
|
+
project:
|
|
195
|
+
name: "demo"
|
|
196
|
+
description: "Runnable reference project backing tests/demo/"
|
|
197
|
+
team:
|
|
198
|
+
lead: "PyPlayKit"
|
|
199
|
+
engineers: []
|
|
200
|
+
slack_channel: "#pyplaykit-demo"
|
|
201
|
+
|
|
202
|
+
markers:
|
|
203
|
+
- demo
|
|
204
|
+
|
|
205
|
+
# Every environment targets the same public demo services so the reference
|
|
206
|
+
# tests run with zero setup regardless of --pyplaykit-env.
|
|
207
|
+
environments:
|
|
208
|
+
dev:
|
|
209
|
+
base_url: "https://www.saucedemo.com"
|
|
210
|
+
api_base_url: "https://jsonplaceholder.typicode.com"
|
|
211
|
+
database_url: "sqlite:///test_data/demo.db"
|
|
212
|
+
qa:
|
|
213
|
+
base_url: "https://www.saucedemo.com"
|
|
214
|
+
api_base_url: "https://jsonplaceholder.typicode.com"
|
|
215
|
+
database_url: "sqlite:///test_data/demo.db"
|
|
216
|
+
uat:
|
|
217
|
+
base_url: "https://www.saucedemo.com"
|
|
218
|
+
api_base_url: "https://jsonplaceholder.typicode.com"
|
|
219
|
+
database_url: "sqlite:///test_data/demo.db"
|
|
220
|
+
prod:
|
|
221
|
+
base_url: "https://www.saucedemo.com"
|
|
222
|
+
api_base_url: "https://jsonplaceholder.typicode.com"
|
|
223
|
+
database_url: "sqlite:///test_data/demo.db"
|
|
224
|
+
|
|
225
|
+
# API endpoints (relative to api_base_url) exercised by test_demo_api.py.
|
|
226
|
+
api_endpoints:
|
|
227
|
+
posts: "/posts"
|
|
228
|
+
users: "/users"
|
|
229
|
+
comments: "/comments"
|
|
230
|
+
|
|
231
|
+
# Test users — SauceDemo's public standard_user. Credentials still come from
|
|
232
|
+
# environment variables; set them before running the UI demo:
|
|
233
|
+
# PYPLAYKIT_TEST_USERNAME=standard_user
|
|
234
|
+
# PYPLAYKIT_TEST_PASSWORD=secret_sauce
|
|
235
|
+
test_users:
|
|
236
|
+
standard_user:
|
|
237
|
+
username: "${PYPLAYKIT_TEST_USERNAME}"
|
|
238
|
+
password: "${PYPLAYKIT_TEST_PASSWORD}"
|
|
239
|
+
|
|
240
|
+
# Feature flags used by the reference tests.
|
|
241
|
+
features:
|
|
242
|
+
ui_demo: true
|
|
243
|
+
api_demo: true
|
|
244
|
+
database_demo: true
|
|
245
|
+
|
|
246
|
+
# Test execution settings.
|
|
247
|
+
execution:
|
|
248
|
+
browser: "chromium"
|
|
249
|
+
headless: true
|
|
250
|
+
timeout: 30000
|
|
251
|
+
retries: 1
|
|
252
|
+
'''
|
|
253
|
+
|
|
180
254
|
# Org / portfolio governance scaffold (GAP-30). Written under config/org/ so a
|
|
181
255
|
# central QE platform team can set baseline policy that business units and
|
|
182
256
|
# projects refine within bounds. Disabled-by-default: the framework only reads
|
|
@@ -2253,6 +2327,13 @@ def _init(
|
|
|
2253
2327
|
print(" Creating SINGLE-PROJECT test structure...")
|
|
2254
2328
|
_create_functional_structure(tests_root / "functional", tests_root)
|
|
2255
2329
|
|
|
2330
|
+
# Always ship a fully-populated 'demo' project config alongside the demo
|
|
2331
|
+
# tests, so tests/demo/ resolves to a real project and users get a complete,
|
|
2332
|
+
# working multi-project example (not just placeholder templates).
|
|
2333
|
+
projects_config_dir = config_dest / "projects"
|
|
2334
|
+
projects_config_dir.mkdir(parents=True, exist_ok=True)
|
|
2335
|
+
_write_if_new(projects_config_dir / "demo.yaml", _DEMO_PROJECT_CONFIG)
|
|
2336
|
+
|
|
2256
2337
|
# Create the demo/ folder — runnable reference tests mirroring the same
|
|
2257
2338
|
# functional/{ui,api,database} layout as the project test tree.
|
|
2258
2339
|
_create_demo_structure(tests_root, test_data_dir)
|
|
@@ -143,9 +143,6 @@ pyplaykit.egg-info/top_level.txt
|
|
|
143
143
|
pyplaykit/config/__init__.py
|
|
144
144
|
pyplaykit/config/config.yaml
|
|
145
145
|
pyplaykit/config/environments.yaml
|
|
146
|
-
pyplaykit/config/projects/customs_modernization.yaml
|
|
147
|
-
pyplaykit/config/projects/dispatcho.yaml
|
|
148
|
-
pyplaykit/config/projects/timelyquote.yaml
|
|
149
146
|
resilience/__init__.py
|
|
150
147
|
resilience/locator_recovery.py
|
|
151
148
|
test_data/api_test_data.json
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
# Customers Modernization Project Configuration
|
|
2
|
-
|
|
3
|
-
project:
|
|
4
|
-
name: "Customers Modernization"
|
|
5
|
-
description: "Customer management system modernization initiative"
|
|
6
|
-
team:
|
|
7
|
-
lead: "TBD"
|
|
8
|
-
engineers: []
|
|
9
|
-
slack_channel: "#customers-qa"
|
|
10
|
-
|
|
11
|
-
markers:
|
|
12
|
-
- customers_modernization
|
|
13
|
-
- customer_mgmt
|
|
14
|
-
- modernization
|
|
15
|
-
|
|
16
|
-
# Environment-specific URLs. database_url carries only the non-secret
|
|
17
|
-
# host/port/database; DB credentials come from the SRC_DB_USER / SRC_DB_PASSWORD
|
|
18
|
-
# (and TGT_*) environment variables — never store passwords here.
|
|
19
|
-
environments:
|
|
20
|
-
dev:
|
|
21
|
-
base_url: "https://dev.customers.internal.com"
|
|
22
|
-
api_base_url: "https://api.dev.customers.internal.com"
|
|
23
|
-
database_url: "postgresql://dev-db:5432/customers_dev"
|
|
24
|
-
|
|
25
|
-
qa:
|
|
26
|
-
base_url: "https://qa.customers.internal.com"
|
|
27
|
-
api_base_url: "https://api.qa.customers.internal.com"
|
|
28
|
-
database_url: "postgresql://qa-db:5432/customers_qa"
|
|
29
|
-
|
|
30
|
-
uat:
|
|
31
|
-
base_url: "https://uat.customers.internal.com"
|
|
32
|
-
api_base_url: "https://api.uat.customers.internal.com"
|
|
33
|
-
database_url: "postgresql://uat-db:5432/customers_uat"
|
|
34
|
-
|
|
35
|
-
prod:
|
|
36
|
-
base_url: "https://customers.internal.com"
|
|
37
|
-
api_base_url: "https://api.customers.internal.com"
|
|
38
|
-
database_url: "postgresql://prod-db:5432/customers_prod"
|
|
39
|
-
|
|
40
|
-
# API endpoints
|
|
41
|
-
api_endpoints:
|
|
42
|
-
customers: "/api/v1/customers"
|
|
43
|
-
accounts: "/api/v1/accounts"
|
|
44
|
-
profiles: "/api/v1/profiles"
|
|
45
|
-
preferences: "/api/v1/preferences"
|
|
46
|
-
contacts: "/api/v1/contacts"
|
|
47
|
-
|
|
48
|
-
# Test data
|
|
49
|
-
test_users:
|
|
50
|
-
standard_user:
|
|
51
|
-
username: "${CUSTOMERS_USERNAME}"
|
|
52
|
-
password: "${CUSTOMERS_PASSWORD}"
|
|
53
|
-
admin_user:
|
|
54
|
-
username: "${CUSTOMERS_ADMIN_USERNAME}"
|
|
55
|
-
password: "${CUSTOMERS_ADMIN_PASSWORD}"
|
|
56
|
-
data_analyst:
|
|
57
|
-
username: "${CUSTOMERS_ANALYST_USERNAME}"
|
|
58
|
-
password: "${CUSTOMERS_ANALYST_PASSWORD}"
|
|
59
|
-
|
|
60
|
-
# Feature flags
|
|
61
|
-
features:
|
|
62
|
-
customer_360_view: true
|
|
63
|
-
data_migration: true
|
|
64
|
-
legacy_integration: true
|
|
65
|
-
analytics_dashboard: true
|
|
66
|
-
|
|
67
|
-
# Test execution settings
|
|
68
|
-
execution:
|
|
69
|
-
browser: "chromium"
|
|
70
|
-
headless: true
|
|
71
|
-
timeout: 30000
|
|
72
|
-
retries: 2
|
|
73
|
-
|
|
74
|
-
# Migration-specific settings
|
|
75
|
-
migration:
|
|
76
|
-
legacy_system_url: "https://legacy.customers.internal.com"
|
|
77
|
-
data_validation: true
|
|
78
|
-
parallel_run: true # Run both old and new systems in parallel
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
# Dispatcho Project Configuration
|
|
2
|
-
|
|
3
|
-
project:
|
|
4
|
-
name: "Dispatcho"
|
|
5
|
-
description: "Dispatch and logistics management system"
|
|
6
|
-
team:
|
|
7
|
-
lead: "TBD"
|
|
8
|
-
engineers: []
|
|
9
|
-
slack_channel: "#dispatcho-qa"
|
|
10
|
-
|
|
11
|
-
markers:
|
|
12
|
-
- dispatcho
|
|
13
|
-
- logistics
|
|
14
|
-
- dispatch
|
|
15
|
-
|
|
16
|
-
# Environment-specific URLs. database_url carries only the non-secret
|
|
17
|
-
# host/port/database; DB credentials come from the SRC_DB_USER / SRC_DB_PASSWORD
|
|
18
|
-
# (and TGT_*) environment variables — never store passwords here.
|
|
19
|
-
environments:
|
|
20
|
-
dev:
|
|
21
|
-
base_url: "https://dev.dispatcho.com"
|
|
22
|
-
api_base_url: "https://api.dev.dispatcho.com"
|
|
23
|
-
database_url: "postgresql://dev-db:5432/dispatcho_dev"
|
|
24
|
-
|
|
25
|
-
qa:
|
|
26
|
-
base_url: "https://qa.dispatcho.com"
|
|
27
|
-
api_base_url: "https://api.qa.dispatcho.com"
|
|
28
|
-
database_url: "postgresql://qa-db:5432/dispatcho_qa"
|
|
29
|
-
|
|
30
|
-
uat:
|
|
31
|
-
base_url: "https://uat.dispatcho.com"
|
|
32
|
-
api_base_url: "https://api.uat.dispatcho.com"
|
|
33
|
-
database_url: "postgresql://uat-db:5432/dispatcho_uat"
|
|
34
|
-
|
|
35
|
-
prod:
|
|
36
|
-
base_url: "https://www.dispatcho.com"
|
|
37
|
-
api_base_url: "https://api.dispatcho.com"
|
|
38
|
-
database_url: "postgresql://prod-db:5432/dispatcho_prod"
|
|
39
|
-
|
|
40
|
-
# API endpoints
|
|
41
|
-
api_endpoints:
|
|
42
|
-
orders: "/api/v1/orders"
|
|
43
|
-
drivers: "/api/v1/drivers"
|
|
44
|
-
routes: "/api/v1/routes"
|
|
45
|
-
tracking: "/api/v1/tracking"
|
|
46
|
-
dispatches: "/api/v1/dispatches"
|
|
47
|
-
|
|
48
|
-
# Test data
|
|
49
|
-
test_users:
|
|
50
|
-
dispatcher:
|
|
51
|
-
username: "${DISPATCHO_DISPATCHER_USERNAME}"
|
|
52
|
-
password: "${DISPATCHO_DISPATCHER_PASSWORD}"
|
|
53
|
-
driver:
|
|
54
|
-
username: "${DISPATCHO_DRIVER_USERNAME}"
|
|
55
|
-
password: "${DISPATCHO_DRIVER_PASSWORD}"
|
|
56
|
-
admin_user:
|
|
57
|
-
username: "${DISPATCHO_ADMIN_USERNAME}"
|
|
58
|
-
password: "${DISPATCHO_ADMIN_PASSWORD}"
|
|
59
|
-
|
|
60
|
-
# Feature flags
|
|
61
|
-
features:
|
|
62
|
-
real_time_tracking: true
|
|
63
|
-
route_optimization: true
|
|
64
|
-
driver_mobile_app: true
|
|
65
|
-
|
|
66
|
-
# Test execution settings
|
|
67
|
-
execution:
|
|
68
|
-
browser: "chromium"
|
|
69
|
-
headless: true
|
|
70
|
-
timeout: 30000
|
|
71
|
-
retries: 2
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
# TimelyQuote Project Configuration
|
|
2
|
-
|
|
3
|
-
project:
|
|
4
|
-
name: "TimelyQuote"
|
|
5
|
-
description: "Quote management and generation system"
|
|
6
|
-
team:
|
|
7
|
-
lead: "TBD"
|
|
8
|
-
engineers: []
|
|
9
|
-
slack_channel: "#timelyquote-qa"
|
|
10
|
-
|
|
11
|
-
markers:
|
|
12
|
-
- timelyquote
|
|
13
|
-
- quotes
|
|
14
|
-
|
|
15
|
-
# Environment-specific URLs. database_url carries only the non-secret
|
|
16
|
-
# host/port/database; DB credentials come from the SRC_DB_USER / SRC_DB_PASSWORD
|
|
17
|
-
# (and TGT_*) environment variables — never store passwords here.
|
|
18
|
-
environments:
|
|
19
|
-
dev:
|
|
20
|
-
base_url: "https://dev.timelyquote.com"
|
|
21
|
-
api_base_url: "https://api.dev.timelyquote.com"
|
|
22
|
-
database_url: "postgresql://dev-db:5432/timelyquote_dev"
|
|
23
|
-
|
|
24
|
-
qa:
|
|
25
|
-
base_url: "https://qa.timelyquote.com"
|
|
26
|
-
api_base_url: "https://api.qa.timelyquote.com"
|
|
27
|
-
database_url: "postgresql://qa-db:5432/timelyquote_qa"
|
|
28
|
-
|
|
29
|
-
uat:
|
|
30
|
-
base_url: "https://uat.timelyquote.com"
|
|
31
|
-
api_base_url: "https://api.uat.timelyquote.com"
|
|
32
|
-
database_url: "postgresql://uat-db:5432/timelyquote_uat"
|
|
33
|
-
|
|
34
|
-
prod:
|
|
35
|
-
base_url: "https://www.timelyquote.com"
|
|
36
|
-
api_base_url: "https://api.timelyquote.com"
|
|
37
|
-
database_url: "postgresql://prod-db:5432/timelyquote_prod"
|
|
38
|
-
|
|
39
|
-
# API endpoints
|
|
40
|
-
api_endpoints:
|
|
41
|
-
quotes: "/api/v1/quotes"
|
|
42
|
-
customers: "/api/v1/customers"
|
|
43
|
-
products: "/api/v1/products"
|
|
44
|
-
pricing: "/api/v1/pricing"
|
|
45
|
-
|
|
46
|
-
# Test data
|
|
47
|
-
test_users:
|
|
48
|
-
standard_user:
|
|
49
|
-
username: "${TIMELYQUOTE_USERNAME}"
|
|
50
|
-
password: "${TIMELYQUOTE_PASSWORD}"
|
|
51
|
-
admin_user:
|
|
52
|
-
username: "${TIMELYQUOTE_ADMIN_USERNAME}"
|
|
53
|
-
password: "${TIMELYQUOTE_ADMIN_PASSWORD}"
|
|
54
|
-
|
|
55
|
-
# Feature flags
|
|
56
|
-
features:
|
|
57
|
-
quote_generation: true
|
|
58
|
-
pdf_export: true
|
|
59
|
-
email_notifications: true
|
|
60
|
-
|
|
61
|
-
# Test execution settings
|
|
62
|
-
execution:
|
|
63
|
-
browser: "chromium"
|
|
64
|
-
headless: true
|
|
65
|
-
timeout: 30000
|
|
66
|
-
retries: 2
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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
|