pyobs-core 2.0.0.dev95__tar.gz → 2.0.0.dev98__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.
Files changed (450) hide show
  1. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/PKG-INFO +1 -1
  2. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/robotic/scheduler.py +1 -1
  3. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/observation.py +6 -0
  4. pyobs_core-2.0.0.dev98/pyobs/robotic/storage/portal/__init__.py +4 -0
  5. {pyobs_core-2.0.0.dev95/pyobs/robotic/storage/backend → pyobs_core-2.0.0.dev98/pyobs/robotic/storage/portal}/observationarchive.py +13 -13
  6. {pyobs_core-2.0.0.dev95/pyobs/robotic/storage/backend → pyobs_core-2.0.0.dev98/pyobs/robotic/storage/portal}/taskarchive.py +16 -16
  7. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/task.py +3 -3
  8. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyproject.toml +1 -1
  9. pyobs_core-2.0.0.dev95/pyobs/robotic/storage/backend/__init__.py +0 -4
  10. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/.gitignore +0 -0
  11. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/LICENSE +0 -0
  12. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/__init__.py +0 -0
  13. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/application.py +0 -0
  14. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/background_task.py +0 -0
  15. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/cli/__init__.py +0 -0
  16. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/cli/_cli.py +0 -0
  17. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/cli/pyobs.py +0 -0
  18. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/cli/pyobsd.py +0 -0
  19. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/cli/pyobsw.py +0 -0
  20. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/comm/__init__.py +0 -0
  21. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/comm/comm.py +0 -0
  22. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/comm/commlogging.py +0 -0
  23. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/comm/dummy/__init__.py +0 -0
  24. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/comm/dummy/dummycomm.py +0 -0
  25. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/comm/local/__init__.py +0 -0
  26. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/comm/local/localcomm.py +0 -0
  27. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/comm/local/localnetwork.py +0 -0
  28. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/comm/proxy.py +0 -0
  29. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/comm/xmpp/__init__.py +0 -0
  30. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/comm/xmpp/rpc.py +0 -0
  31. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/comm/xmpp/serializer.py +0 -0
  32. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/comm/xmpp/xep_0009/__init__.py +0 -0
  33. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/comm/xmpp/xep_0009/binding.py +0 -0
  34. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/comm/xmpp/xep_0009/rpc.py +0 -0
  35. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/comm/xmpp/xep_0009_timeout/__init__.py +0 -0
  36. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/comm/xmpp/xep_0009_timeout/rpc.py +0 -0
  37. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/comm/xmpp/xep_0009_timeout/stanza/RPC.py +0 -0
  38. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/comm/xmpp/xep_0009_timeout/stanza/__init__.py +0 -0
  39. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/comm/xmpp/xmppclient.py +0 -0
  40. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/comm/xmpp/xmppcomm.py +0 -0
  41. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/events/__init__.py +0 -0
  42. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/events/badweather.py +0 -0
  43. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/events/event.py +0 -0
  44. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/events/exposurestatuschanged.py +0 -0
  45. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/events/filterchanged.py +0 -0
  46. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/events/focusfound.py +0 -0
  47. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/events/goodweather.py +0 -0
  48. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/events/log.py +0 -0
  49. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/events/modechanged.py +0 -0
  50. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/events/moduleclosed.py +0 -0
  51. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/events/moduleopened.py +0 -0
  52. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/events/motionstatuschanged.py +0 -0
  53. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/events/move.py +0 -0
  54. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/events/newimage.py +0 -0
  55. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/events/newspectrum.py +0 -0
  56. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/events/offsets.py +0 -0
  57. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/events/roofclosing.py +0 -0
  58. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/events/roofopened.py +0 -0
  59. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/events/taskfailed.py +0 -0
  60. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/events/taskfinished.py +0 -0
  61. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/events/taskstarted.py +0 -0
  62. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/events/testevent.py +0 -0
  63. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/__init__.py +0 -0
  64. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/image.py +0 -0
  65. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/meta/__init__.py +0 -0
  66. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/meta/altazoffsets.py +0 -0
  67. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/meta/exptime.py +0 -0
  68. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/meta/genericoffset.py +0 -0
  69. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/meta/onskydistance.py +0 -0
  70. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/meta/pixeloffsets.py +0 -0
  71. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/meta/radecoffsets.py +0 -0
  72. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/meta/skyoffsets.py +0 -0
  73. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processor.py +0 -0
  74. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/__init__.py +0 -0
  75. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/_daobackgroundremover.py +0 -0
  76. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/annotation/__init__.py +0 -0
  77. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/annotation/_pillow.py +0 -0
  78. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/annotation/circle.py +0 -0
  79. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/annotation/crosshair.py +0 -0
  80. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/annotation/text.py +0 -0
  81. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/astrometry/__init__.py +0 -0
  82. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/astrometry/_dotnet_request.py +0 -0
  83. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/astrometry/_dotnet_request_builder.py +0 -0
  84. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/astrometry/_dotnet_request_logger.py +0 -0
  85. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/astrometry/_dotnet_response_saver.py +0 -0
  86. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/astrometry/astrometry.py +0 -0
  87. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/astrometry/dotnet.py +0 -0
  88. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/calibration/__init__.py +0 -0
  89. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/calibration/_calibration_cache.py +0 -0
  90. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/calibration/_ccddata_calibrator.py +0 -0
  91. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/calibration/calibration.py +0 -0
  92. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/detection/__init__.py +0 -0
  93. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/detection/_pysep_stats_calculator.py +0 -0
  94. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/detection/_source_catalog.py +0 -0
  95. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/detection/daophot.py +0 -0
  96. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/detection/pysep.py +0 -0
  97. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/detection/simpledisk.py +0 -0
  98. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/detection/sourcedetection.py +0 -0
  99. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/exptime/__init__.py +0 -0
  100. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/exptime/exptime.py +0 -0
  101. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/exptime/star.py +0 -0
  102. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/image/__init__.py +0 -0
  103. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/image/addfitsheaders.py +0 -0
  104. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/image/download.py +0 -0
  105. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/image/flip.py +0 -0
  106. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/image/grayscale.py +0 -0
  107. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/image/httpserver.py +0 -0
  108. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/image/normalize.py +0 -0
  109. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/image/save.py +0 -0
  110. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/image/saveimage.py +0 -0
  111. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/image/smooth.py +0 -0
  112. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/image/softbin.py +0 -0
  113. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/misc/__init__.py +0 -0
  114. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/misc/addmask.py +0 -0
  115. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/misc/catalogcircularmask.py +0 -0
  116. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/misc/circularmask.py +0 -0
  117. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/misc/createfilename.py +0 -0
  118. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/misc/imagesourcefilter.py +0 -0
  119. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/misc/removebackground.py +0 -0
  120. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/modules/__init__.py +0 -0
  121. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/modules/getfitsheaders.py +0 -0
  122. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/offsets/__init__.py +0 -0
  123. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/offsets/astrometry.py +0 -0
  124. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/offsets/brighteststar.py +0 -0
  125. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/offsets/brighteststar_guiding.py +0 -0
  126. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/offsets/dummyoffsets.py +0 -0
  127. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/offsets/dummyskyoffsets.py +0 -0
  128. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/offsets/fitsheader.py +0 -0
  129. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/offsets/offsets.py +0 -0
  130. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/offsets/pixeloffsets.py +0 -0
  131. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/offsets/projected.py +0 -0
  132. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/offsets/spilled_light.py +0 -0
  133. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/photometry/__init__.py +0 -0
  134. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/photometry/_photometry_calculator.py +0 -0
  135. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/photometry/_photutil_aperture_photometry.py +0 -0
  136. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/photometry/_sep_aperture_photometry.py +0 -0
  137. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/photometry/aperture_photometry.py +0 -0
  138. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/photometry/photometry.py +0 -0
  139. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/photometry/photutil.py +0 -0
  140. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/photometry/pysep.py +0 -0
  141. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/wcs/__init__.py +0 -0
  142. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/images/processors/wcs/solarhelioprojective.py +0 -0
  143. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IAbortable.py +0 -0
  144. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IAcquisition.py +0 -0
  145. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IAutoFocus.py +0 -0
  146. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IAutoGuiding.py +0 -0
  147. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IAutonomous.py +0 -0
  148. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IBinning.py +0 -0
  149. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/ICalibrate.py +0 -0
  150. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/ICamera.py +0 -0
  151. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IConfig.py +0 -0
  152. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/ICooling.py +0 -0
  153. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IData.py +0 -0
  154. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IDataSequence.py +0 -0
  155. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IDome.py +0 -0
  156. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IExposure.py +0 -0
  157. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IExposureTime.py +0 -0
  158. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IFilters.py +0 -0
  159. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IFitsHeaderAfter.py +0 -0
  160. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IFitsHeaderBefore.py +0 -0
  161. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IFlatField.py +0 -0
  162. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IFocusModel.py +0 -0
  163. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IFocuser.py +0 -0
  164. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IGain.py +0 -0
  165. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IImageFormat.py +0 -0
  166. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IImageType.py +0 -0
  167. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IMode.py +0 -0
  168. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IModule.py +0 -0
  169. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IMotion.py +0 -0
  170. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IMultiFiber.py +0 -0
  171. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IOffsetsAltAz.py +0 -0
  172. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IOffsetsRaDec.py +0 -0
  173. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IPointingAltAz.py +0 -0
  174. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IPointingBody.py +0 -0
  175. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IPointingHeliocentricPolar.py +0 -0
  176. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IPointingHeliographicStonyhurst.py +0 -0
  177. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IPointingHelioprojective.py +0 -0
  178. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IPointingOrbitalElements.py +0 -0
  179. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IPointingRaDec.py +0 -0
  180. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IPointingSeries.py +0 -0
  181. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IReady.py +0 -0
  182. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IRoof.py +0 -0
  183. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IRotation.py +0 -0
  184. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IRunnable.py +0 -0
  185. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IRunning.py +0 -0
  186. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IScriptRunner.py +0 -0
  187. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/ISpectrograph.py +0 -0
  188. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IStartStop.py +0 -0
  189. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IStructuredConfig.py +0 -0
  190. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/ISyncTarget.py +0 -0
  191. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/ITelescope.py +0 -0
  192. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/ITemperatures.py +0 -0
  193. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/ITrackingMode.py +0 -0
  194. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/ITrackingRate.py +0 -0
  195. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IVideo.py +0 -0
  196. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IWeather.py +0 -0
  197. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/IWindow.py +0 -0
  198. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/__init__.py +0 -0
  199. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/interfaces/interface.py +0 -0
  200. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/mixins/__init__.py +0 -0
  201. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/mixins/camerasettings.py +0 -0
  202. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/mixins/fitsheader.py +0 -0
  203. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/mixins/fitsnamespace.py +0 -0
  204. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/mixins/follow.py +0 -0
  205. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/mixins/motionstatus.py +0 -0
  206. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/mixins/pipeline.py +0 -0
  207. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/mixins/waitformotion.py +0 -0
  208. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/mixins/weatheraware.py +0 -0
  209. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/__init__.py +0 -0
  210. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/camera/__init__.py +0 -0
  211. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/camera/adaptive.py +0 -0
  212. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/camera/basecamera.py +0 -0
  213. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/camera/basespectrograph.py +0 -0
  214. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/camera/basevideo.py +0 -0
  215. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/camera/dummycamera.py +0 -0
  216. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/camera/dummyspectrograph.py +0 -0
  217. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/camera/dummyvideo.py +0 -0
  218. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/camera/pipelinecamera.py +0 -0
  219. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/flatfield/__init__.py +0 -0
  220. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/flatfield/flatfield.py +0 -0
  221. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/flatfield/pointing.py +0 -0
  222. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/flatfield/scheduler.py +0 -0
  223. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/focus/__init__.py +0 -0
  224. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/focus/dummyautofocus.py +0 -0
  225. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/focus/focusmodel.py +0 -0
  226. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/focus/focusseries.py +0 -0
  227. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/image/__init__.py +0 -0
  228. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/image/imagewatcher.py +0 -0
  229. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/image/imagewriter.py +0 -0
  230. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/image/pipeline.py +0 -0
  231. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/image/seeing.py +0 -0
  232. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/module.py +0 -0
  233. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/pointing/__init__.py +0 -0
  234. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/pointing/_base.py +0 -0
  235. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/pointing/_baseguiding.py +0 -0
  236. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/pointing/acquisition.py +0 -0
  237. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/pointing/autoguiding.py +0 -0
  238. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/pointing/dummyacquisition.py +0 -0
  239. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/pointing/dummyguiding.py +0 -0
  240. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/pointing/guidingstatistics/__init__.py +0 -0
  241. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/pointing/guidingstatistics/guidingstatistics.py +0 -0
  242. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/pointing/guidingstatistics/pixeloffset.py +0 -0
  243. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/pointing/guidingstatistics/skyoffsets.py +0 -0
  244. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/pointing/guidingstatistics/uptime.py +0 -0
  245. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/pointing/scienceframeguiding.py +0 -0
  246. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/robotic/__init__.py +0 -0
  247. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/robotic/mastermind.py +0 -0
  248. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/robotic/pointing.py +0 -0
  249. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/robotic/scriptrunner.py +0 -0
  250. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/roof/__init__.py +0 -0
  251. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/roof/basedome.py +0 -0
  252. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/roof/baseroof.py +0 -0
  253. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/roof/dummyroof.py +0 -0
  254. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/telescope/__init__.py +0 -0
  255. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/telescope/_dummytelescopebase.py +0 -0
  256. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/telescope/basetelescope.py +0 -0
  257. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/telescope/dummyaltaztelescope.py +0 -0
  258. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/telescope/dummyradectelescope.py +0 -0
  259. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/telescope/dummysolartelescope.py +0 -0
  260. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/test/__init__.py +0 -0
  261. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/test/standalone.py +0 -0
  262. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/utils/__init__.py +0 -0
  263. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/utils/dummymode.py +0 -0
  264. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/utils/fluentlogger.py +0 -0
  265. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/utils/httpfilecache.py +0 -0
  266. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/utils/kiosk.py +0 -0
  267. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/utils/matrix.py +0 -0
  268. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/utils/stellarium.py +0 -0
  269. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/utils/telegram.py +0 -0
  270. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/utils/trigger.py +0 -0
  271. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/weather/__init__.py +0 -0
  272. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/weather/mockweather.py +0 -0
  273. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/weather/weather.py +0 -0
  274. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/weather/weather_api.py +0 -0
  275. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/modules/weather/weather_state.py +0 -0
  276. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/object.py +0 -0
  277. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/py.typed +0 -0
  278. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/__init__.py +0 -0
  279. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/__init__.py +0 -0
  280. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/_executor.py +0 -0
  281. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/astroplanscheduler.py +0 -0
  282. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/constraints/__init__.py +0 -0
  283. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/constraints/airmassconstraint.py +0 -0
  284. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/constraints/constraint.py +0 -0
  285. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/constraints/moonilluminationconstraint.py +0 -0
  286. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/constraints/moonseparationconstraint.py +0 -0
  287. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/constraints/solarelevationconstraint.py +0 -0
  288. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/constraints/timeconstraint.py +0 -0
  289. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/dataprovider.py +0 -0
  290. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/merits/__init__.py +0 -0
  291. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/merits/aftertime.py +0 -0
  292. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/merits/beforetime.py +0 -0
  293. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/merits/constant.py +0 -0
  294. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/merits/follow.py +0 -0
  295. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/merits/interval.py +0 -0
  296. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/merits/merit.py +0 -0
  297. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/merits/pernight.py +0 -0
  298. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/merits/random.py +0 -0
  299. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/merits/timewindow.py +0 -0
  300. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/merits/transit.py +0 -0
  301. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/observationarchiveevolution.py +0 -0
  302. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/ondemandscheduler.py +0 -0
  303. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/targets/__init__.py +0 -0
  304. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/targets/dynamictarget.py +0 -0
  305. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/targets/heliocentricpolartarget.py +0 -0
  306. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/targets/helioprojectivetarget.py +0 -0
  307. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/targets/picker/__init__.py +0 -0
  308. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/targets/picker/csvpicker.py +0 -0
  309. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/targets/picker/picker.py +0 -0
  310. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/targets/siderealtarget.py +0 -0
  311. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/targets/target.py +0 -0
  312. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scheduler/taskscheduler.py +0 -0
  313. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scripts/__init__.py +0 -0
  314. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scripts/calibration/__init__.py +0 -0
  315. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scripts/calibration/darkbias.py +0 -0
  316. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scripts/calibration/pointing.py +0 -0
  317. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scripts/calibration/skyflats.py +0 -0
  318. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scripts/control/__init__.py +0 -0
  319. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scripts/control/cases.py +0 -0
  320. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scripts/control/conditional.py +0 -0
  321. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scripts/control/parallel.py +0 -0
  322. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scripts/control/selector.py +0 -0
  323. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scripts/control/sequential.py +0 -0
  324. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scripts/exceptions.py +0 -0
  325. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scripts/imaging/__init__.py +0 -0
  326. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scripts/imaging/autofocus.py +0 -0
  327. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scripts/imaging/imaging.py +0 -0
  328. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scripts/imaging/transitimaging.py +0 -0
  329. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scripts/script.py +0 -0
  330. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scripts/utils/__init__.py +0 -0
  331. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scripts/utils/callmodule.py +0 -0
  332. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scripts/utils/debugtrigger.py +0 -0
  333. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/scripts/utils/log.py +0 -0
  334. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/__init__.py +0 -0
  335. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/filesystem/__init__.py +0 -0
  336. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/filesystem/observationarchive.py +0 -0
  337. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/filesystem/taskarchive.py +0 -0
  338. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/lco/__init__.py +0 -0
  339. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/lco/_portal.py +0 -0
  340. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/lco/_schedulereader.py +0 -0
  341. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/lco/_schedulewriter.py +0 -0
  342. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/lco/configdb.py +0 -0
  343. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/lco/mockobservationarchive.py +0 -0
  344. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/lco/observationarchive.py +0 -0
  345. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/lco/scripts/__init__.py +0 -0
  346. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/lco/scripts/autofocus.py +0 -0
  347. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/lco/scripts/default.py +0 -0
  348. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/lco/scripts/script.py +0 -0
  349. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/lco/task.py +0 -0
  350. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/lco/taskarchive.py +0 -0
  351. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/lco/taskrunner.py +0 -0
  352. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/memory/__init__.py +0 -0
  353. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/memory/observationarchive.py +0 -0
  354. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/memory/taskarchive.py +0 -0
  355. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/observationarchive.py +0 -0
  356. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/storage/taskarchive.py +0 -0
  357. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/taskrunner.py +0 -0
  358. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/utils/__init__.py +0 -0
  359. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/utils/archive/__init__.py +0 -0
  360. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/utils/archive/archive.py +0 -0
  361. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/utils/archive/local_archive.py +0 -0
  362. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/utils/archive/pyobs_archive.py +0 -0
  363. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/utils/exptime/__init__.py +0 -0
  364. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/utils/exptime/exptime.py +0 -0
  365. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/utils/exptime/stellarexptime.py +0 -0
  366. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/utils/skyflats/__init__.py +0 -0
  367. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/utils/skyflats/exptimeeval.py +0 -0
  368. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/utils/skyflats/flatfielder.py +0 -0
  369. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/utils/skyflats/pointing/__init__.py +0 -0
  370. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/utils/skyflats/pointing/base.py +0 -0
  371. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/utils/skyflats/pointing/static.py +0 -0
  372. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/utils/skyflats/priorities/__init__.py +0 -0
  373. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/utils/skyflats/priorities/archive.py +0 -0
  374. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/utils/skyflats/priorities/base.py +0 -0
  375. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/utils/skyflats/priorities/const.py +0 -0
  376. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/robotic/utils/skyflats/scheduler.py +0 -0
  377. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/__init__.py +0 -0
  378. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/average.py +0 -0
  379. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/cache.py +0 -0
  380. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/config.py +0 -0
  381. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/config_schema.py +0 -0
  382. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/coordinates.py +0 -0
  383. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/curvefit.py +0 -0
  384. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/enums.py +0 -0
  385. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/exceptions.py +0 -0
  386. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/fits.py +0 -0
  387. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/focusseries/__init__.py +0 -0
  388. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/focusseries/base.py +0 -0
  389. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/focusseries/photometry.py +0 -0
  390. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/focusseries/projection.py +0 -0
  391. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/grids/__init__.py +0 -0
  392. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/grids/filters.py +0 -0
  393. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/grids/grid.py +0 -0
  394. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/grids/gridnode.py +0 -0
  395. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/grids/pipeline.py +0 -0
  396. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/gui/__init__.py +0 -0
  397. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/gui/camera/__init__.py +0 -0
  398. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/gui/camera/binningwidget.py +0 -0
  399. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/gui/camera/datadisplaywidget.py +0 -0
  400. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/gui/camera/exposewidget.py +0 -0
  401. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/gui/camera/exposuretimewidget.py +0 -0
  402. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/gui/camera/imageformatwidget.py +0 -0
  403. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/gui/camera/listpickerdialog.py +0 -0
  404. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/gui/camera/windowingwidget.py +0 -0
  405. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/http.py +0 -0
  406. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/influxdb.py +0 -0
  407. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/logger.py +0 -0
  408. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/logging/__init__.py +0 -0
  409. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/logging/context.py +0 -0
  410. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/logging/resolvableerror.py +0 -0
  411. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/modulegui.py +0 -0
  412. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/offsets/__init__.py +0 -0
  413. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/offsets/applyaltazoffsets.py +0 -0
  414. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/offsets/applyoffsets.py +0 -0
  415. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/offsets/applyradecoffsets.py +0 -0
  416. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/parallel.py +0 -0
  417. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/pipeline/__init__.py +0 -0
  418. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/pipeline/pipeline.py +0 -0
  419. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/pipeline/progress.py +0 -0
  420. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/pipeline/reduction.py +0 -0
  421. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/pipeline/reduction_base.py +0 -0
  422. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/publisher/__init__.py +0 -0
  423. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/publisher/csv.py +0 -0
  424. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/publisher/http.py +0 -0
  425. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/publisher/log.py +0 -0
  426. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/publisher/multi.py +0 -0
  427. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/publisher/publisher.py +0 -0
  428. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/serialization.py +0 -0
  429. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/shellcommand.py +0 -0
  430. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/threads/__init__.py +0 -0
  431. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/threads/lockwithabort.py +0 -0
  432. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/time.py +0 -0
  433. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/units.py +0 -0
  434. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/utils/versions.py +0 -0
  435. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/version.py +0 -0
  436. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/vfs/__init__.py +0 -0
  437. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/vfs/archivefile.py +0 -0
  438. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/vfs/bufferedfile.py +0 -0
  439. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/vfs/file.py +0 -0
  440. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/vfs/filelists/__init__.py +0 -0
  441. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/vfs/filelists/filelist.py +0 -0
  442. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/vfs/filelists/testing.py +0 -0
  443. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/vfs/httpfile.py +0 -0
  444. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/vfs/localfile.py +0 -0
  445. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/vfs/memfile.py +0 -0
  446. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/vfs/sftpfile.py +0 -0
  447. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/vfs/smbfile.py +0 -0
  448. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/vfs/sshfile.py +0 -0
  449. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/vfs/tempfile.py +0 -0
  450. {pyobs_core-2.0.0.dev95 → pyobs_core-2.0.0.dev98}/pyobs/vfs/vfs.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: pyobs-core
3
- Version: 2.0.0.dev95
3
+ Version: 2.0.0.dev98
4
4
  Summary: robotic telescope software
5
5
  Author-email: Tim-Oliver Husser <thusser@uni-goettingen.de>
6
6
  License-Expression: MIT
@@ -102,7 +102,7 @@ class Scheduler(Module, IStartStop, IRunnable):
102
102
 
103
103
  # get scheduler
104
104
  self._task_archive = self.add_child_object(tasks, TaskArchive, on_tasks_changed=self._update_schedule)
105
- # BackendObservationArchive declares auto_update and gates its own polling loop on it --
105
+ # PortalObservationArchive declares auto_update and gates its own polling loop on it --
106
106
  # since we already drive updates via on_tasks_changed above, that poller must stay off.
107
107
  # Other ObservationArchive implementations (e.g. LcoObservationArchive) don't declare it at
108
108
  # all, so it must not be injected unconditionally.
@@ -39,6 +39,12 @@ class Observation(BaseModel):
39
39
  """Per-night observation number, e.g. "20260810-001". Assigned by Mastermind when the
40
40
  observation starts running; None before that (or if never observed)."""
41
41
 
42
+ archive_url: str | None = None
43
+ """Link to this observation's data in the archive's own frontend, as serialized by
44
+ pyobs-portal (pyobs-portal#82). Portal-only UI metadata: Mastermind tolerates but never
45
+ consumes it -- it is always None for the pending/in_progress states Mastermind schedules
46
+ on, and is declared so the portal's payloads keep validating under ``extra="forbid"``."""
47
+
42
48
  def __str__(self) -> str:
43
49
  return (
44
50
  f"Observation {self.id} of {self.task.name} (#{self.task.id}) "
@@ -0,0 +1,4 @@
1
+ from .observationarchive import PortalObservationArchive
2
+ from .taskarchive import PortalTaskArchive
3
+
4
+ __all__ = ["PortalObservationArchive", "PortalTaskArchive"]
@@ -15,8 +15,8 @@ from pyobs.utils.time import Time
15
15
  log = logging.getLogger(__name__)
16
16
 
17
17
 
18
- class BackendObservationArchive(ObservationArchive):
19
- """Observation archive based on pyobs-robotic-backend."""
18
+ class PortalObservationArchive(ObservationArchive):
19
+ """Observation archive based on pyobs-portal."""
20
20
 
21
21
  def __init__(
22
22
  self,
@@ -39,12 +39,12 @@ class BackendObservationArchive(ObservationArchive):
39
39
  self.add_background_task(self._check_for_changes)
40
40
 
41
41
  async def open(self) -> None:
42
- """Opens the backend observation archive."""
42
+ """Opens the portal observation archive."""
43
43
  self._aiohttp_session = aiohttp.ClientSession(headers={"Authorization": f"Token {self._token}"})
44
44
  await ObservationArchive.open(self)
45
45
 
46
46
  async def close(self) -> None:
47
- """Closes the backend observation archive."""
47
+ """Closes the portal observation archive."""
48
48
  await ObservationArchive.close(self)
49
49
  if self._aiohttp_session is not None:
50
50
  await self._aiohttp_session.close()
@@ -57,20 +57,20 @@ class BackendObservationArchive(ObservationArchive):
57
57
  return self._aiohttp_session
58
58
 
59
59
  async def _check_for_changes(self) -> None:
60
- """Update schedule in background, gated on the backend's update marker."""
60
+ """Update schedule in background, gated on the portal's update marker."""
61
61
 
62
62
  while True:
63
63
  try:
64
64
  await self._poll()
65
65
  except Exception as e:
66
- log.error("Failed to update observations from backend: %s", e)
66
+ log.error("Failed to update observations from portal: %s", e)
67
67
  await asyncio.sleep(5)
68
68
 
69
69
  async def _poll(self) -> None:
70
- """Re-download the schedule when the backend's ``last_observation_update`` marker moved.
70
+ """Re-download the schedule when the portal's ``last_observation_update`` marker moved.
71
71
 
72
- The marker is a DB-derived ``Max(updated_at)`` (pyobs-robotic-backend#84), truthful across
73
- gunicorn workers, so it is a safe refresh gate; see ``BackendTaskArchive._poll``. The
72
+ The marker is a DB-derived ``Max(updated_at)`` (pyobs-portal#84), truthful across
73
+ gunicorn workers, so it is a safe refresh gate; see ``PortalTaskArchive._poll``. The
74
74
  content comparison in :meth:`_update` still decides whether to fire ``on_tasks_changed``.
75
75
  """
76
76
  last_update = await self.last_update_time()
@@ -79,12 +79,12 @@ class BackendObservationArchive(ObservationArchive):
79
79
  self._last_marker = last_update
80
80
 
81
81
  async def _update(self) -> None:
82
- """Fetch the schedule from the backend and apply it if anything changed.
82
+ """Fetch the schedule from the portal and apply it if anything changed.
83
83
 
84
- Called by :meth:`_poll` after the backend marker moved (or on the first poll). Changes are
84
+ Called by :meth:`_poll` after the portal marker moved (or on the first poll). Changes are
85
85
  detected by comparing full observation contents via ``model_dump(use_task_id=True)``,
86
86
  keyed by observation ID so a stable reordering of the same items is not mistaken for a
87
- change: the backend serializes ``task`` as a plain FK ID, while cached copies get their
87
+ change: the portal serializes ``task`` as a plain FK ID, while cached copies get their
88
88
  ``task`` replaced by a full ``Task`` when the mastermind calls ``fetch_task()``, so the ID
89
89
  normalization keeps both sides comparable. The comparison includes ``state``
90
90
  (``Observation.__eq__`` ignores it), which matters for in-set transitions such as
@@ -265,4 +265,4 @@ class BackendObservationArchive(ObservationArchive):
265
265
  return ObservationList([self.pyobs_model_validate(Observation, obs) for obs in observations])
266
266
 
267
267
 
268
- __all__ = ["BackendObservationArchive"]
268
+ __all__ = ["PortalObservationArchive"]
@@ -13,14 +13,14 @@ from pyobs.utils.time import Time
13
13
  log = logging.getLogger(__name__)
14
14
 
15
15
 
16
- class BackendTaskArchive(TaskArchive):
17
- """Task archive based on pyobs-robotic-backend."""
16
+ class PortalTaskArchive(TaskArchive):
17
+ """Task archive based on pyobs-portal."""
18
18
 
19
19
  def __init__(self, url: str, token: str, auto_update: bool = True, **kwargs: Any):
20
20
  """Creates a new task archive.
21
21
 
22
22
  Args:
23
- url: URL of pyobs-robotic-backend.
23
+ url: URL of pyobs-portal.
24
24
  token: Auth token.
25
25
  """
26
26
  TaskArchive.__init__(self, **kwargs)
@@ -36,12 +36,12 @@ class BackendTaskArchive(TaskArchive):
36
36
  self.add_background_task(self._check_for_changes)
37
37
 
38
38
  async def open(self) -> None:
39
- """Opens the backend task archive."""
39
+ """Opens the portal task archive."""
40
40
  self._aiohttp_session = aiohttp.ClientSession(headers={"Authorization": f"Token {self._token}"})
41
41
  await TaskArchive.open(self)
42
42
 
43
43
  async def close(self) -> None:
44
- """Closes the backend observation archive."""
44
+ """Closes the portal task archive."""
45
45
  await TaskArchive.close(self)
46
46
  if self._aiohttp_session is not None:
47
47
  await self._aiohttp_session.close()
@@ -54,18 +54,18 @@ class BackendTaskArchive(TaskArchive):
54
54
  return self._aiohttp_session
55
55
 
56
56
  async def _check_for_changes(self) -> None:
57
- """Update tasks in background, gated on the backend's update marker."""
57
+ """Update tasks in background, gated on the portal's update marker."""
58
58
  while True:
59
59
  try:
60
60
  await self._poll()
61
61
  except Exception as e:
62
- log.error("Failed to update tasks from backend: %s", e)
62
+ log.error("Failed to update tasks from portal: %s", e)
63
63
  await asyncio.sleep(5)
64
64
 
65
65
  async def _poll(self) -> None:
66
- """Re-download tasks/projects when the backend's ``last_task_update`` marker moved.
66
+ """Re-download tasks/projects when the portal's ``last_task_update`` marker moved.
67
67
 
68
- The marker is a DB-derived ``Max(updated_at)`` (pyobs-robotic-backend#84), truthful across
68
+ The marker is a DB-derived ``Max(updated_at)`` (pyobs-portal#84), truthful across
69
69
  gunicorn workers, so it is a safe refresh gate. Without it the archive re-downloaded (and
70
70
  re-compared) on every poll, and the content comparison misfired whenever runtime code
71
71
  mutated a serialized task field (e.g. ``DynamicTarget.resolve()`` overwriting ``name``),
@@ -78,14 +78,14 @@ class BackendTaskArchive(TaskArchive):
78
78
  self._last_marker = last_update
79
79
 
80
80
  async def _update(self) -> None:
81
- """Fetch tasks/projects from the backend and apply them if anything changed.
81
+ """Fetch tasks/projects from the portal and apply them if anything changed.
82
82
 
83
- Called by :meth:`_poll` after the backend marker moved (or on the first poll); applies the
83
+ Called by :meth:`_poll` after the portal marker moved (or on the first poll); applies the
84
84
  download only when the content actually differs from the cached copy. The comparison uses
85
85
  ``model_dump()`` rather than pydantic ``==``, which also compares runtime attributes (e.g.
86
86
  ``Task._cant_run_reason`` set by ``can_run()``) and would flag unchanged tasks as changed
87
87
  on every poll; it is keyed by ID so that a stable reordering of the same items (e.g. an
88
- unordered backend queryset) is not mistaken for a change.
88
+ unordered portal queryset) is not mistaken for a change.
89
89
  """
90
90
  projects = await self._get_projects()
91
91
  tasks = await self._get_tasks()
@@ -105,12 +105,12 @@ class BackendTaskArchive(TaskArchive):
105
105
  return Time(res["last_task_update"])
106
106
 
107
107
  async def _get_projects(self) -> list[Project]:
108
- """Fetch projects from backend."""
108
+ """Fetch projects from portal."""
109
109
  projects = await http_request_paginated(self._session, urljoin(self._url, "/api/projects/"), strict=True)
110
110
  return [self.pyobs_model_validate(Project, project) for project in projects]
111
111
 
112
112
  async def _get_tasks(self) -> list[Task]:
113
- """Fetch tasks from backend."""
113
+ """Fetch tasks from portal."""
114
114
  tasks = await http_request_paginated(self._session, urljoin(self._url, "/api/tasks/"), strict=True)
115
115
  return [self.pyobs_model_validate(Task, task) for task in tasks]
116
116
 
@@ -118,7 +118,7 @@ class BackendTaskArchive(TaskArchive):
118
118
  """Returns time when last time any tasks changed (as observed by this archive).
119
119
 
120
120
  This is the local time at which the last content change was detected by the polling loop,
121
- not the backend's marker timestamp -- the marker is per-process and unreliable.
121
+ not the portal's marker timestamp -- the marker is per-process and unreliable.
122
122
  """
123
123
  return self._last_update
124
124
 
@@ -151,4 +151,4 @@ class BackendTaskArchive(TaskArchive):
151
151
  return None
152
152
 
153
153
 
154
- __all__ = ["BackendTaskArchive"]
154
+ __all__ = ["PortalTaskArchive"]
@@ -46,9 +46,9 @@ class Task(PolymorphicBaseModel):
46
46
  script: dict[str, Any] = Field(default_factory=dict)
47
47
  active: bool = True
48
48
  updated_at: str | None = None
49
- """Last-modification timestamp as emitted by pyobs-robotic-backend (DB-derived ``updated_at``,
50
- added in pyobs-robotic-backend#84). Carried for round-trip fidelity so the strict ``Task``
51
- model (``extra="forbid"``) accepts the field the backend now sends; not used by pyobs itself."""
49
+ """Last-modification timestamp as emitted by pyobs-portal (DB-derived ``updated_at``,
50
+ added in pyobs-portal#84). Carried for round-trip fidelity so the strict ``Task``
51
+ model (``extra="forbid"``) accepts the field the portal now sends; not used by pyobs itself."""
52
52
 
53
53
  _resolved_target: Target | None = PrivateAttr(default=None)
54
54
  _cant_run_reason: str | None = None
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pyobs-core"
3
- version = "2.0.0.dev95"
3
+ version = "2.0.0.dev98"
4
4
  description = "robotic telescope software"
5
5
  authors = [{ name = "Tim-Oliver Husser", email = "thusser@uni-goettingen.de" }]
6
6
  requires-python = ">=3.11"
@@ -1,4 +0,0 @@
1
- from .observationarchive import BackendObservationArchive
2
- from .taskarchive import BackendTaskArchive
3
-
4
- __all__ = ["BackendObservationArchive", "BackendTaskArchive"]