pyobs-gui 2.0.0.dev22__tar.gz → 2.0.1__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 (146) hide show
  1. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/PKG-INFO +2 -2
  2. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/__init__.py +4 -1
  3. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/_nuitka_astropy_patch.py +59 -5
  4. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyproject.toml +2 -2
  5. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/uv.lock +29 -29
  6. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/.claude/skills/verify/SKILL.md +0 -0
  7. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/.github/dependabot.yml +0 -0
  8. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/.github/workflows/dependabot-automerge.yml +0 -0
  9. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/.github/workflows/pypi.yml +0 -0
  10. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/.github/workflows/pyrefly.yml +0 -0
  11. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/.github/workflows/ruff.yml +0 -0
  12. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/.gitignore +0 -0
  13. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/.pre-commit-config.yaml +0 -0
  14. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/.readthedocs.yml +0 -0
  15. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/CHANGELOG.rst +0 -0
  16. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/LICENSE +0 -0
  17. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/README.md +0 -0
  18. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/bin/mypyuic5 +0 -0
  19. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/docs/Makefile +0 -0
  20. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/docs/make.bat +0 -0
  21. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/docs/requirements.txt +0 -0
  22. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/docs/source/_static/pyobs.gif +0 -0
  23. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/docs/source/conf.py +0 -0
  24. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/docs/source/index.rst +0 -0
  25. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/mypy.ini +0 -0
  26. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/__main__.py +0 -0
  27. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/accounts.py +0 -0
  28. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/acquisitionwidget.py +0 -0
  29. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/autofocuswidget.py +0 -0
  30. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/autoguidingwidget.py +0 -0
  31. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/base.py +0 -0
  32. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/camerawidget.py +0 -0
  33. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/commandinputwidget.py +0 -0
  34. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/compassmovewidget.py +0 -0
  35. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/coolingwidget.py +0 -0
  36. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/datadisplaywidget.py +0 -0
  37. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/eventswidget.py +0 -0
  38. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/filterwidget.py +0 -0
  39. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/fitsheaderswidget.py +0 -0
  40. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/focuswidget.py +0 -0
  41. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/gui.py +0 -0
  42. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/login.py +0 -0
  43. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/loginwindow.py +0 -0
  44. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/logmodel.py +0 -0
  45. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/mainwindow.py +0 -0
  46. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/modewidget.py +0 -0
  47. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/modifiedmixin.py +0 -0
  48. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/modulegui.py +0 -0
  49. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/__init__.py +0 -0
  50. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/acquisitionwidget.ui +0 -0
  51. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/acquisitionwidget_ui.py +0 -0
  52. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/autofocuswidget.ui +0 -0
  53. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/autofocuswidget_ui.py +0 -0
  54. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/autoguidingwidget.ui +0 -0
  55. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/autoguidingwidget_ui.py +0 -0
  56. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/camerawidget.ui +0 -0
  57. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/camerawidget_ui.py +0 -0
  58. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/compassmoveplugin.py +0 -0
  59. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/compassmovewidget.py +0 -0
  60. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/compassmovewidget.ui +0 -0
  61. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/compassmovewidget_ui.py +0 -0
  62. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/compile.sh +0 -0
  63. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/coolingwidget.ui +0 -0
  64. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/coolingwidget_ui.py +0 -0
  65. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/datadisplayplugin.py +0 -0
  66. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/datadisplaywidget.ui +0 -0
  67. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/datadisplaywidget_ui.py +0 -0
  68. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/designer.sh +0 -0
  69. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/eventswidget.ui +0 -0
  70. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/eventswidget_ui.py +0 -0
  71. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/filterwidget.ui +0 -0
  72. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/filterwidget_ui.py +0 -0
  73. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/fitsheaderswidget.ui +0 -0
  74. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/fitsheaderswidget_ui.py +0 -0
  75. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/focuswidget.ui +0 -0
  76. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/focuswidget_ui.py +0 -0
  77. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/mainwindow.ui +0 -0
  78. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/mainwindow_ui.py +0 -0
  79. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/modewidget.ui +0 -0
  80. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/modewidget_ui.py +0 -0
  81. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/resources/arrow-alt-circle-down-solid.svg +0 -0
  82. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/resources/arrow-alt-circle-left-solid.svg +0 -0
  83. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/resources/arrow-alt-circle-right-solid.svg +0 -0
  84. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/resources/arrow-alt-circle-up-solid.svg +0 -0
  85. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/resources/arrow-up-right-from-square-solid.svg +0 -0
  86. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/resources/arrows-to-eye-solid.svg +0 -0
  87. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/resources/chart-line-solid.svg +0 -0
  88. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/resources/circle-question-solid.svg +0 -0
  89. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/resources/cloud-sun-solid.svg +0 -0
  90. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/resources/edit-solid.svg +0 -0
  91. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/resources/search-solid.svg +0 -0
  92. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/resources/undo-solid.svg +0 -0
  93. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/resources.qrc +0 -0
  94. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/resources_rc.py +0 -0
  95. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/roofwidget.ui +0 -0
  96. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/roofwidget_ui.py +0 -0
  97. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/shellwidget.ui +0 -0
  98. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/shellwidget_ui.py +0 -0
  99. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/spectrographwidget.ui +0 -0
  100. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/spectrographwidget_ui.py +0 -0
  101. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/telescopewidget.ui +0 -0
  102. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/telescopewidget_ui.py +0 -0
  103. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/temperaturesplotwidget.ui +0 -0
  104. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/temperaturesplotwidget_ui.py +0 -0
  105. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/temperatureswidget.ui +0 -0
  106. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/temperatureswidget_ui.py +0 -0
  107. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/videowidget.ui +0 -0
  108. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/videowidget_ui.py +0 -0
  109. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/weatherwidget.ui +0 -0
  110. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/qt/weatherwidget_ui.py +0 -0
  111. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/roofwidget.py +0 -0
  112. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/shellwidget.py +0 -0
  113. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/spectrographwidget.py +0 -0
  114. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/statuswidget.py +0 -0
  115. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/telescopewidget.py +0 -0
  116. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/temperaturesplotwidget.py +0 -0
  117. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/temperatureswidget.py +0 -0
  118. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/utils.py +0 -0
  119. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/videowidget.py +0 -0
  120. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/watchedlabel.py +0 -0
  121. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pyobs_gui/weatherwidget.py +0 -0
  122. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/pysidedeploy.spec +0 -0
  123. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/specs/2026-08-20-gui-remote-call-error-handling.md +0 -0
  124. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/specs/2026-08-21-gui-widget-startup-responsiveness.md +0 -0
  125. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/specs/index.md +0 -0
  126. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/spike_standalone/main.py +0 -0
  127. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/spike_standalone/pysidedeploy.spec +0 -0
  128. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/test/acquisition.yaml +0 -0
  129. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/test/autofocus.yaml +0 -0
  130. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/test/camera.yaml +0 -0
  131. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/test/full.yaml +0 -0
  132. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/test/guiding.yaml +0 -0
  133. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/test/mode.yaml +0 -0
  134. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/test/roof.yaml +0 -0
  135. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/test/spectrograph.yaml +0 -0
  136. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/test/telescope.yaml +0 -0
  137. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/test/telescope_acl.yaml +0 -0
  138. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/test/telescope_acl_denied.yaml +0 -0
  139. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/test/video.yaml +0 -0
  140. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/tests/__init__.py +0 -0
  141. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/tests/conftest.py +0 -0
  142. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/tests/test_accounts.py +0 -0
  143. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/tests/test_camerawidget.py +0 -0
  144. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/tests/test_loginwindow.py +0 -0
  145. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/tests/test_mainwindow_startup.py +0 -0
  146. {pyobs_gui-2.0.0.dev22 → pyobs_gui-2.0.1}/tests/test_videowidget.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: pyobs-gui
3
- Version: 2.0.0.dev22
3
+ Version: 2.0.1
4
4
  Summary: A remote GUI for pyobs
5
5
  Author-email: Tim-Oliver Husser <thusser@uni-goettingen.de>
6
6
  License-Expression: MIT
@@ -11,7 +11,7 @@ Requires-Dist: astropy<8,>=7.0.1
11
11
  Requires-Dist: colour<0.2,>=0.1.5
12
12
  Requires-Dist: keyring<26,>=25.7.0
13
13
  Requires-Dist: matplotlib<4,>=3.10.1
14
- Requires-Dist: pyobs-core<3,>=2.0.0.dev93
14
+ Requires-Dist: pyobs-core<3,>=2.0.0
15
15
  Requires-Dist: pyside6>=6.10.1
16
16
  Requires-Dist: qasync<0.29,>=0.27.1
17
17
  Requires-Dist: qfitswidget>=0.13.1
@@ -6,7 +6,10 @@ __title__ = "GUI"
6
6
 
7
7
  from ._nuitka_astropy_patch import patch_generic_unit_parser
8
8
 
9
- patch_generic_unit_parser()
9
+ # Only relevant in the Nuitka-compiled standalone binary: under a regular interpreter the
10
+ # patch must not install, or it breaks astropy's unit/coordinate parsing (issue #151). The
11
+ # marker is evaluated here because pyobs_gui/__init__.py is guaranteed compiled in the binary.
12
+ patch_generic_unit_parser(compiled="__compiled__" in globals())
10
13
 
11
14
  from .gui import GUI
12
15
  from .camerawidget import CameraWidget
@@ -34,6 +34,23 @@ unconditionally at startup. astropy's cds/ogip/vounit formats and astropy.coordi
34
34
  the same PLY pattern and would need the identical treatment if/when they're actually exercised in
35
35
  the compiled binary.
36
36
 
37
+ Two caveats learned the hard way (pyobs-gui issue #151):
38
+
39
+ - **The patch must be a strict no-op under a regular interpreter.** The wrapper functions below
40
+ add one stack frame, which shifts astropy's frame-level bookkeeping: ``astropy.utils.parsing``
41
+ calls ``get_caller_module_dict(2)`` directly, and its own ``_patch_ply_module`` wrapper adds two
42
+ more levels, so the extra frame makes the walk land on astropy's parsing wrapper instead of the
43
+ grammar-defining frame -- the fallback fired on plain CPython and corrupted unit/coordinate
44
+ parsing when running from source ("Invalid coordinates" in the Telescope widget, astropy units
45
+ failing to import). Therefore the patched functions step one level deeper (``levels + 1``) to
46
+ restore the original frame targeting, and ``patch_generic_unit_parser`` only installs at all
47
+ when running under Nuitka (``"__compiled__" in globals()``); otherwise it returns immediately.
48
+ - **The vendored grammar must be a *registered* module.** PLY validates p-functions with
49
+ ``inspect.getmodule()``/``getsourcefile()``, which resolve the function's ``__module__`` through
50
+ ``sys.modules`` and want a real source file. ``_build_generic_grammar_namespace`` therefore
51
+ registers the namespace under its name and materializes its ``__file__`` stub; without that the
52
+ parser rebuild dies with "Unable to build parser" (``TypeError ... got NoneType``).
53
+
37
54
  Must run before ``astropy.units`` is imported anywhere, i.e. as the first thing in
38
55
  ``pyobs_gui/__init__.py``.
39
56
  """
@@ -41,6 +58,7 @@ Must run before ``astropy.units`` is imported anywhere, i.e. as the first thing
41
58
  from __future__ import annotations
42
59
 
43
60
  import re
61
+ import sys
44
62
  import tempfile
45
63
  import types
46
64
  from fractions import Fraction
@@ -76,6 +94,18 @@ def _build_generic_grammar_namespace() -> types.ModuleType:
76
94
  ns.__file__ = str(stub_dir / "generic.py")
77
95
  ns.tokens = tokens
78
96
 
97
+ # Register the namespace under its own name and materialize its __file__ so PLY's
98
+ # grammar validation can resolve it: ParserReflect.get_pfunctions() calls
99
+ # inspect.getmodule() on every p_* function (which looks the function's __module__ up
100
+ # in sys.modules), and validate_pfunctions() calls inspect.getsourcefile() on the
101
+ # result -- both need a real, registered module or the rebuild dies with
102
+ # "Unable to build parser" / "TypeError: ... got NoneType".
103
+ sys.modules.setdefault(ns.__name__, ns)
104
+ (stub_dir / "generic.py").write_text(
105
+ "# pyobs-gui: vendored astropy.units.format.generic PLY grammar (Nuitka workaround).\n",
106
+ encoding="utf-8",
107
+ )
108
+
79
109
  ns.t_COMMA = r"\,"
80
110
  ns.t_PRODUCT = "[*.]"
81
111
  ns.t_DIVISION = "/"
@@ -410,12 +440,23 @@ def _namespace_pdict(ns: types.ModuleType) -> dict[str, Any]:
410
440
  return {k: getattr(ns, k) for k in dir(ns)}
411
441
 
412
442
 
413
- def patch_generic_unit_parser() -> None:
443
+ def patch_generic_unit_parser(*, compiled: bool | None = None) -> None:
414
444
  """Patch astropy.extern.ply's frame-walking helpers to fall back to our vendored grammar.
415
445
 
416
- Safe to call unconditionally (frozen or not) -- under a normal, unfrozen interpreter the
417
- original frame walk always succeeds, so the fallback path never triggers.
446
+ Only intended for the Nuitka-compiled standalone binary. Under a regular interpreter the
447
+ original frame walk always finds the grammar, and installing the wrapper would *shift* the
448
+ walk by one stack frame and break astropy's parsing (see module docstring / pyobs-gui issue
449
+ #151), so unless ``compiled`` is true this is a strict no-op.
450
+
451
+ Pass ``compiled`` as ``"__compiled__" in globals()`` evaluated in the entry package
452
+ (``pyobs_gui/__init__.py``), which is guaranteed to be compiled in the binary. When left as
453
+ None the marker is checked in this module's own globals instead.
418
454
  """
455
+ if compiled is None:
456
+ compiled = "__compiled__" in globals()
457
+ if not compiled:
458
+ return
459
+
419
460
  from astropy.extern.ply import lex as ply_lex
420
461
  from astropy.extern.ply import yacc as ply_yacc
421
462
 
@@ -423,6 +464,14 @@ def patch_generic_unit_parser() -> None:
423
464
  original_lex_dict = ply_lex.get_caller_module_dict
424
465
 
425
466
  def _fallback_pdict(pdict: dict[str, Any] | None) -> dict[str, Any]:
467
+ # Only the *generic unit* format's grammar is vendored here. astropy's other PLY
468
+ # grammars (angle/cds/ogip/vounit) would need the identical treatment, and feeding
469
+ # them the generic grammar would silently parse with the wrong productions (that is
470
+ # exactly how the binary's coordinate parsing broke: the angle parser got the unit
471
+ # grammar). For any other grammar return the broken-locals pdict unchanged so the
472
+ # build fails loudly instead of corrupting results.
473
+ if pdict is not None and pdict.get("__name__") != "astropy.units.format.generic":
474
+ return dict(pdict)
426
475
  # Keep whatever the real (possibly broken-locals) pdict already has -- __file__/
427
476
  # __package__/__name__ are module globals and come through fine even on a compiled
428
477
  # frame -- and only supplement the missing tokens/p_*/t_* grammar entries. Replacing
@@ -435,7 +484,12 @@ def patch_generic_unit_parser() -> None:
435
484
 
436
485
  def patched_yacc_dict(levels: int) -> dict[str, Any]:
437
486
  try:
438
- pdict = original_yacc_dict(levels)
487
+ # Our wrapper adds one frame compared with the unpatched call chain (the original
488
+ # walk is now called from here instead of directly from astropy's parsing.yacc /
489
+ # _patch_ply_module wrapper), so step one level deeper to land on the same frame
490
+ # the original walk would have inspected. Without this the fallback fires under
491
+ # plain CPython and astropy's parsing breaks (pyobs-gui issue #151).
492
+ pdict = original_yacc_dict(levels + 1)
439
493
  except Exception:
440
494
  return _fallback_pdict(None)
441
495
  if "tokens" not in pdict:
@@ -444,7 +498,7 @@ def patch_generic_unit_parser() -> None:
444
498
 
445
499
  def patched_lex_dict(levels: int) -> dict[str, Any]:
446
500
  try:
447
- pdict = original_lex_dict(levels)
501
+ pdict = original_lex_dict(levels + 1)
448
502
  except Exception:
449
503
  return _fallback_pdict(None)
450
504
  if "tokens" not in pdict:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pyobs-gui"
3
- version = "2.0.0.dev22"
3
+ version = "2.0.1"
4
4
  description = "A remote GUI for pyobs"
5
5
  authors = [{ name = "Tim-Oliver Husser", email = "thusser@uni-goettingen.de" }]
6
6
  requires-python = ">=3.11"
@@ -12,7 +12,7 @@ dependencies = [
12
12
  "sunpy[all]>=7.0.1",
13
13
  "QtAwesome>=1.4.0,<2",
14
14
  "qfitswidget>=0.13.1",
15
- "pyobs-core>=2.0.0.dev93,<3",
15
+ "pyobs-core>=2.0.0,<3",
16
16
  "pyside6>=6.10.1",
17
17
  "astroplan>=0.10.1",
18
18
  "astropy>=7.0.1,<8",
@@ -3256,7 +3256,7 @@ wheels = [
3256
3256
 
3257
3257
  [[package]]
3258
3258
  name = "pyobs-core"
3259
- version = "2.0.0.dev93"
3259
+ version = "2.0.0"
3260
3260
  source = { registry = "https://pypi.org/simple" }
3261
3261
  dependencies = [
3262
3262
  { name = "aiohttp" },
@@ -3288,14 +3288,14 @@ dependencies = [
3288
3288
  { name = "tenacity" },
3289
3289
  { name = "typing-extensions" },
3290
3290
  ]
3291
- sdist = { url = "https://files.pythonhosted.org/packages/6a/af/9430d1f7e917c748c219f0fce4a1760b08829559877008e9dc006fba8c3d/pyobs_core-2.0.0.dev93.tar.gz", hash = "sha256:d88b6312ca701da6bfc3f0ad3c3ddd25a4fa7eff488acded04721a1d38527184", size = 370770, upload-time = "2026-08-23T13:09:23.719Z" }
3291
+ sdist = { url = "https://files.pythonhosted.org/packages/a1/35/57654254c92f7264454a527abc317742995189ee7d7a2d9c6c5b32c90fc5/pyobs_core-2.0.0.tar.gz", hash = "sha256:87b77406f907a9fecb4630a45c002e354134e3c8b11a51e436289489bbb18fe6", size = 374158, upload-time = "2026-08-26T11:44:08.181Z" }
3292
3292
  wheels = [
3293
- { url = "https://files.pythonhosted.org/packages/97/0f/4944d705950263bc8f615fd2069a1ef9c9fc7a3a99cbf965eb02de721f60/pyobs_core-2.0.0.dev93-py3-none-any.whl", hash = "sha256:a92e3b64bc5a93e7ae4f2a3c2c191c81d4a2098c0c6a5b77bc234320a132bc62", size = 593808, upload-time = "2026-08-23T13:09:22.045Z" },
3293
+ { url = "https://files.pythonhosted.org/packages/35/11/e8af2e0f099a16808ef1f42d398af73bc6c3935501f08a83f6628503e679/pyobs_core-2.0.0-py3-none-any.whl", hash = "sha256:3e97cc12d653978c3d963d41b984702a3169914776ef970d0fa21619d5cb3df6", size = 596861, upload-time = "2026-08-26T11:44:06.642Z" },
3294
3294
  ]
3295
3295
 
3296
3296
  [[package]]
3297
3297
  name = "pyobs-gui"
3298
- version = "2.0.0.dev22"
3298
+ version = "2.0.1"
3299
3299
  source = { editable = "." }
3300
3300
  dependencies = [
3301
3301
  { name = "astroplan" },
@@ -3339,7 +3339,7 @@ requires-dist = [
3339
3339
  { name = "colour", specifier = ">=0.1.5,<0.2" },
3340
3340
  { name = "keyring", specifier = ">=25.7.0,<26" },
3341
3341
  { name = "matplotlib", specifier = ">=3.10.1,<4" },
3342
- { name = "pyobs-core", specifier = ">=2.0.0.dev93,<3" },
3342
+ { name = "pyobs-core", specifier = ">=2.0.0,<3" },
3343
3343
  { name = "pyside6", specifier = ">=6.10.1" },
3344
3344
  { name = "qasync", specifier = ">=0.27.1,<0.29" },
3345
3345
  { name = "qfitswidget", specifier = ">=0.13.1" },
@@ -3396,7 +3396,7 @@ wheels = [
3396
3396
 
3397
3397
  [[package]]
3398
3398
  name = "pyside6"
3399
- version = "6.11.1"
3399
+ version = "6.11.2"
3400
3400
  source = { registry = "https://pypi.org/simple" }
3401
3401
  dependencies = [
3402
3402
  { name = "pyside6-addons" },
@@ -3404,42 +3404,42 @@ dependencies = [
3404
3404
  { name = "shiboken6" },
3405
3405
  ]
3406
3406
  wheels = [
3407
- { url = "https://files.pythonhosted.org/packages/da/a6/27ba5947ed48918f7b74b7c43a1e280aac069e36f25adeb4c9adfac835c4/pyside6-6.11.1-cp310-abi3-macosx_13_0_universal2.whl", hash = "sha256:537682c3b7530817203e667c1f5a2f00486b37bf52c52eeab438544c7a0917f6", size = 571921, upload-time = "2026-05-13T09:47:36.402Z" },
3408
- { url = "https://files.pythonhosted.org/packages/d8/de/af89d71410c83b10654d86ff9aff2a4f87c30163658f1cc145242e222526/pyside6-6.11.1-cp310-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:b1fc521ba2bb5109425ab8add06bddbdd524abcad06cfa012cc39a22a189feb2", size = 572102, upload-time = "2026-05-13T09:47:38.249Z" },
3409
- { url = "https://files.pythonhosted.org/packages/b6/0e/d583bd3f7bf5046a4497b36f3902cfb64aa29554489a5a25c18e6b4ac0ac/pyside6-6.11.1-cp310-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:75f0005c3eb95c07cfb65522ec50d0815ac007a96482c21dc3cb4b4c04895d84", size = 572098, upload-time = "2026-05-13T09:47:39.44Z" },
3410
- { url = "https://files.pythonhosted.org/packages/57/f2/d9d8ce1373dabb37e5919f63cd18446556079631d3f2eea3ada03c29f6b8/pyside6-6.11.1-cp310-abi3-win_amd64.whl", hash = "sha256:0968877ab1fb4ef3587a284da6fe05e8647ada56a6a3750b6395188e01f4aba6", size = 578377, upload-time = "2026-05-13T09:47:40.76Z" },
3411
- { url = "https://files.pythonhosted.org/packages/96/02/a6057d8bd2bdb1940820fff2d627fdf4013148c9c57adf69fa40d3452ac3/pyside6-6.11.1-cp310-abi3-win_arm64.whl", hash = "sha256:acee467cb5f256cc47ebb9d815a054c1d8416da380c191b247a76d164aa3f805", size = 561765, upload-time = "2026-05-13T09:47:41.9Z" },
3407
+ { url = "https://files.pythonhosted.org/packages/ae/b5/99ff75f604d69eda1c5d1fe85cc43fb697d95eabc30ba86af099c2ddcd96/pyside6-6.11.2-cp310-abi3-macosx_13_0_universal2.whl", hash = "sha256:13a3c79816879d9743672a669f1988f74459a78f89a97a2624fae4fe059ffa3a", size = 571875, upload-time = "2026-08-18T06:37:27.794Z" },
3408
+ { url = "https://files.pythonhosted.org/packages/b2/fe/968844def58150a41568b505edca0d68df6901b20ea4222ccb0c069cc703/pyside6-6.11.2-cp310-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:dc6d03990489a5085842770718392ef5de36352d8f608d9a9fe03e60af4d7b66", size = 572120, upload-time = "2026-08-18T06:37:30.298Z" },
3409
+ { url = "https://files.pythonhosted.org/packages/5e/5c/f4ecc6defaec645e5ac3ca2f99e3da286a28d1c647c2d10b584e0392b94c/pyside6-6.11.2-cp310-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:57fe867a6c93821a085d74e8a26f863fc2363516848181c466032595b33b1729", size = 572121, upload-time = "2026-08-18T06:37:32.383Z" },
3410
+ { url = "https://files.pythonhosted.org/packages/94/fe/4aea9d30300fff4cda9bb729c1363b9e1095a8544e0d6b57065465e16599/pyside6-6.11.2-cp310-abi3-win_amd64.whl", hash = "sha256:3201d67e3c10be2eaedd3910ff0f02351eca7e88c95a291cde5e7f2f55ef207f", size = 578382, upload-time = "2026-08-18T06:37:34.385Z" },
3411
+ { url = "https://files.pythonhosted.org/packages/26/b0/8e2fb01e9ee15ad29fe10d0dd2d37f503e4aa3714c9fbb07aca380618de7/pyside6-6.11.2-cp310-abi3-win_arm64.whl", hash = "sha256:0444ac71d0791a19bded35f6d9a94515941f23a6eb7098ca45a1b64a338be697", size = 561768, upload-time = "2026-08-18T06:37:36.437Z" },
3412
3412
  ]
3413
3413
 
3414
3414
  [[package]]
3415
3415
  name = "pyside6-addons"
3416
- version = "6.11.1"
3416
+ version = "6.11.2"
3417
3417
  source = { registry = "https://pypi.org/simple" }
3418
3418
  dependencies = [
3419
3419
  { name = "pyside6-essentials" },
3420
3420
  { name = "shiboken6" },
3421
3421
  ]
3422
3422
  wheels = [
3423
- { url = "https://files.pythonhosted.org/packages/3f/6b/8bc94aff48b63f788f2d84e5467c12362d68906ba742c0942f46cb04c879/pyside6_addons-6.11.1-cp310-abi3-macosx_13_0_universal2.whl", hash = "sha256:54733c77f789bef5f03c6aff4ad3bec8b2eff021f0cfcbc53d5e6c250ded24f9", size = 331714589, upload-time = "2026-05-13T09:39:12.36Z" },
3424
- { url = "https://files.pythonhosted.org/packages/dd/62/fb1428a523b2a4541e232aab50d9e789e6b4526f37fd9593452a7ea5b6b3/pyside6_addons-6.11.1-cp310-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:8e6c65fbd73a512d6f72cda8d8277444a85a34dc99dd1dae9c21d35b8671bb1f", size = 175063224, upload-time = "2026-05-13T09:39:34.185Z" },
3425
- { url = "https://files.pythonhosted.org/packages/ee/9b/2ccd52f66db55c06de65d0501170a1935d04d64d0a230c0d892284a02ce3/pyside6_addons-6.11.1-cp310-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:bf1c6c4e954e5eba3d2a7c661ad4b9689e8f09c7f4a16bdf29713371d11af993", size = 170553429, upload-time = "2026-05-13T09:39:54.424Z" },
3426
- { url = "https://files.pythonhosted.org/packages/9a/bd/8adc4d350b3b363f3dfc8fccdcf5bfed25f7e36c2fff30c64e106f4f1572/pyside6_addons-6.11.1-cp310-abi3-win_amd64.whl", hash = "sha256:0d13c4dfd671b050a48e4f8d8ddc724b7248f9c0437e7fc47fdf316278572923", size = 168816308, upload-time = "2026-05-13T09:40:13.541Z" },
3427
- { url = "https://files.pythonhosted.org/packages/65/b7/9a840d97f0f0f04e372a87e205dd30ee285b4e3b021b188459a917c9dc76/pyside6_addons-6.11.1-cp310-abi3-win_arm64.whl", hash = "sha256:3494f480dee92f415be2f2d989c0b3f4755ac332b28045cbf4ba0f5c5a22ba37", size = 35759347, upload-time = "2026-05-13T09:40:21.199Z" },
3423
+ { url = "https://files.pythonhosted.org/packages/e3/91/339fe9f7c94163815004ccd6b5c58b926b2dfb4e51c3b5563d412eab151f/pyside6_addons-6.11.2-cp310-abi3-macosx_13_0_universal2.whl", hash = "sha256:354c574a839f7d0751960ba03f33bec87c95e0f2796dca3287f54d03abe97dac", size = 332047075, upload-time = "2026-08-18T06:35:33.037Z" },
3424
+ { url = "https://files.pythonhosted.org/packages/28/cd/ce470e20f68901f4dfa5f742d6a3a58ba865684a232e4b87d5a1a2179cc0/pyside6_addons-6.11.2-cp310-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:a8b00956925fbdeffc7052cf933506391289f35ac4f3f71a0a167ec195cd47b4", size = 175062576, upload-time = "2026-08-18T06:35:45.583Z" },
3425
+ { url = "https://files.pythonhosted.org/packages/11/bd/f725a8984703612c72cd17d0871d047132bacaccc13fc0d288a5e8a37dad/pyside6_addons-6.11.2-cp310-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:a2ca3c73e5f060d4aca49451abd9fba68dd0e1c66ff40cea3a1fe0415def579a", size = 170827254, upload-time = "2026-08-18T06:35:56.675Z" },
3426
+ { url = "https://files.pythonhosted.org/packages/fb/c1/08bf6594101b42fc88834009f1dac59a983c5b6805c62c5081f077d09b4a/pyside6_addons-6.11.2-cp310-abi3-win_amd64.whl", hash = "sha256:f449ea4431da20e7b86752cca8d166f93434516fe417f981c27e5f8e1b554407", size = 168208836, upload-time = "2026-08-18T06:36:07.295Z" },
3427
+ { url = "https://files.pythonhosted.org/packages/26/60/e4b7f09343e9f29e565f488fb44c4f1fe260db481ba2c08ad8a1a7d48216/pyside6_addons-6.11.2-cp310-abi3-win_arm64.whl", hash = "sha256:d5606af369484b862b4d5741cfc179e19d2b8819c3e04d210b8188e0c9f85988", size = 35807245, upload-time = "2026-08-18T06:36:12.485Z" },
3428
3428
  ]
3429
3429
 
3430
3430
  [[package]]
3431
3431
  name = "pyside6-essentials"
3432
- version = "6.11.1"
3432
+ version = "6.11.2"
3433
3433
  source = { registry = "https://pypi.org/simple" }
3434
3434
  dependencies = [
3435
3435
  { name = "shiboken6" },
3436
3436
  ]
3437
3437
  wheels = [
3438
- { url = "https://files.pythonhosted.org/packages/b3/da/10d9197e7370eb4fed8df5fc547b7548dec88e5c5949e2d450db4ae96feb/pyside6_essentials-6.11.1-cp310-abi3-macosx_13_0_universal2.whl", hash = "sha256:228de53c2bc26b07e5021fbe3614fc44ca08e4dab9999af08c2b389d2c239957", size = 110352945, upload-time = "2026-05-13T09:43:08.006Z" },
3439
- { url = "https://files.pythonhosted.org/packages/5c/49/0e1237c4400bec7e335d2c4eeb49bc40d9fd88a9ac44ca9083ce1abdc308/pyside6_essentials-6.11.1-cp310-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:e3ef7027b41e4e55fadb56e3b3257dc8ee92154b639fe67fc4c8e05e9d976c60", size = 79908535, upload-time = "2026-05-13T09:43:24.836Z" },
3440
- { url = "https://files.pythonhosted.org/packages/4c/c5/da4c5f23c6540ac5211a1f60177c8dee84b1bf40f2719479587ab8c60731/pyside6_essentials-6.11.1-cp310-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:a039b6da68a3a4b9d243217b2b98d475eed3f617159ef6be925badab53c11b0d", size = 78960051, upload-time = "2026-05-13T09:43:35.423Z" },
3441
- { url = "https://files.pythonhosted.org/packages/64/0e/b663ecc96ca57b5c91b83b6615d6b174380b0faf30338125c26e053d6aa7/pyside6_essentials-6.11.1-cp310-abi3-win_amd64.whl", hash = "sha256:63311bd48e32c584599ab04b9ef7c324082374cd2c9fa533f978fb893bb47e40", size = 77549267, upload-time = "2026-05-13T09:43:44.92Z" },
3442
- { url = "https://files.pythonhosted.org/packages/f1/12/eb6723faf5cb7fa581145da1c15f40d641b96e080f0491af2f1859fdeedb/pyside6_essentials-6.11.1-cp310-abi3-win_arm64.whl", hash = "sha256:11253ea52aabecefe9febddbbe78b43a824129e3af1cec98431028fba7fa954f", size = 57964512, upload-time = "2026-05-13T09:43:52.968Z" },
3438
+ { url = "https://files.pythonhosted.org/packages/6f/16/0b7ecf89ebada82ed0430be33809ff325761ece83104f8635b1bd101fcd0/pyside6_essentials-6.11.2-cp310-abi3-macosx_13_0_universal2.whl", hash = "sha256:77795c145202e65a78d88f7cd409d186e3ba23d159bdb3ba2dcd159ae5e5f0d9", size = 110800753, upload-time = "2026-08-18T06:36:33.674Z" },
3439
+ { url = "https://files.pythonhosted.org/packages/0e/1a/84a84bbc75835ee88abdcb66eb875b8e1a21834af9b833bc1893f2c1bfaf/pyside6_essentials-6.11.2-cp310-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:aaf9f25f0f324874085fa5b26a610318db8a8e243cf85bb3e5400595191c7778", size = 80108947, upload-time = "2026-08-18T06:36:40.637Z" },
3440
+ { url = "https://files.pythonhosted.org/packages/60/4c/d92b08a2151d095b9a3725fa0e71b215ec686d40bbd5d8b702d21a9b5eaa/pyside6_essentials-6.11.2-cp310-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:d3ec6e1885c46e57f16364f38ea8040ffc5dc0b18341058f608fede3ba930567", size = 79575497, upload-time = "2026-08-18T06:36:46.97Z" },
3441
+ { url = "https://files.pythonhosted.org/packages/dc/09/d2662684aee4d3f027ff9b1e965f22301bc28ffc5b7f167658508e4475dc/pyside6_essentials-6.11.2-cp310-abi3-win_amd64.whl", hash = "sha256:c8a29def77032773a30879f7f24415b5395ad08592d147c170824ef4c735dfc1", size = 76913043, upload-time = "2026-08-18T06:36:54.038Z" },
3442
+ { url = "https://files.pythonhosted.org/packages/cd/87/4dd2a6468cea600da1fcf9c7f02bc248eeaa98cdc75658e48e669d95326a/pyside6_essentials-6.11.2-cp310-abi3-win_arm64.whl", hash = "sha256:fadd75c5c20800d64dd0a586ea8cb337c5e630aa2246df0e5105738afa46e02c", size = 58125520, upload-time = "2026-08-18T06:36:59.073Z" },
3443
3443
  ]
3444
3444
 
3445
3445
  [[package]]
@@ -4035,14 +4035,14 @@ wheels = [
4035
4035
 
4036
4036
  [[package]]
4037
4037
  name = "shiboken6"
4038
- version = "6.11.1"
4038
+ version = "6.11.2"
4039
4039
  source = { registry = "https://pypi.org/simple" }
4040
4040
  wheels = [
4041
- { url = "https://files.pythonhosted.org/packages/17/f3/f2b63df0251e7cd3172ea28e32ede52739de9566bcefcd0178681538ac81/shiboken6-6.11.1-cp310-abi3-macosx_13_0_universal2.whl", hash = "sha256:1a16867f103ef1c662a5f09dfed03273a9f81688b174555162c58e83650a3f02", size = 476874, upload-time = "2026-05-13T09:47:01.091Z" },
4042
- { url = "https://files.pythonhosted.org/packages/c7/9b/e0355d8897b5c150770f1d95718aad17d432fcc9c035c04f3f58427d4693/shiboken6-6.11.1-cp310-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:9a8bccfafc8805254cabcfa1edfaf55cd52889f4998c91ad0d9a4433fb1bcdbe", size = 272222, upload-time = "2026-05-13T09:47:02.653Z" },
4043
- { url = "https://files.pythonhosted.org/packages/57/d5/dd4f1defed400be03340f2ede34b61f846776650b4e7ed9ebaf4c71979a2/shiboken6-6.11.1-cp310-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:1bd2f4314414df2d122d9f646e03b731bc6d6b5f77a5f53f99a4fe4e97d84e6f", size = 270350, upload-time = "2026-05-13T09:47:04.02Z" },
4044
- { url = "https://files.pythonhosted.org/packages/52/b5/3f6fb2ee65b534193fb4ef713dd619dc31dadff5d12c16979a7699ad58be/shiboken6-6.11.1-cp310-abi3-win_amd64.whl", hash = "sha256:c2c6863aa80ec18c0f82cea3417837b279cdc60024ac17123461dc9042577df7", size = 1223647, upload-time = "2026-05-13T09:47:05.924Z" },
4045
- { url = "https://files.pythonhosted.org/packages/98/d1/f15ca0e1666faae02c945f48e745ea35f8fcd8243b176109b4e2c4251f47/shiboken6-6.11.1-cp310-abi3-win_arm64.whl", hash = "sha256:7c8d9af17db4495d4fa5b1c393f218311c4855546b9dfa6a0bd21bcd66b55e9d", size = 1784170, upload-time = "2026-05-13T09:47:07.617Z" },
4041
+ { url = "https://files.pythonhosted.org/packages/47/44/11bf71c36e71936ab4e923e5dd23599dab527c4488b01860b0f689ce9947/shiboken6-6.11.2-cp310-abi3-macosx_13_0_universal2.whl", hash = "sha256:53659683b1f7a08e9f87eff9b1065f1ceb7110cd7a4bc09fdf5efe43d286604d", size = 476674, upload-time = "2026-08-18T06:37:11.526Z" },
4042
+ { url = "https://files.pythonhosted.org/packages/a5/9a/f41bea4316d0c1bec4800842dcb4bd8fd3e29d6a79c496bc32e1aec42583/shiboken6-6.11.2-cp310-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:7a7a0a72a9ed26c9bf77d42246b1c736486befb8f31aa2fb29957ea4cdd1c1c2", size = 272435, upload-time = "2026-08-18T06:37:13.397Z" },
4043
+ { url = "https://files.pythonhosted.org/packages/56/05/79ed0697515d4fc7435459e4ed4c4a3b5621a55b7c91d0f3f2cc3d617aa0/shiboken6-6.11.2-cp310-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:4bbbd6fa4d7cff5ec5e12bc4c10e1d845fa30c89457ecb13cc64f7bddb77f6f9", size = 270668, upload-time = "2026-08-18T06:37:15.025Z" },
4044
+ { url = "https://files.pythonhosted.org/packages/ce/6b/fee1b4814317e4664e318644c9c007676c65a71e5b2b9d3ac4121a94dc0a/shiboken6-6.11.2-cp310-abi3-win_amd64.whl", hash = "sha256:6ab0eba1c904455df621f9a6df3ca2bb896bab8670572d2bc4e37804ae91f19a", size = 1226578, upload-time = "2026-08-18T06:37:18.002Z" },
4045
+ { url = "https://files.pythonhosted.org/packages/4d/b5/80c4e5aafeb8ac777cf5a1becfe87ac7197c35051df00b5f7819787e09d5/shiboken6-6.11.2-cp310-abi3-win_arm64.whl", hash = "sha256:97c49432488df958f0308736f3d15b6915d8826fc380af17bb4b9ec5c4a5e81b", size = 1784669, upload-time = "2026-08-18T06:37:21.046Z" },
4046
4046
  ]
4047
4047
 
4048
4048
  [[package]]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes