Changelog
v1.47.0 (2025-06-07)
Set minimum Python version to 3.11.
Replaced old-style type hints (
Optional,Union,List, etc.) with modern Python 3.11+ syntax throughout.Replaced deprecated
asyncio.ensure_futurewithasyncio.create_task.Replaced deprecated
asyncio.get_event_loopwithasyncio.get_running_loop.Replaced
str, EnumwithStrEnumthroughout.Replaced
asyncio.gatherwithasyncio.TaskGroupwhere applicable.Added ruff linting to CI and pre-commit.
v1.46.0 (2025-05-27)
Added
DynamicTargetclass for runtime target selection via a pluggablePickerinterface.Added
CsvPickerfor selecting targets from a CSV catalogue, with constraint-aware filtering.OnDemandSchedulernow resolves dynamic targets before evaluating constraints and merits.Added
directionparameter toSolarElevationConstraintfor filtering on rising or setting sun.Resolved target is now stored on
Observationand restored by the mastermind viafetch_task.Target resolution result is cached per scheduling run.
Added
set_resolved_targetandestimate_durationtoTask.LcoTaskRunnernow correctly injects script beforerun_task.Added missing abstract method implementations to
LcoTaskArchiveandLcoObservationArchive.Fixed inverted
PENDINGfilter inLcoTaskArchive.get_schedulable_tasks.Fixed
LcoConfiguration.statedefault to"PENDING".Portal now creates aiohttp session in
open()instead of__init__().Portal now managed via
add_child_objectfor correct lifecycle.Fixed
SolarElevationConstraintdirection logic usingobserver.midnight.Added
AstroplanSchedulertests; fixed empty block list causing subprocess hang.Fixed
LcoRequest.locationfield name conflict withBaseModel.location.Added
ImagingScriptfor standard science exposures with acquisition and guiding support.Comprehensive test suite additions for LCO classes, scheduler, and scripts.
v1.45.0 (2025-05-14)
Added unified
get_observationsinterface toObservationArchivewith state and time filters.IntervalMeritandPerNightMeritnow push filters directly toget_observations.Added
ObservationArchiveEvolution.get_observationsmethod.Added
min_safety_timeparameter toMastermind.Added
activefield toTask.Fixed telescope not stopping after auto focus.
v1.44.0 (2025-04-24)
Renamed
SubClassBaseModeltoPolymorphicBaseModel.Renamed
MeritSchedulertoOnDemandScheduler.Moved
utils.archiveandutils.skyflatsintorobotic.utilsas pydantic models.Moved
serialization.pyfromrobotic.utilstoutils.Converted
SkyFlatsBasePointing,SkyflatPriorities,Archive, andPyobsArchivetoPolymorphicBaseModel.Removed
ObjectfromScriptbase classes.Context injection now propagates to all child pydantic models.
HTTP requests now use pagination; all list responses wrapped in
{"results": [...]}format.Added
create_scriptmethod toTask.Added
http_request_with_retrieswith tenacity-based retry logic.BaseModelno longer inherits fromObject.Added
trigger_on_every_updateparameter toSchedulermodule.Added Observation priority field.
Major documentation overhaul for the robotic subsystem.
v1.43.0 (2025-04-20)
Added
http_request_with_retriesutility.Backend archives now use
http_request_with_retriesinstead of direct HTTP calls.Added
ignore_cert_errorsparameter to backend archives.Added filesystem-based backend for robotic scheduling (
YamlTaskArchive,YamlObservationArchive).Fixed
inject_class_on_serializationfor pydantic models.
v1.42.0 (2025-03-08)
Backend archives migrated from
requeststoaiohttp.Observation fetching moved to a background task.
Task changes now driven by
on_tasks_changedcallback.Refactored robotic subsystem to support pluggable backends.
v1.41.0 (2025-02-20)
Added optional Qt widget dependencies for GUI support.
Added general-purpose Qt widgets.
v1.40.0 (2025-02-10)
XMPP communication now connects with TLS using slixmpp 1.4.1.
Fixed PyPy compatibility issues.
Added
AvoidMoonconstraint.Added
FromListgrid filter.PerNightMeritnow uses last sunrise for night boundary.Auto focus now uses actual measured focus position.
v1.39.0 (2024-12-10)
Major scheduler refactoring: introduced pluggable scheduler architecture.
Added
OnDemandScheduler(merit-based greedy scheduler) withDataProvidercontext.Added
ABORTED,IN_PROGRESS, andFAILEDobservation states.Added
ConfigurationSummaryto LCO integration.
v1.38.0 (2024-11-05)
Added config file support via
--configflag.Added InfluxDB logging handler.
Added
CommLoggingHandlerguard against duplicate logger registration.Added
--verboseCLI switch.
v1.37.0 (2024-10-20)
Added InfluxDB logging handler (
InfluxLoggingHandler).
v1.36.0 (2024-10-05)
Improved exception handling in background tasks;
BackgroundTasknow receives parent reference.Unknown remote exceptions now wrapped in
RemoteError.Added SSL check option for XMPP.
Fixed: don’t reconnect after intentional XMPP disconnect.
Added example systemd service file.
v1.35.0 (2024-09-01)
Added
--verboseswitch to CLI.Added
CALIBRATINGmotion status.Refactored shell command handling into dedicated classes.
v1.34.0 (2024-08-20)
Refactored shell command and response into dedicated
ShellCommandclasses.
v1.33.0 (2024-08-05)
Added new grid creation for pointing series.
Configurable wait times in pointing module.
v1.32.0 (2024-07-20)
Moved exceptions to a dedicated module.
Added
AcquisitionErrorfor failed acquisitions.Changed
GeneralErrortoFocusErrorfor focus-related errors.Added 60s timeout to autoguider stop method.
LCO integration: use ConfigDB to fetch instrument; support multiple configurations.
v1.31.0 (2024-05-25)
Added documentation for image processors.
Registered
pyobsexceptions now logged asINFOwithout stack trace.Added
overwriteparameter to image writing.Added Matrix chat client module.
v1.30.0 (2024-05-01)
Added Matrix chat client module.
Fixed context propagation for non-dict objects.
Added reset method to
BrightestStarGuiding.Added
oneshotparameter toScriptRunner.Added logging when a script cannot run.
v1.29.0 (2024-03-15)
Added
PipelineCamerafor running image pipeline on camera images.Added
Flipimage processor.Added TypeScript interface export.
Added
HttpServerto serve images via HTTP.Added
SolarHelioprojectiveimage processor.Added
Pipelinemodule.
v1.28.0 (2024-02-20)
Added offset parameter to
IGain.Reduced httpx logging verbosity.
v1.27.0 (2024-02-01)
FilenameFormatternow supports formatting with FITS headers viaGetFitsHeaders.
v1.26.0 (2024-01-15)
Added comprehensive typing throughout using
TypedDictandnpt.NDArray.Improved
get_objectoverloads.
v1.25.0 (2024-01-01)
Migrated build system to
uv.Pointing module updated to use new grid classes.
v1.24.0 (2023-12-30)
Added new spherical grid classes (
RegularSphericalGrid, filters, pipeline) with tests.
v1.23.0 (2023-12-29)
Improved spilled light guiding sigmoid function for more accurate relative offset calculation.
Added weather station workaround.
v1.22.0 (2023-12-29)
Added
auto_focusintegration to relevant modules.
v1.21.0 (2023-12-28)
Added
init_offset_to_zerofunctionality.Spilled light guiding: added binning correction, image trimming, and improved calculations.
v1.20.0 (2023-12-28)
VFS not created if none is configured.
Added pixel offset image processor for simplified acquisition workflow.
get_objectno longer overwrites existing parameters.
v1.19.0 (2023-12-28)
Added spilled light guiding processor.
Added
IMultiFiberinterface.
v1.18.0 (2023-12-28)
ITelescopeno longer directly implementsIPointingRaDec/IPointingAltAz;BaseTelescopehandles dispatch.Added bright star guiding.
Restore initial focus if focus series fails.
v1.17.0 (2023-12-28)
Added
DummyModemodule andModeChangedEvent.Added
ResolvableErrorLoggerutility.Reactivated publisher module.
Added XMPP auto-reconnect on connection loss.
v1.16.0 (2023-12-28)
New
pyobsddaemon with improved module management and config testing.Added several default scripts.
Added group support for module configuration.
v1.15.0 (2023-12-28)
Added group support for module configuration.
v1.14.0 (2023-12-28)
Stop telescope after autofocus completes.
Updated to Python 3.12; replaced deprecated
datetime.utcnow().Warn when no RA/Dec given for pointing.
v1.13.0 (2023-12-28)
Added acquisition support for bright central star.
Added derotator offset handling.
Added
BackgroundTaskclass to simplify background task management inObject.Added unit tests for
BackgroundTaskandObject.
v1.12.0 (2023-12-28)
Added list command for pyobsd, which outputs all configurations.
Added bash auto-complete script pyobsd.
Added timeouts (to be defined in the config) for ScriptRunner modules.
v1.11.0 (2023-12-25)
Acquisition and AutoFocus both got a broadcast option to disable broadcast of images.
AutoFocus got a final_image parameter to take a final image at optimal focus.
v1.10.0 (2023-12-24)
Added CallModule script.
Changed ScriptRunner module so that it can run a script multiple times.
v1.9.0 (2023-12-23)
Added getters and safe getters for Image class.
v1.3.0 (2023-02-04)
Adopted LCO default task to new LCO portal.
v1.2.0 (2022-10-06)
Added AltAzOffsets and RaDecOffsets and (partly) implemented them in the ApplyOffsets classes.
v1.1.0 (2022-09-20)
Changed signature of pyobs.robotic.TaskSchedule.get_schedule to have no parameters.
v1.0.0 (2022-09-13)
v0.22.0 (2022-08-25)
Removed comm.sleexxmpp implementation.
Renamed comm.slixmpp to comm.xmpp.
v0.21.0 (2022-08-25)
Some pipeline stuff.
Added DbusComm for communicating via Dbus.
Cleaned up parameter casting for communication.
v0.20.0 (2022-06-22)
Some fixes with asyncio and the GUI.
Handle JID conflicts in XMPP.
v0.19.0 (2022-05-17)
Getter/setter methods in Module must be async.
get_task() in TaskScheduler is now async.
Lots of bug fixes.
v0.18.0 (2022-03-13)
New IGain interface.
v0.17.0 (2022-02-14)
Restructuring robotic system.
v0.16.0 (2022-01-14)
Added new exceptions.
Use those new exceptions to keep track of errors over time and raise SevereErrors.
Add new state to module, so that a severe error can put a module into an error state.
Added get_state() and get_error_string() methods to modules.
v0.15.0 (2021-12-29)
Added Comm implementation for SliXMPP (which should now be default) and moved old comm.xmpp to comm.sleekcmpp.
Using asyncio throughout the project, all method and event handlers are async now, as well as open/close methods.
Got rid of multi-threading as best as possible.
VFS now also uses asyncio.
v0.14.2
Fixed a bug with Poetry
v0.14.1
Added possibility to use class hierarchy for events, i.e. subscribe to a class and receive all derived events.
Change to Poetry as build system
v0.14 (2021-11-03)
Guiding modules accept a pipeline now, so more image processors than just Offsets can run.
Renamed ICameraBinning, ICameraExposureTime and ICameraWindow and removed the “Camera” part.
Added meta attribute (temporary storage, not I/O persistent) to Image.
Extracted IImageGrabber from ICamera and renamed expose() to grab_image().
Added new IVideo interface and a corresponding BaseVideo module.
Raising exception, if XmppComm cannot connect to server, allowing for graceful exit.
On shutdown, wait for hanging threads, and kill them after 30 seconds.
Multi-processing for the pipeline, using ccdproc now.
New interface IPointingSeries, giving access to methods at the telescope that support pointing series.
Send logs in thread.
Added concept of image processors that take an Image as parameter and return it after some processing.
Added new NStarOffsets image processor (T. Masur).
Improved scheduler.
Added pipelines that take a list of image processors (see Pipeline mixin).
Re-organized all get_object methods.
Improved type hints throughout the code.
Renamed all coordinated interfaces (IRaDec, etc) to IPointing*, i.e. IPointingRaDec.
Renamed all offset interfaces to IOffsets*, i.e. IOffsetsRaDec.
Renamed IFitsHeaderProvider to IFitsHeaderBefore and also renamed its only method.
Added IFitsHeaderAfter to fetch FITS headers after an exposure as well.
Moved functionality from Module to Object.
New meta data system for images.
Renamed IStoppable to IStartStop.
Added new proxy interfaces in interfaces.proxies. All proxies now derive from these interfaces instead of the original ones.
And a lot more cleanup and re-organization.
v0.13 (2021-04-30)
Added a Telegram bot module.
Added a module for a Kiosk mode, in which pictures are published on a webpage.
Added new IImageFormats interface for cameras that support multiple ones (e.g. grayscale and color).
Moved more enums into utils.enums, like WeatherSensors and MotionStatus.
Added list_binnings() to IBinning interface and (temporary) default implementation in BaseCamera.
Restructured image processors into pyobs.image.processors.
Split photometry into separate SourceDetection and Photometry interfaces, added DaophotSourceDetection, and PhotUtilsPhotometry.
Sending events non-blocking, which might solve some problems with disappeared XMPP clients.
Added lots of documentation, which included setting __module__ for many classes.
v0.12 (2021-01-01)
Changed PyObsModule to Module.
Removed possibility for network configs.
Added MultiModule, which allows for multiple modules in one process.
Flat scheduler: add options for readout times.
New OnlineReduction module for reduction during the night.
Fixed bug that sometimes appears in the interface caching for Comm.
LcoTaskArchive: added MoonSeparationConstraint, fixed AirmassConstraint.
Optimized Scheduler by only scheduling blocks that actually have a window in the given range.
Added module Seeing that extracts FWHMs from the catalogs in reduced images and calculated a median seeing.
Introduced concept of Publishers, which can be used to publish data to log, CSV, and hopefully later, database, web, etc.
Created new Object class that handles most of what Module did before so that Module only adds module specific stuff.
Added some convenience methods for reading/writing files to VFS.
Added new IConfig interface which is implemented in every module and allows remote access to config parameters (if getter/setters are implemented).
Removed count parameter from ICamera.expose().
Removed exposure_time parameter from ICamera.expose() and introduced IExposureTime interface.
Removed image_type parameter from ICamera.expose() and introduced IImageType.
Moved ImageType enumerator from ICamera to utils.enums.
v0.11 (2020-10-18)
Major changes to robotic system based on LCO portal.
Setting filter/window/binning in acquisition.
Added WaitForMotion and Follow mixins.
Added support for flats that don’t directly scale with binning.
New module for acoustic warning when autonomous modules are running.
Improved SepPhotometry by calculating columns used also by LCO.
New interface for Lat/Lon telescopes, e.g. solar telescopes.
v0.10 (2020-05-05)
Re-factored acquisition modules and added one based on astrometry.
Added combine_binnings parameter to FlatFielder, which triggers, whether to use one function for all binnings or not
Added get_current_weather() to IWeather
New FlatFieldPointing module that can move telescope to a flatfield pointing
Changed requirements in setup.py and put packages that are only required by a server module into [full]
Removed HTTP proxy classes
Some new mixins
v0.9 (2020-03-06)
working on robotic system based on LCO portal
v0.8 (2019-11-17)
Added module for bright star acquisition.
Added and changed some FITS header keywords.
Added module for flat-fielding.
Changed some interfaces.
Added basic pipeline.
Started with code that will be used for a full robotic mode.
Re-organized auto-guiding modules.
and many more…