gameviz-hyperkit 0.1.2__tar.gz → 0.2.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.
- {gameviz_hyperkit-0.1.2/src/gameviz_hyperkit.egg-info → gameviz_hyperkit-0.2.0}/PKG-INFO +6 -4
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/README.md +5 -3
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/pyproject.toml +1 -1
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0/src/gameviz_hyperkit.egg-info}/PKG-INFO +6 -4
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/gameviz_hyperkit.egg-info/SOURCES.txt +15 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/__init__.py +189 -13
- gameviz_hyperkit-0.2.0/src/hyperkit/api_contract.py +101 -0
- gameviz_hyperkit-0.2.0/src/hyperkit/compatibility.py +89 -0
- gameviz_hyperkit-0.2.0/src/hyperkit/config.py +66 -0
- gameviz_hyperkit-0.2.0/src/hyperkit/deprecation.py +145 -0
- gameviz_hyperkit-0.2.0/src/hyperkit/environment.py +134 -0
- gameviz_hyperkit-0.2.0/src/hyperkit/errors.py +27 -0
- gameviz_hyperkit-0.2.0/src/hyperkit/lifecycle.py +92 -0
- gameviz_hyperkit-0.2.0/src/hyperkit/logging.py +270 -0
- gameviz_hyperkit-0.2.0/src/hyperkit/project_config.py +275 -0
- gameviz_hyperkit-0.2.0/src/hyperkit/runtime.py +307 -0
- gameviz_hyperkit-0.2.0/tests/test_core_api_foundation_phase70.py +107 -0
- gameviz_hyperkit-0.2.0/tests/test_logging_environment_phase72.py +179 -0
- gameviz_hyperkit-0.2.0/tests/test_phase72_completion.py +151 -0
- gameviz_hyperkit-0.2.0/tests/test_project_config_deprecation_phase72.py +282 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_public_readme_phase42.py +16 -4
- gameviz_hyperkit-0.2.0/tests/test_runtime_context_phase71.py +221 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_stable_release_readiness_phase68.py +2 -2
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/LICENSE +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/setup.cfg +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/gameviz_hyperkit.egg-info/dependency_links.txt +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/gameviz_hyperkit.egg-info/entry_points.txt +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/gameviz_hyperkit.egg-info/requires.txt +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/gameviz_hyperkit.egg-info/top_level.txt +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/android.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/animation.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/app.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/assets.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/audio.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/audit.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/bounds.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/camera.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/camera_follow.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/cli.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/collision.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/generated_project_validation.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/geometry.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/health.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/input.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/input_actions.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/layout.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/level.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/object.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/particle.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/physics.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/progress.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/release.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/release_evidence.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/save.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/scene.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/score.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/sprite.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/state.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/template_validation.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/flappy_mini/README.md +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/flappy_mini/main.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/puzzle_game/README.md +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/puzzle_game/main.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/quiz_game/README.md +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/quiz_game/main.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/simple_physics/README.md +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/simple_physics/main.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/swipe_runner/README.md +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/swipe_runner/main.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/tap_counter/README.md +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/tap_counter/main.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/timers.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/transition.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/ui.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_android.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_animation.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_assets.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_audio.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_bounds.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_camera.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_camera_follow.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_changelog_phase36.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_cli_error_messages_phase45.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_cli_templates.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_collision.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_examples_syntax.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_final_qa_certification_phase65.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_flappy_mini_polish_phase49.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_flappy_mini_runtime_qa_phase60.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_game_object.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_generated_project_smoke_phase37.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_generated_project_validation_phase55.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_health_phase38.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_input_actions.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_layout.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_level.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_particle.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_pre_release_audit_phase40.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_production_template_polish_phase47.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_progress.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_puzzle_game_polish_phase51.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_puzzle_game_runtime_qa_phase62.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_quick_start_tutorial_phase43.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_quiz_game_polish_phase52.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_quiz_game_runtime_qa_phase63.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_release_check_phase39.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_release_evidence_phase57.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_release_readiness_phase35.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_runtime_qa_tracker_phase58.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_score_save.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_simple_physics_polish_phase53.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_simple_physics_runtime_qa_phase64.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_sprite.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_state.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_swipe_runner_polish_phase50.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_swipe_runner_runtime_qa_phase61.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_tap_counter_polish_phase48.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_tap_counter_runtime_qa_phase59.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_template_docs_phase33.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_template_helper_upgrades_phase31.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_template_helper_upgrades_phase32.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_template_media_phase44.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_template_polish_summary_phase54.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_template_quality_phase34.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_template_runtime_readiness_phase56.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_template_upgrade.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_template_validation_phase46.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_templates_syntax.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_testpypi_rc_readiness_phase66.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_timers.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_touch.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_transition.py +0 -0
- {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_ui.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gameviz-hyperkit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: A lightweight Python SDK for 2D hypercasual and hybrid-casual mobile game prototypes.
|
|
5
5
|
Author-email: "Md. Rifat Hossain Chowdhury" <rifat.gameviz@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -52,13 +52,15 @@ HyperKit is publicly available on PyPI and remains in active alpha development.
|
|
|
52
52
|
|
|
53
53
|
Current package status:
|
|
54
54
|
|
|
55
|
-
- Current package version: `0.
|
|
55
|
+
- Current package version: `0.2.0`
|
|
56
56
|
- Installation command: `pip install gameviz-hyperkit`
|
|
57
57
|
- Package maturity: Alpha / early SDK preview
|
|
58
58
|
- API stability target: future `1.0.0`
|
|
59
59
|
- Supported Python versions: Python 3.9–3.12
|
|
60
60
|
|
|
61
|
-
HyperKit
|
|
61
|
+
HyperKit `0.2.0` establishes the core SDK architecture, including runtime context, structured logging, project configuration, platform detection, lifecycle management, deprecation support, and a protected public API contract.
|
|
62
|
+
|
|
63
|
+
HyperKit is suitable for learning, prototyping, game jams, and early 2D mobile game development. It is not yet intended to replace a full production game engine.
|
|
62
64
|
|
|
63
65
|
---
|
|
64
66
|
|
|
@@ -472,6 +474,7 @@ Package publication is handled through the project's controlled release workflow
|
|
|
472
474
|
- [Manual QA Result Template](docs/MANUAL_QA_RESULT_TEMPLATE.md)
|
|
473
475
|
- [Release Evidence Structure](docs/RELEASE_EVIDENCE_STRUCTURE.md)
|
|
474
476
|
- [Release Evidence Workspace](docs/release-evidence/README.md)
|
|
477
|
+
- [Roadmap to HyperKit 1.0](ROADMAP.md)
|
|
475
478
|
|
|
476
479
|
### Template Polish and Runtime Documentation
|
|
477
480
|
|
|
@@ -486,7 +489,6 @@ Package publication is handled through the project's controlled release workflow
|
|
|
486
489
|
- [Template Runtime Readiness - Phase 56](docs/TEMPLATE_RUNTIME_READINESS_PHASE56.md)
|
|
487
490
|
- [Runtime QA Tracker - Phase 58](docs/RUNTIME_QA_TRACKER_PHASE58.md)
|
|
488
491
|
|
|
489
|
-
---
|
|
490
492
|
---
|
|
491
493
|
|
|
492
494
|
## Current Limitations
|
|
@@ -19,13 +19,15 @@ HyperKit is publicly available on PyPI and remains in active alpha development.
|
|
|
19
19
|
|
|
20
20
|
Current package status:
|
|
21
21
|
|
|
22
|
-
- Current package version: `0.
|
|
22
|
+
- Current package version: `0.2.0`
|
|
23
23
|
- Installation command: `pip install gameviz-hyperkit`
|
|
24
24
|
- Package maturity: Alpha / early SDK preview
|
|
25
25
|
- API stability target: future `1.0.0`
|
|
26
26
|
- Supported Python versions: Python 3.9–3.12
|
|
27
27
|
|
|
28
|
-
HyperKit
|
|
28
|
+
HyperKit `0.2.0` establishes the core SDK architecture, including runtime context, structured logging, project configuration, platform detection, lifecycle management, deprecation support, and a protected public API contract.
|
|
29
|
+
|
|
30
|
+
HyperKit is suitable for learning, prototyping, game jams, and early 2D mobile game development. It is not yet intended to replace a full production game engine.
|
|
29
31
|
|
|
30
32
|
---
|
|
31
33
|
|
|
@@ -439,6 +441,7 @@ Package publication is handled through the project's controlled release workflow
|
|
|
439
441
|
- [Manual QA Result Template](docs/MANUAL_QA_RESULT_TEMPLATE.md)
|
|
440
442
|
- [Release Evidence Structure](docs/RELEASE_EVIDENCE_STRUCTURE.md)
|
|
441
443
|
- [Release Evidence Workspace](docs/release-evidence/README.md)
|
|
444
|
+
- [Roadmap to HyperKit 1.0](ROADMAP.md)
|
|
442
445
|
|
|
443
446
|
### Template Polish and Runtime Documentation
|
|
444
447
|
|
|
@@ -453,7 +456,6 @@ Package publication is handled through the project's controlled release workflow
|
|
|
453
456
|
- [Template Runtime Readiness - Phase 56](docs/TEMPLATE_RUNTIME_READINESS_PHASE56.md)
|
|
454
457
|
- [Runtime QA Tracker - Phase 58](docs/RUNTIME_QA_TRACKER_PHASE58.md)
|
|
455
458
|
|
|
456
|
-
---
|
|
457
459
|
---
|
|
458
460
|
|
|
459
461
|
## Current Limitations
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "gameviz-hyperkit"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.2.0"
|
|
8
8
|
description = "A lightweight Python SDK for 2D hypercasual and hybrid-casual mobile game prototypes."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gameviz-hyperkit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: A lightweight Python SDK for 2D hypercasual and hybrid-casual mobile game prototypes.
|
|
5
5
|
Author-email: "Md. Rifat Hossain Chowdhury" <rifat.gameviz@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -52,13 +52,15 @@ HyperKit is publicly available on PyPI and remains in active alpha development.
|
|
|
52
52
|
|
|
53
53
|
Current package status:
|
|
54
54
|
|
|
55
|
-
- Current package version: `0.
|
|
55
|
+
- Current package version: `0.2.0`
|
|
56
56
|
- Installation command: `pip install gameviz-hyperkit`
|
|
57
57
|
- Package maturity: Alpha / early SDK preview
|
|
58
58
|
- API stability target: future `1.0.0`
|
|
59
59
|
- Supported Python versions: Python 3.9–3.12
|
|
60
60
|
|
|
61
|
-
HyperKit
|
|
61
|
+
HyperKit `0.2.0` establishes the core SDK architecture, including runtime context, structured logging, project configuration, platform detection, lifecycle management, deprecation support, and a protected public API contract.
|
|
62
|
+
|
|
63
|
+
HyperKit is suitable for learning, prototyping, game jams, and early 2D mobile game development. It is not yet intended to replace a full production game engine.
|
|
62
64
|
|
|
63
65
|
---
|
|
64
66
|
|
|
@@ -472,6 +474,7 @@ Package publication is handled through the project's controlled release workflow
|
|
|
472
474
|
- [Manual QA Result Template](docs/MANUAL_QA_RESULT_TEMPLATE.md)
|
|
473
475
|
- [Release Evidence Structure](docs/RELEASE_EVIDENCE_STRUCTURE.md)
|
|
474
476
|
- [Release Evidence Workspace](docs/release-evidence/README.md)
|
|
477
|
+
- [Roadmap to HyperKit 1.0](ROADMAP.md)
|
|
475
478
|
|
|
476
479
|
### Template Polish and Runtime Documentation
|
|
477
480
|
|
|
@@ -486,7 +489,6 @@ Package publication is handled through the project's controlled release workflow
|
|
|
486
489
|
- [Template Runtime Readiness - Phase 56](docs/TEMPLATE_RUNTIME_READINESS_PHASE56.md)
|
|
487
490
|
- [Runtime QA Tracker - Phase 58](docs/RUNTIME_QA_TRACKER_PHASE58.md)
|
|
488
491
|
|
|
489
|
-
---
|
|
490
492
|
---
|
|
491
493
|
|
|
492
494
|
## Current Limitations
|
|
@@ -10,6 +10,7 @@ src/gameviz_hyperkit.egg-info/top_level.txt
|
|
|
10
10
|
src/hyperkit/__init__.py
|
|
11
11
|
src/hyperkit/android.py
|
|
12
12
|
src/hyperkit/animation.py
|
|
13
|
+
src/hyperkit/api_contract.py
|
|
13
14
|
src/hyperkit/app.py
|
|
14
15
|
src/hyperkit/assets.py
|
|
15
16
|
src/hyperkit/audio.py
|
|
@@ -19,6 +20,11 @@ src/hyperkit/camera.py
|
|
|
19
20
|
src/hyperkit/camera_follow.py
|
|
20
21
|
src/hyperkit/cli.py
|
|
21
22
|
src/hyperkit/collision.py
|
|
23
|
+
src/hyperkit/compatibility.py
|
|
24
|
+
src/hyperkit/config.py
|
|
25
|
+
src/hyperkit/deprecation.py
|
|
26
|
+
src/hyperkit/environment.py
|
|
27
|
+
src/hyperkit/errors.py
|
|
22
28
|
src/hyperkit/generated_project_validation.py
|
|
23
29
|
src/hyperkit/geometry.py
|
|
24
30
|
src/hyperkit/health.py
|
|
@@ -26,12 +32,16 @@ src/hyperkit/input.py
|
|
|
26
32
|
src/hyperkit/input_actions.py
|
|
27
33
|
src/hyperkit/layout.py
|
|
28
34
|
src/hyperkit/level.py
|
|
35
|
+
src/hyperkit/lifecycle.py
|
|
36
|
+
src/hyperkit/logging.py
|
|
29
37
|
src/hyperkit/object.py
|
|
30
38
|
src/hyperkit/particle.py
|
|
31
39
|
src/hyperkit/physics.py
|
|
32
40
|
src/hyperkit/progress.py
|
|
41
|
+
src/hyperkit/project_config.py
|
|
33
42
|
src/hyperkit/release.py
|
|
34
43
|
src/hyperkit/release_evidence.py
|
|
44
|
+
src/hyperkit/runtime.py
|
|
35
45
|
src/hyperkit/save.py
|
|
36
46
|
src/hyperkit/scene.py
|
|
37
47
|
src/hyperkit/score.py
|
|
@@ -64,6 +74,7 @@ tests/test_changelog_phase36.py
|
|
|
64
74
|
tests/test_cli_error_messages_phase45.py
|
|
65
75
|
tests/test_cli_templates.py
|
|
66
76
|
tests/test_collision.py
|
|
77
|
+
tests/test_core_api_foundation_phase70.py
|
|
67
78
|
tests/test_examples_syntax.py
|
|
68
79
|
tests/test_final_qa_certification_phase65.py
|
|
69
80
|
tests/test_flappy_mini_polish_phase49.py
|
|
@@ -75,10 +86,13 @@ tests/test_health_phase38.py
|
|
|
75
86
|
tests/test_input_actions.py
|
|
76
87
|
tests/test_layout.py
|
|
77
88
|
tests/test_level.py
|
|
89
|
+
tests/test_logging_environment_phase72.py
|
|
78
90
|
tests/test_particle.py
|
|
91
|
+
tests/test_phase72_completion.py
|
|
79
92
|
tests/test_pre_release_audit_phase40.py
|
|
80
93
|
tests/test_production_template_polish_phase47.py
|
|
81
94
|
tests/test_progress.py
|
|
95
|
+
tests/test_project_config_deprecation_phase72.py
|
|
82
96
|
tests/test_public_readme_phase42.py
|
|
83
97
|
tests/test_puzzle_game_polish_phase51.py
|
|
84
98
|
tests/test_puzzle_game_runtime_qa_phase62.py
|
|
@@ -88,6 +102,7 @@ tests/test_quiz_game_runtime_qa_phase63.py
|
|
|
88
102
|
tests/test_release_check_phase39.py
|
|
89
103
|
tests/test_release_evidence_phase57.py
|
|
90
104
|
tests/test_release_readiness_phase35.py
|
|
105
|
+
tests/test_runtime_context_phase71.py
|
|
91
106
|
tests/test_runtime_qa_tracker_phase58.py
|
|
92
107
|
tests/test_score_save.py
|
|
93
108
|
tests/test_simple_physics_polish_phase53.py
|
|
@@ -3,7 +3,38 @@
|
|
|
3
3
|
A lightweight Python SDK for mobile-ready 2D hypercasual game prototypes.
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
|
-
from .
|
|
6
|
+
from .errors import (
|
|
7
|
+
HyperKitCompatibilityError,
|
|
8
|
+
HyperKitConfigurationError,
|
|
9
|
+
HyperKitError,
|
|
10
|
+
HyperKitRuntimeError,
|
|
11
|
+
HyperKitValidationError,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
from .compatibility import (
|
|
15
|
+
API_VERSION,
|
|
16
|
+
get_api_version,
|
|
17
|
+
is_api_compatible,
|
|
18
|
+
require_api_version,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
from .config import SDKConfig
|
|
22
|
+
|
|
23
|
+
from .runtime import (
|
|
24
|
+
RuntimeState,
|
|
25
|
+
SDKContext,
|
|
26
|
+
create_context,
|
|
27
|
+
get_default_context,
|
|
28
|
+
reset_default_context,
|
|
29
|
+
set_default_context,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
from .collision import (
|
|
33
|
+
circle_intersects_circle,
|
|
34
|
+
rect_intersects_circle,
|
|
35
|
+
rect_intersects_rect,
|
|
36
|
+
)
|
|
37
|
+
|
|
7
38
|
from .geometry import Circle, Rect, Vector2
|
|
8
39
|
from .input import TouchEvent, TouchGesture, TouchTracker
|
|
9
40
|
from .object import GameObject
|
|
@@ -14,6 +45,7 @@ from .score import ScoreManager
|
|
|
14
45
|
from .ui import Button, TextLabel
|
|
15
46
|
from .state import GameState, StateMachine
|
|
16
47
|
from .layout import CanvasScaler
|
|
48
|
+
|
|
17
49
|
from .assets import (
|
|
18
50
|
AssetError,
|
|
19
51
|
AssetManager,
|
|
@@ -26,6 +58,7 @@ from .assets import (
|
|
|
26
58
|
load_json,
|
|
27
59
|
load_text,
|
|
28
60
|
)
|
|
61
|
+
|
|
29
62
|
from .audio import (
|
|
30
63
|
AudioError,
|
|
31
64
|
AudioLoadError,
|
|
@@ -34,6 +67,7 @@ from .audio import (
|
|
|
34
67
|
play_sound,
|
|
35
68
|
stop_music,
|
|
36
69
|
)
|
|
70
|
+
|
|
37
71
|
from .animation import (
|
|
38
72
|
AnimationManager,
|
|
39
73
|
ColorTween,
|
|
@@ -43,19 +77,81 @@ from .animation import (
|
|
|
43
77
|
ease_out_quad,
|
|
44
78
|
linear,
|
|
45
79
|
)
|
|
46
|
-
|
|
47
|
-
from .
|
|
80
|
+
|
|
81
|
+
from .sprite import (
|
|
82
|
+
SpriteAnimation,
|
|
83
|
+
SpriteAnimationError,
|
|
84
|
+
SpriteAnimator,
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
from .particle import (
|
|
88
|
+
Particle,
|
|
89
|
+
ParticleConfig,
|
|
90
|
+
ParticleEmitter,
|
|
91
|
+
)
|
|
92
|
+
|
|
48
93
|
from .camera import CameraShake
|
|
49
|
-
|
|
50
|
-
from .
|
|
51
|
-
|
|
52
|
-
|
|
94
|
+
|
|
95
|
+
from .transition import (
|
|
96
|
+
SceneTransition,
|
|
97
|
+
SceneTransitionError,
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
from .timers import (
|
|
101
|
+
Cooldown,
|
|
102
|
+
Timer,
|
|
103
|
+
TimerError,
|
|
104
|
+
TimerManager,
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
from .input_actions import (
|
|
108
|
+
InputActionBinding,
|
|
109
|
+
InputActionEvent,
|
|
110
|
+
InputActionMap,
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
from .level import (
|
|
114
|
+
LevelData,
|
|
115
|
+
LevelError,
|
|
116
|
+
LevelLoader,
|
|
117
|
+
LevelManager,
|
|
118
|
+
load_level,
|
|
119
|
+
)
|
|
120
|
+
|
|
53
121
|
from .camera_follow import CameraFollow
|
|
54
|
-
|
|
55
|
-
from .
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
122
|
+
|
|
123
|
+
from .bounds import (
|
|
124
|
+
Bounds,
|
|
125
|
+
BoundsManager,
|
|
126
|
+
ScreenBounds,
|
|
127
|
+
WorldBounds,
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
from .progress import (
|
|
131
|
+
ProgressBar,
|
|
132
|
+
ProgressBarError,
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
from .health import (
|
|
136
|
+
HealthCheck,
|
|
137
|
+
HealthReport,
|
|
138
|
+
format_health_report,
|
|
139
|
+
generate_health_report,
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
from .release import (
|
|
143
|
+
ReleaseCheck,
|
|
144
|
+
ReleaseReport,
|
|
145
|
+
format_release_report,
|
|
146
|
+
generate_release_report,
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
from .audit import (
|
|
150
|
+
PreReleaseAuditCheck,
|
|
151
|
+
PreReleaseAuditReport,
|
|
152
|
+
format_pre_release_audit_report,
|
|
153
|
+
generate_pre_release_audit_report,
|
|
154
|
+
)
|
|
59
155
|
|
|
60
156
|
from .template_validation import (
|
|
61
157
|
TemplateValidationCheck,
|
|
@@ -83,13 +179,70 @@ from .release_evidence import (
|
|
|
83
179
|
run_release_evidence_validation,
|
|
84
180
|
)
|
|
85
181
|
|
|
182
|
+
from .project_config import (
|
|
183
|
+
PROJECT_CONFIG_FILENAME,
|
|
184
|
+
PROJECT_CONFIG_SCHEMA_VERSION,
|
|
185
|
+
ProjectConfig,
|
|
186
|
+
find_project_config,
|
|
187
|
+
load_project_config,
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
from .deprecation import (
|
|
191
|
+
HyperKitDeprecationWarning,
|
|
192
|
+
build_deprecation_message,
|
|
193
|
+
deprecated,
|
|
194
|
+
warn_deprecated,
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
from .environment import (
|
|
198
|
+
PlatformKind,
|
|
199
|
+
RuntimeEnvironment,
|
|
200
|
+
detect_platform,
|
|
201
|
+
detect_runtime_environment,
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
from .logging import (
|
|
205
|
+
configure_logging,
|
|
206
|
+
get_logger,
|
|
207
|
+
log_event,
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
from .lifecycle import (
|
|
211
|
+
run_game,
|
|
212
|
+
start_runtime,
|
|
213
|
+
stop_runtime,
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
from .api_contract import (
|
|
217
|
+
REQUIRED_PUBLIC_API,
|
|
218
|
+
get_missing_public_api,
|
|
219
|
+
validate_public_api,
|
|
220
|
+
)
|
|
221
|
+
|
|
86
222
|
|
|
87
223
|
try: # Kivy may not be available in headless test environments.
|
|
88
224
|
from .app import Game
|
|
89
225
|
except Exception: # pragma: no cover
|
|
90
226
|
Game = None # type: ignore
|
|
91
227
|
|
|
228
|
+
|
|
92
229
|
__all__ = [
|
|
230
|
+
"API_VERSION",
|
|
231
|
+
"SDKConfig",
|
|
232
|
+
"RuntimeState",
|
|
233
|
+
"SDKContext",
|
|
234
|
+
"create_context",
|
|
235
|
+
"get_default_context",
|
|
236
|
+
"set_default_context",
|
|
237
|
+
"reset_default_context",
|
|
238
|
+
"HyperKitError",
|
|
239
|
+
"HyperKitConfigurationError",
|
|
240
|
+
"HyperKitCompatibilityError",
|
|
241
|
+
"HyperKitRuntimeError",
|
|
242
|
+
"HyperKitValidationError",
|
|
243
|
+
"get_api_version",
|
|
244
|
+
"is_api_compatible",
|
|
245
|
+
"require_api_version",
|
|
93
246
|
"Button",
|
|
94
247
|
"TextLabel",
|
|
95
248
|
"Circle",
|
|
@@ -192,6 +345,29 @@ __all__ = [
|
|
|
192
345
|
"format_release_evidence_report",
|
|
193
346
|
"generate_release_evidence_report",
|
|
194
347
|
"run_release_evidence_validation",
|
|
348
|
+
"PROJECT_CONFIG_FILENAME",
|
|
349
|
+
"PROJECT_CONFIG_SCHEMA_VERSION",
|
|
350
|
+
"ProjectConfig",
|
|
351
|
+
"find_project_config",
|
|
352
|
+
"load_project_config",
|
|
353
|
+
"HyperKitDeprecationWarning",
|
|
354
|
+
"build_deprecation_message",
|
|
355
|
+
"deprecated",
|
|
356
|
+
"warn_deprecated",
|
|
357
|
+
"PlatformKind",
|
|
358
|
+
"RuntimeEnvironment",
|
|
359
|
+
"detect_platform",
|
|
360
|
+
"detect_runtime_environment",
|
|
361
|
+
"configure_logging",
|
|
362
|
+
"get_logger",
|
|
363
|
+
"log_event",
|
|
364
|
+
"start_runtime",
|
|
365
|
+
"stop_runtime",
|
|
366
|
+
"run_game",
|
|
367
|
+
"REQUIRED_PUBLIC_API",
|
|
368
|
+
"get_missing_public_api",
|
|
369
|
+
"validate_public_api",
|
|
195
370
|
]
|
|
196
371
|
|
|
197
|
-
|
|
372
|
+
|
|
373
|
+
__version__ = "0.2.0"
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"""Public API contract for GameViz HyperKit."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Mapping
|
|
6
|
+
from typing import Optional
|
|
7
|
+
|
|
8
|
+
from .errors import HyperKitCompatibilityError
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
REQUIRED_PUBLIC_API = frozenset(
|
|
12
|
+
{
|
|
13
|
+
# Existing core game API
|
|
14
|
+
"Game",
|
|
15
|
+
"GameObject",
|
|
16
|
+
"Scene",
|
|
17
|
+
"SaveManager",
|
|
18
|
+
"ScoreManager",
|
|
19
|
+
|
|
20
|
+
# Phase 70
|
|
21
|
+
"API_VERSION",
|
|
22
|
+
"SDKConfig",
|
|
23
|
+
"HyperKitError",
|
|
24
|
+
"HyperKitConfigurationError",
|
|
25
|
+
"HyperKitCompatibilityError",
|
|
26
|
+
"HyperKitRuntimeError",
|
|
27
|
+
"HyperKitValidationError",
|
|
28
|
+
"get_api_version",
|
|
29
|
+
"is_api_compatible",
|
|
30
|
+
"require_api_version",
|
|
31
|
+
|
|
32
|
+
# Phase 71
|
|
33
|
+
"RuntimeState",
|
|
34
|
+
"SDKContext",
|
|
35
|
+
"create_context",
|
|
36
|
+
"get_default_context",
|
|
37
|
+
"set_default_context",
|
|
38
|
+
"reset_default_context",
|
|
39
|
+
|
|
40
|
+
# Phase 72
|
|
41
|
+
"PlatformKind",
|
|
42
|
+
"RuntimeEnvironment",
|
|
43
|
+
"detect_platform",
|
|
44
|
+
"detect_runtime_environment",
|
|
45
|
+
"configure_logging",
|
|
46
|
+
"get_logger",
|
|
47
|
+
"log_event",
|
|
48
|
+
"PROJECT_CONFIG_FILENAME",
|
|
49
|
+
"PROJECT_CONFIG_SCHEMA_VERSION",
|
|
50
|
+
"ProjectConfig",
|
|
51
|
+
"find_project_config",
|
|
52
|
+
"load_project_config",
|
|
53
|
+
"HyperKitDeprecationWarning",
|
|
54
|
+
"build_deprecation_message",
|
|
55
|
+
"deprecated",
|
|
56
|
+
"warn_deprecated",
|
|
57
|
+
"start_runtime",
|
|
58
|
+
"stop_runtime",
|
|
59
|
+
"run_game",
|
|
60
|
+
}
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def get_missing_public_api(
|
|
65
|
+
namespace: Mapping[str, object],
|
|
66
|
+
) -> tuple[str, ...]:
|
|
67
|
+
"""Return required public API names missing from a namespace."""
|
|
68
|
+
|
|
69
|
+
missing = (
|
|
70
|
+
REQUIRED_PUBLIC_API
|
|
71
|
+
- set(namespace)
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
return tuple(
|
|
75
|
+
sorted(missing)
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def validate_public_api(
|
|
80
|
+
namespace: Optional[
|
|
81
|
+
Mapping[str, object]
|
|
82
|
+
] = None,
|
|
83
|
+
) -> None:
|
|
84
|
+
"""Validate the HyperKit public API contract."""
|
|
85
|
+
|
|
86
|
+
if namespace is None:
|
|
87
|
+
import hyperkit
|
|
88
|
+
|
|
89
|
+
namespace = vars(hyperkit)
|
|
90
|
+
|
|
91
|
+
missing = get_missing_public_api(
|
|
92
|
+
namespace
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
if missing:
|
|
96
|
+
names = ", ".join(missing)
|
|
97
|
+
|
|
98
|
+
raise HyperKitCompatibilityError(
|
|
99
|
+
"HyperKit public API contract "
|
|
100
|
+
f"is missing: {names}."
|
|
101
|
+
)
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"""Public API compatibility helpers for GameViz HyperKit."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from .errors import HyperKitCompatibilityError
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
API_VERSION = "0.2"
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _parse_api_version(version: str) -> tuple[int, int]:
|
|
12
|
+
"""Parse a HyperKit API version in MAJOR.MINOR format."""
|
|
13
|
+
|
|
14
|
+
if not isinstance(version, str):
|
|
15
|
+
raise HyperKitCompatibilityError(
|
|
16
|
+
"HyperKit API version must be a string in MAJOR.MINOR format."
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
parts = version.strip().split(".")
|
|
20
|
+
|
|
21
|
+
if len(parts) != 2:
|
|
22
|
+
raise HyperKitCompatibilityError(
|
|
23
|
+
f"Invalid HyperKit API version '{version}'. "
|
|
24
|
+
"Expected MAJOR.MINOR format, for example '0.2'."
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
try:
|
|
28
|
+
major = int(parts[0])
|
|
29
|
+
minor = int(parts[1])
|
|
30
|
+
except ValueError as exc:
|
|
31
|
+
raise HyperKitCompatibilityError(
|
|
32
|
+
f"Invalid HyperKit API version '{version}'. "
|
|
33
|
+
"Major and minor versions must be integers."
|
|
34
|
+
) from exc
|
|
35
|
+
|
|
36
|
+
if major < 0 or minor < 0:
|
|
37
|
+
raise HyperKitCompatibilityError(
|
|
38
|
+
"HyperKit API version values cannot be negative."
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
return major, minor
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def get_api_version() -> str:
|
|
45
|
+
"""Return the current public HyperKit API version."""
|
|
46
|
+
|
|
47
|
+
return API_VERSION
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def is_api_compatible(required_version: str) -> bool:
|
|
51
|
+
"""Return whether the current API satisfies a requested API version.
|
|
52
|
+
|
|
53
|
+
HyperKit uses major-version compatibility.
|
|
54
|
+
|
|
55
|
+
Within the same major version, a newer minor API is considered
|
|
56
|
+
compatible with an older requested minor API.
|
|
57
|
+
|
|
58
|
+
Examples for API version 0.2:
|
|
59
|
+
|
|
60
|
+
0.1 -> compatible
|
|
61
|
+
0.2 -> compatible
|
|
62
|
+
0.3 -> incompatible
|
|
63
|
+
1.0 -> incompatible
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
current_major, current_minor = _parse_api_version(API_VERSION)
|
|
67
|
+
required_major, required_minor = _parse_api_version(required_version)
|
|
68
|
+
|
|
69
|
+
return (
|
|
70
|
+
current_major == required_major
|
|
71
|
+
and current_minor >= required_minor
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def require_api_version(required_version: str) -> None:
|
|
76
|
+
"""Require a compatible HyperKit API version.
|
|
77
|
+
|
|
78
|
+
Raises:
|
|
79
|
+
HyperKitCompatibilityError:
|
|
80
|
+
If the requested API is not compatible with this SDK.
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
if is_api_compatible(required_version):
|
|
84
|
+
return
|
|
85
|
+
|
|
86
|
+
raise HyperKitCompatibilityError(
|
|
87
|
+
f"HyperKit API {required_version} is required, "
|
|
88
|
+
f"but this SDK provides API {API_VERSION}."
|
|
89
|
+
)
|