- new method Scheduler.keep_only useful in simpler cases where the caller knows which jobs to keep
- rewrote successors* and predecessors* to be usable with a collection of jobs, and to always return a set
- rewrote keep_only_between; previous implementation was flawed when there were nodes not comparable with the threshholds
- no change since 0.16.4 except for a minor tweak in the sphinx config
- however since we now rely on python-3.9 this deserves a clearer bump in the version number
- previous version was not working with Python3.9 due to using a | to refer to a union type
- this version now does use types hints like
set[AbstractJob]
so this means 3.9 is required - renamed tests/tests_stuff.py into tests/test_stuff.py and move to using pytest as a test driver
- dusted off doc building
-
new methods in
PureScheduler
:successors(job)
to iterate over a job's successors- as well as
predecessors(job)
- as well as
predecessors_upstream()
andsuccessors_downstream()
to compute the closure of the requirement relationship in both directionsbypass_and_remove(job)
allows to prune jobs from a scheduler while preserving the logickeep_only_between()
to cut parts of a scheduler- also,
PureScheduler
becomes iterable, and iterates over its jobs export_as_graphic(filename, format)
andexport_as_svg(filename)
complementexport_as_png
-
job.requires(job)
does nothing this is to ease the a posteriori addition of a global first step like typically check_lease
- in anticipation for 3.11,
scheduler.run()
now creates an event loop when needed, i.e. whenget_running_loop()
triggers theRuntimeError
exception
- fix release 0.15.0 that is broken, DO NOT USE
- was using
asyncio.run()
to implement the synchronous wrappersrun()
andshutdown()
on aScheduler
object butasyncio.run()
is way to intrusive for that
- for python-3.10: remove the
loop
parameter when creating aQueue
- again based on sharable Makefile.pypi
- no change in code
- reviewed recipe for uploading to PyPI
- long_description now based on proper README in markdown
- for Python-3.5 and below: remove use of ModuleNotFoundError, use ImportError instead
PureScheduler.add()
returns the job, and no longer the scheduler. Useupdate()
when cascading is needed.
- minor tweaks in the way things are displayed
- bugfix: in dot output, the source and destination of arrows need to be atomic jobs, not subgraphs; we had that wrong in case where nesting depth was more than 2.
- re-enabled auto-shutdown() message broadcast system; this method is sent to all jobs within a scheduler when co_run() finishes;
- a job in a nested scheduler receives this event when its most enclosing scheduler finishes, not when the highest-level scheduler finishes;
- the feature is deemed complete and well tested including wrt shutdown_timeout.
- new method
iterate_jobs()
on schedulers to scan all jobs in scheduler and nested sons.
- iron unicode support detection, primarily for testing apssh within a ubuntu virtualbox
- make OrderedSet optional again; too cumbersome on some distros like fedora
- OrderedSet will be used if present, otherwise use plain sets
- can install with either
pip3 install asynciojobs[ordered]
- or equivalently with
pip3 install orderedset
- release 0.12.8 is broken
- fix packaging, so that
orderedset
can properly be installed as a dependency - intermediate releases were still broken in this respect
- use OrderedSet's to preserve creation order
- more balanced graphical layout in case of nested schedulers
- 0.12.1 was broken, it used a couple of f-strings
- schedulers are graphically rendered with right corners instead of rounded
- darker color for critical jobs - plain red was too much
- new convenience method
export_as_pngfile()
- alter signature of co_shutdown() to remove argument
depth
, which is not relevant, and creates confusion for user libraries. - there is still a need to more accurately specify the expected behaviour of co_shutdown() though, see also notes in PureScheduler.co_shutdown()
This is a release candidate for 1.0:
- default value for
critical
is nowTrue
for all species, jobs and schedulers alike - see #7 - shutdown() is no longer implicitly called by
run()
, it is now up to the caller to call this method - see #10 - critical schedulers now propagate exceptions so they can bubble up the nested schedulers tree - see #12
- co_shutdown() now must accept mandatory argument depth
rain_check()
renamed intocheck_cycles()
- schedulers have a new attribute
shutdown_timeout
, defaults to 1s list()
,list_safe()
,check_cycles()
andsanitize()
know about nested schedulers- new method
PureScheduler.remove(job)
- AbstractJob.requires() accepts kwarg
remove=True
to allow for removal of requirements - enhance border width of critical jobs in dot representation for colorblind people
list_safe()
now shows requirements too- more graphs in the README
- scheduler methods no longer accept a loop parameter
- empty schedulers now run fine
-
make schedulers nestable by default - see issue #3
Scheduler
is now the nestable class (formerly known as SchedulerJob);PureScheduler
is the new name for what was formerly known asScheduler
-
see issue #1 :
jobs_window
andtimeout
are no longer parameters toco_run()
, but attributes of aPureScheduler
object -
graphical layout - see issue #4
- critical jobs or schedulers are shown with a red border
- forever jobs or schedulers are shown with a dashed line
- graphical output should now properly show nested schedulers in all cases of imbrications
- textual output marginally nicer too
- removed the formal definition of the Schedulable type hint that was only clobbering the doc
- major renaming; all methods that produce pieces of text for representing objects are called repr_something()
- more tools in tests.utils
Scheduler.list()
shows nested jobs too- resurrected the
PrintJob
class
- new class SchedulerJob allows to ease the creation of nested schedulers; no support yet for graphical representation though
- in the process, reviewed names for Scheduler methods:
- for synchroneous calls, one can use
run()
(preferred) ororchestrate()
(legacy) - coroutine
co_orchestrate()
is now renamed intoco_run()
;co_orchestrate()
is now absent from the code
- for synchroneous calls, one can use
- new class Watch for more elegant tests and nicer outputs
- thoroughly reviewed the way custom labels are defined and used; classes that
inherit
AbstractJob
can redefine text_label() and graph_label() - graph production: both methods (dot and native digraph) now consistently
accept argument
show_ids
- major overhaul on the documentation
- using the numpy style in docstrings
- examples of nested schedulers
- section on troubleshooting
- code is now totally pep8/flake8- and pylint- clean
- adopt new layout for the doc - no source/ subdir under sphinx
- from asynciojobs import version
- cosmetic micro changes in the doc
- Scheduler.graph() can natively visualize in a notebook
- Scheduler.run() an alias for orchestrate
- printing a scheduler shows number of jobs
- doc uses new sphinx theme
- introduce dot_label() on jobs as a means to override label() when producing a dotfile
- minor tweaks suggested by pylint
- bugfix, remove one occurrence of Exceptin instead of Exception
- just flushing a pile on harmless cosmetic changes
- only minor changes, essentially PEP8-friendly
- with a very shy start at type hints
- but documentation w/ type hints is still unclear (in fact even without them, I can see weird extra '*')
- setup uses setuptools and no distutils anymore
- cleaned init.py
- use super() in subclasses
- autodoc should now outline coroutines
- 0.5.1 broken
- windowing capability to limit number of simultaneous jobs
- new status in job lifecycle: idle → scheduled → running → done 'scheduled' means : waiting for a slot in window
- much nicer dotfile output, using double quotes to render strings instead of identifiers like we were trying to do
- PrintJob can be created in a scheduler as well
- 0.4.5 is broken in PrintJob
- feedback message is forced for severe conditions (crit. exc. and timeout)
- debrief(details)
- minor improvements in export_as_dotfile
- hardened export_as_dotfile()
- can create jobs and sequences with scheduler=
- sphinx documentation on http://nepi-ng.inria.fr/asynciojobs
- rename engine into scheduler
- a first sphinx doc, but not yet available at readthedocs.org because I could not get rtd to run python3.5
- Job's default_label() to provide a more meaningful default when label is not set on a Job instance
- major bugfix, sometimes critical job was not properly dealt with because it was last
- new class PrintJob with an optional sleep delay
- Engine.list(details=True) gives details on all the jobs provided that they have the details() method
- no semantic change, just simpler and nicer
- cosmetic : nicer list() that shows all jobs with a 4-characters pictogram that shows critical / forever / done/running/idle and if an exception occured
- verbosity reviewed : only one verbose flag for the engine obj
- Engine.store_as_dotfile() can export job requirements graph to graphviz
- bugfix for when using Engine.update/Engine.add with a Sequence
- cleanup
- robust and tested management of requirements throughout
- only cosmetic
- hardened and tested Sequence - can be nested and have required=
- jobs are listed in a more natural order by list() and debrief()
- the Sequence class for modeling simple sequences without having to worry about the requires deps
- a critical job that raises an exception always gets its stack traced
- in debug mode, show stack corresponding to caught exceptions
- various cosmetic
- bugfix - missing await
- Engine.verbose
- robustified some corner cases
- Engine.why() and Engine.debrief()
- tweaking pypi upload
- initial version