llama.vetoes module¶
A mechanism for vetoing steps in an analysis.
-
exception
llama.vetoes.
VetoException
¶ Bases:
OSError
Indicates that a FileHandler’s generation was vetoed and should proceed no futher at this time. This is a benign exception that should be caught at file generation time.
-
class
llama.vetoes.
VetoHandler
(eventdir, manifest, vetoes)¶ Bases:
llama.vetoes.VetoHandlerTuple
,llama.flags.FlagsMixin
A class that performs veto checks to see whether a FileHandler for a specific trigger should be vetoed. Instances can be called like functions to mark a FileHandler as vetoed.
-
check
()¶ No return value. Raises a
VetoException
if this file has somehow been vetoed, which should be interpreted as meaning that file generation should be aborted.First checks if
self.permanently_vetoed()
returnsTrue
(this is to be interpreted as meaning that the file should never be generated); if so,VetoException
is raised.Next, runs all veto functions in
self.vetoes
to see if these files have been vetoed in any way. If and when the first veto fails (returns True), its corresponding action (see thevetoes
argument in__init__
) is run, further vetoes are not checked, andVetoException
is raised.If these procedures are completed without a
VetoException
being raised, the method returnsNone
.
-
permanently_vetoed
()¶ Check whether the files in
self.manifest
should be generated based on whether their vetofiles exist (seevetofilepaths
andvetofilenames
); as long as this is the case, the files will be considered permanently vetoed and should not be generated.
-
read_json
()¶ Read in the JSON dump of this vetofile. Returns
None
if the file is not vetoed.
-
unveto
()¶ Remove PERMANENT veto status by deleting vetofiles for the file names specified in
self.manifest
and event directory specified byeventdir
. This does not affect the checks contained inself.vetoes
that are called byself.check
, so file generation will still get vetoed if those automated checks fail. This method is more useful for removing permanent vetoes from files that were manually vetoed or vetoed under older pipeline versions.
-
property
vetofilenames
¶ A list of filenames whose existence indicates that these files should never be generated (at least for as long as these files exist). The contents of these files can optionally contain text descriptions of why the veto happened.
-
property
vetofilepaths
¶ Absolute paths to vetofiles listed in
self.vetofilenames
(created by joiningself.eventdir
to those filenames).
-
-
class
llama.vetoes.
VetoHandlerTuple
(eventdir, manifest, vetoes)¶ Bases:
tuple
-
property
eventdir
¶ Alias for field number 0
-
property
manifest
¶ Alias for field number 1
-
property
vetoes
¶ Alias for field number 2
-
property
-
class
llama.vetoes.
VetoMixin
¶ Bases:
object
A feature for FileHandler-like objects (producing a manifest and an eventdir) that defines a list of vetoes in a way that inherits additively from superclasses. Notably, provides a
veto
property returning aVetoHandler
for this instance. New vetoes can be added to classes by defining them inclass_vetoes
(vetoes from superclassesclass_vetoes
attributes are dynamically included in theVetoHandler
returned byveto
. SeeVetoMixin.vetoes
docstring for details.-
class_vetoes
= ()¶
-
static
decorate_checkin
(func)¶ If a
VetoException
was raised during generation, copy vetoes from the temporary event directory back to the parent directory and commit them.
-
static
decorate_checkout
(func)¶ Copy any vetoes for this filehandler over to the generation directory.
-
static
decorate_generate
(func)¶ Check whether this filehandler has been vetoed before proceeding with generation.
-
property
veto
¶ Returns a
VetoHandler
instance for thisFileHandler
. SeeVetoHandler
docstring for more info. Combines vetoes from all superclasses.
-
classmethod
vetoes
()¶ - The list of veto checks and their corresponding actions called by
self.veto.checks()
. Returns the vetoes defined incls.class_vetoes
, where vetoes specific to this class are defined, along with the vetoes returned bycls.class_vetoes
in all superclasses; for example, the order of vetoes pulled from class_vetoes (in a class and and its superclasses) for a class F with inheritance treeA B C \ / / D E \ / F
would be: F, D, A, B, E, C (with duplicates after the first instance of a veto check removed, where the ordering of superclasses is listed left-to-right in the above graph).
By default, no vetoes are applied to a base FileHandler. Vetoes must be added to FileHandler subclasses. If you really, truly need to get rid of vetoes from superclasses, consider not inheriting from those superclasses or factoring the veto functionality out of those superclasses as a mixin before overriding this property to only return a reduced veto list.
A description of the form of this data structure from the
VetoHandler.__init__
docstring:
An iterable of N length-2 iterables of the form:
((veto1, action1), …, (vetoN, actionN))
matching
veto
functions toaction
functions.veto
functions are functions that takeeventdir
as arguments and returnTrue
if that particular veto criterion has been met (for example, aveto
could returnTrue
if a trigger has somehow been marked as a test trigger).action
functions are callables that indicate some action that should be taken to handle theveto
.action
can also beNone
for the default behavior: to mark the set of filenames (specified bymanifest
) for this trigger as vetoed, which would prevent those files from being generated.Alternatively, you can also use an actual function for
action
to do something more subtle than just vetoing the file (e.g. delaying file generation, advanced error logging, dummy testing, etc; this could even involve an alternative file generation method for test cases or edge cases). Theveto
functions will be run in order and the first to returnTrue
will have itsaction
executed; the rest will be ignored.NOTE that if you specify an action, the file will NOT be vetoed by default (since your veto-handling might involve something like delaying file generation or generating it through some other method, both of which are cases where you are not actually trying to prevent the file from being generated). If you want to fully veto file generation, you will have to manually call this
VetoHandler
instance at the end of youraction
to mark these files as PERMANENTLY vetoed and prevent file generation.A
VetoException
WILL always be raised, however, since the calledaction
is supposed to cancel any IMMEDIATE file generation by the default method (even if later attempts are still allowed).
-
-
llama.vetoes.
eventdir_path_contains_string_injection
(eventdir)¶ If the path to the trigger directory contains the substring ‘INJECTION’ (case-insensitive), this veto is triggered (returns True).
-
llama.vetoes.
eventdir_path_contains_string_manual
(eventdir)¶ If the path to the trigger directory contains the substring ‘MANUAL’ (case-insensitive), this veto is triggered (returns True).
-
llama.vetoes.
eventdir_path_contains_string_scratch
(eventdir)¶ If the path to the trigger directory contains the substring ‘SCRATCH’ (case-insensitive), this veto is triggered (returns True).
-
llama.vetoes.
eventdir_path_contains_string_test
(eventdir)¶ If the path to the trigger directory contains the substring ‘TEST’ (case-insensitive), this veto is triggered (returns True).
-
llama.vetoes.
generation_dir_copy_vetoes
(vetoed, tmpdir)¶ Copy any vetofiles for the
vetoed
filehandler from the temporary directorytmpdir
back to the eventdir. Vital for cleaning up after a failed generation attempt (in which the filehandler manifest would NOT be copied because the files should never have been generated; see _generation_dir_copy_manifest).
-
llama.vetoes.
utcnow
()¶ Return a new datetime representing UTC day and time.