wexample-wex-addon-dev-javascript 7.4.3__tar.gz → 7.7.0__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 (31) hide show
  1. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/PKG-INFO +154 -3
  2. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/README.md +151 -0
  3. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/pyproject.toml +3 -3
  4. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/config_value/__init__.py +0 -0
  5. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/file/__init__.py +0 -0
  6. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/file/javascript_package_json_file.py +0 -0
  7. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/file/javascript_tsconfig_json_file.py +0 -0
  8. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/resources/.wex.yml +0 -0
  9. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/resources/package_publish.yml +0 -0
  10. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/services/__init__.py +0 -0
  11. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/services/node/__init__.py +0 -0
  12. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/services/node/docker/.wex.yml +0 -0
  13. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/services/node/docker/docker-compose.yml +0 -0
  14. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/services/node/service.yml +0 -0
  15. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/services/vite/__init__.py +0 -0
  16. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/services/vite/commands/__init__.py +0 -0
  17. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/services/vite/commands/service/__init__.py +0 -0
  18. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/services/vite/commands/service/install.py +0 -0
  19. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/services/vite/commands/service/ready.py +0 -0
  20. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/services/vite/docker/.wex.yml +0 -0
  21. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/services/vite/docker/docker-compose.yml +0 -0
  22. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/services/vite/service.yml +0 -0
  23. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/workdir/javascript_package_workdir.py +27 -18
  24. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/__init__.py +0 -0
  25. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/__pycache__/__init__.py +0 -0
  26. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/config_value/javascript_package_readme_config_value.py +0 -0
  27. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/javascript_addon_manager.py +0 -0
  28. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/py.typed +0 -0
  29. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/workdir/__init__.py +0 -0
  30. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/workdir/javascript_packages_suite_workdir.py +0 -0
  31. {wexample_wex_addon_dev_javascript-7.4.3 → wexample_wex_addon_dev_javascript-7.7.0}/src/wexample_wex_addon_dev_javascript/workdir/javascript_workdir.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: wexample-wex-addon-dev-javascript
3
- Version: 7.4.3
3
+ Version: 7.7.0
4
4
  Summary: Python dev addon for wex
5
5
  Author-Email: weeger <contact@wexample.com>
6
6
  License: MIT
@@ -11,8 +11,8 @@ Project-URL: homepage, https://github.com/wexample/python-wex-dev-python
11
11
  Requires-Python: >=3.10
12
12
  Requires-Dist: attrs>=23.1.0
13
13
  Requires-Dist: cattrs>=23.1.0
14
- Requires-Dist: wexample-filestate-javascript>=6.1.0
15
- Requires-Dist: wexample-wex-addon-app>=16.6.0
14
+ Requires-Dist: wexample-filestate-javascript>=6.3.0
15
+ Requires-Dist: wexample-wex-addon-app>=18.0.0
16
16
  Provides-Extra: dev
17
17
  Requires-Dist: pytest; extra == "dev"
18
18
  Requires-Dist: pytest-cov; extra == "dev"
@@ -20,6 +20,127 @@ Description-Content-Type: text/markdown
20
20
 
21
21
  # wex_addon_dev_javascript
22
22
 
23
+ Version: 7.7.0
24
+
25
+ Python dev addon for wex
26
+
27
+ ## Table of Contents
28
+
29
+ - [Tests](#tests)
30
+ - [Suite Integration](#suite-integration)
31
+ - [Dependencies](#dependencies)
32
+ - [Versioning](#versioning)
33
+ - [License](#license)
34
+ - [Suite Integration](#suite-integration)
35
+ - [Suite Signature](#suite-signature)
36
+ - [Introduction](#introduction)
37
+ - [Roadmap](#roadmap)
38
+ - [Status Compatibility](#status-compatibility)
39
+ - [Useful Links](#useful-links)
40
+ - [Migration Notes](#migration-notes)
41
+
42
+ ## Tests
43
+
44
+ This project uses `pytest` for testing and `pytest-cov` for code coverage analysis.
45
+
46
+ ### Installation
47
+
48
+ First, install the required testing dependencies:
49
+ ```bash
50
+ .venv/bin/python -m pip install pytest pytest-cov
51
+ ```
52
+
53
+ ### Basic Usage
54
+
55
+ Run all tests with coverage:
56
+ ```bash
57
+ .venv/bin/python -m pytest --cov --cov-report=html
58
+ ```
59
+
60
+ ### Common Commands
61
+ ```bash
62
+ # Run tests with coverage for a specific module
63
+ .venv/bin/python -m pytest --cov=your_module
64
+
65
+ # Show which lines are not covered
66
+ .venv/bin/python -m pytest --cov=your_module --cov-report=term-missing
67
+
68
+ # Generate an HTML coverage report
69
+ .venv/bin/python -m pytest --cov=your_module --cov-report=html
70
+
71
+ # Combine terminal and HTML reports
72
+ .venv/bin/python -m pytest --cov=your_module --cov-report=term-missing --cov-report=html
73
+
74
+ # Run specific test file with coverage
75
+ .venv/bin/python -m pytest tests/test_file.py --cov=your_module --cov-report=term-missing
76
+ ```
77
+
78
+ ### Viewing HTML Reports
79
+
80
+ After generating an HTML report, open `htmlcov/index.html` in your browser to view detailed line-by-line coverage information.
81
+
82
+ ### Coverage Threshold
83
+
84
+ To enforce a minimum coverage percentage:
85
+ ```bash
86
+ .venv/bin/python -m pytest --cov=your_module --cov-fail-under=80
87
+ ```
88
+
89
+ This will cause the test suite to fail if coverage drops below 80%.
90
+
91
+ ## Integration in the Suite
92
+
93
+ This package is part of the Wexample Suite — a collection of high-quality, modular tools designed to work seamlessly together across multiple languages and environments.
94
+
95
+ ### Related Packages
96
+
97
+ The suite includes packages for configuration management, file handling, prompts, and more. Each package can be used independently or as part of the integrated suite.
98
+
99
+ Visit the [Wexample Suite documentation](https://docs.wexample.com) for the complete package ecosystem.
100
+
101
+ ## Dependencies
102
+
103
+ - attrs: >=23.1.0
104
+ - cattrs: >=23.1.0
105
+ - wexample-filestate-javascript: >=6.3.0
106
+ - wexample-wex-addon-app: >=18.0.0
107
+
108
+ ## Versioning & Compatibility Policy
109
+
110
+ Wexample packages follow **Semantic Versioning** (SemVer):
111
+
112
+ - **MAJOR**: Breaking changes
113
+ - **MINOR**: New features, backward compatible
114
+ - **PATCH**: Bug fixes, backward compatible
115
+
116
+ We maintain backward compatibility within major versions and provide clear migration guides for breaking changes.
117
+
118
+ ## License
119
+
120
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
121
+
122
+ Free to use in both personal and commercial projects.
123
+
124
+ ## Integration in the Suite
125
+
126
+ This package is part of the Wexample Suite — a collection of high-quality, modular tools designed to work seamlessly together across multiple languages and environments.
127
+
128
+ ### Related Packages
129
+
130
+ The suite includes packages for configuration management, file handling, prompts, and more. Each package can be used independently or as part of the integrated suite.
131
+
132
+ Visit the [Wexample Suite documentation](https://docs.wexample.com) for the complete package ecosystem.
133
+
134
+ # About us
135
+
136
+ [Wexample](https://wexample.com) stands as a cornerstone of the digital ecosystem — a collective of seasoned engineers, researchers, and creators driven by a relentless pursuit of technological excellence. More than a media platform, it has grown into a vibrant community where innovation meets craftsmanship, and where every line of code reflects a commitment to clarity, durability, and shared intelligence.
137
+
138
+ This packages suite embodies this spirit. Trusted by professionals and enthusiasts alike, it delivers a consistent, high-quality foundation for modern development — open, elegant, and battle-tested. Its reputation is built on years of collaboration, refinement, and rigorous attention to detail, making it a natural choice for those who demand both robustness and beauty in their tools.
139
+
140
+ Wexample cultivates a culture of mastery. Each package, each contribution carries the mark of a community that values precision, ethics, and innovation — a community proud to shape the future of digital craftsmanship.
141
+
142
+ # wex_addon_dev_javascript
143
+
23
144
  Version: 7.4.3
24
145
 
25
146
  Python dev addon for wex
@@ -318,3 +439,33 @@ See the [project roadmap](https://github.com/wexample/python-wex_addon_dev_javas
318
439
  When upgrading between major versions, refer to the migration guides in the documentation.
319
440
 
320
441
  Breaking changes are clearly documented with upgrade paths and examples.
442
+
443
+ ## Known Limitations & Roadmap
444
+
445
+ Current limitations and planned features are tracked in the GitHub issues.
446
+
447
+ See the [project roadmap](https://github.com/wexample/python-wex_addon_dev_javascript/issues) for upcoming features and improvements.
448
+
449
+ ## Status & Compatibility
450
+
451
+ **Maturity**: Production-ready
452
+
453
+ **Python Support**: >=3.10
454
+
455
+ **OS Support**: Linux, macOS, Windows
456
+
457
+ **Status**: Actively maintained
458
+
459
+ ## Useful Links
460
+
461
+ - **Homepage**: https://github.com/wexample/python-wex-addon-dev-javascript
462
+ - **Documentation**: [docs.wexample.com](https://docs.wexample.com)
463
+ - **Issue Tracker**: https://github.com/wexample/python-wex-addon-dev-javascript/issues
464
+ - **Discussions**: https://github.com/wexample/python-wex-addon-dev-javascript/discussions
465
+ - **PyPI**: [pypi.org/project/wex_addon_dev_javascript](https://pypi.org/project/wex_addon_dev_javascript/)
466
+
467
+ ## Migration Notes
468
+
469
+ When upgrading between major versions, refer to the migration guides in the documentation.
470
+
471
+ Breaking changes are clearly documented with upgrade paths and examples.
@@ -1,5 +1,126 @@
1
1
  # wex_addon_dev_javascript
2
2
 
3
+ Version: 7.7.0
4
+
5
+ Python dev addon for wex
6
+
7
+ ## Table of Contents
8
+
9
+ - [Tests](#tests)
10
+ - [Suite Integration](#suite-integration)
11
+ - [Dependencies](#dependencies)
12
+ - [Versioning](#versioning)
13
+ - [License](#license)
14
+ - [Suite Integration](#suite-integration)
15
+ - [Suite Signature](#suite-signature)
16
+ - [Introduction](#introduction)
17
+ - [Roadmap](#roadmap)
18
+ - [Status Compatibility](#status-compatibility)
19
+ - [Useful Links](#useful-links)
20
+ - [Migration Notes](#migration-notes)
21
+
22
+ ## Tests
23
+
24
+ This project uses `pytest` for testing and `pytest-cov` for code coverage analysis.
25
+
26
+ ### Installation
27
+
28
+ First, install the required testing dependencies:
29
+ ```bash
30
+ .venv/bin/python -m pip install pytest pytest-cov
31
+ ```
32
+
33
+ ### Basic Usage
34
+
35
+ Run all tests with coverage:
36
+ ```bash
37
+ .venv/bin/python -m pytest --cov --cov-report=html
38
+ ```
39
+
40
+ ### Common Commands
41
+ ```bash
42
+ # Run tests with coverage for a specific module
43
+ .venv/bin/python -m pytest --cov=your_module
44
+
45
+ # Show which lines are not covered
46
+ .venv/bin/python -m pytest --cov=your_module --cov-report=term-missing
47
+
48
+ # Generate an HTML coverage report
49
+ .venv/bin/python -m pytest --cov=your_module --cov-report=html
50
+
51
+ # Combine terminal and HTML reports
52
+ .venv/bin/python -m pytest --cov=your_module --cov-report=term-missing --cov-report=html
53
+
54
+ # Run specific test file with coverage
55
+ .venv/bin/python -m pytest tests/test_file.py --cov=your_module --cov-report=term-missing
56
+ ```
57
+
58
+ ### Viewing HTML Reports
59
+
60
+ After generating an HTML report, open `htmlcov/index.html` in your browser to view detailed line-by-line coverage information.
61
+
62
+ ### Coverage Threshold
63
+
64
+ To enforce a minimum coverage percentage:
65
+ ```bash
66
+ .venv/bin/python -m pytest --cov=your_module --cov-fail-under=80
67
+ ```
68
+
69
+ This will cause the test suite to fail if coverage drops below 80%.
70
+
71
+ ## Integration in the Suite
72
+
73
+ This package is part of the Wexample Suite — a collection of high-quality, modular tools designed to work seamlessly together across multiple languages and environments.
74
+
75
+ ### Related Packages
76
+
77
+ The suite includes packages for configuration management, file handling, prompts, and more. Each package can be used independently or as part of the integrated suite.
78
+
79
+ Visit the [Wexample Suite documentation](https://docs.wexample.com) for the complete package ecosystem.
80
+
81
+ ## Dependencies
82
+
83
+ - attrs: >=23.1.0
84
+ - cattrs: >=23.1.0
85
+ - wexample-filestate-javascript: >=6.3.0
86
+ - wexample-wex-addon-app: >=18.0.0
87
+
88
+ ## Versioning & Compatibility Policy
89
+
90
+ Wexample packages follow **Semantic Versioning** (SemVer):
91
+
92
+ - **MAJOR**: Breaking changes
93
+ - **MINOR**: New features, backward compatible
94
+ - **PATCH**: Bug fixes, backward compatible
95
+
96
+ We maintain backward compatibility within major versions and provide clear migration guides for breaking changes.
97
+
98
+ ## License
99
+
100
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
101
+
102
+ Free to use in both personal and commercial projects.
103
+
104
+ ## Integration in the Suite
105
+
106
+ This package is part of the Wexample Suite — a collection of high-quality, modular tools designed to work seamlessly together across multiple languages and environments.
107
+
108
+ ### Related Packages
109
+
110
+ The suite includes packages for configuration management, file handling, prompts, and more. Each package can be used independently or as part of the integrated suite.
111
+
112
+ Visit the [Wexample Suite documentation](https://docs.wexample.com) for the complete package ecosystem.
113
+
114
+ # About us
115
+
116
+ [Wexample](https://wexample.com) stands as a cornerstone of the digital ecosystem — a collective of seasoned engineers, researchers, and creators driven by a relentless pursuit of technological excellence. More than a media platform, it has grown into a vibrant community where innovation meets craftsmanship, and where every line of code reflects a commitment to clarity, durability, and shared intelligence.
117
+
118
+ This packages suite embodies this spirit. Trusted by professionals and enthusiasts alike, it delivers a consistent, high-quality foundation for modern development — open, elegant, and battle-tested. Its reputation is built on years of collaboration, refinement, and rigorous attention to detail, making it a natural choice for those who demand both robustness and beauty in their tools.
119
+
120
+ Wexample cultivates a culture of mastery. Each package, each contribution carries the mark of a community that values precision, ethics, and innovation — a community proud to shape the future of digital craftsmanship.
121
+
122
+ # wex_addon_dev_javascript
123
+
3
124
  Version: 7.4.3
4
125
 
5
126
  Python dev addon for wex
@@ -298,3 +419,33 @@ See the [project roadmap](https://github.com/wexample/python-wex_addon_dev_javas
298
419
  When upgrading between major versions, refer to the migration guides in the documentation.
299
420
 
300
421
  Breaking changes are clearly documented with upgrade paths and examples.
422
+
423
+ ## Known Limitations & Roadmap
424
+
425
+ Current limitations and planned features are tracked in the GitHub issues.
426
+
427
+ See the [project roadmap](https://github.com/wexample/python-wex_addon_dev_javascript/issues) for upcoming features and improvements.
428
+
429
+ ## Status & Compatibility
430
+
431
+ **Maturity**: Production-ready
432
+
433
+ **Python Support**: >=3.10
434
+
435
+ **OS Support**: Linux, macOS, Windows
436
+
437
+ **Status**: Actively maintained
438
+
439
+ ## Useful Links
440
+
441
+ - **Homepage**: https://github.com/wexample/python-wex-addon-dev-javascript
442
+ - **Documentation**: [docs.wexample.com](https://docs.wexample.com)
443
+ - **Issue Tracker**: https://github.com/wexample/python-wex-addon-dev-javascript/issues
444
+ - **Discussions**: https://github.com/wexample/python-wex-addon-dev-javascript/discussions
445
+ - **PyPI**: [pypi.org/project/wex_addon_dev_javascript](https://pypi.org/project/wex_addon_dev_javascript/)
446
+
447
+ ## Migration Notes
448
+
449
+ When upgrading between major versions, refer to the migration guides in the documentation.
450
+
451
+ Breaking changes are clearly documented with upgrade paths and examples.
@@ -6,7 +6,7 @@ build-backend = "pdm.backend"
6
6
 
7
7
  [project]
8
8
  name = "wexample-wex-addon-dev-javascript"
9
- version = "7.4.3"
9
+ version = "7.7.0"
10
10
  description = "Python dev addon for wex"
11
11
  authors = [
12
12
  { name = "weeger", email = "contact@wexample.com" },
@@ -20,8 +20,8 @@ classifiers = [
20
20
  dependencies = [
21
21
  "attrs>=23.1.0",
22
22
  "cattrs>=23.1.0",
23
- "wexample-filestate-javascript>=6.1.0",
24
- "wexample-wex-addon-app>=16.6.0",
23
+ "wexample-filestate-javascript>=6.3.0",
24
+ "wexample-wex-addon-app>=18.0.0",
25
25
  ]
26
26
 
27
27
  [project.readme]
@@ -160,10 +160,13 @@ class JavascriptPackageWorkdir(JavascriptWorkdir):
160
160
  per-version URLs.
161
161
  """
162
162
  import json
163
- import time
164
163
  import urllib.error
165
164
  import urllib.request
166
165
 
166
+ from wexample_helpers.helpers.polling_callback_manager import (
167
+ PollingCallbackManager,
168
+ )
169
+
167
170
  package = self.get_project_name()
168
171
  version = self.get_setup_version()
169
172
 
@@ -173,15 +176,9 @@ class JavascriptPackageWorkdir(JavascriptWorkdir):
173
176
  token = self.get_runtime_config().search("npm.api_token").get_str_or_none()
174
177
 
175
178
  encoded = package.replace("/", "%2F")
176
- base = (registry_base or "https://registry.npmjs.org").rstrip("/")
177
- url = f"{base}/{encoded}"
178
-
179
- max_attempts = 40
180
- delay = 30.0
181
-
182
- self.log(f"Waiting for {package}@{version} to appear on registry…")
179
+ url = f"{(registry_base or 'https://registry.npmjs.org').rstrip('/')}/{encoded}"
183
180
 
184
- for attempt in range(1, max_attempts + 1):
181
+ def check_available() -> bool | None:
185
182
  try:
186
183
  req = urllib.request.Request(url)
187
184
  if token:
@@ -190,21 +187,33 @@ class JavascriptPackageWorkdir(JavascriptWorkdir):
190
187
  if resp.status == 200:
191
188
  data = json.loads(resp.read())
192
189
  if version in data.get("versions", {}):
193
- self.success(f"{package}@{version} is available.")
194
- return
190
+ return True
195
191
  except urllib.error.HTTPError as e:
196
192
  if e.code != 404:
197
193
  raise
198
194
  except Exception:
199
195
  pass
196
+ return None
200
197
 
198
+ max_attempts = 40
199
+ delay_seconds = 30
200
+
201
+ self.log(f"Waiting for {package}@{version} to appear on registry…")
202
+
203
+ def on_retry(attempt, max_a, delay, _exc, _msg) -> None:
201
204
  self.log(
202
- f"Not yet available (attempt {attempt}/{max_attempts}), "
203
- f"retrying in {int(delay)}s…"
205
+ f"Not yet available (attempt {attempt}/{max_a}), retrying in {delay}s…"
204
206
  )
205
- time.sleep(delay)
206
207
 
207
- raise RuntimeError(
208
- f"Timed out waiting for {package}@{version} on registry after "
209
- f"{max_attempts * int(delay) // 60} minutes."
210
- )
208
+ PollingCallbackManager(
209
+ callback=check_available,
210
+ max_attempts=max_attempts,
211
+ delay_seconds_callback=lambda _attempt: delay_seconds,
212
+ on_retry_callback=on_retry,
213
+ timeout_message=(
214
+ f"Timed out waiting for {package}@{version} on registry after "
215
+ f"{max_attempts * delay_seconds // 60} minutes."
216
+ ),
217
+ ).run()
218
+
219
+ self.success(f"{package}@{version} is available.")