Releases: claudious96/calendar-queue
Releases · claudious96/calendar-queue
0.2.2
[0.2.2] - 2026-04-29
Fixed
CalendarQueue.delete_items()did not decrement_unfinished_tasksfor removed items, causingqueue.join()to block indefinitely after any deletion.CalendarQueue._update_timer()unconditionally cancelled and recreated the timer when the queue had exactly one item, even when the timer was already set for the correct time.Calendar.stop()permanently prevented further iteration with no way to recover; behavior is now documented andreset()is provided as the recovery path.- Removed leftover
executorattribute fromCalendar(orphaned from the 0.2.0 executor-pattern removal). - Corrected docstring for
CalendarQueue.delete_items(): selector tuple shape was documented as(scheduled_ts, key, item)but is(scheduled_ts, item). - Corrected docstring for
Calendar.cancel_event(): return type was documented asintbut islist[tuple[float, CalendarEvent]]. - Corrected docstring for
Calendar.clear(): description incorrectly said "The number of cancelled events" instead of "List of cancelled events".
Added
Calendar.reset()clears the internal stop flag set bystop(), re-enablingasync foriteration over remaining scheduled events.CalendarQueue.get_nowait()override with explicit documentation that it bypasses scheduled timestamps and returns the earliest-due item immediately, regardless of when it is due.
0.2.1
[0.2.1] - 2026-04-18
Fixed
- Restore heap invariant in
CalendarQueue.delete_items()by callingheapq.heapify(self._queue)after removing items; prevents incorrect ordering after arbitrary deletions.
Added
- Regression test
test_delete_restores_heap_propertyintests/test_calendar_queue.pycovering deletion + heap restore behavior.
0.2.0
[0.2.0] - 2026-01-01
Changed
- Breaking Change: Removed the executor pattern from
Calendarclass. Theexecutorattribute and therun()method are no longer available. - Breaking Change:
Calendar.events()method returns the list of queued events. The async iterator is now implemented within theCalendarclass (__aiter__and__anext__). TheCalendarclass can now be used directly inasync forloops. - Breaking Change: The queue is no longer automatically cleared before starting to iterate over events. Previously, calling the async iterator would clear any pending events; now existing events are preserved.
Updated
- Updated all documentation examples to use the new async iterator interface
- Updated tutorial examples to demonstrate the new
async forusage pattern withCalendar - Updated test suite to reflect the new async iterator implementation
- Added support for Python 3.14
- Updated CI/CD workflows for Python 3.14 compatibility
- Updated development dependencies
Migration Guide
Before (v0.1.0):
async for ts, event in calendar.events():
# handle eventAfter (v0.2.0):
async for ts, event in calendar:
# handle event0.1.0
Merge pull request #6 from claudious96/update-project-description Update project description