pyobs-core 2.0.0.dev92__tar.gz → 2.0.0.dev93__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.dev92 → pyobs_core-2.0.0.dev93}/PKG-INFO +1 -1
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/image/imagewatcher.py +9 -1
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/telescope/basetelescope.py +43 -10
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/vfs/localfile.py +70 -32
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyproject.toml +1 -1
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/.gitignore +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/LICENSE +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/application.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/background_task.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/cli/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/cli/_cli.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/cli/pyobs.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/cli/pyobsd.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/cli/pyobsw.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/comm/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/comm/comm.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/comm/commlogging.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/comm/dummy/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/comm/dummy/dummycomm.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/comm/local/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/comm/local/localcomm.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/comm/local/localnetwork.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/comm/proxy.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/comm/xmpp/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/comm/xmpp/rpc.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/comm/xmpp/serializer.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/comm/xmpp/xep_0009/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/comm/xmpp/xep_0009/binding.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/comm/xmpp/xep_0009/rpc.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/comm/xmpp/xep_0009_timeout/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/comm/xmpp/xep_0009_timeout/rpc.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/comm/xmpp/xep_0009_timeout/stanza/RPC.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/comm/xmpp/xep_0009_timeout/stanza/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/comm/xmpp/xmppclient.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/comm/xmpp/xmppcomm.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/events/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/events/badweather.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/events/event.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/events/exposurestatuschanged.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/events/filterchanged.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/events/focusfound.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/events/goodweather.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/events/log.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/events/modechanged.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/events/moduleclosed.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/events/moduleopened.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/events/motionstatuschanged.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/events/move.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/events/newimage.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/events/newspectrum.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/events/offsets.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/events/roofclosing.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/events/roofopened.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/events/taskfailed.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/events/taskfinished.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/events/taskstarted.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/events/testevent.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/image.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/meta/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/meta/altazoffsets.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/meta/exptime.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/meta/genericoffset.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/meta/onskydistance.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/meta/pixeloffsets.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/meta/radecoffsets.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/meta/skyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processor.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/_daobackgroundremover.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/annotation/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/annotation/_pillow.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/annotation/circle.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/annotation/crosshair.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/annotation/text.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/astrometry/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/astrometry/_dotnet_request.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/astrometry/_dotnet_request_builder.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/astrometry/_dotnet_request_logger.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/astrometry/_dotnet_response_saver.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/astrometry/astrometry.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/astrometry/dotnet.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/calibration/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/calibration/_calibration_cache.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/calibration/_ccddata_calibrator.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/calibration/calibration.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/detection/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/detection/_pysep_stats_calculator.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/detection/_source_catalog.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/detection/daophot.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/detection/pysep.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/detection/simpledisk.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/detection/sourcedetection.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/exptime/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/exptime/exptime.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/exptime/star.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/image/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/image/addfitsheaders.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/image/download.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/image/flip.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/image/grayscale.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/image/httpserver.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/image/normalize.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/image/save.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/image/saveimage.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/image/smooth.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/image/softbin.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/misc/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/misc/addmask.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/misc/catalogcircularmask.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/misc/circularmask.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/misc/createfilename.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/misc/imagesourcefilter.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/misc/removebackground.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/modules/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/modules/getfitsheaders.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/offsets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/offsets/astrometry.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/offsets/brighteststar.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/offsets/brighteststar_guiding.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/offsets/dummyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/offsets/dummyskyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/offsets/fitsheader.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/offsets/offsets.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/offsets/pixeloffsets.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/offsets/projected.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/offsets/spilled_light.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/photometry/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/photometry/_photometry_calculator.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/photometry/_photutil_aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/photometry/_sep_aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/photometry/aperture_photometry.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/photometry/photometry.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/photometry/photutil.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/photometry/pysep.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/wcs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/wcs/solarhelioprojective.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IAbortable.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IAcquisition.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IAutoFocus.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IAutoGuiding.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IAutonomous.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IBinning.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/ICalibrate.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/ICamera.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IConfig.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/ICooling.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IData.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IDataSequence.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IDome.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IExposure.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IExposureTime.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IFilters.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IFitsHeaderAfter.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IFitsHeaderBefore.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IFlatField.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IFocusModel.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IFocuser.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IGain.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IImageFormat.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IImageType.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IMode.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IModule.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IMotion.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IMultiFiber.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IOffsetsAltAz.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IOffsetsRaDec.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IPointingAltAz.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IPointingBody.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IPointingHeliocentricPolar.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IPointingHeliographicStonyhurst.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IPointingHelioprojective.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IPointingOrbitalElements.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IPointingRaDec.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IPointingSeries.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IReady.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IRoof.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IRotation.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IRunnable.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IRunning.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IScriptRunner.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/ISpectrograph.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IStartStop.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IStructuredConfig.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/ISyncTarget.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/ITelescope.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/ITemperatures.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/ITrackingMode.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/ITrackingRate.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IVideo.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IWeather.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/IWindow.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/interfaces/interface.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/mixins/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/mixins/camerasettings.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/mixins/fitsheader.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/mixins/fitsnamespace.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/mixins/follow.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/mixins/motionstatus.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/mixins/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/mixins/waitformotion.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/mixins/weatheraware.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/camera/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/camera/adaptive.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/camera/basecamera.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/camera/basespectrograph.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/camera/basevideo.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/camera/dummycamera.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/camera/dummyspectrograph.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/camera/dummyvideo.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/camera/pipelinecamera.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/flatfield/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/flatfield/flatfield.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/flatfield/pointing.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/flatfield/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/focus/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/focus/dummyautofocus.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/focus/focusmodel.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/focus/focusseries.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/image/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/image/imagewriter.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/image/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/image/seeing.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/module.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/pointing/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/pointing/_base.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/pointing/_baseguiding.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/pointing/acquisition.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/pointing/autoguiding.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/pointing/dummyacquisition.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/pointing/dummyguiding.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/pointing/guidingstatistics/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/pointing/guidingstatistics/guidingstatistics.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/pointing/guidingstatistics/pixeloffset.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/pointing/guidingstatistics/skyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/pointing/guidingstatistics/uptime.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/pointing/scienceframeguiding.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/robotic/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/robotic/mastermind.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/robotic/pointing.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/robotic/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/robotic/scriptrunner.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/roof/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/roof/basedome.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/roof/baseroof.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/roof/dummyroof.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/telescope/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/telescope/_dummytelescopebase.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/telescope/dummyaltaztelescope.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/telescope/dummyradectelescope.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/telescope/dummysolartelescope.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/test/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/test/standalone.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/utils/dummymode.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/utils/fluentlogger.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/utils/httpfilecache.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/utils/kiosk.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/utils/matrix.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/utils/stellarium.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/utils/telegram.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/utils/trigger.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/weather/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/weather/mockweather.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/weather/weather.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/weather/weather_api.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/modules/weather/weather_state.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/object.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/py.typed +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/observation.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/_executor.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/astroplanscheduler.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/constraints/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/constraints/airmassconstraint.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/constraints/constraint.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/constraints/moonilluminationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/constraints/moonseparationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/constraints/solarelevationconstraint.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/constraints/timeconstraint.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/dataprovider.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/merits/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/merits/aftertime.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/merits/beforetime.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/merits/constant.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/merits/follow.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/merits/interval.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/merits/merit.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/merits/pernight.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/merits/random.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/merits/timewindow.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/merits/transit.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/observationarchiveevolution.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/ondemandscheduler.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/targets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/targets/dynamictarget.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/targets/heliocentricpolartarget.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/targets/helioprojectivetarget.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/targets/picker/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/targets/picker/csvpicker.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/targets/picker/picker.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/targets/siderealtarget.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/targets/target.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scheduler/taskscheduler.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scripts/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scripts/calibration/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scripts/calibration/darkbias.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scripts/calibration/pointing.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scripts/calibration/skyflats.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scripts/control/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scripts/control/cases.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scripts/control/conditional.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scripts/control/parallel.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scripts/control/selector.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scripts/control/sequential.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scripts/exceptions.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scripts/imaging/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scripts/imaging/autofocus.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scripts/imaging/imaging.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scripts/imaging/transitimaging.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scripts/script.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scripts/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scripts/utils/callmodule.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scripts/utils/debugtrigger.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/scripts/utils/log.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/backend/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/backend/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/backend/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/filesystem/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/filesystem/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/filesystem/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/lco/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/lco/_portal.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/lco/_schedulereader.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/lco/_schedulewriter.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/lco/configdb.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/lco/mockobservationarchive.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/lco/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/lco/scripts/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/lco/scripts/autofocus.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/lco/scripts/default.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/lco/scripts/script.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/lco/task.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/lco/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/lco/taskrunner.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/memory/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/memory/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/memory/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/observationarchive.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/storage/taskarchive.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/task.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/taskrunner.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/utils/archive/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/utils/archive/archive.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/utils/archive/local_archive.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/utils/archive/pyobs_archive.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/utils/exptime/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/utils/exptime/exptime.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/utils/exptime/stellarexptime.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/utils/skyflats/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/utils/skyflats/exptimeeval.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/utils/skyflats/flatfielder.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/utils/skyflats/pointing/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/utils/skyflats/pointing/base.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/utils/skyflats/pointing/static.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/utils/skyflats/priorities/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/utils/skyflats/priorities/archive.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/utils/skyflats/priorities/base.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/utils/skyflats/priorities/const.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/robotic/utils/skyflats/scheduler.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/average.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/cache.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/config.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/config_schema.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/coordinates.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/curvefit.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/enums.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/exceptions.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/fits.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/focusseries/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/focusseries/base.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/focusseries/photometry.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/focusseries/projection.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/grids/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/grids/filters.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/grids/grid.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/grids/gridnode.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/grids/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/gui/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/gui/camera/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/gui/camera/binningwidget.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/gui/camera/datadisplaywidget.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/gui/camera/exposewidget.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/gui/camera/exposuretimewidget.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/gui/camera/imageformatwidget.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/gui/camera/listpickerdialog.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/gui/camera/windowingwidget.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/http.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/influxdb.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/logger.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/logging/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/logging/context.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/logging/resolvableerror.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/modulegui.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/offsets/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/offsets/applyaltazoffsets.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/offsets/applyoffsets.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/offsets/applyradecoffsets.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/parallel.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/pipeline/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/pipeline/pipeline.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/pipeline/progress.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/pipeline/reduction.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/pipeline/reduction_base.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/publisher/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/publisher/csv.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/publisher/http.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/publisher/log.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/publisher/multi.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/publisher/publisher.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/serialization.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/shellcommand.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/threads/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/threads/lockwithabort.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/time.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/units.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/utils/versions.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/version.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/vfs/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/vfs/archivefile.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/vfs/bufferedfile.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/vfs/file.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/vfs/filelists/__init__.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/vfs/filelists/filelist.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/vfs/filelists/testing.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/vfs/httpfile.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/vfs/memfile.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/vfs/sftpfile.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/vfs/smbfile.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/vfs/sshfile.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/vfs/tempfile.py +0 -0
- {pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/vfs/vfs.py +0 -0
|
@@ -176,7 +176,7 @@ class ImageWatcher(Module):
|
|
|
176
176
|
try:
|
|
177
177
|
with warnings.catch_warnings():
|
|
178
178
|
warnings.simplefilter("ignore", fits.verify.VerifyWarning)
|
|
179
|
-
fits_file = fits.HDUList.fromstring
|
|
179
|
+
fits_file = await asyncio.to_thread(fits.HDUList.fromstring, data)
|
|
180
180
|
except Exception:
|
|
181
181
|
fits_file = None
|
|
182
182
|
|
|
@@ -234,6 +234,10 @@ class ImageWatcher(Module):
|
|
|
234
234
|
"""Can be overwritten by derived classes to do extra processing on files.
|
|
235
235
|
All information are stored in self.current_file and can be checked against the given filename.
|
|
236
236
|
|
|
237
|
+
Note:
|
|
238
|
+
This hook runs on the module's event loop and must not block: no CPU-heavy or
|
|
239
|
+
synchronous I/O here. Offload such work to a thread, e.g. with ``asyncio.to_thread``.
|
|
240
|
+
|
|
237
241
|
Args:
|
|
238
242
|
filename: Input name of original file.
|
|
239
243
|
|
|
@@ -246,6 +250,10 @@ class ImageWatcher(Module):
|
|
|
246
250
|
"""Can be overwritten by derived classes to do clean up after successful copying.
|
|
247
251
|
All information are stored in self.current_file and can be checked against the given filename.
|
|
248
252
|
|
|
253
|
+
Note:
|
|
254
|
+
This hook runs on the module's event loop and must not block: no CPU-heavy or
|
|
255
|
+
synchronous I/O here. Offload such work to a thread, e.g. with ``asyncio.to_thread``.
|
|
256
|
+
|
|
249
257
|
Args:
|
|
250
258
|
filename: Input name of original file.
|
|
251
259
|
"""
|
|
@@ -35,6 +35,27 @@ from pyobs.utils.time import Time
|
|
|
35
35
|
|
|
36
36
|
log = logging.getLogger(__name__)
|
|
37
37
|
|
|
38
|
+
|
|
39
|
+
def _format_ra(ra_deg: float) -> str:
|
|
40
|
+
"""Format an RA in degrees as sexagesimal HH:MM:SS.sss.
|
|
41
|
+
|
|
42
|
+
Deliberately avoids astropy's Angle.to_string(): its vectorized do_format ufunc path emits a
|
|
43
|
+
RuntimeWarning on numpy 2.x, which application.py promotes to an error -- see pyobs-gui commit
|
|
44
|
+
04d39d6 for the same issue and fix.
|
|
45
|
+
"""
|
|
46
|
+
h, rem = divmod(ra_deg / 15.0, 1)
|
|
47
|
+
m, rem = divmod(rem * 60, 1)
|
|
48
|
+
return f"{int(h):02d}:{int(m):02d}:{rem * 60:06.3f}"
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _format_dec(dec_deg: float) -> str:
|
|
52
|
+
"""Format a Dec in degrees as sexagesimal +DD:MM:SS.sss. See _format_ra for why to_string() is avoided."""
|
|
53
|
+
sign = "+" if dec_deg >= 0 else "-"
|
|
54
|
+
d, rem = divmod(abs(dec_deg), 1)
|
|
55
|
+
m, rem = divmod(rem * 60, 1)
|
|
56
|
+
return f"{sign}{int(d):02d}:{int(m):02d}:{rem * 60:06.3f}"
|
|
57
|
+
|
|
58
|
+
|
|
38
59
|
# Gaussian gravitational constant, rad/day, for AU/day/solar-mass units -- encodes the Sun's
|
|
39
60
|
# GM for heliocentric two-body elements, so no per-body mass lookup is needed.
|
|
40
61
|
_GAUSSIAN_GRAVITATIONAL_CONSTANT = 0.01720209895
|
|
@@ -325,6 +346,12 @@ class BaseTelescope(
|
|
|
325
346
|
if not isinstance(self, IPointingRaDec):
|
|
326
347
|
raise exc.NotSupportedError("This telescope does not support RA/Dec pointing.")
|
|
327
348
|
|
|
349
|
+
# reject non-finite coordinates outright -- otherwise NaN/inf silently passes the
|
|
350
|
+
# altitude check below (NaN comparisons are always False) and only surfaces later as an
|
|
351
|
+
# opaque RuntimeWarning-turned-error out of the sexagesimal formatting
|
|
352
|
+
if not (math.isfinite(ra) and math.isfinite(dec)):
|
|
353
|
+
raise exc.InvalidArgumentError(f"RA/Dec must be finite, got ra={ra}, dec={dec}.")
|
|
354
|
+
|
|
328
355
|
# do nothing, if initializing, parking or parked
|
|
329
356
|
if self.motion_status() in [MotionStatus.INITIALIZING, MotionStatus.PARKING, MotionStatus.PARKED]:
|
|
330
357
|
return
|
|
@@ -354,9 +381,9 @@ class BaseTelescope(
|
|
|
354
381
|
await self._change_motion_status(MotionStatus.SLEWING)
|
|
355
382
|
log.info(
|
|
356
383
|
"Moving telescope to RA=%s (%.5f°), Dec=%s (%.5f°)...",
|
|
357
|
-
|
|
384
|
+
_format_ra(ra),
|
|
358
385
|
ra,
|
|
359
|
-
|
|
386
|
+
_format_dec(dec),
|
|
360
387
|
dec,
|
|
361
388
|
)
|
|
362
389
|
await self.comm.send_event(MoveRaDecEvent(ra=ra, dec=dec))
|
|
@@ -418,6 +445,10 @@ class BaseTelescope(
|
|
|
418
445
|
if not isinstance(self, IPointingAltAz):
|
|
419
446
|
raise exc.NotSupportedError("This telescope does not support Alt/Az pointing.")
|
|
420
447
|
|
|
448
|
+
# reject non-finite coordinates outright -- see move_radec for why
|
|
449
|
+
if not (math.isfinite(alt) and math.isfinite(az)):
|
|
450
|
+
raise exc.InvalidArgumentError(f"Alt/Az must be finite, got alt={alt}, az={az}.")
|
|
451
|
+
|
|
421
452
|
# do nothing, if initializing, parking or parked
|
|
422
453
|
if self.motion_status() in [MotionStatus.INITIALIZING, MotionStatus.PARKING, MotionStatus.PARKED]:
|
|
423
454
|
return
|
|
@@ -760,14 +791,16 @@ class BaseTelescope(
|
|
|
760
791
|
)
|
|
761
792
|
hdr["AIRMASS"] = FitsHeaderEntry(float(coords_alt_az.secz.value), "Airmass of observation start")
|
|
762
793
|
|
|
763
|
-
# convert to sexagesimal
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
794
|
+
# convert to sexagesimal -- _position_radec can be NaN for an uninitialized telescope, and
|
|
795
|
+
# unlike to_string() the manual formatters below raise on a non-finite value rather than
|
|
796
|
+
# just warning, so skip them instead of emitting bogus headers
|
|
797
|
+
if (
|
|
798
|
+
coords_ra_dec is not None
|
|
799
|
+
and math.isfinite(coords_ra_dec.ra.degree)
|
|
800
|
+
and math.isfinite(coords_ra_dec.dec.degree)
|
|
801
|
+
):
|
|
802
|
+
hdr["RA"] = FitsHeaderEntry(_format_ra(float(coords_ra_dec.ra.degree)), "Right ascension of object")
|
|
803
|
+
hdr["DEC"] = FitsHeaderEntry(_format_dec(float(coords_ra_dec.dec.degree)), "Declination of object")
|
|
771
804
|
|
|
772
805
|
# site location
|
|
773
806
|
if self._observer is not None:
|
|
@@ -7,13 +7,55 @@ from typing import IO, Any
|
|
|
7
7
|
from .file import VFSFile
|
|
8
8
|
|
|
9
9
|
|
|
10
|
+
def _open_sync(full_path: str, mode: str, mkdir: bool) -> IO[Any]:
|
|
11
|
+
"""Open a local file, creating parent directories first if needed.
|
|
12
|
+
|
|
13
|
+
Runs on an executor thread off the event loop. Raises ``ValueError`` when ``mkdir`` is
|
|
14
|
+
disabled and the parent directory does not exist.
|
|
15
|
+
"""
|
|
16
|
+
path = os.path.dirname(full_path)
|
|
17
|
+
if not os.path.exists(path):
|
|
18
|
+
if mkdir:
|
|
19
|
+
# exist_ok: this runs on an executor thread, so concurrent opens into the same new
|
|
20
|
+
# sibling directory can race between the exists() check and makedirs() here.
|
|
21
|
+
os.makedirs(path, exist_ok=True)
|
|
22
|
+
else:
|
|
23
|
+
raise ValueError("Cannot write into sub-directory with disabled mkdir option.")
|
|
24
|
+
return open(full_path, mode)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _find_sync(full_path: str, pattern: str) -> list[str]:
|
|
28
|
+
"""Walk ``full_path`` and return the paths of files matching ``pattern``, relative to it."""
|
|
29
|
+
files = []
|
|
30
|
+
for cur, dirnames, filenames in os.walk(full_path):
|
|
31
|
+
for filename in fnmatch.filter(filenames, pattern):
|
|
32
|
+
files += [os.path.relpath(os.path.join(cur, filename), full_path)]
|
|
33
|
+
return files
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def _remove_sync(full_path: str) -> bool:
|
|
37
|
+
"""Remove the file at ``full_path``; return False if it does not exist or is a directory."""
|
|
38
|
+
try:
|
|
39
|
+
os.remove(full_path)
|
|
40
|
+
return True
|
|
41
|
+
except (FileNotFoundError, IsADirectoryError):
|
|
42
|
+
return False
|
|
43
|
+
|
|
44
|
+
|
|
10
45
|
class LocalFile(VFSFile):
|
|
11
|
-
"""Wraps a local file with the virtual file system.
|
|
46
|
+
"""Wraps a local file with the virtual file system.
|
|
47
|
+
|
|
48
|
+
All potentially blocking I/O (open/read/write/close/remove/find/exists) runs on the default
|
|
49
|
+
executor, keeping the event loop responsive even on slow (e.g. network-mounted) paths.
|
|
50
|
+
"""
|
|
12
51
|
|
|
13
52
|
__module__ = "pyobs.vfs"
|
|
14
53
|
|
|
15
54
|
def __init__(self, name: str, mode: str = "r", root: str | None = None, mkdir: bool = True, **kwargs: Any):
|
|
16
|
-
"""
|
|
55
|
+
"""Create a new local file.
|
|
56
|
+
|
|
57
|
+
Only validates the path here; the file itself is opened in ``__aenter__`` off the event
|
|
58
|
+
loop, so construction stays cheap and never blocks.
|
|
17
59
|
|
|
18
60
|
Args:
|
|
19
61
|
name: Name of file.
|
|
@@ -32,35 +74,36 @@ class LocalFile(VFSFile):
|
|
|
32
74
|
|
|
33
75
|
# build filename
|
|
34
76
|
self.filename = name
|
|
35
|
-
|
|
77
|
+
self._full_path = os.path.join(root, name)
|
|
78
|
+
self._mode = mode
|
|
79
|
+
self._mkdir = mkdir
|
|
80
|
+
self.fd: IO[Any] | None = None
|
|
36
81
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
else:
|
|
43
|
-
raise ValueError("Cannot write into sub-directory with disabled mkdir option.")
|
|
44
|
-
|
|
45
|
-
# file object
|
|
46
|
-
self.fd: IO[Any] = open(full_path, mode)
|
|
82
|
+
async def __aenter__(self) -> "LocalFile":
|
|
83
|
+
"""Open the file on an executor thread, keeping the event loop responsive."""
|
|
84
|
+
loop = asyncio.get_running_loop()
|
|
85
|
+
self.fd = await loop.run_in_executor(None, _open_sync, self._full_path, self._mode, self._mkdir)
|
|
86
|
+
return self
|
|
47
87
|
|
|
48
88
|
async def close(self) -> None:
|
|
49
89
|
if self.fd:
|
|
50
|
-
|
|
90
|
+
loop = asyncio.get_running_loop()
|
|
91
|
+
await loop.run_in_executor(None, self.fd.close)
|
|
51
92
|
|
|
52
93
|
async def read(self, n: int = -1) -> str | bytes:
|
|
53
94
|
if self.fd is None:
|
|
54
|
-
raise OSError
|
|
55
|
-
|
|
95
|
+
raise OSError("LocalFile is not open; use 'async with' to open it before reading.")
|
|
96
|
+
loop = asyncio.get_running_loop()
|
|
97
|
+
buf = await loop.run_in_executor(None, self.fd.read, n)
|
|
56
98
|
if not isinstance(buf, str) and not isinstance(buf, bytes):
|
|
57
99
|
raise OSError
|
|
58
100
|
return buf
|
|
59
101
|
|
|
60
102
|
async def write(self, s: str | bytes) -> None:
|
|
61
103
|
if self.fd is None:
|
|
62
|
-
raise OSError
|
|
63
|
-
|
|
104
|
+
raise OSError("LocalFile is not open; use 'async with' to open it before writing.")
|
|
105
|
+
loop = asyncio.get_running_loop()
|
|
106
|
+
await loop.run_in_executor(None, self.fd.write, s)
|
|
64
107
|
|
|
65
108
|
@staticmethod
|
|
66
109
|
async def local_path(path: str, **kwargs: Any) -> str:
|
|
@@ -120,12 +163,9 @@ class LocalFile(VFSFile):
|
|
|
120
163
|
# build full path
|
|
121
164
|
full_path = os.path.join(root, path)
|
|
122
165
|
|
|
123
|
-
#
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
for filename in fnmatch.filter(filenames, pattern):
|
|
127
|
-
files += [os.path.relpath(os.path.join(cur, filename), full_path)]
|
|
128
|
-
return files
|
|
166
|
+
# walk directories off the event loop
|
|
167
|
+
loop = asyncio.get_running_loop()
|
|
168
|
+
return await loop.run_in_executor(None, _find_sync, full_path, pattern)
|
|
129
169
|
|
|
130
170
|
@staticmethod
|
|
131
171
|
async def remove(path: str, *args: Any, **kwargs: Any) -> bool:
|
|
@@ -141,13 +181,10 @@ class LocalFile(VFSFile):
|
|
|
141
181
|
# get root from kwargs
|
|
142
182
|
root = kwargs["root"]
|
|
143
183
|
|
|
144
|
-
# build full path and remove
|
|
184
|
+
# build full path and remove off the event loop
|
|
145
185
|
full_path = os.path.join(root, path)
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
return True
|
|
149
|
-
except (FileNotFoundError, IsADirectoryError):
|
|
150
|
-
return False
|
|
186
|
+
loop = asyncio.get_running_loop()
|
|
187
|
+
return await loop.run_in_executor(None, _remove_sync, full_path)
|
|
151
188
|
|
|
152
189
|
@classmethod
|
|
153
190
|
async def exists(cls, path: str, root: str = "", *args: Any, **kwargs: Any) -> bool:
|
|
@@ -164,8 +201,9 @@ class LocalFile(VFSFile):
|
|
|
164
201
|
# build full path
|
|
165
202
|
full_path = os.path.join(root, path)
|
|
166
203
|
|
|
167
|
-
# check
|
|
168
|
-
|
|
204
|
+
# check off the event loop
|
|
205
|
+
loop = asyncio.get_running_loop()
|
|
206
|
+
return await loop.run_in_executor(None, os.path.exists, full_path)
|
|
169
207
|
|
|
170
208
|
|
|
171
209
|
__all__ = ["LocalFile"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.dev92 → pyobs_core-2.0.0.dev93}/pyobs/comm/xmpp/xep_0009_timeout/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/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.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/_daobackgroundremover.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/annotation/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/annotation/_pillow.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/annotation/circle.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/annotation/crosshair.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/annotation/text.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/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.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/astrometry/astrometry.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/astrometry/dotnet.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/calibration/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/calibration/calibration.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/detection/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/detection/daophot.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/detection/pysep.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/detection/simpledisk.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/exptime/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/exptime/exptime.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/image/addfitsheaders.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/image/grayscale.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/image/httpserver.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/image/normalize.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/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.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/misc/circularmask.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/misc/createfilename.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/misc/imagesourcefilter.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/misc/removebackground.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/modules/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/modules/getfitsheaders.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/offsets/__init__.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/offsets/astrometry.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/offsets/brighteststar.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/offsets/dummyoffsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/offsets/dummyskyoffsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/offsets/fitsheader.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/offsets/offsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/offsets/pixeloffsets.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/offsets/projected.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/offsets/spilled_light.py
RENAMED
|
File without changes
|
{pyobs_core-2.0.0.dev92 → pyobs_core-2.0.0.dev93}/pyobs/images/processors/photometry/__init__.py
RENAMED
|
File without changes
|