pyplaykit 1.8.7__tar.gz → 1.8.8__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.
Files changed (154) hide show
  1. {pyplaykit-1.8.7/pyplaykit.egg-info → pyplaykit-1.8.8}/PKG-INFO +1 -1
  2. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/pyplaykit/cli.py +1 -1
  3. pyplaykit-1.8.8/pyplaykit/config/__init__.py +0 -0
  4. pyplaykit-1.8.8/pyplaykit/config/config.yaml +146 -0
  5. pyplaykit-1.8.8/pyplaykit/config/environments.yaml +82 -0
  6. {pyplaykit-1.8.7 → pyplaykit-1.8.8/pyplaykit.egg-info}/PKG-INFO +1 -1
  7. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/pyplaykit.egg-info/SOURCES.txt +3 -0
  8. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/pyproject.toml +2 -2
  9. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/.github/copilot-instructions.md +0 -0
  10. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/.github/prompts/review-execution-plan-and-implement-next-task.prompt.md +0 -0
  11. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/.github/prompts/run-unit-tests-and-coverage.prompt.md +0 -0
  12. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/.github/prompts/security-audit-and-consolidated-report.prompt.md +0 -0
  13. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/CHANGELOG.md +0 -0
  14. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/CHOOSE_YOUR_STRUCTURE.md +0 -0
  15. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/CLAUDE.md +0 -0
  16. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/COMMANDS_FOR_YOUR_PROJECTS.md +0 -0
  17. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/COMMIT_SUMMARY.md +0 -0
  18. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/CONTRIBUTING.md +0 -0
  19. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/CORRECTED_PROJECT_NAMES.md +0 -0
  20. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/DATABASE_IMPLEMENTATION_SUMMARY.md +0 -0
  21. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/FINAL_PROJECT_SETUP.md +0 -0
  22. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/GAP_TRACKER.md +0 -0
  23. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/HOW_TO_ACCESS_DOCS.md +0 -0
  24. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/MANIFEST.in +0 -0
  25. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/MIGRATION_COMPLETE.md +0 -0
  26. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/MIGRATION_PLAN.md +0 -0
  27. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/PIP_INSTALL_GUIDE.md +0 -0
  28. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/QUICK_DB_REFERENCE.md +0 -0
  29. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/QUICK_START_QE.md +0 -0
  30. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/README.md +0 -0
  31. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/STRUCTURE_COMPARISON.md +0 -0
  32. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/TEST_LOCATION_CHEATSHEET.md +0 -0
  33. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/YOUR_PROJECTS_IMPLEMENTATION_GUIDE.md +0 -0
  34. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/YOUR_SETUP_SUMMARY.md +0 -0
  35. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/bin/README.md +0 -0
  36. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/components/__init__.py +0 -0
  37. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/components/base_component.py +0 -0
  38. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/components/data_table.py +0 -0
  39. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/components/form_field.py +0 -0
  40. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/components/modal.py +0 -0
  41. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/config/config.yaml +0 -0
  42. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/config/environments.yaml +0 -0
  43. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/config/projects/customs_modernization.yaml +0 -0
  44. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/config/projects/dispatcho.yaml +0 -0
  45. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/config/projects/timelyquote.yaml +0 -0
  46. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/core/__init__.py +0 -0
  47. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/core/base_page.py +0 -0
  48. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/core/base_test.py +0 -0
  49. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/core/browser_factory.py +0 -0
  50. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/core/playwright_manager.py +0 -0
  51. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/dist_pkg/__init__.py +0 -0
  52. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/dist_pkg/distribution.py +0 -0
  53. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/docs/API_TESTING_GUIDE.md +0 -0
  54. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/docs/COVERAGE_IMPROVEMENTS.md +0 -0
  55. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/docs/DATABASE_SUPPORT.md +0 -0
  56. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/docs/DATA_VALIDATION_GUIDE.md +0 -0
  57. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/docs/EXAMPLE_TESTS_SUMMARY.md +0 -0
  58. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/docs/Enterprise-Framework-Assessment-REVISED.md +0 -0
  59. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/docs/Enterprise-Readiness-Assessment.md +0 -0
  60. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/docs/Example-Tests-Guide.md +0 -0
  61. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/docs/Execution-Plan-Backlog-and-Closure-Tracker.md +0 -0
  62. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/docs/FRAMEWORK_CONTRIBUTION_GUIDE.md +0 -0
  63. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/docs/MULTI_DB_VALIDATION_GUIDE.md +0 -0
  64. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/docs/MULTI_PROJECT_STRUCTURE.md +0 -0
  65. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/docs/PIP_INSTALL_GUIDE.md +0 -0
  66. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/docs/PyPlayKit-Framework-Overview.md +0 -0
  67. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/docs/PyPlayKit-Usage-Scenarios.md +0 -0
  68. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/docs/QE_VISUAL_GUIDE.md +0 -0
  69. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/docs/RESILIENCE_GUIDE.md +0 -0
  70. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/docs/RUN_TESTS_QUICK_REFERENCE.md +0 -0
  71. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/docs/TEST_ORGANIZATION.md +0 -0
  72. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/docs/Usage-Scenarios-Feasibility-Analysis.md +0 -0
  73. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/examples/README.md +0 -0
  74. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/integrations/__init__.py +0 -0
  75. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/integrations/adapters.py +0 -0
  76. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/orchestration/__init__.py +0 -0
  77. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/orchestration/enforcer.py +0 -0
  78. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/orchestration/planner.py +0 -0
  79. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/pages/__init__.py +0 -0
  80. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/pages/dashboard_page.py +0 -0
  81. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/pages/login_page.py +0 -0
  82. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/pages/orangehrm_login_page.py +0 -0
  83. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/pages/saucedemo_inventory_page.py +0 -0
  84. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/pages/saucedemo_login_page.py +0 -0
  85. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/plugins/__init__.py +0 -0
  86. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/plugins/api_plugin.py +0 -0
  87. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/plugins/base.py +0 -0
  88. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/plugins/data_plugin.py +0 -0
  89. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/plugins/registry.py +0 -0
  90. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/plugins/security_plugin.py +0 -0
  91. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/pyplaykit/PIP_INSTALL_GUIDE.md +0 -0
  92. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/pyplaykit/README.md +0 -0
  93. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/pyplaykit/__init__.py +0 -0
  94. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/pyplaykit/plugin.py +0 -0
  95. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/pyplaykit/show_docs.py +0 -0
  96. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/pyplaykit.egg-info/dependency_links.txt +0 -0
  97. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/pyplaykit.egg-info/entry_points.txt +0 -0
  98. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/pyplaykit.egg-info/requires.txt +0 -0
  99. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/pyplaykit.egg-info/top_level.txt +0 -0
  100. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/resilience/__init__.py +0 -0
  101. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/resilience/locator_recovery.py +0 -0
  102. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/setup.cfg +0 -0
  103. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/test_data/api/ecom/auth_payloads.json +0 -0
  104. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/test_data/api/ecom/product_payloads.json +0 -0
  105. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/test_data/api_test_data.json +0 -0
  106. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/test_data/data_validation_test_data.json +0 -0
  107. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/test_data/login_test_data.json +0 -0
  108. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/test_data/orangehrm_login_data.json +0 -0
  109. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/test_data/ui_test_data.json +0 -0
  110. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/tests/projects/README.md +0 -0
  111. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/tests/projects/customs_modernization/README.md +0 -0
  112. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/tests/projects/demo/functional/README.md +0 -0
  113. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/tests/projects/demo/functional/api/README.md +0 -0
  114. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/tests/projects/demo/functional/database/README.md +0 -0
  115. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/tests/projects/demo/functional/ui/README.md +0 -0
  116. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/tests/projects/demo/integration/README.md +0 -0
  117. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/tests/projects/dispatcho/README.md +0 -0
  118. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/tests/projects/timelyquote/README.md +0 -0
  119. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/__init__.py +0 -0
  120. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/api_client.py +0 -0
  121. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/api_test_helper.py +0 -0
  122. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/assertion_helper.py +0 -0
  123. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/auth_manager.py +0 -0
  124. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/data_comparison_report.py +0 -0
  125. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/data_comparison_utils.py +0 -0
  126. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/data_loader.py +0 -0
  127. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/data_source.py +0 -0
  128. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/data_validator.py +0 -0
  129. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/database_clients.py +0 -0
  130. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/db_client.py +0 -0
  131. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/db_drivers/__init__.py +0 -0
  132. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/db_drivers/db2.py +0 -0
  133. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/db_drivers/informix.py +0 -0
  134. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/db_drivers/mysql.py +0 -0
  135. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/db_drivers/oracle.py +0 -0
  136. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/db_drivers/snowflake.py +0 -0
  137. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/db_drivers/sqlite.py +0 -0
  138. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/db_drivers/sqlserver.py +0 -0
  139. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/db_factory.py +0 -0
  140. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/db_fixtures.py +0 -0
  141. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/db_pool.py +0 -0
  142. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/db_validation_helper.py +0 -0
  143. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/environment_validator.py +0 -0
  144. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/file_reader.py +0 -0
  145. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/graphql_client.py +0 -0
  146. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/logger.py +0 -0
  147. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/observability.py +0 -0
  148. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/response_validator.py +0 -0
  149. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/screenshot_helper.py +0 -0
  150. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/soap_client.py +0 -0
  151. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/tdm.py +0 -0
  152. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/transformation_validator.py +0 -0
  153. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/ui_db_validator.py +0 -0
  154. {pyplaykit-1.8.7 → pyplaykit-1.8.8}/utils/yaml_config_reader.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyplaykit
3
- Version: 1.8.7
3
+ Version: 1.8.8
4
4
  Summary: Enterprise Python + Playwright automation framework
5
5
  Author-email: Shan Konduru <shankonduru@gmail.com>
6
6
  License: MIT
@@ -12,7 +12,7 @@ import shutil
12
12
  import sys
13
13
  from pathlib import Path
14
14
 
15
- _BUNDLED_CONFIG = Path(__file__).parent.parent / "config"
15
+ _BUNDLED_CONFIG = Path(__file__).parent / "config"
16
16
 
17
17
  _CONFTEST_TEMPLATE = '''\
18
18
  """Project conftest — delegates all framework fixtures to the installed plugin."""
File without changes
@@ -0,0 +1,146 @@
1
+ framework:
2
+ name: "PyPlayKit - Enterprise Test Automation Framework"
3
+ tagline: "A modular, scalable, and CI/CD-ready Python + Playwright framework for enterprise automation"
4
+
5
+ execution:
6
+ environment: "qa"
7
+ browser: "chromium"
8
+ headless: true
9
+ slow_mo_ms: 0
10
+ timeout_ms: 30000
11
+ navigation_timeout_ms: 45000
12
+ retries: 1
13
+ parallel_workers: 2
14
+ screenshot_on_failure: true
15
+ video_on_failure: true
16
+ video_dir: "reports/videos"
17
+ readiness_checks_enabled: false
18
+ readiness_timeout_seconds: 5
19
+ readiness_health_endpoint: "/health"
20
+ viewport:
21
+ width: 1440
22
+ height: 900
23
+
24
+ reporting:
25
+ allure_results_dir: "reports/allure-results"
26
+ html_report_path: "reports/report.html"
27
+ observability_summary_path: "reports/observability/summary.json"
28
+ kpi_summary_path: "reports/observability/kpi_summary.json"
29
+ engineering_report_path: "reports/observability/engineering_report.json"
30
+ qa_report_path: "reports/observability/qa_functional_report.json"
31
+ leadership_report_path: "reports/observability/leadership_kpi_summary.json"
32
+
33
+ quality:
34
+ automation_coverage_target: 100
35
+
36
+ tdm:
37
+ enabled: false
38
+ synthetic_schema:
39
+ user_id: int
40
+ username: string
41
+ email: email
42
+ active: bool
43
+ masking_rules:
44
+ email:
45
+ strategy: partial
46
+ visible_prefix: 2
47
+ visible_suffix: 8
48
+ token:
49
+ strategy: full
50
+ reset_mode: none
51
+ provisioning_by_env:
52
+ qa: qa-default
53
+ uat: uat-default
54
+ prod: prod-readonly
55
+ default_provisioner: qa-default
56
+
57
+ integrations:
58
+ enabled: false
59
+ jira_export_path: "reports/integrations/jira_export.json"
60
+ test_management_export_path: "reports/integrations/test_management_export.json"
61
+ api_enabled: false
62
+ jira_api_endpoint: "/integrations/jira/results"
63
+ test_management_api_endpoint: "/integrations/test-management/results"
64
+
65
+ plugins:
66
+ enabled: false
67
+ enabled_plugins:
68
+ - api_plugin
69
+ - data_plugin
70
+ - security_plugin
71
+
72
+ orchestration:
73
+ # Master switch. When false, orchestration is parsed but never enforced.
74
+ # Pass --pyplaykit-orchestration at runtime to activate enforcement.
75
+ enabled: false
76
+ suites:
77
+ # id: unique suite identifier used in dependency references
78
+ # marker: pytest marker name(s) that identify this suite's tests.
79
+ # Defaults to the suite id when omitted. Comma-separated for multiple.
80
+ # depends_on: list of suite ids that must pass before this suite runs.
81
+ - id: smoke
82
+ marker: smoke
83
+ depends_on: []
84
+ - id: regression
85
+ marker: regression
86
+ depends_on:
87
+ - smoke
88
+ pipelines:
89
+ - name: default_pipeline
90
+ stages:
91
+ - name: baseline
92
+ suites:
93
+ - smoke
94
+ - name: full_validation
95
+ suites:
96
+ - regression
97
+
98
+ database:
99
+ # Connection pool settings used by the db_pool / db_client fixtures.
100
+ # The pool is session-scoped — one pool per pytest-xdist worker.
101
+ # Each test checks out one connection and returns it when done.
102
+ # For non-parallel runs (no -n flag) min: 1, max: 5 is sufficient.
103
+ pool_min_connections: 2
104
+ pool_max_connections: 10
105
+ # connect_timeout applies per connection checkout attempt (seconds).
106
+ connect_timeout: 10
107
+
108
+ resilience:
109
+ # Master switch. Keep false until your locators are stable; enable only when
110
+ # you experience genuine flakiness from dynamic DOMs or slow-rendering SPAs.
111
+ # Enabling this on a green suite adds overhead without benefit.
112
+ enabled: false
113
+
114
+ # How many times to re-evaluate the full selector list when all candidates fail.
115
+ # 0 = single pass (no retries). Increase to 1–2 for pages with animated loaders
116
+ # or deferred rendering. Each retry waits for Playwright's default timeout.
117
+ dom_retry_count: 0
118
+
119
+ # Global fallback selector list applied when a page does not pass its own
120
+ # fallback_selectors to wait_for_visible(). Prefer per-call overrides instead;
121
+ # global fallbacks are a last resort and can match unintended elements.
122
+ fallback_selectors: []
123
+
124
+ # Confidence penalty per fallback hop (0.0–1.0).
125
+ # Score = 1.0 - (selector_index * hop_decay) - (attempt * retry_decay)
126
+ # At the default 0.15, the 2nd fallback scores 0.85, the 3rd scores 0.70.
127
+ confidence_decay_per_hop: 0.15
128
+
129
+ # Confidence penalty per DOM retry attempt (0.0–1.0).
130
+ # At the default 0.1, a 2nd attempt costs an extra 0.10 off the score.
131
+ confidence_decay_per_retry: 0.1
132
+
133
+ # Minimum confidence score before a WARNING is logged. Tests still pass —
134
+ # this is a signal that your fallback chain is being leaned on heavily.
135
+ # Set to 0.0 to disable the warning. Recommended: 0.5
136
+ confidence_threshold: 0.5
137
+
138
+ # Write every recovery event (fallback used or retry triggered) to a JSONL
139
+ # file for post-run analysis. Keep false in CI unless actively debugging.
140
+ audit_enabled: false
141
+ audit_log_path: "reports/resilience/recovery_audit.jsonl"
142
+
143
+ logging:
144
+ level: "INFO"
145
+ file: "reports/framework.log"
146
+ format: "%(asctime)s | %(levelname)s | %(name)s | %(message)s"
@@ -0,0 +1,82 @@
1
+ environments:
2
+ dev:
3
+ base_url: "https://www.saucedemo.com"
4
+ api_base_url: ""
5
+ src_db:
6
+ db_type: "postgresql"
7
+ host: "localhost"
8
+ port: 5432
9
+ database: ""
10
+ tgt_db:
11
+ db_type: "postgresql"
12
+ host: "localhost"
13
+ port: 5432
14
+ database: ""
15
+ qa:
16
+ base_url: "https://opensource-demo.orangehrmlive.com"
17
+ api_base_url: ""
18
+ src_db:
19
+ db_type: "postgresql"
20
+ host: "localhost"
21
+ port: 5432
22
+ database: ""
23
+ tgt_db:
24
+ db_type: "postgresql"
25
+ host: "localhost"
26
+ port: 5432
27
+ database: ""
28
+ uat:
29
+ base_url: "https://www.saucedemo.com"
30
+ api_base_url: "http://192.168.1.102:8000"
31
+ # Auth block — configure per environment when the API requires authentication.
32
+ # token_url: path appended to api_base_url for the token endpoint
33
+ # token_path: JMESPath expression to extract the token from the response
34
+ # grant_type: OAuth2 grant type sent in the form body (password / client_credentials)
35
+ # credential_env_vars: maps form field names → environment variable names
36
+ # timeout_seconds: per-request timeout for the auth client (default 30)
37
+ # retries: retry count for transient auth failures (default 1)
38
+ auth:
39
+ token_url: "/api/v1/auth/token"
40
+ token_path: "access_token"
41
+ grant_type: "password"
42
+ credential_env_vars:
43
+ username: PYPLAYKIT_TEST_USERNAME
44
+ password: PYPLAYKIT_TEST_PASSWORD
45
+ timeout_seconds: 30
46
+ retries: 1
47
+ src_db:
48
+ db_type: "postgresql"
49
+ host: "192.168.1.102"
50
+ port: 5432
51
+ database: "ecom_db"
52
+ tgt_db:
53
+ db_type: "postgresql"
54
+ host: "192.168.1.102"
55
+ port: 5432
56
+ database: "ecom_db_replica"
57
+ prod:
58
+ base_url: "https://www.saucedemo.com"
59
+ api_base_url: ""
60
+ src_db:
61
+ db_type: "postgresql"
62
+ host: "localhost"
63
+ port: 5432
64
+ database: ""
65
+ tgt_db:
66
+ db_type: "postgresql"
67
+ host: "localhost"
68
+ port: 5432
69
+ database: ""
70
+ orangehrm:
71
+ base_url: "https://opensource-demo.orangehrmlive.com"
72
+ api_base_url: ""
73
+ src_db:
74
+ db_type: "postgresql"
75
+ host: "localhost"
76
+ port: 5432
77
+ database: ""
78
+ tgt_db:
79
+ db_type: "postgresql"
80
+ host: "localhost"
81
+ port: 5432
82
+ database: ""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyplaykit
3
- Version: 1.8.7
3
+ Version: 1.8.8
4
4
  Summary: Enterprise Python + Playwright automation framework
5
5
  Author-email: Shan Konduru <shankonduru@gmail.com>
6
6
  License: MIT
@@ -93,6 +93,9 @@ pyplaykit.egg-info/dependency_links.txt
93
93
  pyplaykit.egg-info/entry_points.txt
94
94
  pyplaykit.egg-info/requires.txt
95
95
  pyplaykit.egg-info/top_level.txt
96
+ pyplaykit/config/__init__.py
97
+ pyplaykit/config/config.yaml
98
+ pyplaykit/config/environments.yaml
96
99
  resilience/__init__.py
97
100
  resilience/locator_recovery.py
98
101
  test_data/api_test_data.json
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pyplaykit"
7
- version = "1.8.7"
7
+ version = "1.8.8"
8
8
  description = "Enterprise Python + Playwright automation framework"
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -139,7 +139,7 @@ Repository = "https://github.com/ShanKonduru/pyplaykit"
139
139
  include-package-data = true
140
140
 
141
141
  [tool.setuptools.package-data]
142
- pyplaykit = ["*.md"]
142
+ pyplaykit = ["*.md", "config/*.yaml"]
143
143
 
144
144
  [tool.setuptools.packages.find]
145
145
  where = ["."]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes