pyobs-core 2.0.0.dev81__tar.gz → 2.0.0.dev82__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.dev81 → pyobs_core-2.0.0.dev82}/PKG-INFO +1 -1
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/mixins/camerasettings.py +2 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/mixins/fitsheader.py +11 -4
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/mixins/fitsnamespace.py +1 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/mixins/follow.py +2 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/mixins/motionstatus.py +2 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/mixins/pipeline.py +34 -5
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/mixins/waitformotion.py +2 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/mixins/weatheraware.py +2 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/camera/basecamera.py +2 -3
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/camera/basespectrograph.py +1 -4
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/camera/basevideo.py +2 -3
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/camera/pipelinecamera.py +1 -3
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/focus/focusseries.py +1 -4
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/image/pipeline.py +1 -2
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/pointing/_base.py +1 -4
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/pointing/acquisition.py +1 -4
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/pointing/autoguiding.py +1 -4
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/robotic/scheduler.py +46 -2
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/roof/baseroof.py +2 -5
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/telescope/_dummytelescopebase.py +1 -2
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/telescope/basetelescope.py +11 -12
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/utils/dummymode.py +2 -3
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/object.py +5 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/gui/camera/windowingwidget.py +1 -1
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/pipeline/pipeline.py +1 -2
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyproject.toml +1 -1
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/.gitignore +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/LICENSE +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/application.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/background_task.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/cli/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/cli/_cli.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/cli/pyobs.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/cli/pyobsd.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/cli/pyobsw.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/comm.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/commlogging.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/dummy/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/dummy/dummycomm.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/local/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/local/localcomm.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/local/localnetwork.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/proxy.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/xmpp/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/xmpp/rpc.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/xmpp/serializer.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/xmpp/xep_0009/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/xmpp/xep_0009/binding.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/xmpp/xep_0009/rpc.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/xmpp/xep_0009_timeout/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/xmpp/xep_0009_timeout/rpc.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/xmpp/xep_0009_timeout/stanza/RPC.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/xmpp/xep_0009_timeout/stanza/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/xmpp/xmppclient.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/xmpp/xmppcomm.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/events/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/events/badweather.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/events/event.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/events/exposurestatuschanged.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/events/filterchanged.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/events/focusfound.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/events/goodweather.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/events/log.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/events/modechanged.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/events/moduleclosed.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/events/moduleopened.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/events/motionstatuschanged.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/events/move.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/events/newimage.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/events/newspectrum.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/events/offsets.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/events/roofclosing.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/events/roofopened.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/events/taskfailed.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/events/taskfinished.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/events/taskstarted.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/events/testevent.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/image.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/meta/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/meta/altazoffsets.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/meta/exptime.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/meta/genericoffset.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/meta/onskydistance.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/meta/pixeloffsets.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/meta/radecoffsets.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/meta/skyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processor.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/_daobackgroundremover.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/annotation/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/annotation/_pillow.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/annotation/circle.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/annotation/crosshair.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/annotation/text.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/astrometry/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/astrometry/_dotnet_request.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/astrometry/_dotnet_request_builder.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/astrometry/_dotnet_request_logger.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/astrometry/_dotnet_response_saver.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/astrometry/astrometry.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/astrometry/dotnet.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/calibration/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/calibration/_calibration_cache.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/calibration/_ccddata_calibrator.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/calibration/calibration.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/detection/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/detection/_pysep_stats_calculator.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/detection/_source_catalog.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/detection/daophot.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/detection/pysep.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/detection/simpledisk.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/detection/sourcedetection.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/exptime/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/exptime/exptime.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/exptime/star.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/image/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/image/addfitsheaders.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/image/download.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/image/flip.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/image/grayscale.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/image/httpserver.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/image/normalize.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/image/save.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/image/saveimage.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/image/smooth.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/image/softbin.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/misc/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/misc/addmask.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/misc/catalogcircularmask.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/misc/circularmask.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/misc/createfilename.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/misc/imagesourcefilter.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/misc/removebackground.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/modules/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/modules/getfitsheaders.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/offsets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/offsets/astrometry.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/offsets/brighteststar.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/offsets/brighteststar_guiding.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/offsets/dummyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/offsets/dummyskyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/offsets/fitsheader.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/offsets/offsets.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/offsets/pixeloffsets.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/offsets/projected.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/offsets/spilled_light.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/photometry/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/photometry/_photometry_calculator.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/photometry/_photutil_aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/photometry/_sep_aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/photometry/aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/photometry/photometry.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/photometry/photutil.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/photometry/pysep.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/wcs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/images/processors/wcs/solarhelioprojective.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IAbortable.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IAcquisition.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IAutoFocus.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IAutoGuiding.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IAutonomous.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IBinning.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/ICalibrate.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/ICamera.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IConfig.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/ICooling.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IData.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IDataSequence.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IDome.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IExposure.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IExposureTime.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IFilters.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IFitsHeaderAfter.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IFitsHeaderBefore.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IFlatField.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IFocusModel.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IFocuser.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IGain.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IImageFormat.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IImageType.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IMode.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IModule.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IMotion.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IMultiFiber.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IOffsetsAltAz.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IOffsetsRaDec.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IPointingAltAz.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IPointingBody.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IPointingHeliocentricPolar.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IPointingHeliographicStonyhurst.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IPointingHelioprojective.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IPointingOrbitalElements.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IPointingRaDec.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IPointingSeries.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IReady.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IRoof.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IRotation.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IRunnable.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IRunning.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IScriptRunner.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/ISpectrograph.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IStartStop.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IStructuredConfig.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/ISyncTarget.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/ITelescope.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/ITemperatures.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/ITrackingMode.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/ITrackingRate.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IVideo.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IWeather.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/IWindow.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/interfaces/interface.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/mixins/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/camera/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/camera/adaptive.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/camera/dummycamera.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/camera/dummyspectrograph.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/camera/dummyvideo.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/flatfield/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/flatfield/flatfield.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/flatfield/pointing.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/flatfield/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/focus/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/focus/dummyautofocus.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/focus/focusmodel.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/image/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/image/imagewatcher.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/image/imagewriter.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/image/seeing.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/module.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/pointing/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/pointing/_baseguiding.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/pointing/dummyacquisition.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/pointing/dummyguiding.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/pointing/guidingstatistics/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/pointing/guidingstatistics/guidingstatistics.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/pointing/guidingstatistics/pixeloffset.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/pointing/guidingstatistics/skyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/pointing/guidingstatistics/uptime.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/pointing/scienceframeguiding.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/robotic/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/robotic/mastermind.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/robotic/pointing.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/robotic/scriptrunner.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/roof/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/roof/basedome.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/roof/dummyroof.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/telescope/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/telescope/dummyaltaztelescope.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/telescope/dummyradectelescope.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/telescope/dummysolartelescope.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/test/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/test/standalone.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/utils/fluentlogger.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/utils/httpfilecache.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/utils/kiosk.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/utils/matrix.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/utils/stellarium.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/utils/telegram.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/utils/trigger.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/weather/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/weather/mockweather.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/weather/weather.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/weather/weather_api.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/weather/weather_state.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/py.typed +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/observation.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/_executor.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/astroplanscheduler.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/constraints/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/constraints/airmassconstraint.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/constraints/constraint.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/constraints/moonilluminationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/constraints/moonseparationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/constraints/solarelevationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/constraints/timeconstraint.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/dataprovider.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/merits/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/merits/aftertime.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/merits/beforetime.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/merits/constant.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/merits/follow.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/merits/interval.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/merits/merit.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/merits/pernight.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/merits/random.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/merits/timewindow.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/merits/transit.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/observationarchiveevolution.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/ondemandscheduler.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/targets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/targets/dynamictarget.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/targets/heliocentricpolartarget.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/targets/helioprojectivetarget.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/targets/picker/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/targets/picker/csvpicker.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/targets/picker/picker.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/targets/siderealtarget.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/targets/target.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scheduler/taskscheduler.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scripts/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scripts/calibration/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scripts/calibration/darkbias.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scripts/calibration/pointing.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scripts/calibration/skyflats.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scripts/control/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scripts/control/cases.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scripts/control/conditional.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scripts/control/parallel.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scripts/control/selector.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scripts/control/sequential.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scripts/exceptions.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scripts/imaging/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scripts/imaging/autofocus.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scripts/imaging/imaging.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scripts/imaging/transitimaging.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scripts/script.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scripts/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scripts/utils/callmodule.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scripts/utils/debugtrigger.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/scripts/utils/log.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/backend/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/backend/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/backend/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/filesystem/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/filesystem/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/filesystem/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/lco/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/lco/_portal.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/lco/_schedulereader.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/lco/_schedulewriter.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/lco/configdb.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/lco/mockobservationarchive.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/lco/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/lco/scripts/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/lco/scripts/autofocus.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/lco/scripts/default.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/lco/scripts/script.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/lco/task.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/lco/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/lco/taskrunner.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/memory/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/memory/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/memory/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/storage/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/task.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/taskrunner.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/utils/archive/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/utils/archive/archive.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/utils/archive/local_archive.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/utils/archive/pyobs_archive.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/utils/exptime/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/utils/exptime/exptime.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/utils/exptime/stellarexptime.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/utils/skyflats/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/utils/skyflats/exptimeeval.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/utils/skyflats/flatfielder.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/utils/skyflats/pointing/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/utils/skyflats/pointing/base.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/utils/skyflats/pointing/static.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/utils/skyflats/priorities/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/utils/skyflats/priorities/archive.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/utils/skyflats/priorities/base.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/utils/skyflats/priorities/const.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/robotic/utils/skyflats/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/average.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/cache.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/config.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/config_schema.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/coordinates.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/curvefit.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/enums.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/exceptions.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/fits.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/focusseries/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/focusseries/base.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/focusseries/photometry.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/focusseries/projection.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/grids/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/grids/filters.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/grids/grid.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/grids/gridnode.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/grids/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/gui/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/gui/camera/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/gui/camera/binningwidget.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/gui/camera/datadisplaywidget.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/gui/camera/exposewidget.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/gui/camera/exposuretimewidget.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/gui/camera/imageformatwidget.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/gui/camera/listpickerdialog.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/http.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/influxdb.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/logger.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/logging/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/logging/context.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/logging/resolvableerror.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/modulegui.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/offsets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/offsets/applyaltazoffsets.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/offsets/applyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/offsets/applyradecoffsets.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/parallel.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/pipeline/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/pipeline/progress.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/pipeline/reduction.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/pipeline/reduction_base.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/publisher/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/publisher/csv.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/publisher/http.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/publisher/log.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/publisher/multi.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/publisher/publisher.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/serialization.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/shellcommand.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/threads/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/threads/lockwithabort.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/time.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/units.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/utils/versions.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/version.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/vfs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/vfs/archivefile.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/vfs/bufferedfile.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/vfs/file.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/vfs/filelists/__init__.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/vfs/filelists/filelist.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/vfs/filelists/testing.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/vfs/httpfile.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/vfs/localfile.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/vfs/memfile.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/vfs/sftpfile.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/vfs/smbfile.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/vfs/sshfile.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/vfs/tempfile.py +0 -0
- {pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/vfs/vfs.py +0 -0
|
@@ -35,6 +35,8 @@ class CameraSettingsMixin:
|
|
|
35
35
|
self.__camerasettings_filter = filter_name
|
|
36
36
|
self.__camerasettings_binning = binning
|
|
37
37
|
|
|
38
|
+
super().__init__(**kwargs)
|
|
39
|
+
|
|
38
40
|
async def _do_camera_settings(self, camera: Module | IData | IFilters | IBinning | IWindow) -> None:
|
|
39
41
|
"""Do camera settings for given camera."""
|
|
40
42
|
|
|
@@ -46,8 +46,6 @@ class FitsHeaderMixin:
|
|
|
46
46
|
them. A peer that never answers (e.g. a laptop put to sleep without closing its
|
|
47
47
|
client) would otherwise stall the frame for the full XMPP IQ timeout.
|
|
48
48
|
"""
|
|
49
|
-
module = cast(Module, self)
|
|
50
|
-
|
|
51
49
|
# store
|
|
52
50
|
self._fitsheadermixin_fits_namespaces = fits_namespaces
|
|
53
51
|
self._fitsheadermixin_filename_pattern = filenames
|
|
@@ -58,10 +56,19 @@ class FitsHeaderMixin:
|
|
|
58
56
|
self._fitsheadermixin_night_obs = night_obs
|
|
59
57
|
|
|
60
58
|
# night exposure number
|
|
61
|
-
self._fitsheadermixin_cache = f"/pyobs/modules/{module.name}/cache.yaml"
|
|
62
59
|
self._fitsheadermixin_enable_frame_number = frame_number
|
|
63
60
|
self._fitsheadermixin_frame_number = 0
|
|
64
61
|
|
|
62
|
+
super().__init__(**kwargs)
|
|
63
|
+
|
|
64
|
+
@property
|
|
65
|
+
def _fitsheadermixin_cache(self) -> str:
|
|
66
|
+
# computed lazily (not cached at __init__ time) since it depends on module.name, which in
|
|
67
|
+
# turn depends on comm having been set up by Object.__init__ -- in a cooperative super()
|
|
68
|
+
# chain, this mixin's __init__ can run before Module has finished its own setup
|
|
69
|
+
module = cast(Module, self)
|
|
70
|
+
return f"/pyobs/modules/{module.name}/cache.yaml"
|
|
71
|
+
|
|
65
72
|
async def request_fits_headers(self, before: bool = True) -> dict[str, Task[Any]]:
|
|
66
73
|
"""Request FITS headers from other modules.
|
|
67
74
|
|
|
@@ -309,7 +316,7 @@ class ImageFitsHeaderMixin(FitsHeaderMixin):
|
|
|
309
316
|
rotation: Rotation east of north.
|
|
310
317
|
filename: Filename pattern for FITS images.
|
|
311
318
|
"""
|
|
312
|
-
|
|
319
|
+
super().__init__(**kwargs)
|
|
313
320
|
|
|
314
321
|
# store
|
|
315
322
|
self._fitsheadermixin_centre = centre
|
|
@@ -15,6 +15,7 @@ class FitsNamespaceMixin:
|
|
|
15
15
|
|
|
16
16
|
def __init__(self, fits_namespaces: dict[str, list[str]] | None = None, **kwargs: Any):
|
|
17
17
|
self.__namespaces = {} if fits_namespaces is None else fits_namespaces
|
|
18
|
+
super().__init__(**kwargs)
|
|
18
19
|
|
|
19
20
|
def _filter_fits_namespace(
|
|
20
21
|
self, hdr: dict[str, FitsHeaderEntry], sender: str, namespaces: list[str] | None = None, **kwargs: Any
|
|
@@ -125,6 +125,8 @@ class FollowMixin:
|
|
|
125
125
|
if not isinstance(self, self.__follow_mode):
|
|
126
126
|
raise ValueError(f"This module is not of given mode {mode}.")
|
|
127
127
|
|
|
128
|
+
super().__init__(*args, **kwargs)
|
|
129
|
+
|
|
128
130
|
@property
|
|
129
131
|
def is_following(self) -> bool:
|
|
130
132
|
"""Returns True, if we're following another device."""
|
|
@@ -26,6 +26,8 @@ class MotionStatusMixin:
|
|
|
26
26
|
self.__motion_status = MotionStatus.UNKNOWN
|
|
27
27
|
self.__motion_status_single = {i: MotionStatus.UNKNOWN for i in self.__motion_status_interfaces}
|
|
28
28
|
|
|
29
|
+
super().__init__(**kwargs)
|
|
30
|
+
|
|
29
31
|
async def open(self) -> None:
|
|
30
32
|
# subscribe to events
|
|
31
33
|
if isinstance(self, Module) and self._comm:
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import inspect
|
|
3
4
|
import logging
|
|
4
5
|
from typing import TYPE_CHECKING, Any
|
|
5
6
|
|
|
6
7
|
from pyobs.images import Image, ImageProcessor
|
|
7
|
-
from pyobs.object import Object
|
|
8
|
+
from pyobs.object import Object, get_class_from_string
|
|
8
9
|
from pyobs.utils.exceptions import ImageError
|
|
9
10
|
|
|
10
11
|
if TYPE_CHECKING:
|
|
@@ -31,9 +32,10 @@ class PipelineMixin:
|
|
|
31
32
|
archive: Default archive config/object for steps that accept one (e.g.
|
|
32
33
|
Calibration) and don't already specify their own -- lets a pipeline's
|
|
33
34
|
steps share the archive it was itself given, instead of repeating the
|
|
34
|
-
same archive config in every step that needs one.
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
same archive config in every step that needs one. Only injected into a
|
|
36
|
+
step's config if that step's class actually declares an `archive`
|
|
37
|
+
parameter (checked via signature inspection); steps that don't declare
|
|
38
|
+
one never receive it, rather than receiving-then-silently-dropping it.
|
|
37
39
|
"""
|
|
38
40
|
|
|
39
41
|
# store
|
|
@@ -46,11 +48,38 @@ class PipelineMixin:
|
|
|
46
48
|
else:
|
|
47
49
|
raise ValueError("This class is no Object.")
|
|
48
50
|
|
|
51
|
+
super().__init__(**kwargs)
|
|
52
|
+
|
|
53
|
+
@staticmethod
|
|
54
|
+
def _accepts_archive(class_name: str) -> bool:
|
|
55
|
+
"""Whether the given class declares an `archive` parameter anywhere in its `__init__` MRO."""
|
|
56
|
+
try:
|
|
57
|
+
klass = get_class_from_string(class_name)
|
|
58
|
+
except Exception:
|
|
59
|
+
return False
|
|
60
|
+
for cls in klass.__mro__:
|
|
61
|
+
init = cls.__dict__.get("__init__")
|
|
62
|
+
if init is None:
|
|
63
|
+
continue
|
|
64
|
+
try:
|
|
65
|
+
sig = inspect.signature(init)
|
|
66
|
+
except (TypeError, ValueError):
|
|
67
|
+
continue
|
|
68
|
+
if "archive" in sig.parameters:
|
|
69
|
+
return True
|
|
70
|
+
return False
|
|
71
|
+
|
|
49
72
|
@staticmethod
|
|
50
73
|
def _with_default_archive(
|
|
51
74
|
step: dict[str, Any] | ImageProcessor, archive: dict[str, Any] | Archive | None
|
|
52
75
|
) -> dict[str, Any] | ImageProcessor:
|
|
53
|
-
if
|
|
76
|
+
if (
|
|
77
|
+
archive is not None
|
|
78
|
+
and isinstance(step, dict)
|
|
79
|
+
and "archive" not in step
|
|
80
|
+
and "class" in step
|
|
81
|
+
and PipelineMixin._accepts_archive(step["class"])
|
|
82
|
+
):
|
|
54
83
|
return {**step, "archive": archive}
|
|
55
84
|
return step
|
|
56
85
|
|
|
@@ -76,15 +76,14 @@ class BaseCamera(
|
|
|
76
76
|
fits_namespaces: List of namespaces for FITS headers that this camera should request
|
|
77
77
|
fits_header_timeout: Maximum seconds to wait for a peer's FITS headers before skipping them.
|
|
78
78
|
"""
|
|
79
|
-
|
|
80
|
-
ImageFitsHeaderMixin.__init__(
|
|
81
|
-
self,
|
|
79
|
+
super().__init__(
|
|
82
80
|
fits_namespaces=fits_namespaces,
|
|
83
81
|
fits_headers=fits_headers,
|
|
84
82
|
centre=centre,
|
|
85
83
|
rotation=rotation,
|
|
86
84
|
filenames=filenames,
|
|
87
85
|
fits_header_timeout=fits_header_timeout,
|
|
86
|
+
**kwargs,
|
|
88
87
|
)
|
|
89
88
|
|
|
90
89
|
# check
|
|
@@ -44,10 +44,7 @@ class BaseSpectrograph(Module, SpectrumFitsHeaderMixin, ISpectrograph, IExposure
|
|
|
44
44
|
filenames: Template for file naming.
|
|
45
45
|
fits_namespaces: List of namespaces for FITS headers that this camera should request
|
|
46
46
|
"""
|
|
47
|
-
|
|
48
|
-
SpectrumFitsHeaderMixin.__init__(
|
|
49
|
-
self, fits_namespaces=fits_namespaces, fits_headers=fits_headers, filenames=filenames, **kwargs
|
|
50
|
-
)
|
|
47
|
+
super().__init__(fits_namespaces=fits_namespaces, fits_headers=fits_headers, filenames=filenames, **kwargs)
|
|
51
48
|
|
|
52
49
|
# init camera
|
|
53
50
|
self._exposure: ExposureInfo | None = None
|
|
@@ -113,15 +113,14 @@ class BaseVideo(Module, ImageFitsHeaderMixin, IVideo, IImageType, metaclass=ABCM
|
|
|
113
113
|
sleep_time: Time in s with inactivity after which the camera should go to sleep.
|
|
114
114
|
fits_header_timeout: Maximum seconds to wait for a peer's FITS headers before skipping them.
|
|
115
115
|
"""
|
|
116
|
-
|
|
117
|
-
ImageFitsHeaderMixin.__init__(
|
|
118
|
-
self,
|
|
116
|
+
super().__init__(
|
|
119
117
|
fits_namespaces=fits_namespaces,
|
|
120
118
|
fits_headers=fits_headers,
|
|
121
119
|
centre=centre,
|
|
122
120
|
rotation=rotation,
|
|
123
121
|
filenames=filenames,
|
|
124
122
|
fits_header_timeout=fits_header_timeout,
|
|
123
|
+
**kwargs,
|
|
125
124
|
)
|
|
126
125
|
|
|
127
126
|
# store
|
|
@@ -20,9 +20,7 @@ class PipelineCamera(Module, ICamera, ImageFitsHeaderMixin, PipelineMixin):
|
|
|
20
20
|
|
|
21
21
|
def __init__(self, **kwargs: Any):
|
|
22
22
|
"""Creates a new pipeline cammera."""
|
|
23
|
-
|
|
24
|
-
PipelineMixin.__init__(self, **kwargs)
|
|
25
|
-
ImageFitsHeaderMixin.__init__(self, **kwargs)
|
|
23
|
+
super().__init__(**kwargs)
|
|
26
24
|
|
|
27
25
|
async def grab_data(self, broadcast: bool = True, **kwargs: Any) -> str:
|
|
28
26
|
"""Grabs an image and returns reference.
|
|
@@ -58,7 +58,7 @@ class AutoFocusSeries(Module, CameraSettingsMixin, IAutoFocus):
|
|
|
58
58
|
broadcast: Whether to broadcast focus series images.
|
|
59
59
|
final_image: Whether to take final image with optimal focus, which is always broadcasted.
|
|
60
60
|
"""
|
|
61
|
-
|
|
61
|
+
super().__init__(filters=filters, filter_name=filter_name, binning=binning, **kwargs)
|
|
62
62
|
|
|
63
63
|
# store focuser and camera
|
|
64
64
|
self._focuser = focuser
|
|
@@ -74,9 +74,6 @@ class AutoFocusSeries(Module, CameraSettingsMixin, IAutoFocus):
|
|
|
74
74
|
# create focus series
|
|
75
75
|
self._series: FocusSeries = get_object(series, FocusSeries)
|
|
76
76
|
|
|
77
|
-
# init camera settings mixin
|
|
78
|
-
CameraSettingsMixin.__init__(self, filters=filters, filter_name=filter_name, binning=binning, **kwargs)
|
|
79
|
-
|
|
80
77
|
# register exceptions
|
|
81
78
|
if isinstance(camera, str):
|
|
82
79
|
self._register_exception(
|
|
@@ -29,8 +29,7 @@ class Pipeline(Module, PipelineMixin):
|
|
|
29
29
|
sources: List of sources to process images from.
|
|
30
30
|
interval: Interval in seconds for automatic run of pipeline.
|
|
31
31
|
"""
|
|
32
|
-
|
|
33
|
-
PipelineMixin.__init__(self, pipeline)
|
|
32
|
+
super().__init__(steps=pipeline, **kwargs)
|
|
34
33
|
|
|
35
34
|
# only allow one option!
|
|
36
35
|
if (sources is not None and interval is not None) or (sources is None and interval is None):
|
|
@@ -34,11 +34,8 @@ class BasePointing(Module, PipelineMixin, metaclass=ABCMeta):
|
|
|
34
34
|
telescope: Telescope to use.
|
|
35
35
|
pipeline: Pipeline steps to run on new image. MUST include a step calculating offsets!
|
|
36
36
|
apply: Object that handles applying offsets to telescope.
|
|
37
|
-
log_file: Name of file to write log to.
|
|
38
|
-
log_absolute: Log absolute offsets instead of relative ones to last one.
|
|
39
37
|
"""
|
|
40
|
-
|
|
41
|
-
PipelineMixin.__init__(self, pipeline)
|
|
38
|
+
super().__init__(steps=pipeline, **kwargs)
|
|
42
39
|
|
|
43
40
|
# store
|
|
44
41
|
self._camera = camera
|
|
@@ -75,7 +75,7 @@ class Acquisition(BasePointing, CameraSettingsMixin, IAcquisition):
|
|
|
75
75
|
successful or not.
|
|
76
76
|
broadcast: Whether to broadcast acquisition images.
|
|
77
77
|
"""
|
|
78
|
-
|
|
78
|
+
super().__init__(**kwargs)
|
|
79
79
|
|
|
80
80
|
# store
|
|
81
81
|
self._default_exposure_time = exposure_time
|
|
@@ -92,9 +92,6 @@ class Acquisition(BasePointing, CameraSettingsMixin, IAcquisition):
|
|
|
92
92
|
# init log file
|
|
93
93
|
self._publisher = CsvPublisher(log_file) if log_file is not None else None
|
|
94
94
|
|
|
95
|
-
# init camera settings mixin
|
|
96
|
-
CameraSettingsMixin.__init__(self, **kwargs)
|
|
97
|
-
|
|
98
95
|
async def open(self) -> None:
|
|
99
96
|
"""Open module"""
|
|
100
97
|
await Module.open(self)
|
|
@@ -27,7 +27,7 @@ class AutoGuiding(BaseGuiding, CameraSettingsMixin):
|
|
|
27
27
|
exposure_time: Initial exposure time in seconds.
|
|
28
28
|
broadcast: Whether to broadcast new images.
|
|
29
29
|
"""
|
|
30
|
-
|
|
30
|
+
super().__init__(**kwargs)
|
|
31
31
|
|
|
32
32
|
# store
|
|
33
33
|
self._default_exposure_time = exposure_time
|
|
@@ -35,9 +35,6 @@ class AutoGuiding(BaseGuiding, CameraSettingsMixin):
|
|
|
35
35
|
self._broadcast = broadcast
|
|
36
36
|
self._source_detection = SepSourceDetection()
|
|
37
37
|
|
|
38
|
-
# init camera settings mixin
|
|
39
|
-
CameraSettingsMixin.__init__(self, **kwargs)
|
|
40
|
-
|
|
41
38
|
# add thread func
|
|
42
39
|
self.add_background_task(self._auto_guiding)
|
|
43
40
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
|
+
import inspect
|
|
4
5
|
import json
|
|
5
6
|
import logging
|
|
6
7
|
import time
|
|
@@ -19,6 +20,7 @@ from pyobs.events import (
|
|
|
19
20
|
from pyobs.interfaces import IRunnable, IRunning, IStartStop
|
|
20
21
|
from pyobs.interfaces.IRunning import RunningState
|
|
21
22
|
from pyobs.modules import Module
|
|
23
|
+
from pyobs.object import get_class_from_string
|
|
22
24
|
from pyobs.robotic import (
|
|
23
25
|
ObservationArchive,
|
|
24
26
|
ObservationList,
|
|
@@ -32,6 +34,38 @@ from pyobs.utils.time import Time
|
|
|
32
34
|
log = logging.getLogger(__name__)
|
|
33
35
|
|
|
34
36
|
|
|
37
|
+
def _class_accepts_param(config: dict[str, Any] | Any, param_name: str) -> bool:
|
|
38
|
+
"""Whether the class configured in `config` (a dict with a "class" key, or an already-built
|
|
39
|
+
object) declares `param_name` somewhere in its __init__ MRO.
|
|
40
|
+
|
|
41
|
+
Used to decide whether a kwarg can be injected into a child object's config -- injecting
|
|
42
|
+
unconditionally relies on the target silently absorbing it if unwanted, which no longer
|
|
43
|
+
happens now that Object.__init__ forwards leftover kwargs on to object.__init__().
|
|
44
|
+
"""
|
|
45
|
+
if isinstance(config, dict):
|
|
46
|
+
if "class" not in config:
|
|
47
|
+
return False
|
|
48
|
+
try:
|
|
49
|
+
klass = get_class_from_string(config["class"])
|
|
50
|
+
except Exception:
|
|
51
|
+
return False
|
|
52
|
+
elif isinstance(config, type):
|
|
53
|
+
klass = config
|
|
54
|
+
else:
|
|
55
|
+
klass = type(config)
|
|
56
|
+
for cls in klass.__mro__:
|
|
57
|
+
init = cls.__dict__.get("__init__")
|
|
58
|
+
if init is None:
|
|
59
|
+
continue
|
|
60
|
+
try:
|
|
61
|
+
sig = inspect.signature(init)
|
|
62
|
+
except (TypeError, ValueError):
|
|
63
|
+
continue
|
|
64
|
+
if param_name in sig.parameters:
|
|
65
|
+
return True
|
|
66
|
+
return False
|
|
67
|
+
|
|
68
|
+
|
|
35
69
|
class Scheduler(Module, IStartStop, IRunnable):
|
|
36
70
|
"""Scheduler."""
|
|
37
71
|
|
|
@@ -68,8 +102,18 @@ class Scheduler(Module, IStartStop, IRunnable):
|
|
|
68
102
|
|
|
69
103
|
# get scheduler
|
|
70
104
|
self._task_archive = self.add_child_object(tasks, TaskArchive, on_tasks_changed=self._update_schedule)
|
|
71
|
-
|
|
72
|
-
|
|
105
|
+
# BackendObservationArchive declares auto_update and gates its own polling loop on it --
|
|
106
|
+
# since we already drive updates via on_tasks_changed above, that poller must stay off.
|
|
107
|
+
# Other ObservationArchive implementations (e.g. LcoObservationArchive) don't declare it at
|
|
108
|
+
# all, so it must not be injected unconditionally.
|
|
109
|
+
extra_schedule_kwargs: dict[str, Any] = {}
|
|
110
|
+
if _class_accepts_param(schedule, "auto_update"):
|
|
111
|
+
extra_schedule_kwargs["auto_update"] = False
|
|
112
|
+
self._schedule = self.add_child_object(schedule, ObservationArchive, **extra_schedule_kwargs)
|
|
113
|
+
extra_scheduler_kwargs: dict[str, Any] = {}
|
|
114
|
+
if _class_accepts_param(scheduler, "observation_archive"):
|
|
115
|
+
extra_scheduler_kwargs["observation_archive"] = self._schedule
|
|
116
|
+
self._scheduler = self.add_child_object(scheduler, TaskScheduler, **extra_scheduler_kwargs)
|
|
73
117
|
|
|
74
118
|
# store
|
|
75
119
|
self._running = True
|
|
@@ -12,17 +12,14 @@ from pyobs.utils.enums import MotionStatus
|
|
|
12
12
|
log = logging.getLogger(__name__)
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
class BaseRoof(WeatherAwareMixin, MotionStatusMixin, IRoof, IFitsHeaderBefore,
|
|
15
|
+
class BaseRoof(Module, WeatherAwareMixin, MotionStatusMixin, IRoof, IFitsHeaderBefore, metaclass=ABCMeta):
|
|
16
16
|
"""Base class for roofs."""
|
|
17
17
|
|
|
18
18
|
__module__ = "pyobs.modules.roof"
|
|
19
19
|
|
|
20
20
|
def __init__(self, **kwargs: Any):
|
|
21
21
|
"""Initialize a new base roof."""
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
WeatherAwareMixin.__init__(self, **kwargs)
|
|
25
|
-
MotionStatusMixin.__init__(self, **kwargs)
|
|
22
|
+
super().__init__(**kwargs)
|
|
26
23
|
|
|
27
24
|
async def open(self) -> None:
|
|
28
25
|
"""Open module."""
|
{pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/modules/telescope/_dummytelescopebase.py
RENAMED
|
@@ -94,8 +94,7 @@ class _DummyTelescopeBase(
|
|
|
94
94
|
focal_length: Focal length in mm.
|
|
95
95
|
wait_secs: Wait time between slew checks in seconds.
|
|
96
96
|
"""
|
|
97
|
-
|
|
98
|
-
FitsNamespaceMixin.__init__(self, **kwargs)
|
|
97
|
+
super().__init__(motion_status_interfaces=["ITelescope", "IFocuser", "IFilters"], **kwargs)
|
|
99
98
|
|
|
100
99
|
# telescope state
|
|
101
100
|
self._position = (
|
|
@@ -221,7 +221,7 @@ def _ra_rate_on_sky(ra1_deg: float, ra2_deg: float, dec_deg: float, dt_seconds:
|
|
|
221
221
|
|
|
222
222
|
|
|
223
223
|
class BaseTelescope(
|
|
224
|
-
WeatherAwareMixin, MotionStatusMixin, WaitForMotionMixin, ITelescope, IFitsHeaderBefore,
|
|
224
|
+
Module, WeatherAwareMixin, MotionStatusMixin, WaitForMotionMixin, ITelescope, IFitsHeaderBefore, metaclass=ABCMeta
|
|
225
225
|
):
|
|
226
226
|
"""Base class for telescopes."""
|
|
227
227
|
|
|
@@ -241,7 +241,16 @@ class BaseTelescope(
|
|
|
241
241
|
min_altitude: Minimal altitude for telescope.
|
|
242
242
|
wait_for_dome: Name of dome module to wait for.
|
|
243
243
|
"""
|
|
244
|
-
|
|
244
|
+
# wait_for_dome is BaseTelescope's own param, but WaitForMotionMixin (further down the
|
|
245
|
+
# cooperative chain) needs it translated into its own wait_for_modules/wait_for_timeout/
|
|
246
|
+
# wait_for_states shape -- computed here and threaded through the single super() call,
|
|
247
|
+
# since WaitForMotionMixin has no way to see wait_for_dome itself.
|
|
248
|
+
super().__init__(
|
|
249
|
+
wait_for_modules=None if wait_for_dome is None else [wait_for_dome],
|
|
250
|
+
wait_for_timeout=60000,
|
|
251
|
+
wait_for_states=[MotionStatus.POSITIONED, MotionStatus.TRACKING],
|
|
252
|
+
**kwargs,
|
|
253
|
+
)
|
|
245
254
|
|
|
246
255
|
# store
|
|
247
256
|
self._fits_headers = fits_headers if fits_headers is not None else {}
|
|
@@ -265,16 +274,6 @@ class BaseTelescope(
|
|
|
265
274
|
self.add_background_task(self._celestial, True)
|
|
266
275
|
self.add_background_task(self._track_refresh, True)
|
|
267
276
|
|
|
268
|
-
# init mixins
|
|
269
|
-
WeatherAwareMixin.__init__(self, **kwargs)
|
|
270
|
-
MotionStatusMixin.__init__(self, **kwargs)
|
|
271
|
-
WaitForMotionMixin.__init__(
|
|
272
|
-
self,
|
|
273
|
-
wait_for_modules=None if wait_for_dome is None else [wait_for_dome],
|
|
274
|
-
wait_for_timeout=60000,
|
|
275
|
-
wait_for_states=[MotionStatus.POSITIONED, MotionStatus.TRACKING],
|
|
276
|
-
)
|
|
277
|
-
|
|
278
277
|
# register exception
|
|
279
278
|
self._register_exception(exc.MotionError, 3, timespan=600, callback=self._default_remote_error_callback)
|
|
280
279
|
|
|
@@ -14,15 +14,14 @@ from pyobs.utils.enums import MotionStatus
|
|
|
14
14
|
log = logging.getLogger(__name__)
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
class DummyMode(
|
|
17
|
+
class DummyMode(Module, MotionStatusMixin, IMode, IMotion):
|
|
18
18
|
"""A dummy module for mode switching."""
|
|
19
19
|
|
|
20
20
|
__module__ = "pyobs.modules.utils"
|
|
21
21
|
|
|
22
22
|
def __init__(self, **kwargs: Any):
|
|
23
23
|
"""Initialize a new dummy module."""
|
|
24
|
-
|
|
25
|
-
MotionStatusMixin.__init__(self, **kwargs)
|
|
24
|
+
super().__init__(**kwargs)
|
|
26
25
|
|
|
27
26
|
# modes
|
|
28
27
|
self._mode_options = {
|
|
@@ -355,6 +355,11 @@ class Object(PrivateAttrMixin):
|
|
|
355
355
|
# background tasks
|
|
356
356
|
self._background_tasks: list[tuple[BackgroundTask, bool]] = []
|
|
357
357
|
|
|
358
|
+
# forward anything left to the next class in the MRO -- lets mixins listed after this
|
|
359
|
+
# one in a subclass's bases (e.g. WeatherAwareMixin, PipelineMixin) claim their own
|
|
360
|
+
# kwargs cooperatively, instead of Object silently absorbing them
|
|
361
|
+
super().__init__(**kwargs)
|
|
362
|
+
|
|
358
363
|
def add_background_task(
|
|
359
364
|
self, func: Callable[..., Coroutine[Any, Any, None]], restart: bool = True, autostart: bool = True
|
|
360
365
|
) -> BackgroundTask:
|
|
@@ -36,8 +36,7 @@ class Pipeline(Object, PipelineMixin):
|
|
|
36
36
|
Calibration) and don't already specify their own. See
|
|
37
37
|
PipelineMixin.__init__.
|
|
38
38
|
"""
|
|
39
|
-
|
|
40
|
-
PipelineMixin.__init__(self, steps, archive=archive)
|
|
39
|
+
super().__init__(steps=steps, archive=archive, **kwargs)
|
|
41
40
|
|
|
42
41
|
@staticmethod
|
|
43
42
|
def _combine_calib_images(
|
|
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_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/xmpp/xep_0009_timeout/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev81 → pyobs_core-2.0.0.dev82}/pyobs/comm/xmpp/xep_0009_timeout/stanza/RPC.py
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
|