def runnable_status(self):
        if getattr(Options.options, 'no_tests', True):
            return Task.SKIP_ME

        if not self.generator.bld.cmd in ('build', 'check'):
            return Task.SKIP_ME
        
        ret = super(hwaf_utest, self).runnable_status()
        #print("%s: ret=%s" % (self.inputs[0].name, ret))
        if ret in (Task.SKIP_ME, Task.RUN_ME):
            if getattr(Options.options, 'all_tests', False):
                depends = waflib.Utils.to_list(getattr(self.generator, 'depends_on', []))
                #print("%s: deps=%s" % (self.inputs[0].name, depends))
                if depends:
                    results = getattr(self.generator.bld, 'hwaf_utest_results', [])
                    dep = 0
                    for tup in results:
                        fname = tup[0]
                        fname = osp.basename(fname)
                        #print("%s: fname=%s ?" % (self.inputs[0].name, fname))
                        if fname in depends:
                            #print("%s: fname=%s YES!" % (self.inputs[0].name, fname))
                            dep += 1
                    if dep == len(depends):
                        #print("%s: ALL DEPS OK!" % (self.inputs[0].name,))
                        return Task.RUN_ME
                    #print("%s: RUN LATER" % (self.inputs[0].name,))
                    return Task.ASK_LATER
                else:
                    return Task.RUN_ME
        return ret
This will add the notification to the database queue. A cron job will then get the notification,
dataset/ETHPy150Open hwaf/hwaf/py-hwaftools/hwaf-rules.py/hwaf_utest.runnable_status--crossover with--dataset/ETHPy150Open kevinrenskers/django-generic-notifications/notifications/backend/__init__.py/BaseNotificationBackend._queue