pyobs-core 2.0.0.dev60__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.dev60 → pyobs_core-2.0.0.dev61}/PKG-INFO +1 -1
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/utils/httpfilecache.py +47 -3
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/vfs/httpfile.py +7 -9
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyproject.toml +1 -1
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/.gitignore +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/LICENSE +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/application.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/background_task.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/cli/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/cli/_cli.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/cli/pyobs.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/cli/pyobsd.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/cli/pyobsw.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/comm/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/comm/comm.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/comm/commlogging.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/comm/dummy/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/comm/dummy/dummycomm.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/comm/local/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/comm/local/localcomm.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/comm/local/localnetwork.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/comm/proxy.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/rpc.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/serializer.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/xep_0009/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/xep_0009/binding.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/xep_0009/rpc.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/xep_0009_timeout/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/xep_0009_timeout/rpc.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/xep_0009_timeout/stanza/RPC.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/xep_0009_timeout/stanza/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/xmppclient.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/comm/xmpp/xmppcomm.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/events/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/events/badweather.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/events/event.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/events/exposurestatuschanged.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/events/filterchanged.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/events/focusfound.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/events/goodweather.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/events/log.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/events/modechanged.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/events/moduleclosed.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/events/moduleopened.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/events/motionstatuschanged.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/events/move.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/events/newimage.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/events/newspectrum.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/events/offsets.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/events/roofclosing.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/events/roofopened.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/events/taskfailed.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/events/taskfinished.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/events/taskstarted.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/events/testevent.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/image.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/meta/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/meta/altazoffsets.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/meta/exptime.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/meta/genericoffset.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/meta/onskydistance.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/meta/pixeloffsets.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/meta/radecoffsets.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/meta/skyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processor.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/_daobackgroundremover.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/annotation/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/annotation/_pillow.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/annotation/circle.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/annotation/crosshair.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/annotation/text.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/astrometry/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/astrometry/_dotnet_request.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/astrometry/_dotnet_request_builder.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/astrometry/_dotnet_request_logger.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/astrometry/_dotnet_response_saver.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/astrometry/astrometry.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/astrometry/dotnet.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/calibration/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/calibration/_calibration_cache.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/calibration/_ccddata_calibrator.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/calibration/calibration.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/detection/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/detection/_pysep_stats_calculator.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/detection/_source_catalog.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/detection/daophot.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/detection/pysep.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/detection/simpledisk.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/detection/sourcedetection.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/exptime/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/exptime/exptime.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/exptime/star.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/addfitsheaders.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/download.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/flip.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/grayscale.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/httpserver.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/normalize.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/save.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/saveimage.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/smooth.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/softbin.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/misc/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/misc/addmask.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/misc/catalogcircularmask.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/misc/circularmask.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/misc/createfilename.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/misc/imagesourcefilter.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/misc/removebackground.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/modules/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/modules/getfitsheaders.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/astrometry.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/brighteststar.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/brighteststar_guiding.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/dummyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/dummyskyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/fitsheader.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/offsets.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/pixeloffsets.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/projected.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/spilled_light.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/photometry/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/photometry/_photometry_calculator.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/photometry/_photutil_aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/photometry/_sep_aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/photometry/aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/photometry/photometry.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/photometry/photutil.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/photometry/pysep.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/wcs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/wcs/solarhelioprojective.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IAbortable.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IAcquisition.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IAutoFocus.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IAutoGuiding.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IAutonomous.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IBinning.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/ICalibrate.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/ICamera.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IConfig.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/ICooling.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IData.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IDataSequence.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IDome.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IExposure.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IExposureTime.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IFilters.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IFitsHeaderAfter.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IFitsHeaderBefore.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IFlatField.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IFocusModel.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IFocuser.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IGain.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IImageFormat.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IImageType.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IMode.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IModule.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IMotion.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IMultiFiber.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IOffsetsAltAz.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IOffsetsRaDec.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IPointingAltAz.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IPointingBody.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IPointingHeliocentricPolar.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IPointingHeliographicStonyhurst.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IPointingHelioprojective.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IPointingOrbitalElements.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IPointingRaDec.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IPointingSeries.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IReady.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IRoof.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IRotation.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IRunnable.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IRunning.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IScriptRunner.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/ISpectrograph.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IStartStop.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IStructuredConfig.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/ISyncTarget.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/ITelescope.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/ITemperatures.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/ITrackingMode.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/ITrackingRate.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IVideo.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IWeather.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/IWindow.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/interfaces/interface.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/mixins/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/mixins/camerasettings.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/mixins/fitsheader.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/mixins/fitsnamespace.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/mixins/follow.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/mixins/motionstatus.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/mixins/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/mixins/waitformotion.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/mixins/weatheraware.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/camera/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/camera/adaptive.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/camera/basecamera.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/camera/basespectrograph.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/camera/basevideo.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/camera/dummycamera.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/camera/dummyspectrograph.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/camera/dummyvideo.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/camera/pipelinecamera.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/flatfield/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/flatfield/flatfield.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/flatfield/pointing.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/flatfield/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/focus/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/focus/dummyautofocus.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/focus/focusmodel.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/focus/focusseries.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/image/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/image/imagewatcher.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/image/imagewriter.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/image/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/image/seeing.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/module.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/_base.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/_baseguiding.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/acquisition.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/autoguiding.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/dummyacquisition.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/dummyguiding.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/guidingstatistics/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/guidingstatistics/guidingstatistics.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/guidingstatistics/pixeloffset.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/guidingstatistics/skyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/guidingstatistics/uptime.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/pointing/scienceframeguiding.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/robotic/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/robotic/mastermind.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/robotic/pointing.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/robotic/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/robotic/scriptrunner.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/roof/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/roof/basedome.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/roof/baseroof.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/roof/dummyroof.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/telescope/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/telescope/_dummytelescopebase.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/telescope/basetelescope.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/telescope/dummyaltaztelescope.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/telescope/dummyradectelescope.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/telescope/dummysolartelescope.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/test/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/test/standalone.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/utils/dummymode.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/utils/fluentlogger.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/utils/kiosk.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/utils/matrix.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/utils/stellarium.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/utils/telegram.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/utils/trigger.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/weather/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/weather/mockweather.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/weather/weather.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/weather/weather_api.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/modules/weather/weather_state.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/object.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/py.typed +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/observation.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/_executor.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/astroplanscheduler.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/constraints/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/constraints/airmassconstraint.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/constraints/constraint.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/constraints/moonilluminationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/constraints/moonseparationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/constraints/solarelevationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/constraints/timeconstraint.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/dataprovider.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/merits/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/merits/aftertime.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/merits/beforetime.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/merits/constant.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/merits/follow.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/merits/interval.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/merits/merit.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/merits/pernight.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/merits/random.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/merits/timewindow.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/merits/transit.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/observationarchiveevolution.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/ondemandscheduler.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/targets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/targets/dynamictarget.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/targets/heliocentricpolartarget.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/targets/helioprojectivetarget.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/targets/picker/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/targets/picker/csvpicker.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/targets/picker/picker.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/targets/siderealtarget.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/targets/target.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scheduler/taskscheduler.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/calibration/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/calibration/darkbias.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/calibration/pointing.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/calibration/skyflats.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/control/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/control/cases.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/control/conditional.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/control/parallel.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/control/selector.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/control/sequential.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/exceptions.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/imaging/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/imaging/autofocus.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/imaging/imaging.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/imaging/transitimaging.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/script.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/utils/callmodule.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/utils/debugtrigger.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/scripts/utils/log.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/backend/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/backend/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/backend/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/filesystem/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/filesystem/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/filesystem/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/_portal.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/_schedulereader.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/_schedulewriter.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/configdb.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/mockobservationarchive.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/scripts/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/scripts/autofocus.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/scripts/default.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/scripts/script.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/task.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/lco/taskrunner.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/memory/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/memory/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/memory/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/storage/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/task.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/taskrunner.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/archive/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/archive/archive.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/archive/local_archive.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/archive/pyobs_archive.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/exptime/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/exptime/exptime.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/exptime/stellarexptime.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/skyflats/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/skyflats/exptimeeval.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/skyflats/flatfielder.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/skyflats/pointing/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/skyflats/pointing/base.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/skyflats/pointing/static.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/skyflats/priorities/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/skyflats/priorities/archive.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/skyflats/priorities/base.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/skyflats/priorities/const.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/robotic/utils/skyflats/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/average.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/cache.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/config.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/config_schema.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/coordinates.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/curvefit.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/enums.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/exceptions.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/fits.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/focusseries/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/focusseries/base.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/focusseries/photometry.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/focusseries/projection.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/grids/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/grids/filters.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/grids/grid.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/grids/gridnode.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/grids/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/gui/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/gui/camera/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/gui/camera/binningwidget.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/gui/camera/datadisplaywidget.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/gui/camera/exposewidget.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/gui/camera/exposuretimewidget.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/gui/camera/imageformatwidget.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/gui/camera/listpickerdialog.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/gui/camera/windowingwidget.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/http.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/influxdb.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/logger.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/logging/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/logging/context.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/logging/resolvableerror.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/modulegui.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/offsets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/offsets/applyaltazoffsets.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/offsets/applyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/offsets/applyradecoffsets.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/parallel.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/pipeline/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/pipeline/night.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/pipeline/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/publisher/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/publisher/csv.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/publisher/http.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/publisher/log.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/publisher/multi.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/publisher/publisher.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/serialization.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/shellcommand.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/threads/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/threads/lockwithabort.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/time.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/utils/units.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/version.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/vfs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/vfs/archivefile.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/vfs/bufferedfile.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/vfs/file.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/vfs/filelists/__init__.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/vfs/filelists/filelist.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/vfs/filelists/testing.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/vfs/localfile.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/vfs/memfile.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/vfs/sftpfile.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/vfs/smbfile.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/vfs/sshfile.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/vfs/tempfile.py +0 -0
- {pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/vfs/vfs.py +0 -0
|
@@ -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
|
|
File without changes
|
{pyobs_core-2.0.0.dev60 → 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.dev60 → 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.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/_daobackgroundremover.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/annotation/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/annotation/_pillow.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/annotation/circle.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/annotation/crosshair.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/annotation/text.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → 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.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/astrometry/astrometry.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/astrometry/dotnet.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → 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.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/calibration/calibration.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → 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.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/detection/daophot.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/detection/pysep.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/detection/simpledisk.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/exptime/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → 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.dev60 → 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.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/grayscale.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/httpserver.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/image/normalize.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev60 → 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.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/misc/circularmask.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/misc/createfilename.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/misc/imagesourcefilter.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/misc/removebackground.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/modules/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/modules/getfitsheaders.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/astrometry.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/brighteststar.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/dummyoffsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/dummyskyoffsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/fitsheader.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/offsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/pixeloffsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/projected.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/offsets/spilled_light.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → 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.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/photometry/photometry.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → pyobs_core-2.0.0.dev61}/pyobs/images/processors/photometry/photutil.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev60 → 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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|