pyobs-core 2.0.0.dev4__tar.gz → 2.0.0.dev5__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_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/PKG-INFO +1 -1
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/comm/comm.py +13 -11
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/comm/local/localcomm.py +1 -1
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/comm/proxy.py +14 -2
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/comm/xmpp/xmppcomm.py +2 -2
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IBinning.py +7 -5
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IConfig.py +7 -6
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IFilters.py +7 -5
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IImageFormat.py +7 -5
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IMode.py +7 -5
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IModule.py +8 -5
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IMultiFiber.py +7 -6
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IVideo.py +7 -4
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IWindow.py +10 -5
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/__init__.py +20 -9
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/interface.py +1 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/camera/basevideo.py +2 -2
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/camera/dummycamera.py +17 -3
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/module.py +6 -8
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/telescope/dummytelescope.py +2 -1
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/utils/dummymode.py +2 -2
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyproject.toml +1 -1
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/.gitignore +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/LICENSE +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/application.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/background_task.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/cli/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/cli/_cli.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/cli/pyobs.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/cli/pyobsd.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/cli/pyobsw.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/comm/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/comm/commlogging.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/comm/dummy/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/comm/dummy/dummycomm.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/comm/local/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/comm/local/localnetwork.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/comm/xmpp/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/comm/xmpp/rpc.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/comm/xmpp/serializer.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/comm/xmpp/xep_0009/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/comm/xmpp/xep_0009/binding.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/comm/xmpp/xep_0009/rpc.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/comm/xmpp/xep_0009_timeout/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/comm/xmpp/xep_0009_timeout/rpc.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/comm/xmpp/xep_0009_timeout/stanza/RPC.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/comm/xmpp/xep_0009_timeout/stanza/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/comm/xmpp/xmppclient.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/events/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/events/badweather.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/events/event.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/events/exposurestatuschanged.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/events/filterchanged.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/events/focusfound.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/events/goodweather.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/events/log.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/events/modechanged.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/events/moduleclosed.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/events/moduleopened.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/events/motionstatuschanged.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/events/move.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/events/newimage.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/events/newspectrum.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/events/offsets.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/events/roofclosing.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/events/roofopened.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/events/taskfailed.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/events/taskfinished.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/events/taskstarted.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/events/testevent.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/image.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/meta/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/meta/altazoffsets.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/meta/exptime.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/meta/genericoffset.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/meta/onskydistance.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/meta/pixeloffsets.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/meta/radecoffsets.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/meta/skyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processor.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/_daobackgroundremover.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/annotation/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/annotation/_pillow.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/annotation/circle.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/annotation/crosshair.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/annotation/text.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/astrometry/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/astrometry/_dotnet_request.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/astrometry/_dotnet_request_builder.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/astrometry/_dotnet_request_logger.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/astrometry/_dotnet_response_saver.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/astrometry/astrometry.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/astrometry/dotnet.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/calibration/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/calibration/_calibration_cache.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/calibration/_ccddata_calibrator.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/calibration/calibration.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/detection/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/detection/_pysep_stats_calculator.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/detection/_source_catalog.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/detection/daophot.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/detection/pysep.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/detection/simpledisk.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/detection/sourcedetection.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/exptime/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/exptime/exptime.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/exptime/star.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/image/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/image/addfitsheaders.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/image/download.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/image/flip.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/image/grayscale.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/image/httpserver.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/image/normalize.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/image/save.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/image/saveimage.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/image/smooth.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/image/softbin.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/misc/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/misc/addmask.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/misc/catalogcircularmask.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/misc/circularmask.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/misc/createfilename.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/misc/imagesourcefilter.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/misc/removebackground.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/modules/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/modules/getfitsheaders.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/offsets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/offsets/astrometry.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/offsets/brighteststar.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/offsets/brighteststar_guiding.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/offsets/dummyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/offsets/dummyskyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/offsets/fitsheader.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/offsets/offsets.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/offsets/pixeloffsets.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/offsets/projected.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/offsets/spilled_light.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/photometry/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/photometry/_photometry_calculator.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/photometry/_photutil_aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/photometry/_sep_aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/photometry/aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/photometry/photometry.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/photometry/photutil.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/photometry/pysep.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/wcs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/images/processors/wcs/solarhelioprojective.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IAbortable.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IAcquisition.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IAutoFocus.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IAutoGuiding.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IAutonomous.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/ICalibrate.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/ICamera.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/ICooling.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IData.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IDome.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IExposure.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IExposureTime.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IFitsHeaderAfter.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IFitsHeaderBefore.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IFlatField.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IFocusModel.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IFocuser.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IGain.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IImageType.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IMotion.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IOffsetsAltAz.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IOffsetsRaDec.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IPointingAltAz.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IPointingHGS.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IPointingHelioprojective.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IPointingRaDec.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IPointingSeries.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IReady.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IRoof.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IRotation.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IRunnable.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IRunning.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IScriptRunner.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/ISpectrograph.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IStartStop.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/ISyncTarget.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/ITelescope.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/ITemperatures.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/interfaces/IWeather.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/mixins/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/mixins/camerasettings.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/mixins/fitsheader.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/mixins/fitsnamespace.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/mixins/follow.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/mixins/motionstatus.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/mixins/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/mixins/waitformotion.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/mixins/weatheraware.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/camera/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/camera/adaptive.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/camera/basecamera.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/camera/basespectrograph.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/camera/dummyspectrograph.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/camera/dummyvideo.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/camera/pipelinecamera.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/flatfield/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/flatfield/flatfield.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/flatfield/pointing.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/flatfield/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/focus/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/focus/focusmodel.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/focus/focusseries.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/image/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/image/imagewatcher.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/image/imagewriter.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/image/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/image/seeing.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/pointing/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/pointing/_base.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/pointing/_baseguiding.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/pointing/acquisition.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/pointing/autoguiding.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/pointing/dummyacquisition.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/pointing/dummyguiding.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/pointing/guidingstatistics/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/pointing/guidingstatistics/guidingstatistics.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/pointing/guidingstatistics/pixeloffset.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/pointing/guidingstatistics/skyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/pointing/guidingstatistics/uptime.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/pointing/scienceframeguiding.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/robotic/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/robotic/mastermind.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/robotic/pointing.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/robotic/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/robotic/scriptrunner.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/roof/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/roof/basedome.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/roof/baseroof.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/roof/dummyroof.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/telescope/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/telescope/basetelescope.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/test/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/test/standalone.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/utils/autonomouswarning.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/utils/fluentlogger.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/utils/httpfilecache.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/utils/kiosk.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/utils/matrix.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/utils/stellarium.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/utils/telegram.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/utils/trigger.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/weather/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/weather/weather.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/weather/weather_api.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/modules/weather/weather_state.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/object.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/py.typed +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/observation.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/astroplanscheduler.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/constraints/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/constraints/airmassconstraint.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/constraints/constraint.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/constraints/moonilluminationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/constraints/moonseparationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/constraints/solarelevationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/constraints/timeconstraint.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/dataprovider.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/merits/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/merits/aftertime.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/merits/beforetime.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/merits/constant.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/merits/follow.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/merits/interval.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/merits/merit.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/merits/pernight.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/merits/random.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/merits/timewindow.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/merits/transit.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/observationarchiveevolution.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/ondemandscheduler.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/targets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/targets/dynamictarget.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/targets/helioprojectiveradialarget.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/targets/picker/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/targets/picker/csvpicker.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/targets/picker/picker.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/targets/siderealtarget.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/targets/target.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scheduler/taskscheduler.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scripts/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scripts/calibration/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scripts/calibration/darkbias.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scripts/calibration/pointing.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scripts/calibration/skyflats.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scripts/control/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scripts/control/cases.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scripts/control/conditional.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scripts/control/parallel.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scripts/control/selector.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scripts/control/sequential.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scripts/imaging/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scripts/imaging/autofocus.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scripts/imaging/imaging.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scripts/imaging/transitimaging.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scripts/script.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scripts/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scripts/utils/callmodule.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scripts/utils/debugtrigger.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/scripts/utils/log.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/backend/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/backend/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/backend/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/filesystem/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/filesystem/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/filesystem/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/lco/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/lco/_portal.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/lco/_schedulereader.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/lco/_schedulewriter.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/lco/configdb.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/lco/mockobservationarchive.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/lco/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/lco/scripts/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/lco/scripts/autofocus.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/lco/scripts/default.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/lco/scripts/script.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/lco/task.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/lco/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/lco/taskrunner.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/memory/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/memory/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/memory/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/storage/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/task.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/taskrunner.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/utils/archive/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/utils/archive/archive.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/utils/archive/local_archive.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/utils/archive/pyobs_archive.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/utils/exptime/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/utils/exptime/exptime.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/utils/exptime/stellarexptime.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/utils/skyflats/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/utils/skyflats/exptimeeval.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/utils/skyflats/flatfielder.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/utils/skyflats/pointing/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/utils/skyflats/pointing/base.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/utils/skyflats/pointing/static.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/utils/skyflats/priorities/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/utils/skyflats/priorities/archive.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/utils/skyflats/priorities/base.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/utils/skyflats/priorities/const.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/robotic/utils/skyflats/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/average.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/cache.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/config.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/coordinates.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/curvefit.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/enums.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/exceptions.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/fits.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/focusseries/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/focusseries/base.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/focusseries/photometry.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/focusseries/projection.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/grids/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/grids/filters.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/grids/grid.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/grids/gridnode.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/grids/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/gui/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/gui/camera/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/gui/camera/binningwidget.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/gui/camera/datadisplaywidget.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/gui/camera/exposewidget.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/gui/camera/exposuretimewidget.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/gui/camera/imageformatwidget.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/gui/camera/listpickerdialog.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/gui/camera/windowingwidget.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/http.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/influxdb.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/logger.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/logging/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/logging/context.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/logging/resolvableerror.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/modulegui.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/offsets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/offsets/applyaltazoffsets.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/offsets/applyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/offsets/applyradecoffsets.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/parallel.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/pipeline/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/pipeline/night.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/pipeline/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/publisher/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/publisher/csv.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/publisher/http.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/publisher/log.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/publisher/multi.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/publisher/publisher.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/serialization.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/shellcommand.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/threads/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/threads/lockwithabort.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/time.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/utils/types.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/version.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/vfs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/vfs/archivefile.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/vfs/bufferedfile.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/vfs/file.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/vfs/filelists/__init__.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/vfs/filelists/filelist.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/vfs/filelists/testing.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/vfs/httpfile.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/vfs/localfile.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/vfs/memfile.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/vfs/sftpfile.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/vfs/smbfile.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/vfs/sshfile.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/vfs/tempfile.py +0 -0
- {pyobs_core-2.0.0.dev4 → pyobs_core-2.0.0.dev5}/pyobs/vfs/vfs.py +0 -0
|
@@ -4,7 +4,6 @@ import asyncio
|
|
|
4
4
|
import functools
|
|
5
5
|
import inspect
|
|
6
6
|
import logging
|
|
7
|
-
import sys
|
|
8
7
|
from collections.abc import Callable, Coroutine
|
|
9
8
|
from typing import TYPE_CHECKING, Any, overload
|
|
10
9
|
|
|
@@ -132,12 +131,20 @@ class Comm:
|
|
|
132
131
|
except IndexError:
|
|
133
132
|
return None
|
|
134
133
|
|
|
134
|
+
# collect capabilities (fixed at proxy construction time)
|
|
135
|
+
capabilities: dict[type[Interface], Any] = {}
|
|
136
|
+
for interface in interfaces:
|
|
137
|
+
if interface.capabilities is not None:
|
|
138
|
+
cap = await self._get_capabilities(client, interface)
|
|
139
|
+
if cap is not None:
|
|
140
|
+
capabilities[interface] = cap
|
|
141
|
+
|
|
135
142
|
# create new proxy
|
|
136
|
-
proxy = Proxy(self, client, interfaces)
|
|
143
|
+
proxy = Proxy(self, client, interfaces, capabilities)
|
|
137
144
|
|
|
138
145
|
# subscribe to state
|
|
139
146
|
for interface in interfaces:
|
|
140
|
-
if
|
|
147
|
+
if interface.state is not None:
|
|
141
148
|
await self.subscribe_state(client, interface, functools.partial(proxy.update_state, interface))
|
|
142
149
|
|
|
143
150
|
self._proxies[client] = proxy
|
|
@@ -450,22 +457,17 @@ class Comm:
|
|
|
450
457
|
async def _set_state(self, interface: type[Interface], state: Any) -> None:
|
|
451
458
|
pass
|
|
452
459
|
|
|
453
|
-
|
|
454
|
-
def _interface_from_capabilities(caps_cls: type) -> type:
|
|
455
|
-
outer_name = caps_cls.__qualname__.rsplit(".", 1)[0]
|
|
456
|
-
return getattr(sys.modules[caps_cls.__module__], outer_name)
|
|
457
|
-
|
|
458
|
-
async def set_capabilities(self, capabilities: Any) -> None:
|
|
460
|
+
async def set_capabilities(self, interface: type[Interface], capabilities: Any) -> None:
|
|
459
461
|
"""Publish capabilities for this module.
|
|
460
462
|
|
|
461
|
-
Called by Module.open() for each interface that defines a
|
|
463
|
+
Called by Module.open() for each interface that defines a capabilities
|
|
462
464
|
dataclass. Not intended to be called directly by module authors after
|
|
463
465
|
that point — capabilities are fixed for the module lifetime.
|
|
464
466
|
|
|
465
467
|
Args:
|
|
468
|
+
interface: Interface type the capabilities belong to.
|
|
466
469
|
capabilities: Capabilities dataclass instance.
|
|
467
470
|
"""
|
|
468
|
-
interface = Comm._interface_from_capabilities(type(capabilities))
|
|
469
471
|
await self._set_capabilities(interface, capabilities)
|
|
470
472
|
|
|
471
473
|
async def _set_capabilities(self, interface: type[Interface], capabilities: Any) -> None:
|
|
@@ -120,7 +120,7 @@ class LocalComm(Comm):
|
|
|
120
120
|
|
|
121
121
|
async def _get_capabilities(self, module: str, interface: type[Interface]) -> Any | None:
|
|
122
122
|
"""Fetch capabilities from a remote module."""
|
|
123
|
-
if
|
|
123
|
+
if interface.capabilities is None:
|
|
124
124
|
return None
|
|
125
125
|
try:
|
|
126
126
|
remote = self._network.get_client(module)
|
|
@@ -21,13 +21,20 @@ class Proxy:
|
|
|
21
21
|
|
|
22
22
|
__module__ = "pyobs.comm"
|
|
23
23
|
|
|
24
|
-
def __init__(
|
|
24
|
+
def __init__(
|
|
25
|
+
self,
|
|
26
|
+
comm: Comm,
|
|
27
|
+
client: str,
|
|
28
|
+
interfaces: list[type[Interface]],
|
|
29
|
+
capabilities: dict[type[Interface], Any] | None = None,
|
|
30
|
+
):
|
|
25
31
|
"""Creates a new proxy.
|
|
26
32
|
|
|
27
33
|
Args:
|
|
28
34
|
comm: Comm object to use for connection.
|
|
29
35
|
client: Name of client to connect to.
|
|
30
36
|
interfaces: List of interfaces supported by client.
|
|
37
|
+
capabilities: Pre-populated capabilities dict, keyed by interface type.
|
|
31
38
|
"""
|
|
32
39
|
|
|
33
40
|
# set client and interfaces
|
|
@@ -53,8 +60,9 @@ class Proxy:
|
|
|
53
60
|
# create methods
|
|
54
61
|
self._methods = self._create_methods()
|
|
55
62
|
|
|
56
|
-
# store state
|
|
63
|
+
# store state and capabilities
|
|
57
64
|
self._state: dict[type[Interface], Any] = {}
|
|
65
|
+
self._capabilities: dict[type[Interface], Any] = capabilities if capabilities is not None else {}
|
|
58
66
|
|
|
59
67
|
@property
|
|
60
68
|
def name(self) -> str:
|
|
@@ -170,6 +178,10 @@ class Proxy:
|
|
|
170
178
|
"""Latest known state for the given interface, or None if nothing has arrived yet."""
|
|
171
179
|
return self._state.get(interface)
|
|
172
180
|
|
|
181
|
+
def capabilities(self, interface: type[Interface]) -> Any | None:
|
|
182
|
+
"""Capabilities for the given interface, populated once at Proxy construction."""
|
|
183
|
+
return self._capabilities.get(interface)
|
|
184
|
+
|
|
173
185
|
async def wait_for_state(
|
|
174
186
|
self,
|
|
175
187
|
interface: type[Interface],
|
|
@@ -828,7 +828,7 @@ class XmppComm(Comm):
|
|
|
828
828
|
|
|
829
829
|
async def _get_capabilities(self, module: str, interface: type[Interface]) -> Any | None:
|
|
830
830
|
"""Fetch and deserialize capabilities for a remote module's interface."""
|
|
831
|
-
if
|
|
831
|
+
if interface.capabilities is None:
|
|
832
832
|
return None
|
|
833
833
|
# Use full JID (with resource) if we know it — bare JID may not route correctly
|
|
834
834
|
full_jid = next(
|
|
@@ -848,7 +848,7 @@ class XmppComm(Comm):
|
|
|
848
848
|
for elem in child:
|
|
849
849
|
tag = elem.tag.split("}")[-1]
|
|
850
850
|
if tag == "capabilities" and f"{{{ns}}}" in elem.tag:
|
|
851
|
-
return _xml_to_dataclass(elem, interface.
|
|
851
|
+
return _xml_to_dataclass(elem, interface.capabilities)
|
|
852
852
|
return None
|
|
853
853
|
|
|
854
854
|
async def _set_presence(self, state: ModuleState, error_string: str = "") -> None:
|
|
@@ -15,16 +15,18 @@ class BinningState:
|
|
|
15
15
|
time: Time = field(default_factory=Time.now)
|
|
16
16
|
|
|
17
17
|
|
|
18
|
+
@dataclass
|
|
19
|
+
class BinningCapabilities:
|
|
20
|
+
binnings: list[BinningState] = field(default_factory=list)
|
|
21
|
+
|
|
22
|
+
|
|
18
23
|
class IBinning(Interface, metaclass=ABCMeta):
|
|
19
24
|
"""The camera supports binning, to be used together with :class:`~pyobs.interfaces.ICamera`."""
|
|
20
25
|
|
|
21
26
|
__module__ = "pyobs.interfaces"
|
|
22
27
|
|
|
23
28
|
state = BinningState
|
|
24
|
-
|
|
25
|
-
@dataclass
|
|
26
|
-
class Capabilities:
|
|
27
|
-
binnings: list[BinningState] = field(default_factory=list)
|
|
29
|
+
capabilities = BinningCapabilities
|
|
28
30
|
|
|
29
31
|
@abstractmethod
|
|
30
32
|
async def set_binning(self, x: int, y: int, **kwargs: Any) -> None:
|
|
@@ -40,4 +42,4 @@ class IBinning(Interface, metaclass=ABCMeta):
|
|
|
40
42
|
...
|
|
41
43
|
|
|
42
44
|
|
|
43
|
-
__all__ = ["IBinning", "BinningState"]
|
|
45
|
+
__all__ = ["IBinning", "BinningState", "BinningCapabilities"]
|
|
@@ -7,16 +7,17 @@ from typing import Any
|
|
|
7
7
|
from .interface import Interface
|
|
8
8
|
|
|
9
9
|
|
|
10
|
+
@dataclass
|
|
11
|
+
class ConfigCapabilities:
|
|
12
|
+
caps: dict[str, tuple[bool, bool, bool]] = field(default_factory=dict)
|
|
13
|
+
|
|
14
|
+
|
|
10
15
|
class IConfig(Interface, metaclass=ABCMeta):
|
|
11
16
|
"""The module allows access to some of its configuration options."""
|
|
12
17
|
|
|
13
18
|
__module__ = "pyobs.interfaces"
|
|
14
19
|
|
|
15
|
-
|
|
16
|
-
class Capabilities:
|
|
17
|
-
readable: list[str] = field(default_factory=list)
|
|
18
|
-
writable: list[str] = field(default_factory=list)
|
|
19
|
-
options: dict[str, list[str]] = field(default_factory=dict)
|
|
20
|
+
capabilities = ConfigCapabilities
|
|
20
21
|
|
|
21
22
|
@abstractmethod
|
|
22
23
|
async def get_config_value(self, name: str, **kwargs: Any) -> Any:
|
|
@@ -47,4 +48,4 @@ class IConfig(Interface, metaclass=ABCMeta):
|
|
|
47
48
|
...
|
|
48
49
|
|
|
49
50
|
|
|
50
|
-
__all__ = ["IConfig"]
|
|
51
|
+
__all__ = ["IConfig", "ConfigCapabilities"]
|
|
@@ -14,16 +14,18 @@ class FilterState:
|
|
|
14
14
|
time: Time = field(default_factory=Time.now)
|
|
15
15
|
|
|
16
16
|
|
|
17
|
+
@dataclass
|
|
18
|
+
class FiltersCapabilities:
|
|
19
|
+
filters: list[str] = field(default_factory=list)
|
|
20
|
+
|
|
21
|
+
|
|
17
22
|
class IFilters(IMotion, metaclass=ABCMeta):
|
|
18
23
|
"""The module can change filters in a device."""
|
|
19
24
|
|
|
20
25
|
__module__ = "pyobs.interfaces"
|
|
21
26
|
|
|
22
27
|
state = FilterState
|
|
23
|
-
|
|
24
|
-
@dataclass
|
|
25
|
-
class Capabilities:
|
|
26
|
-
filters: list[str] = field(default_factory=list)
|
|
28
|
+
capabilities = FiltersCapabilities
|
|
27
29
|
|
|
28
30
|
@abstractmethod
|
|
29
31
|
async def set_filter(self, filter_name: str, **kwargs: Any) -> None:
|
|
@@ -39,4 +41,4 @@ class IFilters(IMotion, metaclass=ABCMeta):
|
|
|
39
41
|
...
|
|
40
42
|
|
|
41
43
|
|
|
42
|
-
__all__ = ["IFilters", "FilterState"]
|
|
44
|
+
__all__ = ["IFilters", "FilterState", "FiltersCapabilities"]
|
|
@@ -16,16 +16,18 @@ class ImageFormatState:
|
|
|
16
16
|
time: Time = field(default_factory=Time.now)
|
|
17
17
|
|
|
18
18
|
|
|
19
|
+
@dataclass
|
|
20
|
+
class ImageFormatCapabilities:
|
|
21
|
+
image_formats: list[str] = field(default_factory=list)
|
|
22
|
+
|
|
23
|
+
|
|
19
24
|
class IImageFormat(Interface, metaclass=ABCMeta):
|
|
20
25
|
"""The module supports different image formats (e.g. INT16, FLOAT32), mainly used by cameras."""
|
|
21
26
|
|
|
22
27
|
__module__ = "pyobs.interfaces"
|
|
23
28
|
|
|
24
29
|
state = ImageFormatState
|
|
25
|
-
|
|
26
|
-
@dataclass
|
|
27
|
-
class Capabilities:
|
|
28
|
-
image_formats: list[str] = field(default_factory=list)
|
|
30
|
+
capabilities = ImageFormatCapabilities
|
|
29
31
|
|
|
30
32
|
@abstractmethod
|
|
31
33
|
async def set_image_format(self, fmt: ImageFormat, **kwargs: Any) -> None:
|
|
@@ -40,4 +42,4 @@ class IImageFormat(Interface, metaclass=ABCMeta):
|
|
|
40
42
|
...
|
|
41
43
|
|
|
42
44
|
|
|
43
|
-
__all__ = ["IImageFormat", "ImageFormatState"]
|
|
45
|
+
__all__ = ["IImageFormat", "ImageFormatState", "ImageFormatCapabilities"]
|
|
@@ -14,16 +14,18 @@ class ModeState:
|
|
|
14
14
|
time: Time = field(default_factory=Time.now)
|
|
15
15
|
|
|
16
16
|
|
|
17
|
+
@dataclass
|
|
18
|
+
class ModeCapabilities:
|
|
19
|
+
modes: dict[str, list[str]] = field(default_factory=dict) # group -> list of modes
|
|
20
|
+
|
|
21
|
+
|
|
17
22
|
class IMode(Interface, metaclass=ABCMeta):
|
|
18
23
|
"""The module can change modes in a device."""
|
|
19
24
|
|
|
20
25
|
__module__ = "pyobs.interfaces"
|
|
21
26
|
|
|
22
27
|
state = ModeState
|
|
23
|
-
|
|
24
|
-
@dataclass
|
|
25
|
-
class Capabilities:
|
|
26
|
-
modes: dict[str, list[str]] = field(default_factory=dict) # group -> list of modes
|
|
28
|
+
capabilities = ModeCapabilities
|
|
27
29
|
|
|
28
30
|
@abstractmethod
|
|
29
31
|
async def set_mode(self, mode: str, group: int = 0, **kwargs: Any) -> None:
|
|
@@ -40,4 +42,4 @@ class IMode(Interface, metaclass=ABCMeta):
|
|
|
40
42
|
...
|
|
41
43
|
|
|
42
44
|
|
|
43
|
-
__all__ = ["IMode", "ModeState"]
|
|
45
|
+
__all__ = ["IMode", "ModeState", "ModeCapabilities"]
|
|
@@ -7,15 +7,18 @@ from typing import Any
|
|
|
7
7
|
from .interface import Interface
|
|
8
8
|
|
|
9
9
|
|
|
10
|
+
@dataclass
|
|
11
|
+
class ModuleCapabilities:
|
|
12
|
+
label: str = ""
|
|
13
|
+
version: str = ""
|
|
14
|
+
|
|
15
|
+
|
|
10
16
|
class IModule(Interface, metaclass=ABCMeta):
|
|
11
17
|
"""The module is actually a module. Implemented by all modules."""
|
|
12
18
|
|
|
13
19
|
__module__ = "pyobs.interfaces"
|
|
14
20
|
|
|
15
|
-
|
|
16
|
-
class Capabilities:
|
|
17
|
-
version: str = ""
|
|
18
|
-
label: str = ""
|
|
21
|
+
capabilities = ModuleCapabilities
|
|
19
22
|
|
|
20
23
|
@abstractmethod
|
|
21
24
|
async def reset_error(self, **kwargs: Any) -> bool:
|
|
@@ -23,4 +26,4 @@ class IModule(Interface, metaclass=ABCMeta):
|
|
|
23
26
|
...
|
|
24
27
|
|
|
25
28
|
|
|
26
|
-
__all__ = ["IModule"]
|
|
29
|
+
__all__ = ["IModule", "ModuleCapabilities"]
|
|
@@ -17,6 +17,11 @@ class MultiFiberState:
|
|
|
17
17
|
time: Time = field(default_factory=Time.now)
|
|
18
18
|
|
|
19
19
|
|
|
20
|
+
@dataclass
|
|
21
|
+
class MultiFiberCapabilities:
|
|
22
|
+
fiber_count: int = 0
|
|
23
|
+
|
|
24
|
+
|
|
20
25
|
class IMultiFiber(Interface, metaclass=ABCMeta):
|
|
21
26
|
"""An interface for multi-fiber setups that helps to set/get a fiber and retrieve position and size of the
|
|
22
27
|
current fiber on the acquisition/guiding image."""
|
|
@@ -24,11 +29,7 @@ class IMultiFiber(Interface, metaclass=ABCMeta):
|
|
|
24
29
|
__module__ = "pyobs.interfaces"
|
|
25
30
|
|
|
26
31
|
state = MultiFiberState
|
|
27
|
-
|
|
28
|
-
@dataclass
|
|
29
|
-
class Capabilities:
|
|
30
|
-
fiber_count: int = 0
|
|
31
|
-
fiber_names: list[str] = field(default_factory=list)
|
|
32
|
+
capabilities = MultiFiberCapabilities
|
|
32
33
|
|
|
33
34
|
@abstractmethod
|
|
34
35
|
async def abort(self, **kwargs: Any) -> None:
|
|
@@ -45,4 +46,4 @@ class IMultiFiber(Interface, metaclass=ABCMeta):
|
|
|
45
46
|
...
|
|
46
47
|
|
|
47
48
|
|
|
48
|
-
__all__ = ["IMultiFiber", "MultiFiberState"]
|
|
49
|
+
__all__ = ["IMultiFiber", "MultiFiberState", "MultiFiberCapabilities"]
|
|
@@ -6,14 +6,17 @@ from dataclasses import dataclass
|
|
|
6
6
|
from .IData import IData
|
|
7
7
|
|
|
8
8
|
|
|
9
|
+
@dataclass
|
|
10
|
+
class VideoCapabilities:
|
|
11
|
+
video: str = ""
|
|
12
|
+
|
|
13
|
+
|
|
9
14
|
class IVideo(IData, metaclass=ABCMeta):
|
|
10
15
|
"""The module controls a video streaming device."""
|
|
11
16
|
|
|
12
17
|
__module__ = "pyobs.interfaces"
|
|
13
18
|
|
|
14
|
-
|
|
15
|
-
class Capabilities:
|
|
16
|
-
url: str = ""
|
|
19
|
+
capabilities = VideoCapabilities
|
|
17
20
|
|
|
18
21
|
|
|
19
|
-
__all__ = ["IVideo"]
|
|
22
|
+
__all__ = ["IVideo", "VideoCapabilities"]
|
|
@@ -17,16 +17,21 @@ class WindowState:
|
|
|
17
17
|
time: Time = field(default_factory=Time.now)
|
|
18
18
|
|
|
19
19
|
|
|
20
|
+
@dataclass
|
|
21
|
+
class WindowCapabilities:
|
|
22
|
+
full_frame_x: int = 0
|
|
23
|
+
full_frame_y: int = 0
|
|
24
|
+
full_frame_width: int = 0
|
|
25
|
+
full_frame_height: int = 0
|
|
26
|
+
|
|
27
|
+
|
|
20
28
|
class IWindow(Interface, metaclass=ABCMeta):
|
|
21
29
|
"""The camera supports windows, to be used together with :class:`~pyobs.interfaces.ICamera`."""
|
|
22
30
|
|
|
23
31
|
__module__ = "pyobs.interfaces"
|
|
24
32
|
|
|
25
33
|
state = WindowState
|
|
26
|
-
|
|
27
|
-
@dataclass
|
|
28
|
-
class Capabilities:
|
|
29
|
-
full_frame: WindowState = field(default_factory=lambda: WindowState(0, 0, 0, 0))
|
|
34
|
+
capabilities = WindowCapabilities
|
|
30
35
|
|
|
31
36
|
@abstractmethod
|
|
32
37
|
async def set_window(self, left: int, top: int, width: int, height: int, **kwargs: Any) -> None:
|
|
@@ -44,4 +49,4 @@ class IWindow(Interface, metaclass=ABCMeta):
|
|
|
44
49
|
...
|
|
45
50
|
|
|
46
51
|
|
|
47
|
-
__all__ = ["IWindow", "WindowState"]
|
|
52
|
+
__all__ = ["IWindow", "WindowState", "WindowCapabilities"]
|
|
@@ -16,28 +16,29 @@ from .IAcquisition import IAcquisition
|
|
|
16
16
|
from .IAutoFocus import IAutoFocus
|
|
17
17
|
from .IAutoGuiding import IAutoGuiding
|
|
18
18
|
from .IAutonomous import IAutonomous
|
|
19
|
-
from .IBinning import BinningState, IBinning
|
|
19
|
+
from .IBinning import BinningCapabilities, BinningState, IBinning
|
|
20
20
|
from .ICalibrate import ICalibrate
|
|
21
21
|
from .ICamera import ICamera
|
|
22
|
-
from .IConfig import IConfig
|
|
22
|
+
from .IConfig import ConfigCapabilities, IConfig
|
|
23
23
|
from .ICooling import CoolingState, ICooling
|
|
24
24
|
from .IData import IData
|
|
25
25
|
from .IDome import IDome
|
|
26
26
|
from .IExposure import ExposureState, IExposure
|
|
27
27
|
from .IExposureTime import ExposureTimeState, IExposureTime
|
|
28
|
-
from .IFilters import FilterState, IFilters
|
|
28
|
+
from .IFilters import FiltersCapabilities, FilterState, IFilters
|
|
29
29
|
from .IFitsHeaderAfter import IFitsHeaderAfter
|
|
30
30
|
from .IFitsHeaderBefore import IFitsHeaderBefore
|
|
31
31
|
from .IFlatField import IFlatField
|
|
32
32
|
from .IFocuser import FocuserState, IFocuser
|
|
33
33
|
from .IFocusModel import IFocusModel
|
|
34
34
|
from .IGain import GainState, IGain
|
|
35
|
-
from .IImageFormat import IImageFormat, ImageFormatState
|
|
35
|
+
from .IImageFormat import IImageFormat, ImageFormatCapabilities, ImageFormatState
|
|
36
36
|
from .IImageType import IImageType, ImageTypeState
|
|
37
|
-
from .
|
|
38
|
-
from .
|
|
37
|
+
from .ILatLon import ILatLon, LatLonCapabilities
|
|
38
|
+
from .IMode import IMode, ModeCapabilities, ModeState
|
|
39
|
+
from .IModule import IModule, ModuleCapabilities
|
|
39
40
|
from .IMotion import DeviceMotionStatus, IMotion, MotionState
|
|
40
|
-
from .IMultiFiber import IMultiFiber, MultiFiberState
|
|
41
|
+
from .IMultiFiber import IMultiFiber, MultiFiberCapabilities, MultiFiberState
|
|
41
42
|
from .interface import Interface
|
|
42
43
|
from .IOffsetsAltAz import AltAzOffsetState, IOffsetsAltAz
|
|
43
44
|
from .IOffsetsRaDec import IOffsetsRaDec, RaDecOffsetState
|
|
@@ -57,22 +58,25 @@ from .IStartStop import IStartStop
|
|
|
57
58
|
from .ISyncTarget import ISyncTarget
|
|
58
59
|
from .ITelescope import ITelescope
|
|
59
60
|
from .ITemperatures import ITemperatures, SensorReading, TemperaturesState
|
|
60
|
-
from .IVideo import IVideo
|
|
61
|
+
from .IVideo import IVideo, VideoCapabilities
|
|
61
62
|
from .IWeather import IWeather
|
|
62
|
-
from .IWindow import IWindow, WindowState
|
|
63
|
+
from .IWindow import IWindow, WindowCapabilities, WindowState
|
|
63
64
|
|
|
64
65
|
__all__ = [
|
|
65
66
|
"IAbortable",
|
|
66
67
|
"IAcquisition",
|
|
67
68
|
"ILatLon",
|
|
69
|
+
"LatLonCapabilities",
|
|
68
70
|
"IAutoFocus",
|
|
69
71
|
"IAutoGuiding",
|
|
70
72
|
"IAutonomous",
|
|
71
73
|
"IBinning",
|
|
74
|
+
"BinningCapabilities",
|
|
72
75
|
"BinningState",
|
|
73
76
|
"ICalibrate",
|
|
74
77
|
"ICamera",
|
|
75
78
|
"IConfig",
|
|
79
|
+
"ConfigCapabilities",
|
|
76
80
|
"ICooling",
|
|
77
81
|
"CoolingState",
|
|
78
82
|
"IDome",
|
|
@@ -81,6 +85,7 @@ __all__ = [
|
|
|
81
85
|
"IExposureTime",
|
|
82
86
|
"ExposureTimeState",
|
|
83
87
|
"IFilters",
|
|
88
|
+
"FiltersCapabilities",
|
|
84
89
|
"FilterState",
|
|
85
90
|
"IFitsHeaderAfter",
|
|
86
91
|
"IFitsHeaderBefore",
|
|
@@ -91,17 +96,21 @@ __all__ = [
|
|
|
91
96
|
"IGain",
|
|
92
97
|
"GainState",
|
|
93
98
|
"IImageFormat",
|
|
99
|
+
"ImageFormatCapabilities",
|
|
94
100
|
"ImageFormatState",
|
|
95
101
|
"IData",
|
|
96
102
|
"IImageType",
|
|
97
103
|
"ImageTypeState",
|
|
98
104
|
"IMode",
|
|
105
|
+
"ModeCapabilities",
|
|
99
106
|
"ModeState",
|
|
100
107
|
"IModule",
|
|
108
|
+
"ModuleCapabilities",
|
|
101
109
|
"IMotion",
|
|
102
110
|
"DeviceMotionStatus",
|
|
103
111
|
"MotionState",
|
|
104
112
|
"IMultiFiber",
|
|
113
|
+
"MultiFiberCapabilities",
|
|
105
114
|
"MultiFiberState",
|
|
106
115
|
"IPointingAltAz",
|
|
107
116
|
"AltAzState",
|
|
@@ -133,8 +142,10 @@ __all__ = [
|
|
|
133
142
|
"RaDecOffsetState",
|
|
134
143
|
"ISpectrograph",
|
|
135
144
|
"IVideo",
|
|
145
|
+
"VideoCapabilities",
|
|
136
146
|
"IWeather",
|
|
137
147
|
"IWindow",
|
|
148
|
+
"WindowCapabilities",
|
|
138
149
|
"WindowState",
|
|
139
150
|
"Interface",
|
|
140
151
|
]
|
|
@@ -14,7 +14,7 @@ from numpy.typing import NDArray
|
|
|
14
14
|
|
|
15
15
|
from pyobs.events import NewImageEvent
|
|
16
16
|
from pyobs.images import Image
|
|
17
|
-
from pyobs.interfaces import IExposureTime, IImageType, IVideo
|
|
17
|
+
from pyobs.interfaces import IExposureTime, IImageType, IVideo, VideoCapabilities
|
|
18
18
|
from pyobs.mixins.fitsheader import ImageFitsHeaderMixin
|
|
19
19
|
from pyobs.modules import Module, timeout
|
|
20
20
|
from pyobs.utils.cache import DataCache
|
|
@@ -166,7 +166,7 @@ class BaseVideo(Module, ImageFitsHeaderMixin, IVideo, IImageType, metaclass=ABCM
|
|
|
166
166
|
self._is_listening = True
|
|
167
167
|
|
|
168
168
|
# publish video URL as capability
|
|
169
|
-
await self.comm.set_capabilities(IVideo
|
|
169
|
+
await self.comm.set_capabilities(IVideo, VideoCapabilities(video=self._video_path))
|
|
170
170
|
|
|
171
171
|
async def close(self) -> None:
|
|
172
172
|
"""Close server"""
|
|
@@ -18,6 +18,7 @@ from photutils.datasets import make_model_image, make_noise_image
|
|
|
18
18
|
|
|
19
19
|
from pyobs.images import Image
|
|
20
20
|
from pyobs.interfaces import (
|
|
21
|
+
BinningCapabilities,
|
|
21
22
|
BinningState,
|
|
22
23
|
CoolingState,
|
|
23
24
|
GainState,
|
|
@@ -25,6 +26,7 @@ from pyobs.interfaces import (
|
|
|
25
26
|
ICooling,
|
|
26
27
|
IGain,
|
|
27
28
|
IImageFormat,
|
|
29
|
+
ImageFormatCapabilities,
|
|
28
30
|
ImageFormatState,
|
|
29
31
|
IPointingRaDec,
|
|
30
32
|
ITemperatures,
|
|
@@ -32,6 +34,7 @@ from pyobs.interfaces import (
|
|
|
32
34
|
RaDecState,
|
|
33
35
|
SensorReading,
|
|
34
36
|
TemperaturesState,
|
|
37
|
+
WindowCapabilities,
|
|
35
38
|
WindowState,
|
|
36
39
|
)
|
|
37
40
|
from pyobs.modules.camera.basecamera import BaseCamera
|
|
@@ -121,11 +124,22 @@ class DummyCamera(BaseCamera, IWindow, IBinning, ICooling, IGain, IImageFormat):
|
|
|
121
124
|
async def open(self) -> None:
|
|
122
125
|
"""Opens camera."""
|
|
123
126
|
# publish capabilities before super().open()
|
|
124
|
-
await self.comm.set_capabilities(IWindow.Capabilities(full_frame=WindowState(*self._full_frame)))
|
|
125
127
|
await self.comm.set_capabilities(
|
|
126
|
-
|
|
128
|
+
IWindow,
|
|
129
|
+
WindowCapabilities(
|
|
130
|
+
full_frame_x=self._full_frame[0],
|
|
131
|
+
full_frame_y=self._full_frame[1],
|
|
132
|
+
full_frame_width=self._full_frame[2],
|
|
133
|
+
full_frame_height=self._full_frame[3],
|
|
134
|
+
),
|
|
135
|
+
)
|
|
136
|
+
await self.comm.set_capabilities(
|
|
137
|
+
IBinning,
|
|
138
|
+
BinningCapabilities(binnings=[BinningState(x=i[0], y=i[1]) for i in [(1, 1), (2, 2), (3, 3)]]),
|
|
139
|
+
)
|
|
140
|
+
await self.comm.set_capabilities(
|
|
141
|
+
IImageFormat, ImageFormatCapabilities(image_formats=[ImageFormat.INT8, ImageFormat.INT16])
|
|
127
142
|
)
|
|
128
|
-
await self.comm.set_capabilities(IImageFormat.Capabilities(image_formats=[ImageFormat.INT8, ImageFormat.INT16]))
|
|
129
143
|
|
|
130
144
|
await BaseCamera.open(self)
|
|
131
145
|
|
|
@@ -11,7 +11,7 @@ import packaging.version
|
|
|
11
11
|
from py_expression_eval import Parser
|
|
12
12
|
|
|
13
13
|
from pyobs.events import Event, ModuleOpenedEvent
|
|
14
|
-
from pyobs.interfaces import IConfig, IModule, Interface
|
|
14
|
+
from pyobs.interfaces import ConfigCapabilities, IConfig, IModule, Interface, ModuleCapabilities
|
|
15
15
|
from pyobs.object import Object
|
|
16
16
|
from pyobs.utils import exceptions as exc
|
|
17
17
|
from pyobs.utils.enums import ModuleState
|
|
@@ -155,17 +155,15 @@ class Module(Object, IModule, IConfig):
|
|
|
155
155
|
# publish base capabilities
|
|
156
156
|
if self._comm is not None:
|
|
157
157
|
await self._comm.set_capabilities(
|
|
158
|
-
IModule
|
|
158
|
+
IModule,
|
|
159
|
+
ModuleCapabilities(
|
|
159
160
|
version=await self.get_version(),
|
|
160
161
|
label=await self.get_label(),
|
|
161
|
-
)
|
|
162
|
+
),
|
|
162
163
|
)
|
|
163
164
|
await self._comm.set_capabilities(
|
|
164
|
-
IConfig
|
|
165
|
-
|
|
166
|
-
writable=[n for n, (r, w, o) in self._config_caps.items() if w],
|
|
167
|
-
options={n: [] for n, (r, w, o) in self._config_caps.items() if o},
|
|
168
|
-
)
|
|
165
|
+
IConfig,
|
|
166
|
+
ConfigCapabilities(caps=self._config_caps),
|
|
169
167
|
)
|
|
170
168
|
|
|
171
169
|
async def close(self) -> None:
|
|
@@ -11,6 +11,7 @@ from astropy.coordinates import SkyCoord
|
|
|
11
11
|
|
|
12
12
|
from pyobs.events import FilterChangedEvent, OffsetsRaDecEvent
|
|
13
13
|
from pyobs.interfaces import (
|
|
14
|
+
FiltersCapabilities,
|
|
14
15
|
FilterState,
|
|
15
16
|
FocuserState,
|
|
16
17
|
IFilters,
|
|
@@ -183,7 +184,7 @@ class DummyTelescope(
|
|
|
183
184
|
await self._change_motion_status(MotionStatus.IDLE)
|
|
184
185
|
|
|
185
186
|
# publish initial states and capabilities
|
|
186
|
-
await self.comm.set_capabilities(IFilters
|
|
187
|
+
await self.comm.set_capabilities(IFilters, FiltersCapabilities(filters=self._filters))
|
|
187
188
|
await self.comm.set_state(IFocuser, FocuserState(focus=self._focus, focus_offset=0.0))
|
|
188
189
|
await self.comm.set_state(IFilters, FilterState(filter=self._filter_name))
|
|
189
190
|
await self.comm.set_state(
|
|
@@ -5,7 +5,7 @@ import logging
|
|
|
5
5
|
from typing import Any
|
|
6
6
|
|
|
7
7
|
from pyobs.events import ModeChangedEvent
|
|
8
|
-
from pyobs.interfaces import IMode, IMotion, IReady, ModeState, ReadyState
|
|
8
|
+
from pyobs.interfaces import IMode, IMotion, IReady, ModeCapabilities, ModeState, ReadyState
|
|
9
9
|
from pyobs.mixins import MotionStatusMixin
|
|
10
10
|
from pyobs.modules import Module
|
|
11
11
|
from pyobs.utils.enums import MotionStatus
|
|
@@ -45,7 +45,7 @@ class DummyMode(MotionStatusMixin, Module, IMode, IMotion):
|
|
|
45
45
|
await self.comm.set_state(IReady, ReadyState(ready=True))
|
|
46
46
|
|
|
47
47
|
# publish capabilities and initial state
|
|
48
|
-
await self.comm.set_capabilities(IMode
|
|
48
|
+
await self.comm.set_capabilities(IMode, ModeCapabilities(modes=self._mode_options))
|
|
49
49
|
await self.comm.set_state(IMode, ModeState(modes=dict(self._modes)))
|
|
50
50
|
|
|
51
51
|
def _group_name(self, group: int) -> str:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|