pyobs-gui 2.0.0.dev9__tar.gz → 2.0.0.dev11__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.
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/PKG-INFO +1 -1
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/camerawidget.py +10 -6
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/telescopewidget.ui +6 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/telescopewidget_ui.py +3 -1
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyproject.toml +1 -1
- pyobs_gui-2.0.0.dev11/tests/test_camerawidget.py +85 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/uv.lock +1 -1
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/.claude/skills/verify/SKILL.md +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/.github/dependabot.yml +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/.github/workflows/pypi.yml +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/.github/workflows/pyrefly.yml +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/.github/workflows/ruff.yml +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/.gitignore +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/.pre-commit-config.yaml +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/.readthedocs.yml +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/CHANGELOG.rst +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/LICENSE +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/README.md +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/bin/mypyuic5 +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/docs/Makefile +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/docs/make.bat +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/docs/requirements.txt +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/docs/source/_static/pyobs.gif +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/docs/source/conf.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/docs/source/index.rst +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/mypy.ini +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/__init__.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/__main__.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/_nuitka_astropy_patch.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/accounts.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/acquisitionwidget.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/autofocuswidget.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/autoguidingwidget.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/base.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/commandinputwidget.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/compassmovewidget.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/coolingwidget.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/datadisplaywidget.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/eventswidget.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/filterwidget.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/fitsheaderswidget.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/focuswidget.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/gui.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/login.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/loginwindow.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/logmodel.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/mainwindow.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/modewidget.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/modifiedmixin.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/modulegui.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/__init__.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/acquisitionwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/acquisitionwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/autofocuswidget.ui +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/autofocuswidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/autoguidingwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/autoguidingwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/camerawidget.ui +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/camerawidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/compassmoveplugin.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/compassmovewidget.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/compassmovewidget.ui +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/compassmovewidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/compile.sh +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/coolingwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/coolingwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/datadisplayplugin.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/datadisplaywidget.ui +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/datadisplaywidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/designer.sh +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/eventswidget.ui +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/eventswidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/filterwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/filterwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/fitsheaderswidget.ui +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/fitsheaderswidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/focuswidget.ui +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/focuswidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/mainwindow.ui +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/mainwindow_ui.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/modewidget.ui +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/modewidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/resources/arrow-alt-circle-down-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/resources/arrow-alt-circle-left-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/resources/arrow-alt-circle-right-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/resources/arrow-alt-circle-up-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/resources/arrow-up-right-from-square-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/resources/arrows-to-eye-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/resources/chart-line-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/resources/circle-question-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/resources/cloud-sun-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/resources/edit-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/resources/search-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/resources/undo-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/resources.qrc +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/resources_rc.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/roofwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/roofwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/shellwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/shellwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/spectrographwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/spectrographwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/temperaturesplotwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/temperaturesplotwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/temperatureswidget.ui +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/temperatureswidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/videowidget.ui +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/videowidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/weatherwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/weatherwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/roofwidget.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/shellwidget.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/spectrographwidget.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/statuswidget.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/telescopewidget.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/temperaturesplotwidget.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/temperatureswidget.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/utils.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/videowidget.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/watchedlabel.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/weatherwidget.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pysidedeploy.spec +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/specs/README.md +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/spike_standalone/main.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/spike_standalone/pysidedeploy.spec +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/test/acquisition.yaml +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/test/autofocus.yaml +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/test/camera.yaml +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/test/full.yaml +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/test/guiding.yaml +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/test/mode.yaml +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/test/roof.yaml +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/test/spectrograph.yaml +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/test/telescope.yaml +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/test/telescope_acl.yaml +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/test/telescope_acl_denied.yaml +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/test/video.yaml +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/tests/__init__.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/tests/conftest.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/tests/test_accounts.py +0 -0
- {pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/tests/test_loginwindow.py +0 -0
|
@@ -332,13 +332,17 @@ class CameraWidget(BaseWidget, Ui_CameraWidget):
|
|
|
332
332
|
self.exposures_left = self.spinCount.value()
|
|
333
333
|
broadcast = self.checkBroadcast.isChecked()
|
|
334
334
|
|
|
335
|
-
# if the module can grab a counted sequence server-side, let it
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
335
|
+
# if the module can grab a counted sequence server-side, let it -- but only when
|
|
336
|
+
# broadcasting, since grab_sequence() doesn't hand filenames back to the caller and
|
|
337
|
+
# the client has no other way to learn an image is ready to display
|
|
338
|
+
if broadcast:
|
|
339
|
+
async with self.comm.safe_proxy(self.module, IDataSequence) as proxy:
|
|
340
|
+
if proxy is not None:
|
|
341
|
+
await proxy.grab_sequence(self.exposures_left, broadcast)
|
|
342
|
+
return
|
|
340
343
|
|
|
341
|
-
# fall back to a client-side loop for modules that don't support IDataSequence
|
|
344
|
+
# fall back to a client-side loop for modules that don't support IDataSequence, or
|
|
345
|
+
# when not broadcasting (grab_data() returns the filename directly for display)
|
|
342
346
|
while self.exposures_left > 0:
|
|
343
347
|
await self.datadisplay.grab_data(broadcast)
|
|
344
348
|
self.exposures_left -= 1
|
|
@@ -1079,6 +1079,9 @@
|
|
|
1079
1079
|
<property name="suffix">
|
|
1080
1080
|
<string/>
|
|
1081
1081
|
</property>
|
|
1082
|
+
<property name="decimals">
|
|
1083
|
+
<number>4</number>
|
|
1084
|
+
</property>
|
|
1082
1085
|
<property name="minimum">
|
|
1083
1086
|
<double>0.000000000000000</double>
|
|
1084
1087
|
</property>
|
|
@@ -1111,6 +1114,9 @@
|
|
|
1111
1114
|
<property name="suffix">
|
|
1112
1115
|
<string> °</string>
|
|
1113
1116
|
</property>
|
|
1117
|
+
<property name="decimals">
|
|
1118
|
+
<number>4</number>
|
|
1119
|
+
</property>
|
|
1114
1120
|
<property name="minimum">
|
|
1115
1121
|
<double>0.000000000000000</double>
|
|
1116
1122
|
</property>
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
################################################################################
|
|
4
4
|
## Form generated from reading UI file 'telescopewidget.ui'
|
|
5
5
|
##
|
|
6
|
-
## Created by: Qt User Interface Compiler version 6.
|
|
6
|
+
## Created by: Qt User Interface Compiler version 6.11.1
|
|
7
7
|
##
|
|
8
8
|
## WARNING! All changes made in this file will be lost when recompiling UI file!
|
|
9
9
|
################################################################################
|
|
@@ -510,6 +510,7 @@ class Ui_TelescopeWidget(object):
|
|
|
510
510
|
self.spinMoveHelioprojectiveRadialMu.setObjectName(u"spinMoveHelioprojectiveRadialMu")
|
|
511
511
|
sizePolicy.setHeightForWidth(self.spinMoveHelioprojectiveRadialMu.sizePolicy().hasHeightForWidth())
|
|
512
512
|
self.spinMoveHelioprojectiveRadialMu.setSizePolicy(sizePolicy)
|
|
513
|
+
self.spinMoveHelioprojectiveRadialMu.setDecimals(4)
|
|
513
514
|
self.spinMoveHelioprojectiveRadialMu.setMinimum(0.000000000000000)
|
|
514
515
|
self.spinMoveHelioprojectiveRadialMu.setMaximum(1.000000000000000)
|
|
515
516
|
self.spinMoveHelioprojectiveRadialMu.setSingleStep(0.100000000000000)
|
|
@@ -526,6 +527,7 @@ class Ui_TelescopeWidget(object):
|
|
|
526
527
|
self.spinMoveHelioprojectiveRadialPsi.setObjectName(u"spinMoveHelioprojectiveRadialPsi")
|
|
527
528
|
sizePolicy.setHeightForWidth(self.spinMoveHelioprojectiveRadialPsi.sizePolicy().hasHeightForWidth())
|
|
528
529
|
self.spinMoveHelioprojectiveRadialPsi.setSizePolicy(sizePolicy)
|
|
530
|
+
self.spinMoveHelioprojectiveRadialPsi.setDecimals(4)
|
|
529
531
|
self.spinMoveHelioprojectiveRadialPsi.setMinimum(0.000000000000000)
|
|
530
532
|
self.spinMoveHelioprojectiveRadialPsi.setMaximum(359.000000000000000)
|
|
531
533
|
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
from types import SimpleNamespace
|
|
2
|
+
from unittest.mock import AsyncMock
|
|
3
|
+
|
|
4
|
+
import pytest
|
|
5
|
+
|
|
6
|
+
from pyobs.interfaces import IDataSequence
|
|
7
|
+
from pyobs_gui.camerawidget import CameraWidget
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class _AsyncProxyCM:
|
|
11
|
+
"""Mimics Comm.safe_proxy()'s async context manager, yielding a fixed proxy (or None)."""
|
|
12
|
+
|
|
13
|
+
def __init__(self, value):
|
|
14
|
+
self._value = value
|
|
15
|
+
|
|
16
|
+
async def __aenter__(self):
|
|
17
|
+
return self._value
|
|
18
|
+
|
|
19
|
+
async def __aexit__(self, *exc_info):
|
|
20
|
+
return False
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class FakeComm:
|
|
24
|
+
"""Only implements what CameraWidget.expose() touches; every optional interface except
|
|
25
|
+
IDataSequence resolves to "not supported" (proxy is None)."""
|
|
26
|
+
|
|
27
|
+
def __init__(self, data_sequence_proxy=None):
|
|
28
|
+
self._data_sequence_proxy = data_sequence_proxy
|
|
29
|
+
|
|
30
|
+
def safe_proxy(self, module, interface):
|
|
31
|
+
value = self._data_sequence_proxy if interface is IDataSequence else None
|
|
32
|
+
return _AsyncProxyCM(value)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def make_widget(data_sequence_proxy) -> CameraWidget:
|
|
36
|
+
widget = CameraWidget()
|
|
37
|
+
widget.modules = ["camera"]
|
|
38
|
+
widget._comm = FakeComm(data_sequence_proxy=data_sequence_proxy)
|
|
39
|
+
widget.datadisplay.grab_data = AsyncMock()
|
|
40
|
+
return widget
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
@pytest.mark.asyncio
|
|
44
|
+
async def test_expose_uses_server_side_sequence_when_broadcasting(qapp) -> None:
|
|
45
|
+
proxy = SimpleNamespace(grab_sequence=AsyncMock())
|
|
46
|
+
widget = make_widget(proxy)
|
|
47
|
+
widget.checkBroadcast.setChecked(True)
|
|
48
|
+
widget.spinCount.setValue(3)
|
|
49
|
+
|
|
50
|
+
await widget.expose()
|
|
51
|
+
|
|
52
|
+
proxy.grab_sequence.assert_awaited_once_with(3, True)
|
|
53
|
+
widget.datadisplay.grab_data.assert_not_called()
|
|
54
|
+
widget.close()
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
@pytest.mark.asyncio
|
|
58
|
+
async def test_expose_falls_back_to_client_side_loop_when_not_broadcasting(qapp) -> None:
|
|
59
|
+
"""Regression test: grab_sequence() has no way to hand a filename back to the caller, so
|
|
60
|
+
without broadcasting, taking the server-side sequence path would leave the GUI with no way
|
|
61
|
+
to learn an image is ready and nothing would ever be displayed (issue #122)."""
|
|
62
|
+
proxy = SimpleNamespace(grab_sequence=AsyncMock())
|
|
63
|
+
widget = make_widget(proxy)
|
|
64
|
+
widget.checkBroadcast.setChecked(False)
|
|
65
|
+
widget.spinCount.setValue(2)
|
|
66
|
+
|
|
67
|
+
await widget.expose()
|
|
68
|
+
|
|
69
|
+
proxy.grab_sequence.assert_not_called()
|
|
70
|
+
assert widget.datadisplay.grab_data.await_count == 2
|
|
71
|
+
widget.datadisplay.grab_data.assert_awaited_with(False)
|
|
72
|
+
widget.close()
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
@pytest.mark.asyncio
|
|
76
|
+
async def test_expose_falls_back_when_module_has_no_data_sequence_support(qapp) -> None:
|
|
77
|
+
widget = make_widget(data_sequence_proxy=None)
|
|
78
|
+
widget.checkBroadcast.setChecked(True)
|
|
79
|
+
widget.spinCount.setValue(1)
|
|
80
|
+
|
|
81
|
+
await widget.expose()
|
|
82
|
+
|
|
83
|
+
assert widget.datadisplay.grab_data.await_count == 1
|
|
84
|
+
widget.datadisplay.grab_data.assert_awaited_with(True)
|
|
85
|
+
widget.close()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/resources/arrow-alt-circle-up-solid.svg
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/resources/arrows-to-eye-solid.svg
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_gui-2.0.0.dev9 → pyobs_gui-2.0.0.dev11}/pyobs_gui/qt/resources/circle-question-solid.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|