- Fix bug where schedule was off when using .at with timezone (#583) Thanks @AnezeR!
- Dropped support for Python 3.6, add support for Python 3.10 and 3.11.
- Add timezone support for .at(). See #517. Thanks @chrimaho!
- Get next run by tag (#463) Thanks @jweijers!
- Add py.typed file. See #521. Thanks @Akuli!
- Fix the re pattern of the 'days'. See #506 Thanks @sunpro108!
- Fix test_until_time failure when run early. See #563. Thanks @emollier!
- Fix crash repr on partially constructed job. See #569. Thanks @CPickens42!
- Code cleanup and modernization. See #567, #536. Thanks @masa-08 and @SergBobrovsky!
- Documentation improvements and fix typos. See #469, #479, #493, #519, #520. Thanks to @NaelsonDouglas, @chrimaho, @rudSarkar
- Added @repeat() decorator. See #148. Thanks @rhagenaars!
- Added execute .until(). See #195. Thanks @fredthomsen!
- Added job retrieval filtered by tags using get_jobs('tag'). See #419. Thanks @skenvy!
- Added type annotations. See #427. Thanks @martinthoma!
- Bugfix: str() of job when there is no __name__. See #430. Thanks @biggerfisch!
- Improved error messages. See #280, #439. Thanks @connorskees and @sosolidkk!
- Improved logging. See #193. Thanks @zcking!
- Documentation improvements and fix typos. See #424, #435, #436, #453, #437, #448. Thanks @ebllg!
Depending on your configuration, the following bugfixes might change schedule's behaviour:
- Fix: idle_seconds crashes when no jobs are scheduled. See #401. Thanks @yoonghm!
- Fix: day.at('HH:MM:SS') where HMS=now+10s doesn't run today. See #331. Thanks @qmorek!
- Fix: hour.at('MM:SS'), the seconds are set to 00. See #290. Thanks @eladbi!
- Fix: Long-running jobs skip a day when they finish in the next day #404. Thanks @4379711!
Other changes:
- Dropped Python 2.7 and 3.5 support, added 3.8 and 3.9 support. See #409
- Fix RecursionError when the job is passed to the do function as an arg. See #190. Thanks @connorskees!
- Fix DeprecationWarning of 'collections'. See #296. Thanks @gaguirregabiria!
- Replaced Travis with Github Actions for automated testing
- Revamp and extend documentation. See #395
- Improved tests. Thanks @connorskees and @Jamim!
- Changed log messages to DEBUG level. Thanks @aisk!
- Make at() accept timestamps with 1 second precision (#267). Thanks @NathanWailes!
- Introduce proper exception hierarchy (#271). Thanks @ConnorSkees!
- Keep partially scheduled jobs from breaking the scheduler (#125)
- Add support for random intervals (Thanks @grampajoe and @gilbsgilbs)
- Improve docs & clean up docstrings
- Publish to PyPI as a universal (py2/py3) wheel
- Add proper HTML (Sphinx) docs available at https://schedule.readthedocs.io/
- CI builds now run against Python 2.7 and 3.5 (3.3 and 3.4 should work fine but are untested)
- Fixed an issue with
run_all()
and having more than one job that deletes itself in the same iteration. Thanks @alaingilbert. - Add ability to tag jobs and to cancel jobs by tag. Thanks @Zerrossetto.
- Improve schedule docs. Thanks @Zerrossetto.
- Additional docs fixes by @fkromer and @yetingsky.
- Fixed issues where scheduling a job with a functools.partial as the job function fails. Thanks @dylwhich.
- Fixed an issue where scheduling a job to run every >= 2 days would cause the initial execution to happen one day early. Thanks @WoLfulus for identifying this and providing a fix.
- Added a FAQ item to describe how to schedule a job that runs only once.
- Fixed an issue with unicode handling in setup.py that was causing trouble on Python 3 and Debian (dbader#27). Thanks to @waghanza for reporting it.
- Added an FAQ item to describe how to deal with job functions that throw exceptions. Thanks @mplewis.
- Added support for scheduling jobs on specific weekdays. Example:
schedule.every().tuesday.do(job)
orschedule.every().wednesday.at("13:15").do(job)
(Thanks @abultman.) - Run tests against Python 2.7 and 3.4. Python 3.3 should continue to work but we're not actively testing it on CI anymore.
- Fixed history (no code changes).
- This release introduces two new features in a backwards compatible way:
- Allow jobs to cancel repeated execution: Jobs can be cancelled by calling
schedule.cancel_job()
or by returningschedule.CancelJob
from the job function. (Thanks to @cfrco and @matrixise.) - Updated
at_time()
to allow running jobs at a particular time every hour. Example:every().hour.at(':15').do(job)
will runjob
15 minutes after every full hour. (Thanks @mattss.) - Refactored unit tests to mock
datetime
in a cleaner way. (Thanks @matts.)
- Fixed an issue with
next_run()
throwing aValueError
exception when the job queue is empty. Thanks to @dpagano for pointing this out and thanks to @mrhwick for quickly providing a fix.
- Fixed issue with
at_time
jobs not running on the same day the job is created (Thanks to @mattss)
- Added
schedule.next_run()
- Added
schedule.idle_seconds()
- Args passed into
do()
are forwarded to the job function at call time - Increased test coverage to 100%
- Changed default
delay_seconds
forschedule.run_all()
to 0 (from 60) - Increased test coverage
- API change: renamed
schedule.run_all_jobs()
toschedule.run_all()
- API change: renamed
schedule.run_pending_jobs()
toschedule.run_pending()
- API change: renamed
schedule.clear_all_jobs()
toschedule.clear()
- Added
schedule.jobs
- Fix packaging
- README fixes
- API change: renamed
schedule.tick()
toschedule.run_pending_jobs()
- Updated README and
setup.py
packaging
- Initial release