Is there a more elegant way to handle determing fail status?

Oscar Benjamin oscar.j.benjamin at gmail.com
Wed Jan 16 00:56:04 CET 2013


On 15 January 2013 23:24, J <dreadpiratejeff at gmail.com> wrote:
> Ok, so I have a diagnostic tool, written by someone else. That tool
> runs a series of small tests defined by the user and can simplified
> summary output that can be one of the following:
>
> FAILED_CRITICAL
> FAILED_HIGH
> FAILED_MEDIUM
> FAILED_LOW
> PASSED
>
> I also have a wrapper script I wrote to run these tests, summarize the
> results of all tests aggregated and then fail based on a particular
> fail level.
>
> The idea is that if I run 3 tests with the diagnostic tool and it
> tells me the following:
>
> testA: PASSED
> testB: FAILED_MEDIUM
> testC: PASSED
>
> AND I told the wrapper to only fail on HIGH or above, the wrapper will
> tell me that I had a medium failure, but the wrapper will still exit
> with a 0 (success)
>
> if I get the same results as above, but tell the wrapper to fail on
> LOW, then it will tell me I had that medium failure, but the wrapper
> will exit with a 1 (failure).
>
> The problem is that my exit determination looks like this:
>
>     if fail_priority == fail_levels['FAILED_CRITICAL']:
>         if critical_fails:
>             return 1
>     if fail_priority == fail_levels['FAILED_HIGH']:
>         if critical_fails or high_fails:
>             return 1
>     if fail_priority == fail_levels['FAILED_MEDIUM']:
>         if critical_fails or high_fails or medium_fails:
>             return 1
>     if fail_priority == fail_levels['FAILED_LOW']:
>         if critical_fails or high_fails or medium_fails or low_fails:
>             return 1
>
>     return 0
>
[SNIP]
>
> The exit code determination above works, but it just feels inelegant.
> It feels like there's a better way of implementing that, but I can't
> come up with one that still honors the fail level properly (e.g. other
> solutions will fail on medium, but won't fail properly on medium OR
> higher).

How about the following?

FAILED_CRITICAL = 4
FAILED_HIGH = 3
FAILED_MEDIUM = 2
FAILED_LOW = 1
PASSED = 0

if fail_level:
    print fail_message
if fail_level > fail_priority:
    return 1


Oscar



More information about the Python-list mailing list