charmhelpers.core.reactive.helpers

any_file_changed Check if any of the given files have changed since the last time this was called.
data_changed Check if the given set of data has changed since the previous call.
mark_invoked Mark the given ID as having been invoked, for use with was_invoked().
was_invoked Returns whether the given ID has been invoked before, as per mark_invoked().
charmhelpers.core.reactive.helpers.any_file_changed(filenames, hash_type='md5')

Check if any of the given files have changed since the last time this was called.

Parameters:
  • filenames (list) – Names of files to check.
  • hash_type (str) – Algorithm to use to check the files.
charmhelpers.core.reactive.helpers.data_changed(data_id, data, hash_type='md5')

Check if the given set of data has changed since the previous call.

This works by hashing the JSON-serialization of the data. Note that, while the data will be serialized using sort_keys=True, some types of data structures, such as sets, may lead to false positivies.

Parameters:
  • data_id (str) – Unique identifier for this set of data.
  • data – JSON-serializable data.
  • hash_type (str) – Any hash algorithm supported by hashlib.
charmhelpers.core.reactive.helpers.mark_invoked(invocation_id)

Mark the given ID as having been invoked, for use with was_invoked().

charmhelpers.core.reactive.helpers.was_invoked(invocation_id)

Returns whether the given ID has been invoked before, as per mark_invoked().

This is useful for ensuring that a given block only runs one time:

def foo():
    if was_invoked('foo'):
        return
    do_something()
    mark_invoked('foo')

This is also available as a decorator at only_once().