kinemotion 0.17.2__tar.gz → 0.17.4__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.

Potentially problematic release.


This version of kinemotion might be problematic. Click here for more details.

Files changed (87) hide show
  1. {kinemotion-0.17.2 → kinemotion-0.17.4}/.github/workflows/test.yml +4 -1
  2. {kinemotion-0.17.2 → kinemotion-0.17.4}/CHANGELOG.md +16 -0
  3. {kinemotion-0.17.2 → kinemotion-0.17.4}/PKG-INFO +1 -1
  4. {kinemotion-0.17.2 → kinemotion-0.17.4}/pyproject.toml +1 -1
  5. {kinemotion-0.17.2 → kinemotion-0.17.4}/tests/test_api.py +13 -0
  6. {kinemotion-0.17.2 → kinemotion-0.17.4}/uv.lock +1 -1
  7. {kinemotion-0.17.2 → kinemotion-0.17.4}/.dockerignore +0 -0
  8. {kinemotion-0.17.2 → kinemotion-0.17.4}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  9. {kinemotion-0.17.2 → kinemotion-0.17.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  10. {kinemotion-0.17.2 → kinemotion-0.17.4}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  11. {kinemotion-0.17.2 → kinemotion-0.17.4}/.github/pull_request_template.md +0 -0
  12. {kinemotion-0.17.2 → kinemotion-0.17.4}/.github/workflows/docs.yml +0 -0
  13. {kinemotion-0.17.2 → kinemotion-0.17.4}/.github/workflows/release.yml +0 -0
  14. {kinemotion-0.17.2 → kinemotion-0.17.4}/.gitignore +0 -0
  15. {kinemotion-0.17.2 → kinemotion-0.17.4}/.pre-commit-config.yaml +0 -0
  16. {kinemotion-0.17.2 → kinemotion-0.17.4}/.readthedocs.yml +0 -0
  17. {kinemotion-0.17.2 → kinemotion-0.17.4}/.tool-versions +0 -0
  18. {kinemotion-0.17.2 → kinemotion-0.17.4}/CLAUDE.md +0 -0
  19. {kinemotion-0.17.2 → kinemotion-0.17.4}/CODE_OF_CONDUCT.md +0 -0
  20. {kinemotion-0.17.2 → kinemotion-0.17.4}/CONTRIBUTING.md +0 -0
  21. {kinemotion-0.17.2 → kinemotion-0.17.4}/Dockerfile +0 -0
  22. {kinemotion-0.17.2 → kinemotion-0.17.4}/GEMINI.md +0 -0
  23. {kinemotion-0.17.2 → kinemotion-0.17.4}/LICENSE +0 -0
  24. {kinemotion-0.17.2 → kinemotion-0.17.4}/README.md +0 -0
  25. {kinemotion-0.17.2 → kinemotion-0.17.4}/SECURITY.md +0 -0
  26. {kinemotion-0.17.2 → kinemotion-0.17.4}/docs/README.md +0 -0
  27. {kinemotion-0.17.2 → kinemotion-0.17.4}/docs/api/cmj.md +0 -0
  28. {kinemotion-0.17.2 → kinemotion-0.17.4}/docs/api/core.md +0 -0
  29. {kinemotion-0.17.2 → kinemotion-0.17.4}/docs/api/dropjump.md +0 -0
  30. {kinemotion-0.17.2 → kinemotion-0.17.4}/docs/api/overview.md +0 -0
  31. {kinemotion-0.17.2 → kinemotion-0.17.4}/docs/development/errors-findings.md +0 -0
  32. {kinemotion-0.17.2 → kinemotion-0.17.4}/docs/development/validation-plan.md +0 -0
  33. {kinemotion-0.17.2 → kinemotion-0.17.4}/docs/development/wallball-norep-detection.md +0 -0
  34. {kinemotion-0.17.2 → kinemotion-0.17.4}/docs/guides/bulk-processing.md +0 -0
  35. {kinemotion-0.17.2 → kinemotion-0.17.4}/docs/guides/camera-setup.md +0 -0
  36. {kinemotion-0.17.2 → kinemotion-0.17.4}/docs/guides/cmj-guide.md +0 -0
  37. {kinemotion-0.17.2 → kinemotion-0.17.4}/docs/index.md +0 -0
  38. {kinemotion-0.17.2 → kinemotion-0.17.4}/docs/reference/parameters.md +0 -0
  39. {kinemotion-0.17.2 → kinemotion-0.17.4}/docs/reference/pose-systems.md +0 -0
  40. {kinemotion-0.17.2 → kinemotion-0.17.4}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
  41. {kinemotion-0.17.2 → kinemotion-0.17.4}/docs/technical/framerate.md +0 -0
  42. {kinemotion-0.17.2 → kinemotion-0.17.4}/docs/technical/imu-metadata.md +0 -0
  43. {kinemotion-0.17.2 → kinemotion-0.17.4}/docs/technical/real-time-analysis.md +0 -0
  44. {kinemotion-0.17.2 → kinemotion-0.17.4}/docs/technical/triple-extension.md +0 -0
  45. {kinemotion-0.17.2 → kinemotion-0.17.4}/docs/translations/es/camera-setup.md +0 -0
  46. {kinemotion-0.17.2 → kinemotion-0.17.4}/examples/bulk/README.md +0 -0
  47. {kinemotion-0.17.2 → kinemotion-0.17.4}/examples/bulk/bulk_processing.py +0 -0
  48. {kinemotion-0.17.2 → kinemotion-0.17.4}/examples/bulk/simple_example.py +0 -0
  49. {kinemotion-0.17.2 → kinemotion-0.17.4}/examples/programmatic_usage.py +0 -0
  50. {kinemotion-0.17.2 → kinemotion-0.17.4}/mkdocs.yml +0 -0
  51. {kinemotion-0.17.2 → kinemotion-0.17.4}/requirements-docs.txt +0 -0
  52. {kinemotion-0.17.2 → kinemotion-0.17.4}/samples/cmjs/README.md +0 -0
  53. {kinemotion-0.17.2 → kinemotion-0.17.4}/sonar-project.properties +0 -0
  54. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/__init__.py +0 -0
  55. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/api.py +0 -0
  56. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/cli.py +0 -0
  57. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/cmj/__init__.py +0 -0
  58. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/cmj/analysis.py +0 -0
  59. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/cmj/cli.py +0 -0
  60. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/cmj/debug_overlay.py +0 -0
  61. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/cmj/joint_angles.py +0 -0
  62. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/cmj/kinematics.py +0 -0
  63. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/core/__init__.py +0 -0
  64. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/core/auto_tuning.py +0 -0
  65. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/core/cli_utils.py +0 -0
  66. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/core/debug_overlay_utils.py +0 -0
  67. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/core/filtering.py +0 -0
  68. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/core/pose.py +0 -0
  69. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/core/smoothing.py +0 -0
  70. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/core/video_io.py +0 -0
  71. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/dropjump/__init__.py +0 -0
  72. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/dropjump/analysis.py +0 -0
  73. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/dropjump/cli.py +0 -0
  74. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/dropjump/debug_overlay.py +0 -0
  75. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/dropjump/kinematics.py +0 -0
  76. {kinemotion-0.17.2 → kinemotion-0.17.4}/src/kinemotion/py.typed +0 -0
  77. {kinemotion-0.17.2 → kinemotion-0.17.4}/tests/__init__.py +0 -0
  78. {kinemotion-0.17.2 → kinemotion-0.17.4}/tests/test_adaptive_threshold.py +0 -0
  79. {kinemotion-0.17.2 → kinemotion-0.17.4}/tests/test_aspect_ratio.py +0 -0
  80. {kinemotion-0.17.2 → kinemotion-0.17.4}/tests/test_cli_imports.py +0 -0
  81. {kinemotion-0.17.2 → kinemotion-0.17.4}/tests/test_cmj_analysis.py +0 -0
  82. {kinemotion-0.17.2 → kinemotion-0.17.4}/tests/test_cmj_kinematics.py +0 -0
  83. {kinemotion-0.17.2 → kinemotion-0.17.4}/tests/test_com_estimation.py +0 -0
  84. {kinemotion-0.17.2 → kinemotion-0.17.4}/tests/test_contact_detection.py +0 -0
  85. {kinemotion-0.17.2 → kinemotion-0.17.4}/tests/test_filtering.py +0 -0
  86. {kinemotion-0.17.2 → kinemotion-0.17.4}/tests/test_kinematics.py +0 -0
  87. {kinemotion-0.17.2 → kinemotion-0.17.4}/tests/test_polyorder.py +0 -0
@@ -74,7 +74,10 @@ jobs:
74
74
  name: SonarQube Scan
75
75
  needs: test
76
76
  runs-on: ubuntu-latest
77
- if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
77
+ # Only run if SONAR_TOKEN is configured and not a fork PR
78
+ if: |
79
+ secrets.SONAR_TOKEN != '' &&
80
+ (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository)
78
81
 
79
82
  steps:
80
83
  - name: Checkout repository
@@ -7,6 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  <!-- version list -->
9
9
 
10
+ ## v0.17.4 (2025-11-10)
11
+
12
+ ### Bug Fixes
13
+
14
+ - **ci**: Make SonarQube scan conditional on token availability
15
+ ([`bd62d7f`](https://github.com/feniix/kinemotion/commit/bd62d7f4d8f83a238093a1490be7316c1544ac25))
16
+
17
+
18
+ ## v0.17.3 (2025-11-10)
19
+
20
+ ### Bug Fixes
21
+
22
+ - **ci**: Skip multiprocessing tests in CI environment
23
+ ([`af683eb`](https://github.com/feniix/kinemotion/commit/af683eb75994863e1cb0f7c30722086ae0084909))
24
+
25
+
10
26
  ## v0.17.2 (2025-11-10)
11
27
 
12
28
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kinemotion
3
- Version: 0.17.2
3
+ Version: 0.17.4
4
4
  Summary: Video-based kinematic analysis for athletic performance
5
5
  Project-URL: Homepage, https://github.com/feniix/kinemotion
6
6
  Project-URL: Repository, https://github.com/feniix/kinemotion
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kinemotion"
3
- version = "0.17.2"
3
+ version = "0.17.4"
4
4
  description = "Video-based kinematic analysis for athletic performance"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10,<3.13"
@@ -1,5 +1,6 @@
1
1
  """Tests for the public API module."""
2
2
 
3
+ import os
3
4
  import tempfile
4
5
  from pathlib import Path
5
6
 
@@ -14,6 +15,13 @@ from kinemotion.api import (
14
15
  )
15
16
  from kinemotion.dropjump.kinematics import DropJumpMetrics
16
17
 
18
+ # Skip multiprocessing tests in CI
19
+ # MediaPipe doesn't work well with ProcessPoolExecutor in headless environments
20
+ skip_in_ci = pytest.mark.skipif(
21
+ os.getenv("CI") == "true",
22
+ reason="Multiprocessing with MediaPipe not supported in CI headless environment",
23
+ )
24
+
17
25
 
18
26
  def test_process_video_returns_metrics(sample_video_path: str) -> None:
19
27
  """Test that process_dropjump_video returns DropJumpMetrics object."""
@@ -159,6 +167,7 @@ def test_video_result_creation() -> None:
159
167
  assert result.error is None
160
168
 
161
169
 
170
+ @skip_in_ci
162
171
  def test_process_videos_bulk_success(sample_video_path: str) -> None:
163
172
  """Test bulk processing of multiple videos."""
164
173
  configs = [
@@ -179,6 +188,7 @@ def test_process_videos_bulk_success(sample_video_path: str) -> None:
179
188
  assert result.processing_time > 0
180
189
 
181
190
 
191
+ @skip_in_ci
182
192
  def test_process_videos_bulk_with_failure() -> None:
183
193
  """Test bulk processing handles failures gracefully."""
184
194
  configs = [
@@ -202,6 +212,7 @@ def test_process_videos_bulk_with_failure() -> None:
202
212
  assert "not found" in result.error.lower()
203
213
 
204
214
 
215
+ @skip_in_ci
205
216
  def test_process_videos_bulk_mixed_results(sample_video_path: str) -> None:
206
217
  """Test bulk processing with mix of successful and failed videos."""
207
218
  configs = [
@@ -232,6 +243,7 @@ def test_process_videos_bulk_mixed_results(sample_video_path: str) -> None:
232
243
  assert failed[0].error is not None
233
244
 
234
245
 
246
+ @skip_in_ci
235
247
  def test_process_videos_bulk_progress_callback(sample_video_path: str) -> None:
236
248
  """Test that progress callback is called for each video."""
237
249
  configs = [
@@ -257,6 +269,7 @@ def test_process_videos_bulk_progress_callback(sample_video_path: str) -> None:
257
269
  assert callback_result in results
258
270
 
259
271
 
272
+ @skip_in_ci
260
273
  def test_process_videos_bulk_different_parameters(sample_video_path: str) -> None:
261
274
  """Test bulk processing with different parameter combinations."""
262
275
  with tempfile.TemporaryDirectory() as tmpdir:
@@ -700,7 +700,7 @@ wheels = [
700
700
 
701
701
  [[package]]
702
702
  name = "kinemotion"
703
- version = "0.17.2"
703
+ version = "0.17.4"
704
704
  source = { editable = "." }
705
705
  dependencies = [
706
706
  { name = "click" },
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