ChangeLog

0.18.1 - 2022 Oct 4

  • new method Scheduler.keep_only useful in simpler cases where the caller knows which jobs to keep

0.18.0 - 2022 Oct 4

  • 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

0.17.0 – 2022 Sep 6

  • 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

0.16.4 – 2022 Sep 6

  • 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

0.16.3 – 2022 Sep 4

  • new methods in PureScheduler:

    • successors(job) to iterate over a job’s successors

      • as well as predecessors(job)

    • predecessors_upstream() and successors_downstream() to compute the closure of the requirement relationship in both directions

    • bypass_and_remove(job) allows to prune jobs from a scheduler while preserving the logic

    • keep_only_between() to cut parts of a scheduler

    • also, PureScheduler becomes iterable, and iterates over its jobs

    • export_as_graphic(filename, format) and export_as_svg(filename) complement export_as_png

  • job.requires(job) does nothing this is to ease the a posteriori addition of a global first step like typically check_lease

0.15.2 – 2022 Mar 20

  • in anticipation for 3.11, scheduler.run() now creates an event loop when needed, i.e. when get_running_loop() triggers the RuntimeError exception

0.15.1 - 2022 Mar 18

  • fix release 0.15.0 that is broken, DO NOT USE

  • was using asyncio.run() to implement the synchronous wrappers run() and shutdown() on a Scheduler object but asyncio.run() is way to intrusive for that

0.15.0 - 2022 Mar 8

  • for python-3.10: remove the loop parameter when creating a Queue

0.14.3 - 2020 May 13

  • again based on sharable Makefile.pypi

0.14.2 - 2020 May 13

  • no change in code

  • reviewed recipe for uploading to PyPI

  • long_description now based on proper README in markdown

0.14.1 - 2018 Nov 20

  • for Python-3.5 and below: remove use of ModuleNotFoundError, use ImportError instead

0.14.0 - 2018 Nov 20

  • PureScheduler.add() returns the job, and no longer the scheduler. Use update() when cascading is needed.

0.13.2 - 2018 Oct 10

  • minor tweaks in the way things are displayed

0.13.1 - 2018 Sep 20

  • 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.

0.13.0 - 2018 Aug 30

  • 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.

0.12.11 - 2018 Aug 23

  • new method iterate_jobs() on schedulers to scan all jobs in scheduler and nested sons.

0.12.10 - 2018 Jul 5

  • iron unicode support detection, primarily for testing apssh within a ubuntu virtualbox

0.12.9 - 2018 Jul 5

  • 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

0.12.7 - 2018 Jul 4

  • fix packaging, so that orderedset can properly be installed as a dependency

  • intermediate releases were still broken in this respect

0.12.2 - 2018 Jun 14

  • 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

0.11.4 - 2018 Jun 12

  • schedulers are graphically rendered with right corners instead of rounded

  • darker color for critical jobs - plain red was too much

0.11.3 - 2018 Jun 12

  • new convenience method export_as_pngfile()

0.11.2 - 2018 May 15

  • 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()

0.11.1 - 2018 May 10

This is a release candidate for 1.0:

major changes

  • default value for critical is now True 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 into check_cycles()

enhancements

  • schedulers have a new attribute shutdown_timeout, defaults to 1s

  • list(), list_safe(), check_cycles() and sanitize() 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

minor

  • scheduler methods no longer accept a loop parameter

0.10.2 - 2018 May 2

  • empty schedulers now run fine

0.10.1 - 2018 Apr 30

  • 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 as Scheduler

  • see issue #1 : jobs_window and timeout are no longer parameters to co_run(), but attributes of a PureScheduler 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

0.9.1 - 2018 Apr 25

  • 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

0.8.2 - 2018 Apr 20

  • Scheduler.list() shows nested jobs too

  • resurrected the PrintJob class

0.8.1 - 2018 Apr 19

  • 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) or orchestrate() (legacy)

    • coroutine co_orchestrate() is now renamed into co_run(); co_orchestrate() is now absent from the code

  • new class Watch for more elegant tests and nicer outputs

0.7.1 - 2018 Apr 17

  • 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

0.6.1 - 2018 Mar 12

  • adopt new layout for the doc - no source/ subdir under sphinx

  • from asynciojobs import version

  • cosmetic micro changes in the doc

0.6.0 - 2018 Feb 25

  • 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

0.5.8 - 2018 Jan 16

  • introduce dot_label() on jobs as a means to override label() when producing a dotfile

0.5.7 - 2017 Dec 19

  • minor tweaks suggested by pylint

0.5.6 - 2017 Dec 18

  • bugfix, remove one occurrence of Exceptin instead of Exception

0.5.5 - 2017 Nov 2

  • just flushing a pile on harmless cosmetic changes

0.5.4 - 2016 Dec 15

  • 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 ‘*’)

0.5.2 - 2016 Dec 8

  • setup uses setuptools and no distutils anymore

  • cleaned init.py

  • use super() in subclasses

  • autodoc should now outline coroutines

  • 0.5.1 broken

0.5.0 - 2016 Dec 6

  • 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

0.4.6 - 2016 Dec 5

  • 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

0.4.4 - 2016 Dec 5

  • feedback message is forced for severe conditions (crit. exc. and timeout)

  • debrief(details)

  • minor improvements in export_as_dotfile

0.4.3 - 2016 Dec 2

  • hardened export_as_dotfile()

0.4.2 - 2016 Dec 1

  • can create jobs and sequences with scheduler=

0.4.1 - 2016 Nov 30

  • sphinx documentation on http://nepi-ng.inria.fr/asynciojobs

0.4.0 - 2016 Nov 21

  • rename engine into scheduler

0.3.4 - 2016 Nov 20

  • a first sphinx doc, but not yet available at readthedocs.org because I could not get rtd to run python3.5

0.3.3 - 2016 Nov 17

  • Job’s default_label() to provide a more meaningful default when label is not set on a Job instance

0.3.2 - 2016 Nov 17

  • 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

0.3.1 - 2016 Nov 15

  • 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

0.2.3 - 2016 Oct 23

  • Engine.store_as_dotfile() can export job requirements graph to graphviz

0.2.2 - 2016 Oct 20

  • bugfix for when using Engine.update/Engine.add with a Sequence

0.2.1 - 2016 Oct 7

  • cleanup

0.2.0 - 2016 Oct 4

  • robust and tested management of requirements throughout

0.1.2 - 2016 Oct 2

  • only cosmetic

0.1.1 - 2016 Sep 28

  • hardened and tested Sequence - can be nested and have required=

  • jobs are listed in a more natural order by list() and debrief()

0.1.0 - 2016 Sep 27

  • 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

0.0.6 - 2016 Sep 21

  • in debug mode, show stack corresponding to caught exceptions

  • various cosmetic

0.0.5 - 2016 Sep 21

  • bugfix - missing await

0.0.4 - 2016 Sep 20

  • Engine.verbose

  • robustified some corner cases

0.0.3 - 2016 Sep 19

  • Engine.why() and Engine.debrief()

0.0.2 - 2016 Sep 15

  • tweaking pypi upload

0.0.1 - 2016 Sep 15

  • initial version