pyobs-core 2.0.0.dev59__tar.gz → 2.0.0.dev61__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.dev59 → pyobs_core-2.0.0.dev61}/PKG-INFO +1 -1
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/application.py +6 -3
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/utils/httpfilecache.py +47 -3
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/vfs/httpfile.py +7 -9
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyproject.toml +1 -1
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/.gitignore +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/LICENSE +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/background_task.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/cli/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/cli/_cli.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/cli/pyobs.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/cli/pyobsd.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/cli/pyobsw.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/comm/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/comm/comm.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/comm/commlogging.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/comm/dummy/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/comm/dummy/dummycomm.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/comm/local/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/comm/local/localcomm.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/comm/local/localnetwork.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/comm/proxy.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/rpc.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/serializer.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/xep_0009/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/xep_0009/binding.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/xep_0009/rpc.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/xep_0009_timeout/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/xep_0009_timeout/rpc.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/xep_0009_timeout/stanza/RPC.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/xep_0009_timeout/stanza/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/xmppclient.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/xmppcomm.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/events/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/events/badweather.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/events/event.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/events/exposurestatuschanged.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/events/filterchanged.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/events/focusfound.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/events/goodweather.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/events/log.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/events/modechanged.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/events/moduleclosed.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/events/moduleopened.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/events/motionstatuschanged.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/events/move.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/events/newimage.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/events/newspectrum.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/events/offsets.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/events/roofclosing.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/events/roofopened.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/events/taskfailed.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/events/taskfinished.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/events/taskstarted.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/events/testevent.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/image.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/meta/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/meta/altazoffsets.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/meta/exptime.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/meta/genericoffset.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/meta/onskydistance.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/meta/pixeloffsets.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/meta/radecoffsets.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/meta/skyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processor.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/_daobackgroundremover.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/annotation/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/annotation/_pillow.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/annotation/circle.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/annotation/crosshair.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/annotation/text.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/astrometry/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/astrometry/_dotnet_request.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/astrometry/_dotnet_request_builder.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/astrometry/_dotnet_request_logger.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/astrometry/_dotnet_response_saver.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/astrometry/astrometry.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/astrometry/dotnet.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/calibration/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/calibration/_calibration_cache.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/calibration/_ccddata_calibrator.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/calibration/calibration.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/detection/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/detection/_pysep_stats_calculator.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/detection/_source_catalog.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/detection/daophot.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/detection/pysep.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/detection/simpledisk.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/detection/sourcedetection.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/exptime/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/exptime/exptime.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/exptime/star.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/addfitsheaders.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/download.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/flip.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/grayscale.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/httpserver.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/normalize.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/save.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/saveimage.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/smooth.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/softbin.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/misc/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/misc/addmask.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/misc/catalogcircularmask.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/misc/circularmask.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/misc/createfilename.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/misc/imagesourcefilter.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/misc/removebackground.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/modules/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/modules/getfitsheaders.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/astrometry.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/brighteststar.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/brighteststar_guiding.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/dummyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/dummyskyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/fitsheader.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/offsets.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/pixeloffsets.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/projected.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/spilled_light.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/photometry/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/photometry/_photometry_calculator.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/photometry/_photutil_aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/photometry/_sep_aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/photometry/aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/photometry/photometry.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/photometry/photutil.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/photometry/pysep.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/wcs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/wcs/solarhelioprojective.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IAbortable.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IAcquisition.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IAutoFocus.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IAutoGuiding.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IAutonomous.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IBinning.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/ICalibrate.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/ICamera.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IConfig.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/ICooling.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IData.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IDataSequence.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IDome.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IExposure.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IExposureTime.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IFilters.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IFitsHeaderAfter.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IFitsHeaderBefore.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IFlatField.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IFocusModel.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IFocuser.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IGain.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IImageFormat.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IImageType.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IMode.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IModule.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IMotion.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IMultiFiber.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IOffsetsAltAz.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IOffsetsRaDec.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IPointingAltAz.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IPointingBody.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IPointingHeliocentricPolar.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IPointingHeliographicStonyhurst.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IPointingHelioprojective.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IPointingOrbitalElements.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IPointingRaDec.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IPointingSeries.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IReady.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IRoof.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IRotation.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IRunnable.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IRunning.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IScriptRunner.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/ISpectrograph.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IStartStop.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IStructuredConfig.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/ISyncTarget.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/ITelescope.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/ITemperatures.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/ITrackingMode.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/ITrackingRate.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IVideo.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IWeather.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IWindow.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/interface.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/mixins/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/mixins/camerasettings.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/mixins/fitsheader.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/mixins/fitsnamespace.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/mixins/follow.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/mixins/motionstatus.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/mixins/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/mixins/waitformotion.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/mixins/weatheraware.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/camera/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/camera/adaptive.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/camera/basecamera.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/camera/basespectrograph.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/camera/basevideo.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/camera/dummycamera.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/camera/dummyspectrograph.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/camera/dummyvideo.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/camera/pipelinecamera.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/flatfield/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/flatfield/flatfield.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/flatfield/pointing.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/flatfield/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/focus/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/focus/dummyautofocus.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/focus/focusmodel.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/focus/focusseries.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/image/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/image/imagewatcher.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/image/imagewriter.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/image/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/image/seeing.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/module.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/_base.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/_baseguiding.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/acquisition.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/autoguiding.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/dummyacquisition.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/dummyguiding.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/guidingstatistics/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/guidingstatistics/guidingstatistics.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/guidingstatistics/pixeloffset.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/guidingstatistics/skyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/guidingstatistics/uptime.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/scienceframeguiding.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/robotic/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/robotic/mastermind.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/robotic/pointing.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/robotic/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/robotic/scriptrunner.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/roof/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/roof/basedome.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/roof/baseroof.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/roof/dummyroof.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/telescope/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/telescope/_dummytelescopebase.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/telescope/basetelescope.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/telescope/dummyaltaztelescope.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/telescope/dummyradectelescope.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/telescope/dummysolartelescope.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/test/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/test/standalone.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/utils/dummymode.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/utils/fluentlogger.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/utils/kiosk.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/utils/matrix.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/utils/stellarium.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/utils/telegram.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/utils/trigger.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/weather/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/weather/mockweather.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/weather/weather.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/weather/weather_api.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/modules/weather/weather_state.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/object.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/py.typed +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/observation.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/_executor.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/astroplanscheduler.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/constraints/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/constraints/airmassconstraint.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/constraints/constraint.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/constraints/moonilluminationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/constraints/moonseparationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/constraints/solarelevationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/constraints/timeconstraint.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/dataprovider.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/merits/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/merits/aftertime.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/merits/beforetime.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/merits/constant.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/merits/follow.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/merits/interval.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/merits/merit.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/merits/pernight.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/merits/random.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/merits/timewindow.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/merits/transit.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/observationarchiveevolution.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/ondemandscheduler.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/targets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/targets/dynamictarget.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/targets/heliocentricpolartarget.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/targets/helioprojectivetarget.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/targets/picker/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/targets/picker/csvpicker.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/targets/picker/picker.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/targets/siderealtarget.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/targets/target.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/taskscheduler.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/calibration/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/calibration/darkbias.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/calibration/pointing.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/calibration/skyflats.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/control/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/control/cases.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/control/conditional.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/control/parallel.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/control/selector.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/control/sequential.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/exceptions.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/imaging/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/imaging/autofocus.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/imaging/imaging.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/imaging/transitimaging.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/script.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/utils/callmodule.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/utils/debugtrigger.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/utils/log.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/backend/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/backend/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/backend/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/filesystem/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/filesystem/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/filesystem/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/_portal.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/_schedulereader.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/_schedulewriter.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/configdb.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/mockobservationarchive.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/scripts/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/scripts/autofocus.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/scripts/default.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/scripts/script.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/task.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/taskrunner.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/memory/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/memory/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/memory/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/task.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/taskrunner.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/archive/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/archive/archive.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/archive/local_archive.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/archive/pyobs_archive.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/exptime/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/exptime/exptime.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/exptime/stellarexptime.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/skyflats/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/skyflats/exptimeeval.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/skyflats/flatfielder.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/skyflats/pointing/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/skyflats/pointing/base.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/skyflats/pointing/static.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/skyflats/priorities/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/skyflats/priorities/archive.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/skyflats/priorities/base.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/skyflats/priorities/const.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/skyflats/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/average.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/cache.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/config.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/config_schema.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/coordinates.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/curvefit.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/enums.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/exceptions.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/fits.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/focusseries/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/focusseries/base.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/focusseries/photometry.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/focusseries/projection.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/grids/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/grids/filters.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/grids/grid.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/grids/gridnode.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/grids/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/gui/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/gui/camera/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/gui/camera/binningwidget.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/gui/camera/datadisplaywidget.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/gui/camera/exposewidget.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/gui/camera/exposuretimewidget.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/gui/camera/imageformatwidget.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/gui/camera/listpickerdialog.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/gui/camera/windowingwidget.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/http.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/influxdb.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/logger.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/logging/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/logging/context.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/logging/resolvableerror.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/modulegui.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/offsets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/offsets/applyaltazoffsets.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/offsets/applyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/offsets/applyradecoffsets.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/parallel.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/pipeline/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/pipeline/night.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/pipeline/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/publisher/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/publisher/csv.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/publisher/http.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/publisher/log.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/publisher/multi.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/publisher/publisher.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/serialization.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/shellcommand.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/threads/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/threads/lockwithabort.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/time.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/utils/units.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/version.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/vfs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/vfs/archivefile.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/vfs/bufferedfile.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/vfs/file.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/vfs/filelists/__init__.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/vfs/filelists/filelist.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/vfs/filelists/testing.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/vfs/localfile.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/vfs/memfile.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/vfs/sftpfile.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/vfs/smbfile.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/vfs/sshfile.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/vfs/tempfile.py +0 -0
- {pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/vfs/vfs.py +0 -0
|
@@ -126,9 +126,6 @@ class Application:
|
|
|
126
126
|
if module_factory is not None and loop_module_class is None:
|
|
127
127
|
raise ValueError("loop_module_class is required when module_factory is given.")
|
|
128
128
|
|
|
129
|
-
if iers_offline:
|
|
130
|
-
_disable_iers_auto_download()
|
|
131
|
-
|
|
132
129
|
# get config name without path and extension
|
|
133
130
|
self._config = config
|
|
134
131
|
config_base = (
|
|
@@ -220,6 +217,12 @@ class Application:
|
|
|
220
217
|
# (there's no real name yet until the factory resolves the actual module/comm identity)
|
|
221
218
|
module_name.set(Path(self._config).stem.lstrip("_") if self._config is not None else config_base)
|
|
222
219
|
|
|
220
|
+
# handlers/module-name context are set up above -- only now can a log.warning() here
|
|
221
|
+
# actually reach journald tagged with PYOBS_MODULE, instead of falling through to
|
|
222
|
+
# logging's untagged handler-of-last-resort
|
|
223
|
+
if iers_offline:
|
|
224
|
+
_disable_iers_auto_download()
|
|
225
|
+
|
|
223
226
|
self._module: Module | None = None
|
|
224
227
|
self._module_factory = module_factory
|
|
225
228
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import hmac
|
|
3
4
|
import logging
|
|
4
5
|
from typing import Any
|
|
5
6
|
|
|
@@ -15,13 +16,22 @@ log = logging.getLogger(__name__)
|
|
|
15
16
|
class HttpFileCache(Module):
|
|
16
17
|
"""A file cache based on a HTTP server."""
|
|
17
18
|
|
|
18
|
-
def __init__(
|
|
19
|
+
def __init__(
|
|
20
|
+
self,
|
|
21
|
+
port: int = 37075,
|
|
22
|
+
cache_size: int = 25,
|
|
23
|
+
max_file_size: int = 100,
|
|
24
|
+
token: str | None = None,
|
|
25
|
+
**kwargs: Any,
|
|
26
|
+
):
|
|
19
27
|
"""Initializes file cache.
|
|
20
28
|
|
|
21
29
|
Args:
|
|
22
30
|
port: Port for HTTP server.
|
|
23
31
|
cache_size: Size of file cache, i.e. number of files to cache.
|
|
24
32
|
max_file_size: Maximum file size in MB.
|
|
33
|
+
token: Shared secret required in the "Authorization: Bearer <token>" header for
|
|
34
|
+
download/upload access. If None (default), no auth is enforced.
|
|
25
35
|
"""
|
|
26
36
|
Module.__init__(self, **kwargs)
|
|
27
37
|
|
|
@@ -31,6 +41,7 @@ class HttpFileCache(Module):
|
|
|
31
41
|
self._port = port
|
|
32
42
|
self._cache_size = cache_size
|
|
33
43
|
self._max_file_size = max_file_size * 1024 * 1024
|
|
44
|
+
self._token = token
|
|
34
45
|
|
|
35
46
|
# define web server
|
|
36
47
|
self._app = web.Application(client_max_size=self._max_file_size)
|
|
@@ -38,6 +49,7 @@ class HttpFileCache(Module):
|
|
|
38
49
|
[
|
|
39
50
|
web.get("/ping", self.ping_handler),
|
|
40
51
|
web.get("/{filename}", self.download_handler),
|
|
52
|
+
web.options("/{filename}", self.options_handler),
|
|
41
53
|
web.post("/", self.upload_handler),
|
|
42
54
|
]
|
|
43
55
|
)
|
|
@@ -67,6 +79,19 @@ class HttpFileCache(Module):
|
|
|
67
79
|
"""Whether the server is started."""
|
|
68
80
|
return self._is_listening
|
|
69
81
|
|
|
82
|
+
def _check_auth(self, request: web.Request) -> None:
|
|
83
|
+
"""Raises HTTPUnauthorized if a token is configured and the request doesn't carry it.
|
|
84
|
+
|
|
85
|
+
Args:
|
|
86
|
+
request: Request to check.
|
|
87
|
+
"""
|
|
88
|
+
if self._token is None:
|
|
89
|
+
return
|
|
90
|
+
prefix = "Bearer "
|
|
91
|
+
header = request.headers.get("Authorization", "")
|
|
92
|
+
if not header.startswith(prefix) or not hmac.compare_digest(header[len(prefix) :], self._token):
|
|
93
|
+
raise web.HTTPUnauthorized()
|
|
94
|
+
|
|
70
95
|
async def ping_handler(self, request: web.Request) -> web.Response:
|
|
71
96
|
"""Handles GET access to /ping for testing connectivity.
|
|
72
97
|
|
|
@@ -76,7 +101,24 @@ class HttpFileCache(Module):
|
|
|
76
101
|
Returns:
|
|
77
102
|
Response with a JSON status.
|
|
78
103
|
"""
|
|
79
|
-
return web.json_response({"status": "ok"})
|
|
104
|
+
return web.json_response({"status": "ok"}, headers={"Access-Control-Allow-Origin": "*"})
|
|
105
|
+
|
|
106
|
+
async def options_handler(self, request: web.Request) -> web.Response:
|
|
107
|
+
"""Handles OPTIONS access to /{filename} for CORS preflight requests.
|
|
108
|
+
|
|
109
|
+
Args:
|
|
110
|
+
request: Request to respond to.
|
|
111
|
+
|
|
112
|
+
Returns:
|
|
113
|
+
Empty response with CORS headers.
|
|
114
|
+
"""
|
|
115
|
+
return web.Response(
|
|
116
|
+
headers={
|
|
117
|
+
"Access-Control-Allow-Origin": "*",
|
|
118
|
+
"Access-Control-Allow-Methods": "GET",
|
|
119
|
+
"Access-Control-Allow-Headers": "Authorization",
|
|
120
|
+
}
|
|
121
|
+
)
|
|
80
122
|
|
|
81
123
|
async def download_handler(self, request: web.Request) -> web.Response:
|
|
82
124
|
"""Handles GET access to /{filename} and returns image.
|
|
@@ -87,6 +129,7 @@ class HttpFileCache(Module):
|
|
|
87
129
|
Returns:
|
|
88
130
|
Response containing image.
|
|
89
131
|
"""
|
|
132
|
+
self._check_auth(request)
|
|
90
133
|
|
|
91
134
|
# get filename
|
|
92
135
|
filename = request.match_info["filename"]
|
|
@@ -98,7 +141,7 @@ class HttpFileCache(Module):
|
|
|
98
141
|
|
|
99
142
|
# send it
|
|
100
143
|
log.info("Serving file %s.", filename)
|
|
101
|
-
return web.Response(body=data)
|
|
144
|
+
return web.Response(body=data, headers={"Access-Control-Allow-Origin": "*"})
|
|
102
145
|
|
|
103
146
|
async def upload_handler(self, request: web.Request) -> web.Response:
|
|
104
147
|
"""Handles PUSH access to /, stores image and returns filename.
|
|
@@ -109,6 +152,7 @@ class HttpFileCache(Module):
|
|
|
109
152
|
Returns:
|
|
110
153
|
Response containing filename.
|
|
111
154
|
"""
|
|
155
|
+
self._check_auth(request)
|
|
112
156
|
|
|
113
157
|
# read multipart data
|
|
114
158
|
reader = await request.multipart()
|
|
@@ -23,8 +23,7 @@ class HttpFile(BufferedFile):
|
|
|
23
23
|
mode: str = "r",
|
|
24
24
|
download: str | None = None,
|
|
25
25
|
upload: str | None = None,
|
|
26
|
-
|
|
27
|
-
password: str | None = None,
|
|
26
|
+
token: str | None = None,
|
|
28
27
|
verify_tls: bool = False,
|
|
29
28
|
timeout: int = 30,
|
|
30
29
|
**kwargs: Any,
|
|
@@ -36,8 +35,7 @@ class HttpFile(BufferedFile):
|
|
|
36
35
|
mode: Open mode (r/w).
|
|
37
36
|
download: Base URL for downloading files. If None, no read access possible.
|
|
38
37
|
upload: Base URL for uploading files. If None, no write access possible.
|
|
39
|
-
|
|
40
|
-
password: Password for accessing the HTTP server.
|
|
38
|
+
token: Shared secret sent as "Authorization: Bearer <token>" to the HTTP server.
|
|
41
39
|
verify_tls: Whether to verify TLS certificates.
|
|
42
40
|
timeout: Timeout in seconds for uploading/downloading files.
|
|
43
41
|
"""
|
|
@@ -49,9 +47,7 @@ class HttpFile(BufferedFile):
|
|
|
49
47
|
self._timeout = aiohttp.ClientTimeout(total=timeout)
|
|
50
48
|
|
|
51
49
|
# auth
|
|
52
|
-
self.
|
|
53
|
-
if username is not None and password is not None:
|
|
54
|
-
self._auth = aiohttp.BasicAuth(username, password)
|
|
50
|
+
self._headers = {"Authorization": f"Bearer {token}"} if token is not None else {}
|
|
55
51
|
|
|
56
52
|
# filename is not allowed to start with a / or contain ..
|
|
57
53
|
if name.startswith("/") or ".." in name:
|
|
@@ -91,7 +87,7 @@ class HttpFile(BufferedFile):
|
|
|
91
87
|
|
|
92
88
|
# do request
|
|
93
89
|
async with aiohttp.ClientSession() as session:
|
|
94
|
-
async with session.get(self.url,
|
|
90
|
+
async with session.get(self.url, headers=self._headers, timeout=self._timeout) as response:
|
|
95
91
|
# check response
|
|
96
92
|
if response.status == 200:
|
|
97
93
|
# get data and return it
|
|
@@ -165,7 +161,9 @@ class HttpFile(BufferedFile):
|
|
|
165
161
|
async with aiohttp.ClientSession() as session:
|
|
166
162
|
data = aiohttp.FormData()
|
|
167
163
|
data.add_field("file", self._buffer(filename), filename=filename)
|
|
168
|
-
async with session.post(
|
|
164
|
+
async with session.post(
|
|
165
|
+
self._upload_path, headers=self._headers, data=data, timeout=self._timeout
|
|
166
|
+
) as response:
|
|
169
167
|
if response.status == 401:
|
|
170
168
|
log.error("Wrong credentials for uploading file.")
|
|
171
169
|
raise FileNotFoundError
|
|
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.dev59 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/xep_0009_timeout/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/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.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/_daobackgroundremover.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/annotation/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/annotation/_pillow.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/annotation/circle.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/annotation/crosshair.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/annotation/text.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/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.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/astrometry/astrometry.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/astrometry/dotnet.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/calibration/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/calibration/calibration.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/detection/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/detection/daophot.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/detection/pysep.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/detection/simpledisk.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/exptime/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/exptime/exptime.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/addfitsheaders.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/grayscale.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/httpserver.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/normalize.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/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.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/misc/circularmask.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/misc/createfilename.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/misc/imagesourcefilter.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/misc/removebackground.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/modules/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/modules/getfitsheaders.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/astrometry.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/brighteststar.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/dummyoffsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/dummyskyoffsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/fitsheader.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/offsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/pixeloffsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/projected.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/spilled_light.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/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.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/photometry/photometry.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/photometry/photutil.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev59 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/photometry/pysep.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|