pyobs-core 2.0.0.dev57__tar.gz → 2.0.0.dev59__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.dev57 → pyobs_core-2.0.0.dev59}/PKG-INFO +1 -1
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/application.py +28 -9
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/cli/pyobs.py +8 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/cli/pyobsd.py +54 -11
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyproject.toml +1 -1
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/.gitignore +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/LICENSE +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/background_task.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/cli/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/cli/_cli.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/cli/pyobsw.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/comm/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/comm/comm.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/comm/commlogging.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/comm/dummy/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/comm/dummy/dummycomm.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/comm/local/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/comm/local/localcomm.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/comm/local/localnetwork.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/comm/proxy.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/comm/xmpp/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/comm/xmpp/rpc.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/comm/xmpp/serializer.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/comm/xmpp/xep_0009/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/comm/xmpp/xep_0009/binding.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/comm/xmpp/xep_0009/rpc.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/comm/xmpp/xep_0009_timeout/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/comm/xmpp/xep_0009_timeout/rpc.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/comm/xmpp/xep_0009_timeout/stanza/RPC.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/comm/xmpp/xep_0009_timeout/stanza/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/comm/xmpp/xmppclient.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/comm/xmpp/xmppcomm.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/events/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/events/badweather.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/events/event.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/events/exposurestatuschanged.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/events/filterchanged.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/events/focusfound.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/events/goodweather.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/events/log.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/events/modechanged.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/events/moduleclosed.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/events/moduleopened.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/events/motionstatuschanged.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/events/move.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/events/newimage.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/events/newspectrum.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/events/offsets.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/events/roofclosing.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/events/roofopened.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/events/taskfailed.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/events/taskfinished.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/events/taskstarted.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/events/testevent.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/image.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/meta/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/meta/altazoffsets.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/meta/exptime.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/meta/genericoffset.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/meta/onskydistance.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/meta/pixeloffsets.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/meta/radecoffsets.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/meta/skyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processor.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/_daobackgroundremover.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/annotation/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/annotation/_pillow.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/annotation/circle.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/annotation/crosshair.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/annotation/text.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/astrometry/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/astrometry/_dotnet_request.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/astrometry/_dotnet_request_builder.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/astrometry/_dotnet_request_logger.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/astrometry/_dotnet_response_saver.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/astrometry/astrometry.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/astrometry/dotnet.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/calibration/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/calibration/_calibration_cache.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/calibration/_ccddata_calibrator.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/calibration/calibration.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/detection/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/detection/_pysep_stats_calculator.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/detection/_source_catalog.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/detection/daophot.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/detection/pysep.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/detection/simpledisk.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/detection/sourcedetection.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/exptime/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/exptime/exptime.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/exptime/star.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/image/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/image/addfitsheaders.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/image/download.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/image/flip.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/image/grayscale.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/image/httpserver.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/image/normalize.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/image/save.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/image/saveimage.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/image/smooth.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/image/softbin.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/misc/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/misc/addmask.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/misc/catalogcircularmask.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/misc/circularmask.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/misc/createfilename.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/misc/imagesourcefilter.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/misc/removebackground.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/modules/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/modules/getfitsheaders.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/offsets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/offsets/astrometry.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/offsets/brighteststar.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/offsets/brighteststar_guiding.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/offsets/dummyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/offsets/dummyskyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/offsets/fitsheader.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/offsets/offsets.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/offsets/pixeloffsets.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/offsets/projected.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/offsets/spilled_light.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/photometry/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/photometry/_photometry_calculator.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/photometry/_photutil_aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/photometry/_sep_aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/photometry/aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/photometry/photometry.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/photometry/photutil.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/photometry/pysep.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/wcs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/wcs/solarhelioprojective.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IAbortable.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IAcquisition.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IAutoFocus.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IAutoGuiding.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IAutonomous.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IBinning.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/ICalibrate.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/ICamera.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IConfig.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/ICooling.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IData.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IDataSequence.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IDome.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IExposure.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IExposureTime.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IFilters.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IFitsHeaderAfter.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IFitsHeaderBefore.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IFlatField.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IFocusModel.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IFocuser.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IGain.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IImageFormat.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IImageType.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IMode.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IModule.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IMotion.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IMultiFiber.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IOffsetsAltAz.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IOffsetsRaDec.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IPointingAltAz.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IPointingBody.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IPointingHeliocentricPolar.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IPointingHeliographicStonyhurst.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IPointingHelioprojective.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IPointingOrbitalElements.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IPointingRaDec.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IPointingSeries.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IReady.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IRoof.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IRotation.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IRunnable.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IRunning.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IScriptRunner.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/ISpectrograph.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IStartStop.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IStructuredConfig.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/ISyncTarget.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/ITelescope.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/ITemperatures.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/ITrackingMode.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/ITrackingRate.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IVideo.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IWeather.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/IWindow.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/interfaces/interface.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/mixins/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/mixins/camerasettings.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/mixins/fitsheader.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/mixins/fitsnamespace.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/mixins/follow.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/mixins/motionstatus.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/mixins/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/mixins/waitformotion.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/mixins/weatheraware.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/camera/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/camera/adaptive.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/camera/basecamera.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/camera/basespectrograph.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/camera/basevideo.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/camera/dummycamera.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/camera/dummyspectrograph.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/camera/dummyvideo.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/camera/pipelinecamera.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/flatfield/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/flatfield/flatfield.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/flatfield/pointing.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/flatfield/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/focus/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/focus/dummyautofocus.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/focus/focusmodel.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/focus/focusseries.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/image/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/image/imagewatcher.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/image/imagewriter.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/image/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/image/seeing.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/module.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/pointing/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/pointing/_base.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/pointing/_baseguiding.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/pointing/acquisition.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/pointing/autoguiding.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/pointing/dummyacquisition.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/pointing/dummyguiding.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/pointing/guidingstatistics/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/pointing/guidingstatistics/guidingstatistics.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/pointing/guidingstatistics/pixeloffset.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/pointing/guidingstatistics/skyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/pointing/guidingstatistics/uptime.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/pointing/scienceframeguiding.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/robotic/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/robotic/mastermind.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/robotic/pointing.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/robotic/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/robotic/scriptrunner.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/roof/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/roof/basedome.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/roof/baseroof.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/roof/dummyroof.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/telescope/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/telescope/_dummytelescopebase.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/telescope/basetelescope.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/telescope/dummyaltaztelescope.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/telescope/dummyradectelescope.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/telescope/dummysolartelescope.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/test/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/test/standalone.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/utils/dummymode.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/utils/fluentlogger.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/utils/httpfilecache.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/utils/kiosk.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/utils/matrix.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/utils/stellarium.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/utils/telegram.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/utils/trigger.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/weather/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/weather/mockweather.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/weather/weather.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/weather/weather_api.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/modules/weather/weather_state.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/object.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/py.typed +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/observation.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/_executor.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/astroplanscheduler.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/constraints/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/constraints/airmassconstraint.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/constraints/constraint.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/constraints/moonilluminationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/constraints/moonseparationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/constraints/solarelevationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/constraints/timeconstraint.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/dataprovider.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/merits/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/merits/aftertime.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/merits/beforetime.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/merits/constant.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/merits/follow.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/merits/interval.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/merits/merit.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/merits/pernight.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/merits/random.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/merits/timewindow.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/merits/transit.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/observationarchiveevolution.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/ondemandscheduler.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/targets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/targets/dynamictarget.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/targets/heliocentricpolartarget.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/targets/helioprojectivetarget.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/targets/picker/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/targets/picker/csvpicker.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/targets/picker/picker.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/targets/siderealtarget.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/targets/target.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scheduler/taskscheduler.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scripts/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scripts/calibration/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scripts/calibration/darkbias.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scripts/calibration/pointing.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scripts/calibration/skyflats.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scripts/control/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scripts/control/cases.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scripts/control/conditional.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scripts/control/parallel.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scripts/control/selector.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scripts/control/sequential.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scripts/exceptions.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scripts/imaging/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scripts/imaging/autofocus.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scripts/imaging/imaging.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scripts/imaging/transitimaging.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scripts/script.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scripts/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scripts/utils/callmodule.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scripts/utils/debugtrigger.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/scripts/utils/log.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/backend/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/backend/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/backend/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/filesystem/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/filesystem/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/filesystem/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/lco/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/lco/_portal.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/lco/_schedulereader.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/lco/_schedulewriter.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/lco/configdb.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/lco/mockobservationarchive.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/lco/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/lco/scripts/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/lco/scripts/autofocus.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/lco/scripts/default.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/lco/scripts/script.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/lco/task.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/lco/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/lco/taskrunner.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/memory/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/memory/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/memory/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/storage/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/task.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/taskrunner.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/utils/archive/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/utils/archive/archive.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/utils/archive/local_archive.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/utils/archive/pyobs_archive.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/utils/exptime/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/utils/exptime/exptime.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/utils/exptime/stellarexptime.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/utils/skyflats/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/utils/skyflats/exptimeeval.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/utils/skyflats/flatfielder.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/utils/skyflats/pointing/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/utils/skyflats/pointing/base.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/utils/skyflats/pointing/static.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/utils/skyflats/priorities/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/utils/skyflats/priorities/archive.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/utils/skyflats/priorities/base.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/utils/skyflats/priorities/const.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/robotic/utils/skyflats/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/average.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/cache.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/config.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/config_schema.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/coordinates.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/curvefit.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/enums.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/exceptions.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/fits.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/focusseries/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/focusseries/base.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/focusseries/photometry.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/focusseries/projection.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/grids/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/grids/filters.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/grids/grid.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/grids/gridnode.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/grids/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/gui/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/gui/camera/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/gui/camera/binningwidget.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/gui/camera/datadisplaywidget.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/gui/camera/exposewidget.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/gui/camera/exposuretimewidget.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/gui/camera/imageformatwidget.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/gui/camera/listpickerdialog.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/gui/camera/windowingwidget.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/http.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/influxdb.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/logger.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/logging/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/logging/context.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/logging/resolvableerror.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/modulegui.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/offsets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/offsets/applyaltazoffsets.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/offsets/applyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/offsets/applyradecoffsets.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/parallel.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/pipeline/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/pipeline/night.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/pipeline/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/publisher/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/publisher/csv.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/publisher/http.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/publisher/log.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/publisher/multi.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/publisher/publisher.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/serialization.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/shellcommand.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/threads/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/threads/lockwithabort.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/time.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/utils/units.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/version.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/vfs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/vfs/archivefile.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/vfs/bufferedfile.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/vfs/file.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/vfs/filelists/__init__.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/vfs/filelists/filelist.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/vfs/filelists/testing.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/vfs/httpfile.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/vfs/localfile.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/vfs/memfile.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/vfs/sftpfile.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/vfs/smbfile.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/vfs/sshfile.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/vfs/tempfile.py +0 -0
- {pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/vfs/vfs.py +0 -0
|
@@ -22,11 +22,14 @@ log = logging.getLogger(__name__)
|
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
# --- IERS offline fallback ---------------------------------------------
|
|
25
|
-
#
|
|
26
|
-
# astropy
|
|
27
|
-
#
|
|
28
|
-
#
|
|
29
|
-
|
|
25
|
+
# Skip live IERS/USNO downloads and rely on the astropy-iers-data snapshot bundled with the
|
|
26
|
+
# installed astropy package. Useful when the upstream IERS servers are down/unreachable/slow,
|
|
27
|
+
# or when running on a telescope control machine without reliable outbound internet access --
|
|
28
|
+
# astropy's own auto-refresh (IERS_Auto, triggered from inside coordinate transforms like
|
|
29
|
+
# Observer.altaz) does a synchronous network fetch inline wherever it's called from, which can
|
|
30
|
+
# stall an asyncio event loop for as long as that fetch takes if invoked from a module's main
|
|
31
|
+
# thread (see pyobs.modules.telescope.basetelescope._update_celestial_headers).
|
|
32
|
+
def _disable_iers_auto_download() -> None:
|
|
30
33
|
from astropy.utils.iers import conf as iers_conf
|
|
31
34
|
|
|
32
35
|
iers_conf.auto_download = False
|
|
@@ -34,11 +37,18 @@ if os.environ.get("PYOBS_IERS_OFFLINE", "").lower() in ("1", "true", "yes"):
|
|
|
34
37
|
iers_conf.iers_degraded_accuracy = "warn"
|
|
35
38
|
|
|
36
39
|
log.warning(
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"from the snapshot date."
|
|
40
|
+
"IERS auto-download disabled — relying on the bundled astropy-iers-data snapshot. "
|
|
41
|
+
"Earth orientation/UT1-UTC accuracy may degrade for predictions far from the "
|
|
42
|
+
"snapshot date."
|
|
41
43
|
)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
# PYOBS_IERS_OFFLINE=1 kept as a standalone env-var trigger for anyone not going through the
|
|
47
|
+
# `pyobs` CLI's config/env machinery (e.g. importing Application directly). The CLI-driven path
|
|
48
|
+
# (Application.__init__'s iers_offline kwarg, wired from pyobs.cli.pyobs's GLOBAL_CONFIG_KEYS)
|
|
49
|
+
# calls the same _disable_iers_auto_download() below instead.
|
|
50
|
+
if os.environ.get("PYOBS_IERS_OFFLINE", "").lower() in ("1", "true", "yes"):
|
|
51
|
+
_disable_iers_auto_download()
|
|
42
52
|
# -------------------------------------------------------------------------
|
|
43
53
|
|
|
44
54
|
# turn RuntimeWarnings into errors
|
|
@@ -83,6 +93,7 @@ class Application:
|
|
|
83
93
|
log_level: str = "info",
|
|
84
94
|
syslog: bool = False,
|
|
85
95
|
influx_log: InfluxLogConfig | None = None,
|
|
96
|
+
iers_offline: bool = False,
|
|
86
97
|
**kwargs: Any,
|
|
87
98
|
):
|
|
88
99
|
"""Initializes a pyobs application.
|
|
@@ -103,6 +114,11 @@ class Application:
|
|
|
103
114
|
log_level: Logging level.
|
|
104
115
|
syslog: Send log to systemd journal, tagged with SYSLOG_IDENTIFIER=pyobs
|
|
105
116
|
and PYOBS_MODULE=<module name>. Requires logging-journald.
|
|
117
|
+
iers_offline: Disable astropy's IERS/leap-second auto-download (see
|
|
118
|
+
_disable_iers_auto_download's docstring above). Same effect as setting
|
|
119
|
+
PYOBS_IERS_OFFLINE=1, but sourced from pyobs's own config/CLI machinery
|
|
120
|
+
(pyobs.cli.pyobs's GLOBAL_CONFIG_KEYS) instead of a bare env var, so it applies
|
|
121
|
+
the same way regardless of how the module process was spawned.
|
|
106
122
|
influx_log: Log to influx DB.
|
|
107
123
|
"""
|
|
108
124
|
if (config is None) == (module_factory is None):
|
|
@@ -110,6 +126,9 @@ class Application:
|
|
|
110
126
|
if module_factory is not None and loop_module_class is None:
|
|
111
127
|
raise ValueError("loop_module_class is required when module_factory is given.")
|
|
112
128
|
|
|
129
|
+
if iers_offline:
|
|
130
|
+
_disable_iers_auto_download()
|
|
131
|
+
|
|
113
132
|
# get config name without path and extension
|
|
114
133
|
self._config = config
|
|
115
134
|
config_base = (
|
|
@@ -20,8 +20,10 @@ class PyobsCLI(CLI):
|
|
|
20
20
|
# list of parameters that can be defined in the config file
|
|
21
21
|
GLOBAL_CONFIG_KEYS = [
|
|
22
22
|
"log_level",
|
|
23
|
+
"syslog",
|
|
23
24
|
"influx_log",
|
|
24
25
|
"debug_time",
|
|
26
|
+
"iers_offline",
|
|
25
27
|
]
|
|
26
28
|
|
|
27
29
|
def init_cli(self) -> None:
|
|
@@ -54,6 +56,12 @@ class PyobsCLI(CLI):
|
|
|
54
56
|
help="send to influx log: <host> <token> <org> <bucket>",
|
|
55
57
|
default=self._config.get("influx_log", None),
|
|
56
58
|
)
|
|
59
|
+
self._parser.add_argument(
|
|
60
|
+
"--iers-offline",
|
|
61
|
+
action="store_true",
|
|
62
|
+
help="disable astropy IERS/leap-second auto-download, use the bundled snapshot",
|
|
63
|
+
default=self._config.get("iers_offline", False),
|
|
64
|
+
)
|
|
57
65
|
|
|
58
66
|
# debug stuff
|
|
59
67
|
self._parser.add_argument(
|
|
@@ -69,7 +69,16 @@ class PyobsDaemonCLI(CLI):
|
|
|
69
69
|
sp.add_parser("start", help="start modules").add_argument("modules", type=str, nargs="*")
|
|
70
70
|
sp.add_parser("stop", help="stop modules").add_argument("modules", type=str, nargs="*")
|
|
71
71
|
sp.add_parser("restart", help="restart modules").add_argument("modules", type=str, nargs="*")
|
|
72
|
-
sp.add_parser("status", help="status of modules")
|
|
72
|
+
status_parser = sp.add_parser("status", help="status of modules")
|
|
73
|
+
status_parser.add_argument("--json", action="store_true")
|
|
74
|
+
status_parser.add_argument(
|
|
75
|
+
"--cpu-interval",
|
|
76
|
+
type=float,
|
|
77
|
+
default=None,
|
|
78
|
+
metavar="SECONDS",
|
|
79
|
+
help="measure CPU%% over this many seconds (shared across all modules, one sleep "
|
|
80
|
+
"total, not one per module); omitted by default since it makes status blocking",
|
|
81
|
+
)
|
|
73
82
|
sp.add_parser("list", help="list of modules")
|
|
74
83
|
sp.add_parser("logs", help="show/follow module logs via journalctl").add_argument(
|
|
75
84
|
"args", nargs=argparse.REMAINDER, help="[module] [journalctl arguments...]"
|
|
@@ -97,7 +106,7 @@ class PyobsDaemonCLI(CLI):
|
|
|
97
106
|
case "restart":
|
|
98
107
|
daemon.restart(modules=self._config["modules"])
|
|
99
108
|
case "status":
|
|
100
|
-
daemon.status(print_json=self._config["json"])
|
|
109
|
+
daemon.status(print_json=self._config["json"], cpu_interval=self._config["cpu_interval"])
|
|
101
110
|
case "list":
|
|
102
111
|
daemon.list_modules()
|
|
103
112
|
case "logs":
|
|
@@ -214,15 +223,41 @@ class PyobsDaemon:
|
|
|
214
223
|
return None
|
|
215
224
|
|
|
216
225
|
def _process_info(self, pid: int) -> dict[str, Any]:
|
|
217
|
-
"""Return uptime (seconds)
|
|
226
|
+
"""Return uptime (seconds) and rss_mb for a running PID. No CPU -- that needs a
|
|
227
|
+
shared sampling window across all processes, see _sample_cpu_percent."""
|
|
218
228
|
try:
|
|
219
229
|
proc = psutil.Process(pid)
|
|
220
230
|
uptime = time.time() - proc.create_time()
|
|
221
|
-
cpu = proc.cpu_percent(interval=0.1)
|
|
222
231
|
rss_mb = proc.memory_info().rss / 1024 / 1024
|
|
223
|
-
return {"uptime": uptime, "
|
|
232
|
+
return {"uptime": uptime, "rss_mb": rss_mb}
|
|
224
233
|
except psutil.NoSuchProcess:
|
|
225
|
-
return {"uptime": 0.0, "
|
|
234
|
+
return {"uptime": 0.0, "rss_mb": 0.0}
|
|
235
|
+
|
|
236
|
+
@staticmethod
|
|
237
|
+
def _sample_cpu_percent(pids: list[int], interval: float) -> dict[int, float]:
|
|
238
|
+
"""Sample CPU% for multiple PIDs over one shared interval, instead of the
|
|
239
|
+
interval-per-process cost of calling Process.cpu_percent(interval=...) serially --
|
|
240
|
+
that would take len(pids) * interval seconds and grows with the number of modules.
|
|
241
|
+
psutil.cpu_percent(interval=None) after construction always returns 0.0 (it has no
|
|
242
|
+
prior sample to diff against); it's the second, unblocked call after the shared
|
|
243
|
+
sleep that reports the percentage actually elapsed, so pids share a single sleep.
|
|
244
|
+
"""
|
|
245
|
+
procs = {}
|
|
246
|
+
for pid in pids:
|
|
247
|
+
try:
|
|
248
|
+
proc = psutil.Process(pid)
|
|
249
|
+
proc.cpu_percent(interval=None) # prime -- discard the meaningless 0.0
|
|
250
|
+
procs[pid] = proc
|
|
251
|
+
except psutil.NoSuchProcess:
|
|
252
|
+
continue
|
|
253
|
+
time.sleep(interval)
|
|
254
|
+
result = {}
|
|
255
|
+
for pid, proc in procs.items():
|
|
256
|
+
try:
|
|
257
|
+
result[pid] = proc.cpu_percent(interval=None)
|
|
258
|
+
except psutil.NoSuchProcess:
|
|
259
|
+
result[pid] = 0.0
|
|
260
|
+
return result
|
|
226
261
|
|
|
227
262
|
@staticmethod
|
|
228
263
|
def _fmt_uptime(seconds: float) -> str:
|
|
@@ -267,7 +302,7 @@ class PyobsDaemon:
|
|
|
267
302
|
time.sleep(1)
|
|
268
303
|
self.start(modules=modules)
|
|
269
304
|
|
|
270
|
-
def status(self, print_json: bool = False) -> None:
|
|
305
|
+
def status(self, print_json: bool = False, cpu_interval: float | None = None) -> None:
|
|
271
306
|
configs = self._list_configs()
|
|
272
307
|
# map "active" (no leading underscore) name -> config name, so that
|
|
273
308
|
# PID files (always named without underscore) can be matched back to
|
|
@@ -278,13 +313,19 @@ class PyobsDaemon:
|
|
|
278
313
|
pid_stems = [self._module(p) for p in glob.glob(os.path.join(self._run_path, "*.pid"))]
|
|
279
314
|
modules = sorted(set(configs) | {active_to_config.get(s, s) for s in pid_stems})
|
|
280
315
|
|
|
316
|
+
pids = {module: pid for module in modules if (pid := self._running_pid(module)) is not None}
|
|
317
|
+
# CPU% is off by default -- a meaningful reading needs a real sampling window (see
|
|
318
|
+
# _sample_cpu_percent), and forcing that cost on every plain "status" call would make
|
|
319
|
+
# it slow for no benefit when nobody's looking at CPU. Only pay for it if asked.
|
|
320
|
+
cpu_by_pid = self._sample_cpu_percent(list(pids.values()), cpu_interval) if cpu_interval else {}
|
|
321
|
+
|
|
281
322
|
if print_json:
|
|
282
323
|
result: dict[str, Any] = {}
|
|
283
324
|
for module in modules:
|
|
284
|
-
pid =
|
|
325
|
+
pid = pids.get(module)
|
|
285
326
|
if pid is not None:
|
|
286
327
|
info = self._process_info(pid)
|
|
287
|
-
result[module] = {"running": True, "pid": pid, **info}
|
|
328
|
+
result[module] = {"running": True, "pid": pid, "cpu": cpu_by_pid.get(pid), **info}
|
|
288
329
|
else:
|
|
289
330
|
result[module] = {"running": False}
|
|
290
331
|
print(json.dumps(result))
|
|
@@ -293,13 +334,15 @@ class PyobsDaemon:
|
|
|
293
334
|
print(f"{'module':<30} {'status':<8} {'uptime':>12} {'cpu':>6} {'rss':>8}")
|
|
294
335
|
print("-" * 72)
|
|
295
336
|
for module in modules:
|
|
296
|
-
pid =
|
|
337
|
+
pid = pids.get(module)
|
|
297
338
|
if pid is not None:
|
|
298
339
|
info = self._process_info(pid)
|
|
340
|
+
cpu = cpu_by_pid.get(pid)
|
|
341
|
+
cpu_str = f"{cpu:>5.1f}%" if cpu is not None else f"{'-':>6}"
|
|
299
342
|
print(
|
|
300
343
|
f"{module:<30} {'running':<8} "
|
|
301
344
|
f"{self._fmt_uptime(info['uptime']):>12} "
|
|
302
|
-
f"{
|
|
345
|
+
f"{cpu_str} "
|
|
303
346
|
f"{info['rss_mb']:>6.1f} MB"
|
|
304
347
|
)
|
|
305
348
|
else:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.dev57 → pyobs_core-2.0.0.dev59}/pyobs/comm/xmpp/xep_0009_timeout/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/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
|
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/_daobackgroundremover.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/annotation/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/annotation/_pillow.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/annotation/circle.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/annotation/crosshair.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/annotation/text.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/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.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/astrometry/astrometry.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/astrometry/dotnet.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/calibration/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/calibration/calibration.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/detection/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/detection/daophot.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/detection/pysep.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/detection/simpledisk.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/exptime/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/exptime/exptime.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/image/addfitsheaders.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/image/grayscale.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/image/httpserver.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/image/normalize.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/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.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/misc/circularmask.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/misc/createfilename.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/misc/imagesourcefilter.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/misc/removebackground.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/modules/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/modules/getfitsheaders.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/offsets/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/offsets/astrometry.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/offsets/brighteststar.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/offsets/dummyoffsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/offsets/dummyskyoffsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/offsets/fitsheader.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/offsets/offsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/offsets/pixeloffsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/offsets/projected.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/offsets/spilled_light.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/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.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/photometry/photometry.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/pyobs/images/processors/photometry/photutil.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev57 → pyobs_core-2.0.0.dev59}/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
|