pyobs-core 2.0.0.dev32__tar.gz → 2.0.0.dev34__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.dev32 → pyobs_core-2.0.0.dev34}/PKG-INFO +1 -1
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/comm/xmpp/xmppcomm.py +67 -21
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyproject.toml +1 -1
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/.gitignore +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/LICENSE +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/application.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/background_task.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/cli/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/cli/_cli.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/cli/pyobs.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/cli/pyobsd.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/cli/pyobsw.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/comm/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/comm/comm.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/comm/commlogging.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/comm/dummy/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/comm/dummy/dummycomm.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/comm/local/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/comm/local/localcomm.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/comm/local/localnetwork.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/comm/proxy.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/comm/xmpp/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/comm/xmpp/rpc.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/comm/xmpp/serializer.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/comm/xmpp/xep_0009/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/comm/xmpp/xep_0009/binding.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/comm/xmpp/xep_0009/rpc.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/comm/xmpp/xep_0009_timeout/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/comm/xmpp/xep_0009_timeout/rpc.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/comm/xmpp/xep_0009_timeout/stanza/RPC.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/comm/xmpp/xep_0009_timeout/stanza/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/comm/xmpp/xmppclient.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/events/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/events/badweather.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/events/event.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/events/exposurestatuschanged.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/events/filterchanged.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/events/focusfound.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/events/goodweather.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/events/log.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/events/modechanged.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/events/moduleclosed.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/events/moduleopened.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/events/motionstatuschanged.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/events/move.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/events/newimage.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/events/newspectrum.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/events/offsets.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/events/roofclosing.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/events/roofopened.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/events/taskfailed.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/events/taskfinished.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/events/taskstarted.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/events/testevent.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/image.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/meta/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/meta/altazoffsets.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/meta/exptime.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/meta/genericoffset.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/meta/onskydistance.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/meta/pixeloffsets.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/meta/radecoffsets.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/meta/skyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processor.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/_daobackgroundremover.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/annotation/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/annotation/_pillow.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/annotation/circle.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/annotation/crosshair.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/annotation/text.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/astrometry/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/astrometry/_dotnet_request.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/astrometry/_dotnet_request_builder.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/astrometry/_dotnet_request_logger.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/astrometry/_dotnet_response_saver.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/astrometry/astrometry.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/astrometry/dotnet.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/calibration/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/calibration/_calibration_cache.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/calibration/_ccddata_calibrator.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/calibration/calibration.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/detection/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/detection/_pysep_stats_calculator.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/detection/_source_catalog.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/detection/daophot.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/detection/pysep.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/detection/simpledisk.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/detection/sourcedetection.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/exptime/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/exptime/exptime.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/exptime/star.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/image/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/image/addfitsheaders.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/image/download.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/image/flip.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/image/grayscale.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/image/httpserver.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/image/normalize.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/image/save.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/image/saveimage.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/image/smooth.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/image/softbin.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/misc/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/misc/addmask.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/misc/catalogcircularmask.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/misc/circularmask.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/misc/createfilename.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/misc/imagesourcefilter.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/misc/removebackground.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/modules/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/modules/getfitsheaders.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/offsets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/offsets/astrometry.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/offsets/brighteststar.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/offsets/brighteststar_guiding.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/offsets/dummyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/offsets/dummyskyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/offsets/fitsheader.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/offsets/offsets.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/offsets/pixeloffsets.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/offsets/projected.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/offsets/spilled_light.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/photometry/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/photometry/_photometry_calculator.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/photometry/_photutil_aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/photometry/_sep_aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/photometry/aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/photometry/photometry.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/photometry/photutil.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/photometry/pysep.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/wcs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/wcs/solarhelioprojective.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IAbortable.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IAcquisition.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IAutoFocus.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IAutoGuiding.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IAutonomous.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IBinning.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/ICalibrate.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/ICamera.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IConfig.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/ICooling.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IData.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IDataSequence.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IDome.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IExposure.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IExposureTime.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IFilters.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IFitsHeaderAfter.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IFitsHeaderBefore.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IFlatField.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IFocusModel.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IFocuser.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IGain.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IImageFormat.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IImageType.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IMode.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IModule.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IMotion.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IMultiFiber.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IOffsetsAltAz.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IOffsetsRaDec.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IPointingAltAz.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IPointingBody.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IPointingHeliocentricPolar.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IPointingHeliographicStonyhurst.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IPointingHelioprojective.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IPointingOrbitalElements.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IPointingRaDec.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IPointingSeries.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IReady.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IRoof.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IRotation.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IRunnable.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IRunning.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IScriptRunner.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/ISpectrograph.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IStartStop.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IStructuredConfig.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/ISyncTarget.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/ITelescope.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/ITemperatures.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/ITrackingMode.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/ITrackingRate.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IVideo.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IWeather.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/IWindow.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/interfaces/interface.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/mixins/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/mixins/camerasettings.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/mixins/fitsheader.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/mixins/fitsnamespace.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/mixins/follow.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/mixins/motionstatus.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/mixins/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/mixins/waitformotion.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/mixins/weatheraware.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/camera/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/camera/adaptive.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/camera/basecamera.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/camera/basespectrograph.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/camera/basevideo.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/camera/dummycamera.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/camera/dummyspectrograph.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/camera/dummyvideo.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/camera/pipelinecamera.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/flatfield/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/flatfield/flatfield.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/flatfield/pointing.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/flatfield/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/focus/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/focus/dummyautofocus.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/focus/focusmodel.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/focus/focusseries.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/image/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/image/imagewatcher.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/image/imagewriter.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/image/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/image/seeing.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/module.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/pointing/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/pointing/_base.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/pointing/_baseguiding.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/pointing/acquisition.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/pointing/autoguiding.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/pointing/dummyacquisition.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/pointing/dummyguiding.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/pointing/guidingstatistics/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/pointing/guidingstatistics/guidingstatistics.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/pointing/guidingstatistics/pixeloffset.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/pointing/guidingstatistics/skyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/pointing/guidingstatistics/uptime.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/pointing/scienceframeguiding.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/robotic/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/robotic/mastermind.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/robotic/pointing.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/robotic/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/robotic/scriptrunner.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/roof/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/roof/basedome.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/roof/baseroof.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/roof/dummyroof.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/telescope/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/telescope/_dummytelescopebase.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/telescope/basetelescope.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/telescope/dummyaltaztelescope.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/telescope/dummyradectelescope.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/telescope/dummysolartelescope.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/test/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/test/standalone.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/utils/dummymode.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/utils/fluentlogger.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/utils/httpfilecache.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/utils/kiosk.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/utils/matrix.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/utils/stellarium.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/utils/telegram.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/utils/trigger.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/weather/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/weather/mockweather.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/weather/weather.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/weather/weather_api.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/modules/weather/weather_state.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/object.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/py.typed +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/observation.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/astroplanscheduler.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/constraints/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/constraints/airmassconstraint.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/constraints/constraint.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/constraints/moonilluminationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/constraints/moonseparationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/constraints/solarelevationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/constraints/timeconstraint.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/dataprovider.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/merits/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/merits/aftertime.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/merits/beforetime.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/merits/constant.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/merits/follow.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/merits/interval.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/merits/merit.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/merits/pernight.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/merits/random.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/merits/timewindow.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/merits/transit.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/observationarchiveevolution.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/ondemandscheduler.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/targets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/targets/dynamictarget.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/targets/heliocentricpolartarget.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/targets/helioprojectivetarget.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/targets/picker/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/targets/picker/csvpicker.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/targets/picker/picker.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/targets/siderealtarget.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/targets/target.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scheduler/taskscheduler.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scripts/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scripts/calibration/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scripts/calibration/darkbias.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scripts/calibration/pointing.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scripts/calibration/skyflats.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scripts/control/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scripts/control/cases.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scripts/control/conditional.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scripts/control/parallel.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scripts/control/selector.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scripts/control/sequential.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scripts/exceptions.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scripts/imaging/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scripts/imaging/autofocus.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scripts/imaging/imaging.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scripts/imaging/transitimaging.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scripts/script.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scripts/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scripts/utils/callmodule.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scripts/utils/debugtrigger.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/scripts/utils/log.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/backend/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/backend/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/backend/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/filesystem/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/filesystem/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/filesystem/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/lco/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/lco/_portal.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/lco/_schedulereader.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/lco/_schedulewriter.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/lco/configdb.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/lco/mockobservationarchive.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/lco/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/lco/scripts/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/lco/scripts/autofocus.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/lco/scripts/default.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/lco/scripts/script.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/lco/task.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/lco/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/lco/taskrunner.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/memory/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/memory/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/memory/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/storage/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/task.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/taskrunner.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/utils/archive/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/utils/archive/archive.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/utils/archive/local_archive.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/utils/archive/pyobs_archive.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/utils/exptime/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/utils/exptime/exptime.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/utils/exptime/stellarexptime.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/utils/skyflats/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/utils/skyflats/exptimeeval.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/utils/skyflats/flatfielder.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/utils/skyflats/pointing/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/utils/skyflats/pointing/base.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/utils/skyflats/pointing/static.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/utils/skyflats/priorities/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/utils/skyflats/priorities/archive.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/utils/skyflats/priorities/base.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/utils/skyflats/priorities/const.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/robotic/utils/skyflats/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/average.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/cache.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/config.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/config_schema.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/coordinates.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/curvefit.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/enums.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/exceptions.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/fits.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/focusseries/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/focusseries/base.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/focusseries/photometry.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/focusseries/projection.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/grids/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/grids/filters.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/grids/grid.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/grids/gridnode.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/grids/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/gui/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/gui/camera/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/gui/camera/binningwidget.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/gui/camera/datadisplaywidget.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/gui/camera/exposewidget.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/gui/camera/exposuretimewidget.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/gui/camera/imageformatwidget.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/gui/camera/listpickerdialog.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/gui/camera/windowingwidget.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/http.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/influxdb.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/logger.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/logging/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/logging/context.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/logging/resolvableerror.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/modulegui.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/offsets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/offsets/applyaltazoffsets.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/offsets/applyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/offsets/applyradecoffsets.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/parallel.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/pipeline/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/pipeline/night.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/pipeline/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/publisher/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/publisher/csv.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/publisher/http.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/publisher/log.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/publisher/multi.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/publisher/publisher.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/serialization.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/shellcommand.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/threads/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/threads/lockwithabort.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/time.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/utils/units.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/version.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/vfs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/vfs/archivefile.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/vfs/bufferedfile.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/vfs/file.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/vfs/filelists/__init__.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/vfs/filelists/filelist.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/vfs/filelists/testing.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/vfs/httpfile.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/vfs/localfile.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/vfs/memfile.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/vfs/sftpfile.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/vfs/smbfile.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/vfs/sshfile.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/vfs/tempfile.py +0 -0
- {pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/vfs/vfs.py +0 -0
|
@@ -4,6 +4,7 @@ import asyncio
|
|
|
4
4
|
import functools
|
|
5
5
|
import json
|
|
6
6
|
import logging
|
|
7
|
+
import random
|
|
7
8
|
import re
|
|
8
9
|
import ssl
|
|
9
10
|
import time
|
|
@@ -36,6 +37,17 @@ if TYPE_CHECKING:
|
|
|
36
37
|
log = logging.getLogger(__name__)
|
|
37
38
|
|
|
38
39
|
|
|
40
|
+
def _retry_delay(attempt: int, cap: float = 30.0, base: float = 1.0) -> float:
|
|
41
|
+
"""Capped exponential backoff with full jitter.
|
|
42
|
+
|
|
43
|
+
Used for retry loops that can end up running on every module in the fleet at once (e.g.
|
|
44
|
+
every module reconnecting to ejabberd simultaneously after a mass restart). Fixed-interval
|
|
45
|
+
retries stay in lockstep across all of them, repeatedly hammering the server at the same
|
|
46
|
+
instants; jitter decorrelates that so retries spread out over time instead.
|
|
47
|
+
"""
|
|
48
|
+
return random.uniform(0, min(cap, base * (2**attempt)))
|
|
49
|
+
|
|
50
|
+
|
|
39
51
|
class EventStanza(ElementBase):
|
|
40
52
|
name = "event"
|
|
41
53
|
namespace = "pyobs:event"
|
|
@@ -832,7 +844,12 @@ class XmppComm(Comm):
|
|
|
832
844
|
Return value from method.
|
|
833
845
|
"""
|
|
834
846
|
|
|
835
|
-
# try multiple times
|
|
847
|
+
# try multiple times -- unlike _get_capabilities/_subscribe_with_retry this still gives up
|
|
848
|
+
# after a fixed budget instead of retrying indefinitely, since some callers run from open()
|
|
849
|
+
# and need to know a send failed rather than hang forever (see #664/#666). But the wait
|
|
850
|
+
# between attempts is jittered for the same reason as those: many modules' _safe_send calls
|
|
851
|
+
# can end up retrying around the same moment (e.g. a fleet-wide restart), and a fixed wait
|
|
852
|
+
# keeps them all retrying in lockstep instead of spreading the load out.
|
|
836
853
|
iq = None
|
|
837
854
|
for i in range(self._safe_send_attempts):
|
|
838
855
|
try:
|
|
@@ -845,11 +862,11 @@ class XmppComm(Comm):
|
|
|
845
862
|
except slixmpp.exceptions.IqTimeout as timeout:
|
|
846
863
|
# timeout occurred, try again after some wait
|
|
847
864
|
iq = timeout.iq
|
|
848
|
-
await asyncio.sleep(self._safe_send_wait)
|
|
865
|
+
await asyncio.sleep(_retry_delay(i + 1, cap=self._safe_send_wait * 4, base=self._safe_send_wait))
|
|
849
866
|
|
|
850
867
|
except TimeoutError:
|
|
851
868
|
# our own timeout fired instead of slixmpp's, try again after some wait
|
|
852
|
-
await asyncio.sleep(self._safe_send_wait)
|
|
869
|
+
await asyncio.sleep(_retry_delay(i + 1, cap=self._safe_send_wait * 4, base=self._safe_send_wait))
|
|
853
870
|
|
|
854
871
|
# never should reach this
|
|
855
872
|
raise slixmpp.exceptions.IqTimeout(iq)
|
|
@@ -947,8 +964,12 @@ class XmppComm(Comm):
|
|
|
947
964
|
async def _get_capabilities(self, module: str, interface: type[Interface]) -> Any | None:
|
|
948
965
|
"""Fetch and deserialize capabilities for a remote module's interface.
|
|
949
966
|
|
|
950
|
-
Retries
|
|
951
|
-
|
|
967
|
+
Retries indefinitely (capped exponential backoff with jitter) instead of giving up after
|
|
968
|
+
a fixed budget -- a peer that's merely slow to respond (e.g. every module in the fleet
|
|
969
|
+
reconnecting to ejabberd at once) must still eventually get its capabilities fetched
|
|
970
|
+
without requiring a full disconnect/reconnect of that peer to retrigger discovery. Only
|
|
971
|
+
stops if the peer itself goes offline in the meantime, since a fresh fetch is triggered
|
|
972
|
+
from scratch the next time it comes back online (see _got_online).
|
|
952
973
|
"""
|
|
953
974
|
if interface.capabilities is None:
|
|
954
975
|
return None
|
|
@@ -956,24 +977,36 @@ class XmppComm(Comm):
|
|
|
956
977
|
|
|
957
978
|
result = None
|
|
958
979
|
last_error: BaseException | None = None
|
|
959
|
-
|
|
980
|
+
attempt = 0
|
|
981
|
+
while True:
|
|
960
982
|
# Use full JID (with resource) if we know it — bare JID may not route correctly
|
|
961
|
-
full_jid = next(
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
983
|
+
full_jid = next((jid for jid in self._online_clients if jid.startswith(f"{module}@")), None)
|
|
984
|
+
if full_jid is None and attempt > 0:
|
|
985
|
+
log.debug(
|
|
986
|
+
"Giving up fetching capabilities for %s from %s: peer went offline",
|
|
987
|
+
interface.__name__,
|
|
988
|
+
module,
|
|
989
|
+
)
|
|
990
|
+
return None
|
|
965
991
|
try:
|
|
966
992
|
result = await asyncio.wait_for(
|
|
967
|
-
self.client.plugin["xep_0030"].get_info(jid=JID(full_jid)),
|
|
993
|
+
self.client.plugin["xep_0030"].get_info(jid=JID(full_jid or f"{module}@{self._domain}")),
|
|
994
|
+
timeout=10.0,
|
|
968
995
|
)
|
|
969
996
|
break
|
|
970
|
-
except
|
|
997
|
+
except Exception as e:
|
|
971
998
|
last_error = e
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
999
|
+
attempt += 1
|
|
1000
|
+
if attempt == 3:
|
|
1001
|
+
log.warning(
|
|
1002
|
+
"Still failing to get capabilities for %s from %s after %d attempts (%s), "
|
|
1003
|
+
"will keep retrying",
|
|
1004
|
+
interface.__name__,
|
|
1005
|
+
module,
|
|
1006
|
+
attempt,
|
|
1007
|
+
last_error,
|
|
1008
|
+
)
|
|
1009
|
+
await asyncio.sleep(_retry_delay(attempt))
|
|
977
1010
|
log.debug("get_capabilities disco result XML: %s", ET.tostring(result.xml).decode()[:500])
|
|
978
1011
|
# result.xml is the <iq> — the <query> is its child, capabilities are grandchildren
|
|
979
1012
|
for child in result.xml:
|
|
@@ -1030,17 +1063,30 @@ class XmppComm(Comm):
|
|
|
1030
1063
|
async def _subscribe_with_retry(self, node: str, interface: type[Interface]) -> None:
|
|
1031
1064
|
"""Subscribe to a pubsub node, retrying until the node exists.
|
|
1032
1065
|
|
|
1033
|
-
Runs as a background task so _subscribe_state returns immediately.
|
|
1066
|
+
Runs as a background task so _subscribe_state returns immediately. Retries indefinitely
|
|
1067
|
+
(capped exponential backoff with jitter) instead of giving up after a fixed budget -- a
|
|
1068
|
+
node that's merely slow to appear (e.g. every module in the fleet reconnecting to
|
|
1069
|
+
ejabberd at once, or the publisher hasn't started up yet) must still eventually get
|
|
1070
|
+
subscribed without manual intervention. Stops only if _unsubscribe_state removes the
|
|
1071
|
+
last callback for this node in the meantime -- the while condition then goes False,
|
|
1072
|
+
which exits the loop into the else clause (not the break path) and returns.
|
|
1034
1073
|
Once subscribed, fetches the current value and dispatches it.
|
|
1035
1074
|
"""
|
|
1036
|
-
|
|
1075
|
+
attempt = 0
|
|
1076
|
+
while node in self._state_node_handlers:
|
|
1037
1077
|
try:
|
|
1038
1078
|
await self._safe_send(self.client.plugin["xep_0060"].subscribe, self._pubsub_service, node)
|
|
1039
1079
|
break
|
|
1040
1080
|
except (slixmpp.exceptions.IqError, slixmpp.exceptions.IqTimeout):
|
|
1041
|
-
|
|
1081
|
+
attempt += 1
|
|
1082
|
+
if attempt == 30:
|
|
1083
|
+
log.warning(
|
|
1084
|
+
"Still failing to subscribe to state node %s after %d attempts, will keep retrying",
|
|
1085
|
+
node,
|
|
1086
|
+
attempt,
|
|
1087
|
+
)
|
|
1088
|
+
await asyncio.sleep(_retry_delay(attempt))
|
|
1042
1089
|
else:
|
|
1043
|
-
log.warning("Could not subscribe to state node %s after 30 attempts", node)
|
|
1044
1090
|
return
|
|
1045
1091
|
|
|
1046
1092
|
# Fetch current value immediately after subscribing
|
|
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.dev32 → pyobs_core-2.0.0.dev34}/pyobs/comm/xmpp/xep_0009_timeout/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/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.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/_daobackgroundremover.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/annotation/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/annotation/_pillow.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/annotation/circle.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/annotation/crosshair.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/annotation/text.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/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.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/astrometry/astrometry.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/astrometry/dotnet.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/calibration/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/calibration/calibration.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/detection/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/detection/daophot.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/detection/pysep.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/detection/simpledisk.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/exptime/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/exptime/exptime.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/image/addfitsheaders.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/image/grayscale.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/image/httpserver.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/image/normalize.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/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.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/misc/circularmask.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/misc/createfilename.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/misc/imagesourcefilter.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/misc/removebackground.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/modules/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/modules/getfitsheaders.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/offsets/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/offsets/astrometry.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/offsets/brighteststar.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/offsets/dummyoffsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/offsets/dummyskyoffsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/offsets/fitsheader.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/offsets/offsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/offsets/pixeloffsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/offsets/projected.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/offsets/spilled_light.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/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.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/photometry/photometry.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/pyobs/images/processors/photometry/photutil.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev32 → pyobs_core-2.0.0.dev34}/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
|
|
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
|