pyobs-gui 2.6.0__tar.gz → 2.6.2__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 (204) hide show
  1. pyobs_gui-2.6.2/CHANGELOG.md +910 -0
  2. pyobs_gui-2.6.2/CONTRIBUTING.md +35 -0
  3. pyobs_gui-2.6.2/PKG-INFO +60 -0
  4. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyproject.toml +9 -2
  5. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/uv.lock +69 -452
  6. pyobs_gui-2.6.0/CHANGELOG.rst +0 -2
  7. pyobs_gui-2.6.0/PKG-INFO +0 -26
  8. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/.claude/skills/verify/SKILL.md +0 -0
  9. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/.github/dependabot.yml +0 -0
  10. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/.github/workflows/dependabot-automerge.yml +0 -0
  11. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/.github/workflows/pypi.yml +0 -0
  12. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/.github/workflows/pyrefly.yml +0 -0
  13. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/.github/workflows/ruff.yml +0 -0
  14. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/.gitignore +0 -0
  15. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/.pre-commit-config.yaml +0 -0
  16. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/.readthedocs.yml +0 -0
  17. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/CLAUDE.md +0 -0
  18. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/LICENSE +0 -0
  19. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/README.md +0 -0
  20. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/bin/mypyuic5 +0 -0
  21. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/docs/Makefile +0 -0
  22. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/docs/make.bat +0 -0
  23. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/docs/requirements.txt +0 -0
  24. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/docs/source/_static/pyobs.gif +0 -0
  25. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/docs/source/conf.py +0 -0
  26. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/docs/source/index.rst +0 -0
  27. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/mypy.ini +0 -0
  28. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/__init__.py +0 -0
  29. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/__main__.py +0 -0
  30. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/_nuitka_astropy_patch.py +0 -0
  31. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/accounts.py +0 -0
  32. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/acquisitionwidget.py +0 -0
  33. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/autofocuswidget.py +0 -0
  34. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/autoguidingwidget.py +0 -0
  35. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/base.py +0 -0
  36. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/camerawidget.py +0 -0
  37. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/commandinputwidget.py +0 -0
  38. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/compassmovewidget.py +0 -0
  39. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/coolingwidget.py +0 -0
  40. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/datadisplaywidget.py +0 -0
  41. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/eventswidget.py +0 -0
  42. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/filterwidget.py +0 -0
  43. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/fitsheaderswidget.py +0 -0
  44. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/focuswidget.py +0 -0
  45. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/gui.py +0 -0
  46. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/guisignals.py +0 -0
  47. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/livestream.py +0 -0
  48. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/login.py +0 -0
  49. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/loginwindow.py +0 -0
  50. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/logmodel.py +0 -0
  51. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/mainwindow.py +0 -0
  52. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/modewidget.py +0 -0
  53. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/modifiedmixin.py +0 -0
  54. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/modulegui.py +0 -0
  55. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/movestack.py +0 -0
  56. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/notificationmanager.py +0 -0
  57. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/notifications.py +0 -0
  58. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/notifier.py +0 -0
  59. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/notifier_backend.py +0 -0
  60. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/nowheelfilter.py +0 -0
  61. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/__init__.py +0 -0
  62. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/acquisitionwidget.ui +0 -0
  63. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/acquisitionwidget_ui.py +0 -0
  64. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/autofocuswidget.ui +0 -0
  65. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/autofocuswidget_ui.py +0 -0
  66. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/autoguidingwidget.ui +0 -0
  67. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/autoguidingwidget_ui.py +0 -0
  68. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/camerawidget.ui +0 -0
  69. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/camerawidget_ui.py +0 -0
  70. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/compassmoveplugin.py +0 -0
  71. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/compassmovewidget.py +0 -0
  72. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/compassmovewidget.ui +0 -0
  73. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/compassmovewidget_ui.py +0 -0
  74. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/compile.sh +0 -0
  75. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/coolingwidget.ui +0 -0
  76. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/coolingwidget_ui.py +0 -0
  77. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/datadisplayplugin.py +0 -0
  78. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/datadisplaywidget.ui +0 -0
  79. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/datadisplaywidget_ui.py +0 -0
  80. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/designer.sh +0 -0
  81. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/eventswidget.ui +0 -0
  82. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/eventswidget_ui.py +0 -0
  83. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/filterwidget.ui +0 -0
  84. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/filterwidget_ui.py +0 -0
  85. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/fitsheaderswidget.ui +0 -0
  86. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/fitsheaderswidget_ui.py +0 -0
  87. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/focuswidget.ui +0 -0
  88. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/focuswidget_ui.py +0 -0
  89. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/mainwindow.ui +0 -0
  90. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/mainwindow_ui.py +0 -0
  91. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/modewidget.ui +0 -0
  92. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/modewidget_ui.py +0 -0
  93. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/resources/arrow-alt-circle-down-solid.svg +0 -0
  94. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/resources/arrow-alt-circle-left-solid.svg +0 -0
  95. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/resources/arrow-alt-circle-right-solid.svg +0 -0
  96. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/resources/arrow-alt-circle-up-solid.svg +0 -0
  97. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/resources/arrow-up-right-from-square-solid.svg +0 -0
  98. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/resources/arrows-to-eye-solid.svg +0 -0
  99. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/resources/chart-line-solid.svg +0 -0
  100. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/resources/circle-question-solid.svg +0 -0
  101. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/resources/cloud-sun-solid.svg +0 -0
  102. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/resources/edit-solid.svg +0 -0
  103. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/resources/search-solid.svg +0 -0
  104. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/resources/undo-solid.svg +0 -0
  105. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/resources.qrc +0 -0
  106. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/resources_rc.py +0 -0
  107. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/roboticwidget.ui +0 -0
  108. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/roboticwidget_ui.py +0 -0
  109. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/roofwidget.ui +0 -0
  110. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/roofwidget_ui.py +0 -0
  111. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/schedulewidget.ui +0 -0
  112. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/schedulewidget_ui.py +0 -0
  113. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/shellwidget.ui +0 -0
  114. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/shellwidget_ui.py +0 -0
  115. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/spectrographwidget.ui +0 -0
  116. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/spectrographwidget_ui.py +0 -0
  117. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/telescopewidget.ui +0 -0
  118. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/telescopewidget_ui.py +0 -0
  119. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/temperaturesplotwidget.ui +0 -0
  120. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/temperaturesplotwidget_ui.py +0 -0
  121. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/temperatureswidget.ui +0 -0
  122. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/temperatureswidget_ui.py +0 -0
  123. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/videograbwidget.ui +0 -0
  124. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/videograbwidget_ui.py +0 -0
  125. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/videowidget.ui +0 -0
  126. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/videowidget_ui.py +0 -0
  127. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/weatherwidget.ui +0 -0
  128. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/qt/weatherwidget_ui.py +0 -0
  129. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/roboticwidget.py +0 -0
  130. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/roofwidget.py +0 -0
  131. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/schedulewidget.py +0 -0
  132. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/settings.py +0 -0
  133. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/settingsdialog.py +0 -0
  134. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/shellwidget.py +0 -0
  135. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/spectrographwidget.py +0 -0
  136. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/statuswidget.py +0 -0
  137. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/structuredconfigwidget.py +0 -0
  138. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/telescopewidget.py +0 -0
  139. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/temperaturesplotwidget.py +0 -0
  140. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/temperatureswidget.py +0 -0
  141. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/utils.py +0 -0
  142. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/videograbwidget.py +0 -0
  143. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/videowidget.py +0 -0
  144. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/watchedlabel.py +0 -0
  145. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/weatherwidget.py +0 -0
  146. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pyobs_gui/windows_identity.py +0 -0
  147. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/pysidedeploy.spec +0 -0
  148. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/specs/2026-08-20-gui-remote-call-error-handling.md +0 -0
  149. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/specs/2026-08-21-gui-widget-startup-responsiveness.md +0 -0
  150. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/specs/2026-08-28-gui-main-vs-sidebar-widgets.md +0 -0
  151. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/specs/2026-08-28-structuredconfig-widget.md +0 -0
  152. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/specs/2026-08-31-irobotic-widgets.md +0 -0
  153. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/specs/2026-09-01-gui-video-widget-split.md +0 -0
  154. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/specs/2026-09-14-fitswidget-toolbar-overflow.md +0 -0
  155. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/specs/2026-09-14-stacked-widget-scroll-fallback.md +0 -0
  156. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/specs/2026-09-29-live-view-mjpeg-raw.md +0 -0
  157. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/specs/2026-10-04-desktop-notifications.md +0 -0
  158. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/specs/2026-10-04-settings-dialog.md +0 -0
  159. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/specs/index.md +0 -0
  160. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/specs/plans/2026-10-04-desktop-notifications.md +0 -0
  161. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/specs/plans/2026-10-04-settings-dialog.md +0 -0
  162. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/specs/plans/index.md +0 -0
  163. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/spike_standalone/main.py +0 -0
  164. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/spike_standalone/pysidedeploy.spec +0 -0
  165. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/test/acquisition.yaml +0 -0
  166. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/test/autofocus.yaml +0 -0
  167. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/test/camera.yaml +0 -0
  168. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/test/full.yaml +0 -0
  169. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/test/guiding.yaml +0 -0
  170. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/test/mode.yaml +0 -0
  171. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/test/robotic.yaml +0 -0
  172. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/test/roof.yaml +0 -0
  173. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/test/spectrograph.yaml +0 -0
  174. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/test/structuredconfig.yaml +0 -0
  175. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/test/telescope.yaml +0 -0
  176. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/test/telescope_acl.yaml +0 -0
  177. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/test/telescope_acl_denied.yaml +0 -0
  178. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/test/video.yaml +0 -0
  179. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/__init__.py +0 -0
  180. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/conftest.py +0 -0
  181. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_accounts.py +0 -0
  182. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_basewidget_discard.py +0 -0
  183. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_camerawidget.py +0 -0
  184. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_gui_notifications.py +0 -0
  185. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_import_order.py +0 -0
  186. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_livestream.py +0 -0
  187. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_loginwindow.py +0 -0
  188. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_mainwindow_startup.py +0 -0
  189. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_missing_vfs_root.py +0 -0
  190. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_modewidget.py +0 -0
  191. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_multiwidget_pages.py +0 -0
  192. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_notificationmanager.py +0 -0
  193. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_notifications.py +0 -0
  194. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_notifier_backend.py +0 -0
  195. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_roboticwidget.py +0 -0
  196. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_schedulewidget.py +0 -0
  197. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_settings.py +0 -0
  198. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_settingsdialog.py +0 -0
  199. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_spectrographwidget.py +0 -0
  200. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_structuredconfigwidget.py +0 -0
  201. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_video_refresh.py +0 -0
  202. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_videograbwidget.py +0 -0
  203. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_videowidget.py +0 -0
  204. {pyobs_gui-2.6.0 → pyobs_gui-2.6.2}/tests/test_windows_identity.py +0 -0
@@ -0,0 +1,910 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ Entries for releases before this file existed were generated from commit subjects.
9
+
10
+ ## [2.6.1] - 2026-10-04
11
+
12
+ - Require pyobs-core 2.14.0, which has the slimmed base dependencies
13
+
14
+ ## [2.6.0] - 2026-10-04
15
+
16
+ - Declare astroquery, imported directly by telescopewidget
17
+ - Fix live view test: write the JPEG stand-in via a file
18
+ - Fix pyrefly errors in the live view
19
+ - Require qfitswidget>=1.2.0 (QImageWidget)
20
+ - Live view: use qfitswidget's QImageWidget for the stretch/cuts controls
21
+ - Skip hideEvent task when no event loop is running
22
+ - Slim dependencies: sunpy without extras, pyside6-essentials, declare pandas
23
+ - docs: settings and desktop notifications user docs, plan and status updates (#168)
24
+ - Add test notification button to the settings dialog (#168)
25
+ - docs: desktop notifications plan, KDE live check done
26
+ - Import pydantic before PySide6 so pyobs <config> can load pyobs_gui
27
+ - docs: desktop notifications plan, step 4 done
28
+ - Add NotificationManager and wire desktop notifications into the GUI (#168)
29
+ - docs: desktop notifications plan, step 3 done except Windows COM check
30
+ - Add desktop-notifier backend, failure guard and Windows app identity (#168)
31
+ - docs: desktop notifications plan, step 2 done
32
+ - Add Notifier protocol and NotificationPolicy for desktop notifications (#168)
33
+ - docs: drop packaging from the notification spike (standalone binary was rejected)
34
+ - docs: record Windows notification spike result and app identity (#168)
35
+ - docs: record KDE and GNOME notification spike results (#168)
36
+ - docs: plan for desktop notifications (#168)
37
+ - docs: design for desktop notifications (#168)
38
+ - Require pyobs-core 2.13.5 for VirtualFileSystem.set_roots()
39
+ - docs: settings dialog plan, step 5 and settings path
40
+ - Add standalone settings dialog (notifications, VFS roots) and wire settings into GUI
41
+ - docs: settings dialog plan, step 4 progress
42
+ - VideoWidget: re-resolve stream URLs when the settings change
43
+ - docs: tick settings dialog plan step 3
44
+ - Add GUI settings schema, per-account SettingsStore and notifications config
45
+ - docs: settings dialog audit findings and #185 plan status
46
+ - Show a clear error when a VFS root is not configured (#185)
47
+ - docs: design and plan for settings schema, YAML config and standalone settings dialog
48
+ - Live view: choose MJPEG (server stretch) or raw stream (client stretch)
49
+ - Fix pyrefly bad-override in test_basewidget_discard
50
+
51
+ ## [2.5.3] - 2026-09-29
52
+
53
+ - Require pyobs-core>=2.13.0
54
+
55
+ ## [2.5.2] - 2026-09-29
56
+
57
+ - Discard embedded child widgets, e.g. DataDisplayWidget
58
+ - specs: reference pyobs-core BaseVideo live-view design
59
+
60
+ ## [2.5.1] - 2026-09-23
61
+
62
+ - Maintenance release (dependency and metadata updates only).
63
+
64
+ ## [2.5.0] - 2026-09-17
65
+
66
+ - feat: prefer server-side IDataSequence sequences in SpectrographWidget
67
+ - docs: fitswidget-toolbar-overflow released -- qfitswidget v1.1.3, pyobs-gui v2.4.2
68
+
69
+ ## [2.4.2] - 2026-09-15
70
+
71
+ - Fix sidebar min/max width bug that clipped real (non-sparse) content
72
+ - Fix sidebar-toggle icon direction: point where the click will move it, not current state
73
+ - Wrap stackedWidget in a QScrollArea as a general width/height-floor fallback
74
+ - Add plan: QScrollArea fallback around stackedWidget
75
+ - ModulePage: give the sidebar a real minimum width, plus a collapse toggle
76
+ - TelescopeWidget: size the move-type stack to the current page, wrap long form rows
77
+ - docs: gui-standalone-binary rejected -- real build came out several GB
78
+ - Suppress spurious astropy do_format RuntimeWarning in telescope widget
79
+ - Add CLAUDE.md entry point pointing to specs/ conventions and tooling
80
+
81
+ ## [2.4.1] - 2026-09-04
82
+
83
+ - Fix pyobs-core floor: ConfigFieldSchema.description needs >=2.7.2, not 2.7.1
84
+
85
+ ## [2.4.0] - 2026-09-04
86
+
87
+ - feat: show field description below the input widget
88
+ - feat: hide EXPERT fields instead of disabling them
89
+
90
+ ## [2.3.1] - 2026-09-04
91
+
92
+ - bumped core pin
93
+ - feat: basic/expert field visibility in StructuredConfigWidget
94
+ - Close out main-vs-sidebar-widgets plan: issue #150 closed, released v2.3.0
95
+ - Close out video-widget-split doc with release refs
96
+
97
+ ## [2.3.0] - 2026-09-03
98
+
99
+ - Fix ModeWidget's edit button staying permanently disabled without IMotion
100
+ - Fix CameraWidget control panel clipping its right edge
101
+ - Split VideoWidget into two independent main widgets, no sidebar pairing needed
102
+
103
+ ## [2.2.0] - 2026-09-03
104
+
105
+ - fix: build matplotlib figures via the OO API, not pyplot
106
+ - fix: gate camera/roof widget state subscriptions on interface support
107
+ - fix: drop stale top-level name: field from test/*.yaml fixtures
108
+ - test: add structuredconfig.yaml fixture for manual StructuredConfigWidget verification
109
+ - feat: generic IStructuredConfig widget, schema-driven config form (#154)
110
+ - docs: mark main-vs-sidebar-widgets plan implemented (#150, PR #157)
111
+ - feat: make ModulePage sidebar vertically scrollable
112
+ - fix: align FitsHeadersWidget sidebar box with Temperatures/Cooling
113
+ - fix: address PR #157 review findings 1-5 plus nits
114
+ - fix: gate FitsHeadersWidget to ICamera/IVideo, not every module
115
+ - docs: document main/sidebar widgets and widgets:/sidebar: config contract
116
+ - Add tests for multi-widget pages and the new MAIN_WIDGETS registry
117
+ - Implement main-vs-sidebar widget registry and tab pages (#150)
118
+ - docs(specs): fix double-tab and invisible-sidebar bugs in #150 plan, add VideoWidget split follow-up
119
+ - docs: mark irobotic-widgets plan implemented/closed (#825, PR #155)
120
+ - Re-enable whole-row selection in ScheduleWidget table
121
+ - Hide row headers and disable focus/selection rect in ScheduleWidget table
122
+ - Cap autonomous-warning label height; use equal-width stretched columns
123
+ - Auto-size ScheduleWidget columns; raise test config's blocked_probability
124
+ - Add RoboticWidget/ScheduleWidget for IRobotic/IRoboticScheduler (#825)
125
+ - docs: plan RoboticWidget/ScheduleWidget for IRobotic/IRoboticScheduler (#825)
126
+ - docs: fix stale irobotic.md status in specs index
127
+ - docs(specs): add main vs. sidebar widget tab-pages plan (issue #150)
128
+ - docs(specs): add generic IStructuredConfig widget plan (issue #154)
129
+ - fix: make _nuitka_astropy_patch a no-op outside Nuitka builds (fixes #151) (#152)
130
+ - Require stable pyobs-core>=2.0.0
131
+ - Add Dependabot auto-merge workflow
132
+ - Drop Sphinx <9/sphinx-rtd-theme <4 caps to match the rest of the fleet
133
+ - Add widget catalog and keyboard shortcuts to docs, rewrite README
134
+ - feat(videowidget): send Authorization header on raw-socket MJPEG stream (#142)
135
+ - docs: mark widget startup responsiveness plan implemented, closed
136
+ - feat: make module widgets appear and respond immediately at startup (#141)
137
+ - Index the BaseVideo HTTP token-auth plan from pyobs-core
138
+ - docs: address review findings in widget startup plan
139
+ - docs: fix widget startup plan's placeholder-swap bug, harden teardown
140
+
141
+ ## [2.1.0] - 2026-09-01
142
+
143
+ - fix: drop stale top-level name: field from test/*.yaml fixtures
144
+ - test: add structuredconfig.yaml fixture for manual StructuredConfigWidget verification
145
+ - feat: generic IStructuredConfig widget, schema-driven config form (#154)
146
+ - docs: mark main-vs-sidebar-widgets plan implemented (#150, PR #157)
147
+ - feat: make ModulePage sidebar vertically scrollable
148
+ - fix: align FitsHeadersWidget sidebar box with Temperatures/Cooling
149
+ - fix: address PR #157 review findings 1-5 plus nits
150
+ - fix: gate FitsHeadersWidget to ICamera/IVideo, not every module
151
+ - docs: document main/sidebar widgets and widgets:/sidebar: config contract
152
+ - Add tests for multi-widget pages and the new MAIN_WIDGETS registry
153
+ - Implement main-vs-sidebar widget registry and tab pages (#150)
154
+ - docs(specs): fix double-tab and invisible-sidebar bugs in #150 plan, add VideoWidget split follow-up
155
+ - docs: mark irobotic-widgets plan implemented/closed (#825, PR #155)
156
+ - Re-enable whole-row selection in ScheduleWidget table
157
+ - Hide row headers and disable focus/selection rect in ScheduleWidget table
158
+ - Cap autonomous-warning label height; use equal-width stretched columns
159
+ - Auto-size ScheduleWidget columns; raise test config's blocked_probability
160
+ - Add RoboticWidget/ScheduleWidget for IRobotic/IRoboticScheduler (#825)
161
+ - docs: plan RoboticWidget/ScheduleWidget for IRobotic/IRoboticScheduler (#825)
162
+ - docs: fix stale irobotic.md status in specs index
163
+ - docs(specs): add main vs. sidebar widget tab-pages plan (issue #150)
164
+ - docs(specs): add generic IStructuredConfig widget plan (issue #154)
165
+
166
+ ## [2.0.1] - 2026-08-28
167
+
168
+ - fix: make _nuitka_astropy_patch a no-op outside Nuitka builds (fixes #151) (#152)
169
+
170
+ ## [2.0.0] - 2026-08-26
171
+
172
+ - Require stable pyobs-core>=2.0.0
173
+ - Add Dependabot auto-merge workflow
174
+ - Drop Sphinx <9/sphinx-rtd-theme <4 caps to match the rest of the fleet
175
+ - Add widget catalog and keyboard shortcuts to docs, rewrite README
176
+ - feat(videowidget): send Authorization header on raw-socket MJPEG stream (#142)
177
+ - docs: mark widget startup responsiveness plan implemented, closed
178
+ - feat: make module widgets appear and respond immediately at startup (#141)
179
+ - Index the BaseVideo HTTP token-auth plan from pyobs-core
180
+ - docs: address review findings in widget startup plan
181
+ - docs: fix widget startup plan's placeholder-swap bug, harden teardown
182
+ - docs: add widget startup responsiveness plan
183
+ - Fix MJPEG live view through TLS reverse proxy
184
+ - docs: mark remote-call error-handling plan implemented, fix stale specs index
185
+ - Catch exceptions on remote method calls and show them in a messagebox (fixes #134) (#138)
186
+ - Fix VideoWidget to use VideoCapabilities.mjpeg instead of removed .video field
187
+ - Remove upper bound on Python version
188
+ - Fix sender name in DataDisplayWidget.grab_data
189
+ - Rename specs/README.md to index.md
190
+ - Add exposure count to SpectrographWidget
191
+ - Fix pre-existing pyrefly errors in weatherwidget and camerawidget test
192
+ - Fix image display in DataDisplayWidget
193
+ - Upgrade uv.lock to clear open Dependabot alerts
194
+ - Fix asyncio task reentrancy in focus widget dialogs
195
+ - Show 4 decimal digits for Heliprojective Radial Mu/Psi spin boxes
196
+ - Only use server-side IDataSequence sequences when broadcasting
197
+ - Stop forcing the Alt/Az offset plot to include the origin
198
+ - Type the PLY grammar namespace as Any to fix pyrefly CI failure
199
+ - Plot sensor history in WeatherWidget's reserved plot frame
200
+ - Move DEV_*.md design docs and DEVELOPMENT.md into pyobs-core/specs/
201
+ - Bundle package distribution metadata for importlib.metadata lookups
202
+ - Bundle slixmpp plugins, drop QtWebEngine from the standalone binary
203
+ - Build recipe for the standalone pyobs-gui binary
204
+ - Add pyobs-gui console script entry point
205
+ - Revert "v2.0.0.dev5"
206
+ - Enlarge nav sidebar and log panel defaults, swap clear-log icon to a trash bin
207
+ - Replace the client-select list with icon toolbuttons next to the log
208
+ - Fix shiboken crash from stale StatusWidget callbacks after logout
209
+ - Fetch telescope location from the module itself when no local observer exists
210
+ - Add a "logged in as" sidebar and standalone logout flow to MainWindow
211
+ - Standalone binary groundwork: pyside6-deploy spike and the login window (#116)
212
+ - Require pyobs-core>=2.0.0.dev48
213
+ - Point to the new pyobs-gui standalone-binary docs
214
+ - Read IRunning state instead of calling the removed is_running() RPC
215
+ - Fix ruff/pyrefly CI failures in weatherwidget and compassmovewidget
216
+ - Add pointer to pyobs-core for design/planning docs
217
+ - Replace custom widgets in CameraWidget UI with standard Qt widgets
218
+ - Revert camera widget to plain spin boxes, set all values in expose()
219
+ - Remove mypy dev dependency
220
+ - Fix live-view socket and grab_data call in VideoWidget
221
+ - Adopt PyobsError rename and bump pyobs-core to dev28
222
+ - Update test configs to use DummyAltAzTelescope instead of DummyTelescope
223
+ - Add TODO for PyObsError rename coming in pyobs-core
224
+ - Use IDataSequence for counted exposures, when available
225
+ - Discard widgets' event registrations on client disconnect
226
+ - Adapt WeatherWidget to new IWeather state-based interface, bump pyobs-core lock
227
+ - Wire up IPointingBody and IPointingHeliocentricPolar
228
+ - Wire up Orbit Elements tracking, gated on IPointingOrbitalElements
229
+ - Adapt TelescopeWidget to renamed IPointingHeliographicStonyhurst interface
230
+ - Add dependabot config to target develop branch
231
+ - Adapt ModeWidget to name-based IMode.set_mode group parameter
232
+ - Implement navbar keyboard shortcuts
233
+ - added dev file
234
+ - Add design doc for navbar keyboard shortcuts
235
+ - new dev document
236
+ - Redesign module sidebar: compact single-row items, section headers, resizable width
237
+ - Add offset-magnitude and lon/lat plots to AutoGuidingWidget, fix exposure-time pre-fill
238
+ - Follow AcquisitionResult/AcquisitionAttempt offset field consolidation, integer attempt ticks
239
+ - Add 2D offset trajectory plot to AcquisitionWidget
240
+ - Add AcquisitionWidget and AutoGuidingWidget
241
+ - Add AutoFocusWidget for IAutoFocus, wire up dummy test config
242
+ - Introduce design proposals for IAutoGuiding, IAutoFocus, and IAcquisition widgets
243
+ - Grey out actions denied by pyobs-core ACLs, hide fully-denied modules
244
+ - Document ACL follow-up options: reactive-only vs proactive greying-out
245
+ - Unsubscribe status widget presence callback when a module closes
246
+ - Note pyobs-core 2.0 ACL follow-up work in DEVELOPMENT.md
247
+ - Fix phantom state subscription for composite interfaces in status view
248
+ - Let clicking anywhere in a status row toggle expand/collapse
249
+ - Disable focus on status tree so clicks leave no focus rectangle
250
+ - Show module interfaces, capabilities and live state in status view
251
+ - Replace stale RPC calls with wait_for_state in CompassMoveWidget
252
+ - Update to pyobs-core 2.0.0.dev10, apply FitsHeaderEntry to fits header methods
253
+ - docs: add DEVELOPMENT.md with backlog and implementation details for pyobs-gui
254
+ - chore: update dependencies for astropy-iers-data and pyobs-core to latest versions
255
+ - refactor: reformat long conditionals in TelescopeWidget and EventsWidget for readability
256
+ - refactor: simplify module name check in FitsHeadersWidget
257
+ - refactor: remove unused Proxy import and use context managers for proxy handling in VideoWidget
258
+ - refactor: add type ignore comments for attribute definitions in TelescopeWidget
259
+ - refactor: remove unused Proxy import and update type hints in StatusWidget
260
+ - refactor: remove unused Proxy import and update type hints in SpectrographWidget
261
+ - refactor: remove unused Proxy import and update type hints in ShellWidget
262
+ - refactor: remove unused Proxy import and simplify module passing in ModuleWindow
263
+ - refactor: update type hints in ModeWidget and remove unused Proxy import
264
+ - refactor: use context managers for proxy handling in MainWindow to ensure proper cleanup and improve stability
265
+ - refactor: remove unused proxy imports and update type hints in EventsWidget
266
+ - refactor: use proxy-based capability checks and async operations for offset handling in CompassMoveWidget
267
+ - refactor: simplify state management by replacing interface-based checks with client state retrieval in BaseWidget
268
+ - refactor: remove deprecated property-based bindings in ModeWidget for cleaner state management
269
+ - refactor: remove unused imports in ModifiedMixin and DataDisplayWidget for cleanup
270
+ - refactor: replace interface-based state usage with explicit state classes across all widgets for improved clarity and maintainability
271
+ - docs: remove DEVELOPMENT.md as Phase 4 migration is complete and the document is no longer needed
272
+ - refactor: migrate ModeWidget to use capability-based mode handling and state subscriptions, improve UI logic and maintain backward compatibility
273
+ - refactor: update DEVELOPMENT.md to document DummyVideo addition, widget testing updates, and final Phase 4 status
274
+ - refactor: optimize VideoWidget with state subscriptions, interface caching, and improved VFS error handling; add widget testing configurations
275
+ - test: remove unused `shared.world` configuration from test YAML files
276
+ - fix: handle initialization of temperature data correctly, avoid issues with empty or uninitialized DataFrames
277
+ - fix: correct sender comparison in DataDisplayWidget to avoid false negatives
278
+ - refactor: update DEVELOPMENT.md to document required pyobs-core changes for MultiModule and GUI integration
279
+ - test: add configuration files for widget testing with dummy modules
280
+ - refactor: update DEVELOPMENT.md to reflect widget migration progress, clarify state subscription usage, and add testing details
281
+ - refactor: update DEVELOPMENT.md to mark widget migrations as complete and document final changes to state subscriptions and RPC interactions
282
+ - refactor: migrate video widget to state subscriptions, streamline UI updates, and remove event-based logic
283
+ - refactor: migrate temperatures widget to state subscriptions, streamline UI updates, and remove event-based logic
284
+ - refactor: migrate spectrograph widget to state subscriptions, streamline UI updates, and remove event-based logic
285
+ - refactor: migrate roof widget to state subscriptions, streamline UI updates, and remove event-based logic
286
+ - refactor: migrate mode widget to state subscriptions, streamline UI updates, and remove event-based logic
287
+ - refactor: migrate camera widget to state subscriptions, remove event-based logic, and streamline UI updates
288
+ - refactor: migrate telescope widget to state subscriptions, streamline UI updates, and remove legacy event-based logic
289
+ - refactor: use state subscriptions for focus widget, replace event-based logic, and streamline UI interactions
290
+ - docs: update DEVELOPMENT.md to reflect filter and motion state changes
291
+ - refactor: simplify filter widget by using state subscriptions and removing event-based logic
292
+ - docs: add development notes for pyobs-gui Phase 4 updates and API changes
293
+ - refactor: re-enable status widget and clean up commented-out code
294
+ - refactor: streamline status handling and UI updates, remove redundant state logic
295
+ - refactor: adjust full frame handling with updated capability structure
296
+ - use capabilities for full frame
297
+ - gain and window state integration, adjust UI alignment, refine exposure and data handling
298
+ - working on state implementation
299
+ - show current values and add dirty inputs
300
+ - use IWindow.State
301
+ - states
302
+ - gain state
303
+ - use intenral State
304
+ - CoolingWidget working
305
+ - ICooling to v2.0
306
+ - add pyrefly pre-commit hook
307
+ - add pyrefly GitHub Actions workflow
308
+ - fix more pyrefly type errors
309
+ - fixed path
310
+ - switch to ruff, add pyrefly, fix type errors
311
+ - to PySide6
312
+ - tidying up for ruff
313
+ - tidying up
314
+ - moved from flake8 to ruff
315
+
316
+ ## [1.8.8] - 2026-07-09
317
+
318
+ - fix `textStatus` assignment to use `_motion_status` directly
319
+
320
+ ## [1.8.7] - 2026-06-29
321
+
322
+ - postpone `butAbort` visibility setup until `open()` is called
323
+
324
+ ## [1.8.6] - 2026-06-26
325
+
326
+ - fixed pyobs-core dependency version
327
+
328
+ ## [1.8.5] - 2026-06-16
329
+
330
+ - Maintenance release (dependency and metadata updates only).
331
+
332
+ ## [1.8.4] - 2026-06-16
333
+
334
+ - Maintenance release (dependency and metadata updates only).
335
+
336
+ ## [1.8.3] - 2026-06-16
337
+
338
+ - Maintenance release (dependency and metadata updates only).
339
+
340
+ ## [1.8.2] - 2026-06-16
341
+
342
+ - fix RA/Dec display: avoid Angle.to_string() incompatible with numpy 2.x
343
+ - guard against NaN RA/Dec from uninitialized telescope
344
+
345
+ ## [1.8.1] - 2026-06-08
346
+
347
+ - don't use .value or .name on StrEnum
348
+ - MotionStatus is a StrEnum now, so no .value needed
349
+ - changed all Time imports from astropy.time to pyobs.utils.time.
350
+
351
+ ## [1.8.0] - 2026-06-08
352
+
353
+ - new min pyobs version
354
+ - entry.time can no be in isot format
355
+ - formatting
356
+ - re-added future import
357
+ - changing old-style type hints to new style
358
+ - removed from __future__ import annotations everywhere
359
+
360
+ ## [1.7.4] - 2026-05-29
361
+
362
+ - fixed attribs
363
+
364
+ ## [1.7.3] - 2026-05-28
365
+
366
+ - upped min pyobs-core version
367
+ - changed underscore parameters for vfs, comm, etc
368
+ - renamed Object parameters (comm, observer, ...) to start with an underscore
369
+
370
+ ## [1.7.0] - 2025-12-17
371
+
372
+ - faster startup by not waiting for all other clients first
373
+ - .
374
+
375
+ ## [1.6.0] - 2025-12-04
376
+
377
+ - refactored shell command and its response into own classes
378
+
379
+ ## [1.5.1] - 2025-12-01
380
+
381
+ - new qfitswidget and Qt6
382
+ - new qfitswidget
383
+ - reverted back to old method
384
+ - fixed bugs
385
+ - fixed sorting of clients
386
+ - clean up
387
+ - pyside6
388
+ - fixed uic errors
389
+ - pyside6 changes
390
+ - working on pyside6 change
391
+ - mypy
392
+ - cleaning up
393
+ - added some # type: ignore
394
+ - cleaning up for pyside6
395
+ - matplotlib
396
+ - resources
397
+ - initial conversion
398
+ - setting gain and offset separately
399
+ - log brightness and contrast
400
+ - return QVariant instead of empty string
401
+ - reconnect slots
402
+ - fixed simbad query
403
+ - fixed bug
404
+ - type hints
405
+ - BaseWidget.module() never returns None
406
+ - ignore types for self.setupUi(self)
407
+ - removed ignore
408
+ - ignore qt auto-generated files
409
+ - ignore astropy
410
+ - BaseWidget now inherits from QWidget
411
+ - removed file
412
+
413
+ ## [1.5.0] - 2025-07-24
414
+
415
+ - Maintenance release (dependency and metadata updates only).
416
+
417
+ ## [1.4.1] - 2025-07-24
418
+
419
+ - new lock file
420
+
421
+ ## [1.4.0] - 2025-07-02
422
+
423
+ - pypi
424
+ - pypi actions
425
+ - removed slixmpp from deps, since it's already in pyobs-core
426
+ - dev deps
427
+ - pre-commit
428
+ - ran black
429
+ - ran flake
430
+ - added flake8
431
+ - working on poetry->uv migration
432
+
433
+ ## [1.3.0] - 2025-05-08
434
+
435
+ - python version
436
+
437
+ ## [1.2.0] - 2025-01-07
438
+
439
+ - since qfitswidget requires Python 3.10, this will also
440
+ - updated devs to latest version
441
+
442
+ ## [1.1.0] - 2024-09-02
443
+
444
+ - ModeWidget working
445
+ - adding widgets
446
+ - working on ModeWidget
447
+ - datetime.utcnow() to datetime.utc(timezone.utc)
448
+
449
+ ## [1.0.12] - 2024-07-08
450
+
451
+ - python 3.12
452
+
453
+ ## [1.0.11] - 2024-03-21
454
+
455
+ - fixed docs
456
+
457
+ ## [1.0.10] - 2023-10-09
458
+
459
+ - updated deps
460
+ - updating deps
461
+ - allow python 3.11
462
+
463
+ ## [1.0.9] - 2023-09-12
464
+
465
+ - updating deps
466
+ - fixed roof buttons
467
+
468
+ ## [1.0.8] - 2023-07-18
469
+
470
+ - fixed bug with Tx/Ty.degrees instead of .degree
471
+
472
+ ## [1.0.7] - 2023-07-14
473
+
474
+ - fixed mupsi movement
475
+
476
+ ## [1.0.6] - 2023-07-12
477
+
478
+ - removed debug output
479
+ - added icons to default config
480
+ - working on new default config for GUI
481
+ - added helper functions for getting required module from list
482
+ - all widgets now take a list of modules instead of a single one in their open method
483
+ - fixed bug
484
+ - changed default unit in GUI to arcsec, and in logic to degree
485
+ - renaming helioprojective to helioprojective mu/psi and added helioprojective radial
486
+ - getting pyobs fit for Python 3.11 that will ship with Debian 12
487
+
488
+ ## [1.0.5] - 2023-03-22
489
+
490
+ - fixed bug
491
+
492
+ ## [1.0.4] - 2023-03-07
493
+
494
+ - removed debug output
495
+
496
+ ## [1.0.3] - 2023-03-07
497
+
498
+ - custom icons
499
+ - temperature plot
500
+ - changed cooling GUI
501
+
502
+ ## [1.0.2] - 2022-11-29
503
+
504
+ - closing GUI
505
+ - set own_comm to False for module
506
+ - removed debug output
507
+ - added closeEvent
508
+ - made Module.name a property
509
+ - fixed bug
510
+ - GUI is shown
511
+ - widget for filter wheel
512
+ - working on local GUI for single module
513
+
514
+ ## [1.0.0] - 2022-09-13
515
+
516
+ - updated dependencies
517
+ - added license
518
+
519
+ ## [0.21.0] - 2022-08-25
520
+
521
+ - handle optional event parameters, closes #124
522
+ - store signature
523
+ - working on handling optional parameters better
524
+ - fixed focus buttons, closes #173
525
+ - updated dependencies
526
+
527
+ ## [0.20.1] - 2022-07-28
528
+
529
+ - fixed layout
530
+ - always show vertical scrollbars in module list
531
+ - Instead of checking whether there are any autonomous modules, we are now checking whether those modules are actually running before displaying the warning message.
532
+ - default values for mu/psi
533
+
534
+ ## [0.20.0] - 2022-06-27
535
+
536
+ - adaptions for new IData
537
+ - renamed get_cooling_status to get_cooling
538
+ - refactored ICamera/IVideo/ISpectrograph to use IData (formerly IImageGrabber) and IExposure (formerly part of ICamera and ISpectrograph)
539
+
540
+ ## [0.19.4] - 2022-06-23
541
+
542
+ - cleaning up
543
+ - Create event loop from static method in module before instanciating the module
544
+ - test
545
+ - testing quit
546
+
547
+ ## [0.19.3] - 2022-06-22
548
+
549
+ - fixed coordinate conversion for HELIOPROJECTIVE_RADIAL
550
+ - removed except blocks
551
+ - set update_task to None on hide
552
+ - replaced qtimer with asyncio task
553
+
554
+ ## [0.19.2] - 2022-06-21
555
+
556
+ - make it work again
557
+
558
+ ## [0.19.1] - 2022-06-21
559
+
560
+ - removed old icons
561
+ - use qtawesome for icons
562
+ - new icons
563
+ - icon alignment
564
+
565
+ ## [0.19.0] - 2022-06-20
566
+
567
+ - changed filename
568
+ - open datadisplay widget
569
+ - moved code into _init
570
+ - added method to extract widgets into new windows
571
+ - extracted CompassMoveWidget
572
+ - video and spectrograph
573
+ - fixed script
574
+ - removed debug output
575
+ - removed unnecessary plugins
576
+ - seems to work with both pyobs and designer
577
+ - started working on designer compatible file layout
578
+ - moved code from __init__ into open
579
+ - at least it starts again...
580
+ - base
581
+ - offset fixes
582
+
583
+ ## [0.18.4] - 2022-05-07
584
+
585
+ - fixed: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3, and in 3.10 it will stop working
586
+
587
+ ## [0.18.3] - 2022-05-03
588
+
589
+ - Fixed the name of a function. This caused neither gain nor exposuretime to be changed through the gui.
590
+
591
+ ## [0.18.2] - 2022-04-12
592
+
593
+ - text formatting
594
+ - Fixed the conversion of helioprojective radial coordinates to heliographic stonyhurst coordinates.
595
+ - added sunpy dependency
596
+
597
+ ## [0.18.1] - 2022-03-14
598
+
599
+ - added gain to video widget
600
+
601
+ ## [0.18.0] - 2022-03-13
602
+
603
+ - added gain
604
+ - fixed update of status
605
+ - example config
606
+ - fixed rtd
607
+
608
+ ## [0.16.0] - 2022-01-18
609
+
610
+ - basic docs
611
+ - log more errors to shell (invalid module or method)
612
+ - changed color scheme
613
+ - print OK instead of None on method calls that return nothing
614
+ - show exceptions in shell, fixes #82
615
+ - added column with version
616
+ - added status page
617
+ - added await
618
+ - update client list when modules (dis)connect
619
+ - fixed auto-complete list to select from, see #83
620
+ - use create_future
621
+ - check module state on update
622
+ - added CRITICAL log level
623
+ - raising new InvocationError on remote errors
624
+ - testing new exceptions
625
+ - added more digits to exposure time
626
+ - fixed bug
627
+ - type hints
628
+ - unified PyQt5 imports
629
+ - use black with a line length of 120
630
+ - added PyQt5-stubs
631
+ - added type hints
632
+ - black formatted
633
+ - added black and run it in pre-commit
634
+
635
+ ## [0.15.0] - 2021-12-29
636
+
637
+ - changed used Python version to 3.9
638
+ - Handle case when value is none
639
+ - Pushed requirements to Python>=3.9 and astropy>=5.0, closes #55
640
+ - replaced all occurrences of "thread" with "task"
641
+ - sending event async
642
+ - fixed bug
643
+ - made all events async
644
+ - catch CancelledError for background task
645
+ - fixed bug when not broadcasting
646
+ - async data download
647
+ - asyncio
648
+ - proxy() is async now
649
+ - using async vfs.read_fits
650
+ - removed lock
651
+ - removed all use of threading module
652
+ - async event handler
653
+ - open widgets
654
+ - use asyncio.Event instead of threading.Event
655
+ - started working on asyncio implementation
656
+ - only scroll logs to bottom, if slider is at max position fixes #18
657
+ - added JPL Horizons query for RA/Dec coordinates
658
+
659
+ ## [0.14.2] - 2021-11-23
660
+
661
+ - added planet/moon/sun ephemerides
662
+ - removed the whole poetry build process
663
+
664
+ ## [0.14.1] - 2021-11-18
665
+
666
+ - new pypi action
667
+ - added ignore_dev_requirements: "yes"
668
+ - replaced setup.py and requirements.txt with Poetry
669
+ - added custom sidebar widgets
670
+ - changed WidgetImageGrabber to WidgetDataDisplay and adopted it for use with ISpectrograph
671
+ - handle NewSpectrumEvent
672
+ - don't use get_exposure_time_left
673
+ - added widget for ISpectrograph
674
+ - remove client from dict on disconnect and put lock around (dis)connected code
675
+ - hopefully fixed problem with not all modules showing up
676
+ - warning when weather module is running but not active
677
+ - fixed bug
678
+ - v0.14
679
+ - renamed IFitsHeaderProvider to IFitsHeaderBefore and get_fits_headers() to get_fits_header_before()
680
+ - added support for helioprojective radial coordinates
681
+ - don't show kwargs on event page
682
+ - removed call to label()
683
+ - Added type hints
684
+ - use Proxy interfaces
685
+ - renamed set/get_*_offsets to set/get_offsets-*
686
+ - renamed some interfaces (IPointing* and IOffsets*)
687
+ - changed IMuPsi to ICoordsHGS
688
+ - cosmetic change
689
+ - going back to one module per widget
690
+ - New parameter widgets for custom widgets
691
+ - default widgets
692
+ - basing all widgets on a more common BaseWidget
693
+ - new range for offsets
694
+ - moving to helioprojective coordinates
695
+ - unified resetting offsets
696
+ - new way for showing coordinate systems, added helioprojective
697
+ - Flat fielding
698
+ - renamed ICameraWindow to IWindow
699
+ - renamed ICameraExposureTime to IExposureTime
700
+ - renamed ICameraBinning to IBinning
701
+ - image types and multiple images
702
+ - removed imports
703
+ - exposure time
704
+ - .
705
+ - gui
706
+ - WidgetImageGrabber in WidgetVideo
707
+ - WidgetCamera seems to work with WidgetImageGrabber
708
+ - started working on extracting WidgetImageGrabber from WidgetCamera
709
+ - use a WidgetCamera inside WidgetVideo
710
+ - some changes to work with IImageGrabbers and not just ICameras
711
+ - use grab_image() instead of expose()
712
+ - explicitly cast float to int
713
+ - renamed WidgetWebcam to WidgetVideo
714
+ - renamed IWebcam->IVideo and BaseWebcam->BaseVideo
715
+ - taking video URL from vfs
716
+ - added widget for IWebcam
717
+ - added show_modules parameter to restrict access to given modules
718
+ - added parameters show_shell and show_events
719
+ - moved requirements into requirements.txt
720
+ - v0.13
721
+ - documentation
722
+ - added __module__
723
+ - updated docstrings
724
+ - moved IMotion.Status to utils.enums.MotionStatus
725
+ - moved ExposureStatus to utils.enums
726
+ - fixed bug (_update_thread is never None)
727
+ - fixed types to make mypy happy
728
+ - fixed type hints
729
+ - added combo box for exposure time unit
730
+ - add warning to logger when GUIs update_func fails
731
+ - fixed bug when auto-saving
732
+ - allow for negative offsets in dialog
733
+ - Moved "images" module to top-level
734
+ - download images in thread
735
+ - sorting page icons
736
+ - catch exception
737
+ - size of page selector
738
+ - instead of manually connection signals/slot, use pyqtSlot()
739
+ - show security question when disabling broadcast
740
+ - changed order of setting max and current values
741
+ - added new checkbox to avoid broadcasting new images
742
+ - hide controls if not required
743
+ - changed signature of ICameraBinning's list_binnings() to return list of X,Y tuples
744
+ - fetching available binnings from module
745
+ - added combo box for setting image format
746
+ - set maximum values for window
747
+ - made binning a check box and added option for image format
748
+
749
+ ## [0.12.2] - 2021-02-06
750
+
751
+ - adopted for name change from qfitsview to qfitswidget
752
+
753
+ ## [0.12.1] - 2021-01-05
754
+
755
+ - fixed bug
756
+ - fixed broken merge
757
+ - v0.12
758
+ - using new IImageType and ImageType enum
759
+ - moved exposure time specific stuff from ICamera into new ICameraExposureTime and removed exposure_time parameter from ICamera.expose()
760
+ - Revert "Removed count parameter from ICamera.expose()"
761
+ - GUI handles exposing multiple images on its own without count in ICamera.expose()
762
+ - generic types don't seem to have a __name__
763
+ - moved some imports into methods
764
+ - renamed download_fits_image() and download_image() to read_*()
765
+ - validate telescope coordinates
766
+ - changed tab order of widgets in camera widget
767
+ - fixed crash when trying to navigate to old commands, but none were given before
768
+ - added focal_length, pixel_size and fits headers
769
+ - moved more code from DummyTelescope into SimTelescope
770
+ - changed handling of name/label for module
771
+ - removed possibility for network configs
772
+ - v0.11
773
+ - made changes in _off_ra/dec/alt/az members threadsafer
774
+ - new warning
775
+ - show warning if there is an active mastermind
776
+ - checkboxes for sending events
777
+
778
+ ## [0.10.1] - 2020-05-14
779
+
780
+ - removed aplpy from dependencies
781
+ - added POSITIONED to valid states
782
+ - v0.10
783
+ - removed parent for Layout
784
+ - PyQt 5.14 seems to fail installing, so fix to 5.13 for now
785
+ - handling Nones
786
+ - showing dome Az in GUI
787
+ - ITelescope inherits IRaDec and therefore track_radec is renamed to move_radev
788
+ - renamed IEquatorialMount to IRaDecOffsets and IAltAzMount to IAltAzOffsets
789
+ - swap sign for RA offsets
790
+ - error checking
791
+ - added weather widget
792
+ - added POSITIONED to initialized states
793
+ - v0.9
794
+ - only add fits headers for camera that belongs to this widget
795
+ - added additional custom headers
796
+ - colorize buttons
797
+ - fixed layout
798
+ - fixed bug
799
+ - more colours and different layout for filters
800
+ - removed debug output
801
+ - added missing resources
802
+ - moving offsets
803
+ - finishing new GUI
804
+ - working on new telescope page layout
805
+ - added error handling for MPC queries
806
+ - added MPC query
807
+ - removed pyobs-core from requirements
808
+ - added button for resetting focus offset
809
+ - new way of setting focus via input dialog
810
+ - message when no simbad results were found
811
+ - renamed run() on PyobsModule to main()
812
+ - update filter and focus on regular basis
813
+ - enumerate commands and results in shell and fix crash bug
814
+ - converting np.float to float
815
+ - show current filename
816
+ - replaced colon by whitespace in filename pattern
817
+ - added checkbox for adding fits headers, which is unchecked by default
818
+ - fixed bugs
819
+ - - changed MotionStatusChangedEvent to give status of all interfaces - added MotionStatusMixin - fixed DummyTelescope to use it - fixed GUI to use it
820
+ - fixed method signatures and implemented namespaces for FITS headers
821
+ - get_fits_headers from IFitsHeaderProvider now accepts a list of namespaces
822
+ - moved multiple exposures from GUI into camera module
823
+ - added qfitsview to required packages
824
+ - catching ModuleNotFoundError for pwd on Windows
825
+ - added pyobs-core to required packages
826
+ - distutils -> setuptools
827
+ - v0.8
828
+ - error handling
829
+ - fixed bug with redrawing image every second
830
+ - added pyobs_gui.qt
831
+ - measuring exptime in seconds
832
+ - more init in _init
833
+ - trying to speed up things a little bit
834
+ - replaced SendToArchive with generic ImageWatcher
835
+ - added fits header gui
836
+ - returning dict
837
+ - doing multiple exposures in GUI, not in camera module
838
+ - showing events
839
+ - limiting image types to object, bias, and dark
840
+ - saving and auto-saving of images
841
+ - disable auto-update of image/headers
842
+ - using init/park
843
+ - renamed get_alt_az->get_altaz and get_ra_dec->get_radec
844
+ - renamed track->track_radec, move->move_altaz, offset->offset_altaz
845
+ - sending events from gui
846
+ - removed percent open for now
847
+ - more output
848
+ - working on simple task
849
+ - using run() method for running gui
850
+ - accept negative numbers
851
+ - changed NEWLINE with ENDMARKER
852
+ - changed enter/leave to Qt show/hide events
853
+ - environment -> observer
854
+ - using QFitsView instead of AplPy for displaying image
855
+ - added widget for script runner
856
+ - using tokenize for parsing input
857
+ - changed version number to 0.2
858
+ - checking sender in event handlers
859
+ - for XMPP, senders for events and proxy names are now usernames only and not full JIT anymore
860
+ - plots
861
+ - show degree sign for alt/az
862
+ - show alt/az for input ra/dec
863
+ - added simbad query and missing files
864
+ - reacting to connecting/disconnecting clients
865
+ - set full frame to binned size
866
+ - new icons
867
+ - show FocusWidget for IFocuser
868
+ - disabled WidgetTemperatures because of missing files
869
+ - fixed base class
870
+ - sorted temperatures
871
+ - new ITemperatures interface
872
+ - cooling display works
873
+ - lock for roof movement
874
+ - moved update thread into BaseWidget
875
+ - basic dummy roof and widget
876
+ - filter for camera
877
+ - moved sidebar stuff into BaseWidget
878
+ - showing fits headers
879
+ - async init of widgets
880
+ - working on layout
881
+ - removed sidebar, moved client list next to log
882
+ - showing image based on NewImageEvent
883
+ - only show coordinates when available
884
+ - camera expose() always returns a list now
885
+ - disabled plot for now
886
+ - cleaned up
887
+ - changed to use events and stuff
888
+ - working on type-casting request and response for remote calls
889
+ - using events instead of constant polling
890
+ - added new ExposureStatusChanged event
891
+ - got ascom working again
892
+ - checking type
893
+ - first attempts on track plot
894
+ - setting filter and focus
895
+ - moving alt/az
896
+ - disable gui until first update finished
897
+ - working on telescope GUI
898
+ - started working on telescope GUI
899
+ - GUI is a normal pyobs module now
900
+ - renamed pytel to pyobs
901
+ - working with cameras that don't support windowing or binning
902
+ - gracefully exit threads
903
+ - added camera panel
904
+ - show whole exception
905
+ - styling
906
+ - changed layout with logs and help always visible
907
+ - working on new GUI
908
+ - allow single as well as double quotes for strings
909
+ - working
910
+ - initial commit