pyobs-core 2.0.0.dev16__tar.gz → 2.0.0.dev18__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.dev16 → pyobs_core-2.0.0.dev18}/PKG-INFO +1 -1
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/cli/pyobsd.py +32 -3
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IModule.py +10 -1
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/__init__.py +2 -1
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/camera/basevideo.py +12 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/module.py +44 -1
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/telescope/dummytelescope.py +11 -5
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/utils/httpfilecache.py +18 -1
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyproject.toml +1 -1
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/.gitignore +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/LICENSE +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/application.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/background_task.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/cli/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/cli/_cli.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/cli/pyobs.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/cli/pyobsw.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/comm/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/comm/comm.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/comm/commlogging.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/comm/dummy/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/comm/dummy/dummycomm.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/comm/local/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/comm/local/localcomm.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/comm/local/localnetwork.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/comm/proxy.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/comm/xmpp/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/comm/xmpp/rpc.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/comm/xmpp/serializer.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/comm/xmpp/xep_0009/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/comm/xmpp/xep_0009/binding.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/comm/xmpp/xep_0009/rpc.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/comm/xmpp/xep_0009_timeout/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/comm/xmpp/xep_0009_timeout/rpc.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/comm/xmpp/xep_0009_timeout/stanza/RPC.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/comm/xmpp/xep_0009_timeout/stanza/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/comm/xmpp/xmppclient.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/comm/xmpp/xmppcomm.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/events/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/events/badweather.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/events/event.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/events/exposurestatuschanged.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/events/filterchanged.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/events/focusfound.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/events/goodweather.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/events/log.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/events/modechanged.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/events/moduleclosed.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/events/moduleopened.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/events/motionstatuschanged.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/events/move.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/events/newimage.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/events/newspectrum.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/events/offsets.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/events/roofclosing.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/events/roofopened.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/events/taskfailed.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/events/taskfinished.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/events/taskstarted.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/events/testevent.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/image.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/meta/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/meta/altazoffsets.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/meta/exptime.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/meta/genericoffset.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/meta/onskydistance.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/meta/pixeloffsets.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/meta/radecoffsets.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/meta/skyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processor.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/_daobackgroundremover.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/annotation/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/annotation/_pillow.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/annotation/circle.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/annotation/crosshair.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/annotation/text.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/astrometry/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/astrometry/_dotnet_request.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/astrometry/_dotnet_request_builder.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/astrometry/_dotnet_request_logger.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/astrometry/_dotnet_response_saver.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/astrometry/astrometry.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/astrometry/dotnet.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/calibration/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/calibration/_calibration_cache.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/calibration/_ccddata_calibrator.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/calibration/calibration.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/detection/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/detection/_pysep_stats_calculator.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/detection/_source_catalog.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/detection/daophot.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/detection/pysep.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/detection/simpledisk.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/detection/sourcedetection.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/exptime/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/exptime/exptime.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/exptime/star.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/image/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/image/addfitsheaders.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/image/download.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/image/flip.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/image/grayscale.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/image/httpserver.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/image/normalize.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/image/save.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/image/saveimage.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/image/smooth.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/image/softbin.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/misc/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/misc/addmask.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/misc/catalogcircularmask.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/misc/circularmask.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/misc/createfilename.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/misc/imagesourcefilter.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/misc/removebackground.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/modules/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/modules/getfitsheaders.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/offsets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/offsets/astrometry.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/offsets/brighteststar.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/offsets/brighteststar_guiding.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/offsets/dummyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/offsets/dummyskyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/offsets/fitsheader.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/offsets/offsets.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/offsets/pixeloffsets.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/offsets/projected.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/offsets/spilled_light.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/photometry/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/photometry/_photometry_calculator.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/photometry/_photutil_aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/photometry/_sep_aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/photometry/aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/photometry/photometry.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/photometry/photutil.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/photometry/pysep.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/wcs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/wcs/solarhelioprojective.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IAbortable.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IAcquisition.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IAutoFocus.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IAutoGuiding.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IAutonomous.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IBinning.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/ICalibrate.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/ICamera.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IConfig.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/ICooling.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IData.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IDome.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IExposure.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IExposureTime.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IFilters.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IFitsHeaderAfter.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IFitsHeaderBefore.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IFlatField.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IFocusModel.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IFocuser.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IGain.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IImageFormat.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IImageType.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IMode.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IMotion.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IMultiFiber.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IOffsetsAltAz.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IOffsetsRaDec.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IPointingAltAz.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IPointingHGS.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IPointingHelioprojective.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IPointingRaDec.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IPointingSeries.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IReady.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IRoof.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IRotation.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IRunnable.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IRunning.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IScriptRunner.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/ISpectrograph.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IStartStop.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IStructuredConfig.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/ISyncTarget.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/ITelescope.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/ITemperatures.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IVideo.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IWeather.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/IWindow.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/interfaces/interface.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/mixins/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/mixins/camerasettings.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/mixins/fitsheader.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/mixins/fitsnamespace.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/mixins/follow.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/mixins/motionstatus.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/mixins/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/mixins/waitformotion.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/mixins/weatheraware.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/camera/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/camera/adaptive.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/camera/basecamera.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/camera/basespectrograph.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/camera/dummycamera.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/camera/dummyspectrograph.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/camera/dummyvideo.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/camera/pipelinecamera.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/flatfield/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/flatfield/flatfield.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/flatfield/pointing.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/flatfield/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/focus/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/focus/dummyautofocus.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/focus/focusmodel.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/focus/focusseries.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/image/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/image/imagewatcher.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/image/imagewriter.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/image/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/image/seeing.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/pointing/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/pointing/_base.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/pointing/_baseguiding.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/pointing/acquisition.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/pointing/autoguiding.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/pointing/dummyacquisition.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/pointing/dummyguiding.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/pointing/guidingstatistics/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/pointing/guidingstatistics/guidingstatistics.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/pointing/guidingstatistics/pixeloffset.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/pointing/guidingstatistics/skyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/pointing/guidingstatistics/uptime.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/pointing/scienceframeguiding.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/robotic/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/robotic/mastermind.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/robotic/pointing.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/robotic/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/robotic/scriptrunner.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/roof/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/roof/basedome.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/roof/baseroof.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/roof/dummyroof.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/telescope/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/telescope/basetelescope.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/test/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/test/standalone.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/utils/autonomouswarning.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/utils/dummymode.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/utils/fluentlogger.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/utils/kiosk.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/utils/matrix.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/utils/stellarium.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/utils/telegram.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/utils/trigger.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/weather/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/weather/mockweather.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/weather/weather.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/weather/weather_api.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/modules/weather/weather_state.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/object.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/py.typed +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/observation.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/astroplanscheduler.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/constraints/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/constraints/airmassconstraint.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/constraints/constraint.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/constraints/moonilluminationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/constraints/moonseparationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/constraints/solarelevationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/constraints/timeconstraint.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/dataprovider.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/merits/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/merits/aftertime.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/merits/beforetime.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/merits/constant.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/merits/follow.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/merits/interval.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/merits/merit.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/merits/pernight.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/merits/random.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/merits/timewindow.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/merits/transit.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/observationarchiveevolution.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/ondemandscheduler.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/targets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/targets/dynamictarget.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/targets/heliocentricpolartarget.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/targets/helioprojectivetarget.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/targets/picker/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/targets/picker/csvpicker.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/targets/picker/picker.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/targets/siderealtarget.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/targets/target.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scheduler/taskscheduler.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scripts/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scripts/calibration/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scripts/calibration/darkbias.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scripts/calibration/pointing.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scripts/calibration/skyflats.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scripts/control/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scripts/control/cases.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scripts/control/conditional.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scripts/control/parallel.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scripts/control/selector.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scripts/control/sequential.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scripts/imaging/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scripts/imaging/autofocus.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scripts/imaging/imaging.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scripts/imaging/transitimaging.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scripts/script.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scripts/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scripts/utils/callmodule.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scripts/utils/debugtrigger.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/scripts/utils/log.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/backend/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/backend/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/backend/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/filesystem/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/filesystem/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/filesystem/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/lco/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/lco/_portal.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/lco/_schedulereader.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/lco/_schedulewriter.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/lco/configdb.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/lco/mockobservationarchive.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/lco/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/lco/scripts/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/lco/scripts/autofocus.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/lco/scripts/default.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/lco/scripts/script.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/lco/task.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/lco/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/lco/taskrunner.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/memory/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/memory/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/memory/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/storage/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/task.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/taskrunner.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/utils/archive/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/utils/archive/archive.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/utils/archive/local_archive.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/utils/archive/pyobs_archive.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/utils/exptime/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/utils/exptime/exptime.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/utils/exptime/stellarexptime.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/utils/skyflats/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/utils/skyflats/exptimeeval.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/utils/skyflats/flatfielder.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/utils/skyflats/pointing/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/utils/skyflats/pointing/base.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/utils/skyflats/pointing/static.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/utils/skyflats/priorities/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/utils/skyflats/priorities/archive.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/utils/skyflats/priorities/base.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/utils/skyflats/priorities/const.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/robotic/utils/skyflats/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/average.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/cache.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/config.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/config_schema.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/coordinates.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/curvefit.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/enums.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/exceptions.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/fits.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/focusseries/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/focusseries/base.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/focusseries/photometry.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/focusseries/projection.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/grids/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/grids/filters.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/grids/grid.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/grids/gridnode.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/grids/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/gui/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/gui/camera/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/gui/camera/binningwidget.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/gui/camera/datadisplaywidget.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/gui/camera/exposewidget.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/gui/camera/exposuretimewidget.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/gui/camera/imageformatwidget.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/gui/camera/listpickerdialog.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/gui/camera/windowingwidget.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/http.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/influxdb.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/logger.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/logging/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/logging/context.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/logging/resolvableerror.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/modulegui.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/offsets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/offsets/applyaltazoffsets.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/offsets/applyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/offsets/applyradecoffsets.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/parallel.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/pipeline/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/pipeline/night.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/pipeline/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/publisher/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/publisher/csv.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/publisher/http.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/publisher/log.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/publisher/multi.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/publisher/publisher.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/serialization.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/shellcommand.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/threads/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/threads/lockwithabort.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/time.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/utils/units.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/version.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/vfs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/vfs/archivefile.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/vfs/bufferedfile.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/vfs/file.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/vfs/filelists/__init__.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/vfs/filelists/filelist.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/vfs/filelists/testing.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/vfs/httpfile.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/vfs/localfile.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/vfs/memfile.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/vfs/sftpfile.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/vfs/smbfile.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/vfs/sshfile.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/vfs/tempfile.py +0 -0
- {pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/vfs/vfs.py +0 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import argparse
|
|
3
4
|
import glob
|
|
4
5
|
import json
|
|
5
6
|
import logging
|
|
@@ -49,9 +50,9 @@ class PyobsDaemonCLI(CLI):
|
|
|
49
50
|
)
|
|
50
51
|
self._parser.add_argument(
|
|
51
52
|
"--syslog",
|
|
52
|
-
action=
|
|
53
|
-
help="send module logs to systemd journal",
|
|
54
|
-
default=self._config.get("syslog",
|
|
53
|
+
action=argparse.BooleanOptionalAction,
|
|
54
|
+
help="send module logs to systemd journal (use --no-syslog to disable)",
|
|
55
|
+
default=self._config.get("syslog", True),
|
|
55
56
|
)
|
|
56
57
|
self._parser.add_argument("--chuid", type=str, default=self._config.get("chuid", "pyobs:pyobs"))
|
|
57
58
|
self._parser.add_argument("-v", "--verbose", action="store_true")
|
|
@@ -63,6 +64,9 @@ class PyobsDaemonCLI(CLI):
|
|
|
63
64
|
sp.add_parser("restart", help="restart modules").add_argument("modules", type=str, nargs="*")
|
|
64
65
|
sp.add_parser("status", help="status of modules").add_argument("--json", action="store_true")
|
|
65
66
|
sp.add_parser("list", help="list of modules")
|
|
67
|
+
sp.add_parser("logs", help="show/follow module logs via journalctl").add_argument(
|
|
68
|
+
"args", nargs=argparse.REMAINDER, help="[module] [journalctl arguments...]"
|
|
69
|
+
)
|
|
66
70
|
|
|
67
71
|
def run(self) -> None:
|
|
68
72
|
# init daemon
|
|
@@ -88,6 +92,8 @@ class PyobsDaemonCLI(CLI):
|
|
|
88
92
|
daemon.status(print_json=self._config["json"])
|
|
89
93
|
case "list":
|
|
90
94
|
daemon.list()
|
|
95
|
+
case "logs":
|
|
96
|
+
daemon.logs(self._config["args"])
|
|
91
97
|
|
|
92
98
|
|
|
93
99
|
class PyobsDaemon:
|
|
@@ -292,6 +298,21 @@ class PyobsDaemon:
|
|
|
292
298
|
def list(self) -> None:
|
|
293
299
|
print("\n".join(self._list_configs()))
|
|
294
300
|
|
|
301
|
+
def logs(self, args: list[str]) -> None:
|
|
302
|
+
"""Show/follow module logs by exec'ing into journalctl."""
|
|
303
|
+
match_args = ["SYSLOG_IDENTIFIER=pyobs"]
|
|
304
|
+
remainder = list(args)
|
|
305
|
+
# "--" may have been auto-inserted by main() to work around argparse.REMAINDER
|
|
306
|
+
# refusing to swallow a leading flag (e.g. "pyobsd logs -f") — drop it here.
|
|
307
|
+
if remainder and remainder[0] == "--":
|
|
308
|
+
remainder.pop(0)
|
|
309
|
+
if remainder and remainder[0] in self._list_configs():
|
|
310
|
+
match_args.append(f"PYOBS_MODULE={remainder.pop(0)}")
|
|
311
|
+
cmd = ["journalctl", *match_args, *remainder]
|
|
312
|
+
if self._verbose:
|
|
313
|
+
print(f"[DEBUG] Executing: {' '.join(cmd)}")
|
|
314
|
+
os.execvp("journalctl", cmd)
|
|
315
|
+
|
|
295
316
|
# ── process management ────────────────────────────────────────────────────
|
|
296
317
|
|
|
297
318
|
def _start_service(self, module: str) -> None:
|
|
@@ -388,6 +409,14 @@ class PyobsDaemon:
|
|
|
388
409
|
|
|
389
410
|
|
|
390
411
|
def main() -> None:
|
|
412
|
+
# argparse.REMAINDER can't swallow a leading flag (e.g. "pyobsd logs -f")
|
|
413
|
+
# unless a "--" already precedes it — insert one automatically so users
|
|
414
|
+
# don't need to type it themselves.
|
|
415
|
+
if "logs" in sys.argv:
|
|
416
|
+
idx = sys.argv.index("logs") + 1
|
|
417
|
+
if idx < len(sys.argv) and sys.argv[idx].startswith("-") and sys.argv[idx] != "--":
|
|
418
|
+
sys.argv.insert(idx, "--")
|
|
419
|
+
|
|
391
420
|
cli = PyobsDaemonCLI()
|
|
392
421
|
cli()
|
|
393
422
|
|
|
@@ -7,10 +7,19 @@ from typing import Any
|
|
|
7
7
|
from .interface import Interface
|
|
8
8
|
|
|
9
9
|
|
|
10
|
+
@dataclass
|
|
11
|
+
class ModuleLocation:
|
|
12
|
+
longitude: float = 0.0
|
|
13
|
+
latitude: float = 0.0
|
|
14
|
+
elevation: float = 0.0
|
|
15
|
+
timezone: str = "utc"
|
|
16
|
+
|
|
17
|
+
|
|
10
18
|
@dataclass
|
|
11
19
|
class ModuleCapabilities:
|
|
12
20
|
label: str = ""
|
|
13
21
|
version: str = ""
|
|
22
|
+
location: ModuleLocation | None = None
|
|
14
23
|
|
|
15
24
|
|
|
16
25
|
class IModule(Interface, metaclass=ABCMeta):
|
|
@@ -31,4 +40,4 @@ class IModule(Interface, metaclass=ABCMeta):
|
|
|
31
40
|
...
|
|
32
41
|
|
|
33
42
|
|
|
34
|
-
__all__ = ["IModule", "ModuleCapabilities"]
|
|
43
|
+
__all__ = ["IModule", "ModuleCapabilities", "ModuleLocation"]
|
|
@@ -36,7 +36,7 @@ from .IGain import GainState, IGain
|
|
|
36
36
|
from .IImageFormat import IImageFormat, ImageFormatCapabilities, ImageFormatState
|
|
37
37
|
from .IImageType import IImageType, ImageTypeState
|
|
38
38
|
from .IMode import IMode, ModeCapabilities, ModeState
|
|
39
|
-
from .IModule import IModule, ModuleCapabilities
|
|
39
|
+
from .IModule import IModule, ModuleCapabilities, ModuleLocation
|
|
40
40
|
from .IMotion import DeviceMotionStatus, IMotion, MotionState
|
|
41
41
|
from .IMultiFiber import IMultiFiber, MultiFiberCapabilities, MultiFiberState
|
|
42
42
|
from .interface import Interface
|
|
@@ -118,6 +118,7 @@ __all__ = [
|
|
|
118
118
|
"ModeState",
|
|
119
119
|
"IModule",
|
|
120
120
|
"ModuleCapabilities",
|
|
121
|
+
"ModuleLocation",
|
|
121
122
|
"IMotion",
|
|
122
123
|
"DeviceMotionStatus",
|
|
123
124
|
"MotionState",
|
|
@@ -147,6 +147,7 @@ class BaseVideo(Module, ImageFitsHeaderMixin, IVideo, IImageType, metaclass=ABCM
|
|
|
147
147
|
self._app.add_routes(
|
|
148
148
|
[
|
|
149
149
|
web.get("/", self.web_handler),
|
|
150
|
+
web.get("/ping", self.ping_handler),
|
|
150
151
|
web.get("/video.mjpg", self.video_handler),
|
|
151
152
|
web.get("/{filename}", self.image_handler),
|
|
152
153
|
]
|
|
@@ -194,6 +195,17 @@ class BaseVideo(Module, ImageFitsHeaderMixin, IVideo, IImageType, metaclass=ABCM
|
|
|
194
195
|
"""
|
|
195
196
|
return web.Response(text=INDEX_HTML, content_type="text/html")
|
|
196
197
|
|
|
198
|
+
async def ping_handler(self, request: web.Request) -> web.Response:
|
|
199
|
+
"""Handles GET access to /ping for testing connectivity.
|
|
200
|
+
|
|
201
|
+
Args:
|
|
202
|
+
request: Request to respond to.
|
|
203
|
+
|
|
204
|
+
Returns:
|
|
205
|
+
Response with a JSON status.
|
|
206
|
+
"""
|
|
207
|
+
return web.json_response({"status": "ok"})
|
|
208
|
+
|
|
197
209
|
async def video_handler(self, request: web.Request) -> web.StreamResponse:
|
|
198
210
|
"""Handles access to /video.mjpg and returns the video.
|
|
199
211
|
|
|
@@ -11,7 +11,15 @@ import packaging.version
|
|
|
11
11
|
from py_expression_eval import Parser
|
|
12
12
|
|
|
13
13
|
from pyobs.events import Event, ModuleOpenedEvent
|
|
14
|
-
from pyobs.interfaces import
|
|
14
|
+
from pyobs.interfaces import (
|
|
15
|
+
ConfigCapabilities,
|
|
16
|
+
ConfigValue,
|
|
17
|
+
IConfig,
|
|
18
|
+
IModule,
|
|
19
|
+
Interface,
|
|
20
|
+
ModuleCapabilities,
|
|
21
|
+
ModuleLocation,
|
|
22
|
+
)
|
|
15
23
|
from pyobs.object import Object
|
|
16
24
|
from pyobs.utils import exceptions as exc
|
|
17
25
|
from pyobs.utils.enums import ModuleState
|
|
@@ -163,11 +171,22 @@ class Module(Object, IModule, IConfig):
|
|
|
163
171
|
|
|
164
172
|
# publish base capabilities
|
|
165
173
|
if self._comm is not None:
|
|
174
|
+
location = (
|
|
175
|
+
ModuleLocation(
|
|
176
|
+
longitude=self._location.lon.degree,
|
|
177
|
+
latitude=self._location.lat.degree,
|
|
178
|
+
elevation=self._location.height.value,
|
|
179
|
+
timezone=str(self._timezone),
|
|
180
|
+
)
|
|
181
|
+
if self._location is not None
|
|
182
|
+
else None
|
|
183
|
+
)
|
|
166
184
|
await self._comm.set_capabilities(
|
|
167
185
|
IModule,
|
|
168
186
|
ModuleCapabilities(
|
|
169
187
|
version=await self.get_version(),
|
|
170
188
|
label=await self.get_label(),
|
|
189
|
+
location=location,
|
|
171
190
|
),
|
|
172
191
|
)
|
|
173
192
|
await self._comm.set_capabilities(
|
|
@@ -215,12 +234,36 @@ class Module(Object, IModule, IConfig):
|
|
|
215
234
|
async with self.proxy(sender, IModule) as proxy:
|
|
216
235
|
caps = proxy.get_capabilities(IModule)
|
|
217
236
|
module_version = caps.version if caps is not None else ""
|
|
237
|
+
remote_location = caps.location if caps is not None else None
|
|
218
238
|
except exc.RemoteError:
|
|
219
239
|
return True
|
|
220
240
|
|
|
221
241
|
# log it
|
|
222
242
|
log.debug("Other module %s found, running on pyobs %s.", sender, module_version)
|
|
223
243
|
|
|
244
|
+
# compare location, if both sides have one configured -- surfaces config drift between
|
|
245
|
+
# modules that are supposed to share a site, since pyobs has no shared "site" concept
|
|
246
|
+
if remote_location is not None and self._location is not None:
|
|
247
|
+
from astropy.coordinates import EarthLocation
|
|
248
|
+
|
|
249
|
+
remote = EarthLocation.from_geodetic(
|
|
250
|
+
remote_location.longitude, remote_location.latitude, remote_location.elevation
|
|
251
|
+
)
|
|
252
|
+
distance = (
|
|
253
|
+
(remote.x - self._location.x) ** 2
|
|
254
|
+
+ (remote.y - self._location.y) ** 2
|
|
255
|
+
+ (remote.z - self._location.z) ** 2
|
|
256
|
+
) ** 0.5
|
|
257
|
+
if distance.to_value("m") > 100: # tolerance, tune as needed
|
|
258
|
+
log.warning(
|
|
259
|
+
"Module %s reports a location %.0fm from ours (lon=%.4f, lat=%.4f, elevation=%.1fm).",
|
|
260
|
+
sender,
|
|
261
|
+
distance.to_value("m"),
|
|
262
|
+
remote_location.longitude,
|
|
263
|
+
remote_location.latitude,
|
|
264
|
+
remote_location.elevation,
|
|
265
|
+
)
|
|
266
|
+
|
|
224
267
|
# no version reported, cannot compare
|
|
225
268
|
if not module_version:
|
|
226
269
|
return True
|
|
@@ -108,6 +108,7 @@ class DummyTelescope(
|
|
|
108
108
|
self._dest_coords: SkyCoord | None = None
|
|
109
109
|
self._drift = (0.0, 0.0)
|
|
110
110
|
self._sim_status = MotionStatus.IDLE
|
|
111
|
+
self._temperatures = {"M1": 10.0, "M2": 12.0}
|
|
111
112
|
|
|
112
113
|
# locks
|
|
113
114
|
self._lock_focus = asyncio.Lock()
|
|
@@ -172,6 +173,14 @@ class DummyTelescope(
|
|
|
172
173
|
drift_dec = random.gauss(self._drift_rate[1], max(self._drift_rate[1] / 10.0, 1e-9))
|
|
173
174
|
self._drift = (self._drift[0] + drift_ra, self._drift[1] + drift_dec)
|
|
174
175
|
|
|
176
|
+
self._temperatures = {name: value + random.gauss(0.0, 0.05) for name, value in self._temperatures.items()}
|
|
177
|
+
await self.comm.set_state(
|
|
178
|
+
ITemperatures,
|
|
179
|
+
TemperaturesState(
|
|
180
|
+
readings=[SensorReading(name=name, value=value) for name, value in self._temperatures.items()]
|
|
181
|
+
),
|
|
182
|
+
)
|
|
183
|
+
|
|
175
184
|
await asyncio.sleep(1)
|
|
176
185
|
|
|
177
186
|
async def open(self) -> None:
|
|
@@ -191,10 +200,7 @@ class DummyTelescope(
|
|
|
191
200
|
await self.comm.set_state(
|
|
192
201
|
ITemperatures,
|
|
193
202
|
TemperaturesState(
|
|
194
|
-
readings=[
|
|
195
|
-
SensorReading(name="M1", value=10.0),
|
|
196
|
-
SensorReading(name="M2", value=12.0),
|
|
197
|
-
]
|
|
203
|
+
readings=[SensorReading(name=name, value=value) for name, value in self._temperatures.items()]
|
|
198
204
|
),
|
|
199
205
|
)
|
|
200
206
|
await self.comm.set_state(IReady, ReadyState(ready=True))
|
|
@@ -318,7 +324,7 @@ class DummyTelescope(
|
|
|
318
324
|
await self._change_motion_status(MotionStatus.IDLE)
|
|
319
325
|
|
|
320
326
|
async def set_focus_offset(self, offset: float, **kwargs: Any) -> None:
|
|
321
|
-
|
|
327
|
+
raise NotImplementedError
|
|
322
328
|
|
|
323
329
|
|
|
324
330
|
__all__ = ["DummyTelescope"]
|
|
@@ -34,7 +34,13 @@ class HttpFileCache(Module):
|
|
|
34
34
|
|
|
35
35
|
# define web server
|
|
36
36
|
self._app = web.Application(client_max_size=self._max_file_size)
|
|
37
|
-
self._app.add_routes(
|
|
37
|
+
self._app.add_routes(
|
|
38
|
+
[
|
|
39
|
+
web.get("/ping", self.ping_handler),
|
|
40
|
+
web.get("/{filename}", self.download_handler),
|
|
41
|
+
web.post("/", self.upload_handler),
|
|
42
|
+
]
|
|
43
|
+
)
|
|
38
44
|
self._runner = web.AppRunner(self._app)
|
|
39
45
|
self._site: web.TCPSite | None = None
|
|
40
46
|
|
|
@@ -61,6 +67,17 @@ class HttpFileCache(Module):
|
|
|
61
67
|
"""Whether the server is started."""
|
|
62
68
|
return self._is_listening
|
|
63
69
|
|
|
70
|
+
async def ping_handler(self, request: web.Request) -> web.Response:
|
|
71
|
+
"""Handles GET access to /ping for testing connectivity.
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
request: Request to respond to.
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
Response with a JSON status.
|
|
78
|
+
"""
|
|
79
|
+
return web.json_response({"status": "ok"})
|
|
80
|
+
|
|
64
81
|
async def download_handler(self, request: web.Request) -> web.Response:
|
|
65
82
|
"""Handles GET access to /{filename} and returns image.
|
|
66
83
|
|
|
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.dev16 → pyobs_core-2.0.0.dev18}/pyobs/comm/xmpp/xep_0009_timeout/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/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.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/_daobackgroundremover.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/annotation/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/annotation/_pillow.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/annotation/circle.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/annotation/crosshair.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/annotation/text.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/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.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/astrometry/astrometry.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/astrometry/dotnet.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/calibration/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/calibration/calibration.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/detection/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/detection/daophot.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/detection/pysep.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/detection/simpledisk.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/exptime/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/exptime/exptime.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/image/addfitsheaders.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/image/grayscale.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/image/httpserver.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/image/normalize.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/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.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/misc/circularmask.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/misc/createfilename.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/misc/imagesourcefilter.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/misc/removebackground.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/modules/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/modules/getfitsheaders.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/offsets/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/offsets/astrometry.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/offsets/brighteststar.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/offsets/dummyoffsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev16 → pyobs_core-2.0.0.dev18}/pyobs/images/processors/offsets/dummyskyoffsets.py
RENAMED
|
File without changes
|