Как определить неисправное правило в onerror?

Я использую змейку для некоторой автоматизации, и у меня возник вопрос об определении того, какое правило не работает при вызове onerror.

Я пробовал перебирать правила, чтобы определить, какие выходы не существуют, но правила упорядочены неправильно.

Вот код, который я использую при ошибке:

#find out which rule failed
failed_rule = None

for rulename in dir(rules):
    rule = getattr(rules,rulename)
    if hasattr(rule,'output'):
        output = getattr(rule,'output')

        print ('rule: ',rulename, output)

        #check if output file exists
        if output and (not os.path.exists(str(output))):
            failed_rule = rule
            print ('Failed rule is ', rulename)
            break

заранее спасибо


person Jan-Michael Tressler    schedule 08.03.2019    source источник


Ответы (1)


Я смог решить свою проблему, выполнив поиск «правила» в возвращенном файле журнала в onerror. В ходе тестирования я убедился, что последнее правило, указанное в файле журнала, является файлом журнала ошибок. Следующий код работает с этим предположением.

#find failed rule
with Path(log).open() as f:
    rule_names = [line.strip() for line in f if line.startswith('rule')]

    if rule_names:
        failed_rule_line = rule_names[-1]
        failed_rulename = failed_rule_line.split()[1]
        failed_rulename = failed_rulename.replace(':','')

        #find failed rule
        failed_rule = None

        for rulename in dir(rules):
            if rulename == failed_rulename:
                failed_rule = getattr(rules,rulename)
                print ('Failed rule is ', rulename)
                break
person Jan-Michael Tressler    schedule 10.03.2019