pyobs-core 2.0.0.dev42__tar.gz → 2.0.0.dev43__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.dev42 → pyobs_core-2.0.0.dev43}/PKG-INFO +1 -1
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/comm/comm.py +7 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/comm/proxy.py +31 -8
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/comm/xmpp/xmppcomm.py +8 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/interface.py +4 -2
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/mixins/weatheraware.py +5 -2
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/camera/dummycamera.py +6 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/module.py +11 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/weather/weather.py +4 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyproject.toml +1 -1
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/.gitignore +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/LICENSE +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/application.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/background_task.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/cli/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/cli/_cli.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/cli/pyobs.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/cli/pyobsd.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/cli/pyobsw.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/comm/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/comm/commlogging.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/comm/dummy/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/comm/dummy/dummycomm.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/comm/local/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/comm/local/localcomm.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/comm/local/localnetwork.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/comm/xmpp/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/comm/xmpp/rpc.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/comm/xmpp/serializer.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/comm/xmpp/xep_0009/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/comm/xmpp/xep_0009/binding.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/comm/xmpp/xep_0009/rpc.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/comm/xmpp/xep_0009_timeout/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/comm/xmpp/xep_0009_timeout/rpc.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/comm/xmpp/xep_0009_timeout/stanza/RPC.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/comm/xmpp/xep_0009_timeout/stanza/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/comm/xmpp/xmppclient.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/events/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/events/badweather.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/events/event.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/events/exposurestatuschanged.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/events/filterchanged.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/events/focusfound.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/events/goodweather.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/events/log.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/events/modechanged.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/events/moduleclosed.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/events/moduleopened.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/events/motionstatuschanged.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/events/move.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/events/newimage.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/events/newspectrum.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/events/offsets.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/events/roofclosing.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/events/roofopened.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/events/taskfailed.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/events/taskfinished.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/events/taskstarted.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/events/testevent.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/image.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/meta/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/meta/altazoffsets.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/meta/exptime.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/meta/genericoffset.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/meta/onskydistance.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/meta/pixeloffsets.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/meta/radecoffsets.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/meta/skyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processor.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/_daobackgroundremover.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/annotation/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/annotation/_pillow.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/annotation/circle.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/annotation/crosshair.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/annotation/text.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/astrometry/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/astrometry/_dotnet_request.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/astrometry/_dotnet_request_builder.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/astrometry/_dotnet_request_logger.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/astrometry/_dotnet_response_saver.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/astrometry/astrometry.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/astrometry/dotnet.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/calibration/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/calibration/_calibration_cache.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/calibration/_ccddata_calibrator.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/calibration/calibration.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/detection/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/detection/_pysep_stats_calculator.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/detection/_source_catalog.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/detection/daophot.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/detection/pysep.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/detection/simpledisk.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/detection/sourcedetection.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/exptime/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/exptime/exptime.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/exptime/star.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/image/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/image/addfitsheaders.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/image/download.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/image/flip.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/image/grayscale.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/image/httpserver.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/image/normalize.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/image/save.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/image/saveimage.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/image/smooth.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/image/softbin.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/misc/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/misc/addmask.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/misc/catalogcircularmask.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/misc/circularmask.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/misc/createfilename.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/misc/imagesourcefilter.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/misc/removebackground.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/modules/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/modules/getfitsheaders.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/offsets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/offsets/astrometry.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/offsets/brighteststar.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/offsets/brighteststar_guiding.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/offsets/dummyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/offsets/dummyskyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/offsets/fitsheader.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/offsets/offsets.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/offsets/pixeloffsets.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/offsets/projected.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/offsets/spilled_light.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/photometry/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/photometry/_photometry_calculator.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/photometry/_photutil_aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/photometry/_sep_aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/photometry/aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/photometry/photometry.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/photometry/photutil.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/photometry/pysep.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/wcs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/wcs/solarhelioprojective.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IAbortable.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IAcquisition.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IAutoFocus.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IAutoGuiding.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IAutonomous.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IBinning.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/ICalibrate.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/ICamera.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IConfig.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/ICooling.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IData.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IDataSequence.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IDome.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IExposure.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IExposureTime.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IFilters.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IFitsHeaderAfter.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IFitsHeaderBefore.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IFlatField.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IFocusModel.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IFocuser.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IGain.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IImageFormat.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IImageType.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IMode.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IModule.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IMotion.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IMultiFiber.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IOffsetsAltAz.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IOffsetsRaDec.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IPointingAltAz.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IPointingBody.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IPointingHeliocentricPolar.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IPointingHeliographicStonyhurst.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IPointingHelioprojective.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IPointingOrbitalElements.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IPointingRaDec.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IPointingSeries.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IReady.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IRoof.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IRotation.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IRunnable.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IRunning.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IScriptRunner.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/ISpectrograph.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IStartStop.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IStructuredConfig.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/ISyncTarget.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/ITelescope.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/ITemperatures.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/ITrackingMode.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/ITrackingRate.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IVideo.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IWeather.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/IWindow.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/interfaces/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/mixins/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/mixins/camerasettings.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/mixins/fitsheader.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/mixins/fitsnamespace.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/mixins/follow.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/mixins/motionstatus.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/mixins/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/mixins/waitformotion.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/camera/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/camera/adaptive.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/camera/basecamera.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/camera/basespectrograph.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/camera/basevideo.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/camera/dummyspectrograph.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/camera/dummyvideo.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/camera/pipelinecamera.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/flatfield/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/flatfield/flatfield.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/flatfield/pointing.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/flatfield/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/focus/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/focus/dummyautofocus.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/focus/focusmodel.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/focus/focusseries.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/image/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/image/imagewatcher.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/image/imagewriter.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/image/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/image/seeing.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/pointing/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/pointing/_base.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/pointing/_baseguiding.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/pointing/acquisition.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/pointing/autoguiding.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/pointing/dummyacquisition.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/pointing/dummyguiding.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/pointing/guidingstatistics/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/pointing/guidingstatistics/guidingstatistics.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/pointing/guidingstatistics/pixeloffset.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/pointing/guidingstatistics/skyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/pointing/guidingstatistics/uptime.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/pointing/scienceframeguiding.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/robotic/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/robotic/mastermind.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/robotic/pointing.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/robotic/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/robotic/scriptrunner.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/roof/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/roof/basedome.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/roof/baseroof.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/roof/dummyroof.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/telescope/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/telescope/_dummytelescopebase.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/telescope/basetelescope.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/telescope/dummyaltaztelescope.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/telescope/dummyradectelescope.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/telescope/dummysolartelescope.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/test/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/test/standalone.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/utils/dummymode.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/utils/fluentlogger.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/utils/httpfilecache.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/utils/kiosk.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/utils/matrix.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/utils/stellarium.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/utils/telegram.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/utils/trigger.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/weather/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/weather/mockweather.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/weather/weather_api.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/modules/weather/weather_state.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/object.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/py.typed +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/observation.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/astroplanscheduler.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/constraints/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/constraints/airmassconstraint.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/constraints/constraint.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/constraints/moonilluminationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/constraints/moonseparationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/constraints/solarelevationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/constraints/timeconstraint.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/dataprovider.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/merits/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/merits/aftertime.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/merits/beforetime.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/merits/constant.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/merits/follow.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/merits/interval.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/merits/merit.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/merits/pernight.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/merits/random.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/merits/timewindow.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/merits/transit.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/observationarchiveevolution.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/ondemandscheduler.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/targets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/targets/dynamictarget.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/targets/heliocentricpolartarget.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/targets/helioprojectivetarget.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/targets/picker/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/targets/picker/csvpicker.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/targets/picker/picker.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/targets/siderealtarget.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/targets/target.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scheduler/taskscheduler.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scripts/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scripts/calibration/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scripts/calibration/darkbias.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scripts/calibration/pointing.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scripts/calibration/skyflats.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scripts/control/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scripts/control/cases.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scripts/control/conditional.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scripts/control/parallel.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scripts/control/selector.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scripts/control/sequential.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scripts/exceptions.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scripts/imaging/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scripts/imaging/autofocus.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scripts/imaging/imaging.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scripts/imaging/transitimaging.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scripts/script.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scripts/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scripts/utils/callmodule.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scripts/utils/debugtrigger.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/scripts/utils/log.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/backend/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/backend/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/backend/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/filesystem/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/filesystem/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/filesystem/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/lco/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/lco/_portal.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/lco/_schedulereader.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/lco/_schedulewriter.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/lco/configdb.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/lco/mockobservationarchive.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/lco/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/lco/scripts/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/lco/scripts/autofocus.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/lco/scripts/default.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/lco/scripts/script.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/lco/task.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/lco/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/lco/taskrunner.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/memory/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/memory/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/memory/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/storage/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/task.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/taskrunner.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/utils/archive/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/utils/archive/archive.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/utils/archive/local_archive.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/utils/archive/pyobs_archive.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/utils/exptime/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/utils/exptime/exptime.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/utils/exptime/stellarexptime.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/utils/skyflats/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/utils/skyflats/exptimeeval.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/utils/skyflats/flatfielder.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/utils/skyflats/pointing/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/utils/skyflats/pointing/base.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/utils/skyflats/pointing/static.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/utils/skyflats/priorities/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/utils/skyflats/priorities/archive.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/utils/skyflats/priorities/base.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/utils/skyflats/priorities/const.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/robotic/utils/skyflats/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/average.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/cache.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/config.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/config_schema.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/coordinates.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/curvefit.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/enums.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/exceptions.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/fits.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/focusseries/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/focusseries/base.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/focusseries/photometry.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/focusseries/projection.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/grids/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/grids/filters.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/grids/grid.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/grids/gridnode.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/grids/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/gui/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/gui/camera/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/gui/camera/binningwidget.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/gui/camera/datadisplaywidget.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/gui/camera/exposewidget.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/gui/camera/exposuretimewidget.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/gui/camera/imageformatwidget.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/gui/camera/listpickerdialog.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/gui/camera/windowingwidget.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/http.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/influxdb.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/logger.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/logging/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/logging/context.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/logging/resolvableerror.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/modulegui.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/offsets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/offsets/applyaltazoffsets.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/offsets/applyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/offsets/applyradecoffsets.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/parallel.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/pipeline/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/pipeline/night.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/pipeline/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/publisher/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/publisher/csv.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/publisher/http.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/publisher/log.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/publisher/multi.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/publisher/publisher.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/serialization.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/shellcommand.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/threads/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/threads/lockwithabort.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/time.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/utils/units.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/version.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/vfs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/vfs/archivefile.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/vfs/bufferedfile.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/vfs/file.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/vfs/filelists/__init__.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/vfs/filelists/filelist.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/vfs/filelists/testing.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/vfs/httpfile.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/vfs/localfile.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/vfs/memfile.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/vfs/sftpfile.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/vfs/smbfile.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/vfs/sshfile.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/vfs/tempfile.py +0 -0
- {pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/vfs/vfs.py +0 -0
|
@@ -41,6 +41,7 @@ class Comm:
|
|
|
41
41
|
self._event_handlers: dict[type[Event], list[Callable[[Event, str], Coroutine[Any, Any, bool]]]] = {}
|
|
42
42
|
self._registered_events: set[type[Event]] = set()
|
|
43
43
|
self._closing = asyncio.Event()
|
|
44
|
+
self._published_state: set[type[Interface]] = set()
|
|
44
45
|
|
|
45
46
|
@property
|
|
46
47
|
def has_module(self) -> bool:
|
|
@@ -479,11 +480,17 @@ class Comm:
|
|
|
479
480
|
interface: Interface type for the state.
|
|
480
481
|
state: State object to publish.
|
|
481
482
|
"""
|
|
483
|
+
self._published_state.add(interface)
|
|
482
484
|
await self._set_state(interface, state)
|
|
483
485
|
|
|
484
486
|
async def _set_state(self, interface: type[Interface], state: Any) -> None:
|
|
485
487
|
pass
|
|
486
488
|
|
|
489
|
+
def missing_published_state(self, interfaces: list[type[Interface]]) -> list[type[Interface]]:
|
|
490
|
+
"""Return interfaces (from the given list) that declare state via has_own_state() but
|
|
491
|
+
haven't had set_state() called for them yet."""
|
|
492
|
+
return [i for i in interfaces if i.has_own_state() and i not in self._published_state]
|
|
493
|
+
|
|
487
494
|
async def set_capabilities(self, interface: type[Interface], capabilities: Any) -> None:
|
|
488
495
|
"""Publish capabilities for this module.
|
|
489
496
|
|
|
@@ -7,6 +7,7 @@ from collections.abc import Coroutine
|
|
|
7
7
|
from typing import TYPE_CHECKING, Any, Generic, TypeVar, get_type_hints
|
|
8
8
|
|
|
9
9
|
from pyobs.interfaces import Interface
|
|
10
|
+
from pyobs.utils.time import Time
|
|
10
11
|
|
|
11
12
|
if TYPE_CHECKING:
|
|
12
13
|
from pyobs.comm import Comm
|
|
@@ -172,9 +173,22 @@ class Proxy:
|
|
|
172
173
|
"""Clear all cached state. Called by Comm when the remote module disconnects."""
|
|
173
174
|
self._state.clear()
|
|
174
175
|
|
|
175
|
-
def get_state(self, interface: type[Interface]) -> Any | None:
|
|
176
|
-
"""Latest known state for the given interface, or None if nothing has arrived yet
|
|
177
|
-
|
|
176
|
+
def get_state(self, interface: type[Interface], *, max_age: float | None = None) -> Any | None:
|
|
177
|
+
"""Latest known state for the given interface, or None if nothing has arrived yet
|
|
178
|
+
(or, with max_age given, if the latest known state is older than max_age seconds)."""
|
|
179
|
+
state = self._state.get(interface)
|
|
180
|
+
if state is None or max_age is None:
|
|
181
|
+
return state
|
|
182
|
+
return state if self._state_age(state) <= max_age else None
|
|
183
|
+
|
|
184
|
+
def _state_age(self, state: Any) -> float:
|
|
185
|
+
"""Seconds since `state` (a State dataclass instance) was constructed by its publisher."""
|
|
186
|
+
t = getattr(state, "time", None)
|
|
187
|
+
if t is None:
|
|
188
|
+
raise ValueError(
|
|
189
|
+
f"{type(state).__name__} has no 'time' field -- max_age is not supported for this interface."
|
|
190
|
+
)
|
|
191
|
+
return (Time.now() - t).sec
|
|
178
192
|
|
|
179
193
|
def update_capabilities(self, interface: type[Interface], capabilities: Any) -> None:
|
|
180
194
|
"""Called by Comm once capabilities for an interface arrive.
|
|
@@ -194,16 +208,22 @@ class Proxy:
|
|
|
194
208
|
self,
|
|
195
209
|
interface: type[Interface],
|
|
196
210
|
timeout: float = 10.0,
|
|
211
|
+
*,
|
|
212
|
+
max_age: float | None = None,
|
|
197
213
|
) -> Any:
|
|
198
|
-
"""Return state immediately if available
|
|
214
|
+
"""Return state immediately if available (and fresh enough per max_age), otherwise wait
|
|
215
|
+
for the next update.
|
|
199
216
|
|
|
200
217
|
Returns None on timeout rather than raising -- every caller across the codebase already
|
|
201
218
|
does `if state is not None else ...` right after calling this, so that's the contract
|
|
202
219
|
actually being relied on; letting asyncio.wait_for's TimeoutError propagate would just
|
|
203
|
-
turn "peer hasn't published yet" into an unhandled exception for all of them.
|
|
220
|
+
turn "peer hasn't published yet" into an unhandled exception for all of them. The same
|
|
221
|
+
None-on-"not usable yet" contract now also covers "published, but too stale" when max_age
|
|
222
|
+
is given.
|
|
204
223
|
"""
|
|
205
|
-
|
|
206
|
-
|
|
224
|
+
cached = self._state.get(interface)
|
|
225
|
+
if cached is not None and (max_age is None or self._state_age(cached) <= max_age):
|
|
226
|
+
return cached
|
|
207
227
|
|
|
208
228
|
event = asyncio.Event()
|
|
209
229
|
|
|
@@ -220,7 +240,10 @@ class Proxy:
|
|
|
220
240
|
finally:
|
|
221
241
|
await self._comm.unsubscribe_state(self._client, interface, _notify)
|
|
222
242
|
|
|
223
|
-
|
|
243
|
+
result = self._state.get(interface)
|
|
244
|
+
if max_age is not None and result is not None and self._state_age(result) > max_age:
|
|
245
|
+
return None
|
|
246
|
+
return result
|
|
224
247
|
|
|
225
248
|
async def wait_for_capabilities(
|
|
226
249
|
self,
|
|
@@ -315,6 +315,14 @@ class XmppComm(Comm):
|
|
|
315
315
|
self._xmpp.enable_direct_tls = self._use_tls
|
|
316
316
|
self._xmpp.enable_plaintext = not self._use_tls
|
|
317
317
|
self._xmpp.plugin["feature_mechanisms"].unencrypted_scram = not self._use_tls # type: ignore[typeddict-item]
|
|
318
|
+
# Without this, slixmpp still refuses PLAIN over a non-TLS connection even
|
|
319
|
+
# with enable_plaintext set above -- it only affects the stream feature
|
|
320
|
+
# advertisement, not SASL mechanism selection. Matters in practice: this
|
|
321
|
+
# server's SCRAM implementation fails unencrypted SCRAM auth with "Invalid
|
|
322
|
+
# channel binding" (confirmed against ejabberd 26.4.0), so without this
|
|
323
|
+
# flag every non-TLS connection falls through all mechanisms and fails
|
|
324
|
+
# with "No appropriate login method" rather than falling back to PLAIN.
|
|
325
|
+
self._xmpp.plugin["feature_mechanisms"].unencrypted_plain = not self._use_tls # type: ignore[typeddict-item]
|
|
318
326
|
if self._ignore_cert_errors:
|
|
319
327
|
self._xmpp.ssl_context.check_hostname = False
|
|
320
328
|
self._xmpp.ssl_context.verify_mode = ssl.CERT_NONE
|
|
@@ -42,7 +42,7 @@ class Interface(metaclass=ABCMeta):
|
|
|
42
42
|
)
|
|
43
43
|
_REGISTRY[cls.__name__] = cls
|
|
44
44
|
|
|
45
|
-
def get_state(self, interface: "type[Interface]") -> Any | None:
|
|
45
|
+
def get_state(self, interface: "type[Interface]", *, max_age: float | None = None) -> Any | None:
|
|
46
46
|
"""Return the last received state for the given interface, or None."""
|
|
47
47
|
return None
|
|
48
48
|
|
|
@@ -50,7 +50,9 @@ class Interface(metaclass=ABCMeta):
|
|
|
50
50
|
"""Return the capabilities for the given interface, or None."""
|
|
51
51
|
return None
|
|
52
52
|
|
|
53
|
-
async def wait_for_state(
|
|
53
|
+
async def wait_for_state(
|
|
54
|
+
self, interface: "type[Interface]", timeout: float = 10.0, *, max_age: float | None = None
|
|
55
|
+
) -> Any | None:
|
|
54
56
|
"""Return state immediately if available, otherwise wait for the first update."""
|
|
55
57
|
return None
|
|
56
58
|
|
|
@@ -18,8 +18,9 @@ class WeatherAwareMixin:
|
|
|
18
18
|
|
|
19
19
|
__module__ = "pyobs.mixins"
|
|
20
20
|
|
|
21
|
-
def __init__(self, weather: str | IWeather | None = None, **kwargs: Any):
|
|
21
|
+
def __init__(self, weather: str | IWeather | None = None, weather_max_age: float = 120.0, **kwargs: Any):
|
|
22
22
|
self.__weather = weather
|
|
23
|
+
self.__weather_max_age = weather_max_age
|
|
23
24
|
self.__is_weather_good: bool | None = None
|
|
24
25
|
self.__last_park_attempt: float | None = None
|
|
25
26
|
self.__weatheraware_is_error_state = False
|
|
@@ -121,7 +122,9 @@ class WeatherAwareMixin:
|
|
|
121
122
|
try:
|
|
122
123
|
# get good status
|
|
123
124
|
async with module.proxy(this.__weather, IWeather) as proxy:
|
|
124
|
-
weather_state = await proxy.wait_for_state(
|
|
125
|
+
weather_state = await proxy.wait_for_state(
|
|
126
|
+
IWeather, timeout=5.0, max_age=this.__weather_max_age
|
|
127
|
+
)
|
|
125
128
|
this.__is_weather_good = weather_state.good if weather_state is not None else False
|
|
126
129
|
this.__weather_check_failures = 0
|
|
127
130
|
|
|
@@ -153,6 +153,12 @@ class DummyCamera(BaseCamera, IWindow, IBinning, ICooling, IGain, IImageFormat):
|
|
|
153
153
|
ICooling,
|
|
154
154
|
CoolingState(setpoint=self._cooling.set_point, power=self._cooling.power, enabled=self._cooling.enabled),
|
|
155
155
|
)
|
|
156
|
+
await self.comm.set_state(
|
|
157
|
+
ITemperatures,
|
|
158
|
+
TemperaturesState(
|
|
159
|
+
readings=[SensorReading(name=name, value=value) for name, value in self._cooling.temperatures.items()]
|
|
160
|
+
),
|
|
161
|
+
)
|
|
156
162
|
await self.comm.set_state(IGain, GainState(gain=self._gain, offset=self._gain_offset))
|
|
157
163
|
await self.comm.set_state(IWindow, WindowState(*self._full_frame))
|
|
158
164
|
await self.comm.set_state(IBinning, BinningState(*self._binning))
|
|
@@ -344,6 +344,17 @@ class Module(Object, IModule, IConfig):
|
|
|
344
344
|
which would then never leave STARTING under Application/MultiModule.
|
|
345
345
|
"""
|
|
346
346
|
await self.open()
|
|
347
|
+
|
|
348
|
+
# warn if any stateful interface hasn't published state yet
|
|
349
|
+
if self._comm is not None:
|
|
350
|
+
missing = self._comm.missing_published_state(self._interfaces)
|
|
351
|
+
for iface in missing:
|
|
352
|
+
log.warning(
|
|
353
|
+
"Module %s implements %s which declares state, but no state has been published for it yet.",
|
|
354
|
+
self.name,
|
|
355
|
+
iface.__name__,
|
|
356
|
+
)
|
|
357
|
+
|
|
347
358
|
await self.set_state(ModuleState.READY)
|
|
348
359
|
|
|
349
360
|
async def close(self) -> None:
|
|
@@ -93,6 +93,7 @@ class Weather(Module, IWeather, IFitsHeaderBefore):
|
|
|
93
93
|
await self.comm.register_event(GoodWeatherEvent)
|
|
94
94
|
|
|
95
95
|
await self.comm.set_state(IRunning, RunningState(running=self._active))
|
|
96
|
+
await self._publish_state()
|
|
96
97
|
|
|
97
98
|
async def start(self, **kwargs: Any) -> None:
|
|
98
99
|
"""Starts a service."""
|
|
@@ -150,6 +151,9 @@ class Weather(Module, IWeather, IFitsHeaderBefore):
|
|
|
150
151
|
await self.comm.send_event(BadWeatherEvent())
|
|
151
152
|
|
|
152
153
|
# publish state
|
|
154
|
+
await self._publish_state()
|
|
155
|
+
|
|
156
|
+
async def _publish_state(self) -> None:
|
|
153
157
|
is_good = True if not self._active else self._weather.is_good
|
|
154
158
|
await self.comm.set_state(IWeather, WeatherState(good=is_good, readings=self._get_readings()))
|
|
155
159
|
|
|
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.dev42 → pyobs_core-2.0.0.dev43}/pyobs/comm/xmpp/xep_0009_timeout/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/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
|
|
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.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/_daobackgroundremover.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/annotation/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/annotation/_pillow.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/annotation/circle.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/annotation/crosshair.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/annotation/text.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/astrometry/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/astrometry/astrometry.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/astrometry/dotnet.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/calibration/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/calibration/calibration.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/detection/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/detection/daophot.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/detection/pysep.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/detection/simpledisk.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/exptime/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/exptime/exptime.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/image/addfitsheaders.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/image/grayscale.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/image/httpserver.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/image/normalize.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/image/saveimage.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/misc/circularmask.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/misc/createfilename.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/misc/imagesourcefilter.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/misc/removebackground.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/modules/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/modules/getfitsheaders.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/offsets/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/offsets/astrometry.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/offsets/brighteststar.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/offsets/dummyoffsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/offsets/dummyskyoffsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/offsets/fitsheader.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/offsets/offsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/offsets/pixeloffsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/offsets/projected.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/offsets/spilled_light.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/photometry/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/photometry/photometry.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/photometry/photutil.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev42 → pyobs_core-2.0.0.dev43}/pyobs/images/processors/photometry/pysep.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|