From: Beni C. <cb...@te...> - 2003-06-12 13:21:07
|
I'd like to process RST with a makefile so that I get non-zero exit status when there are warnings - but without aborting on the first problem. In other words, I want to decouple the sensitivty of the exit status to message severity be different from the sensitivity to abort processing - unless I missed something, currently the exit status is non-zero if and only if docutils aborts processing. I can write a patch if the feature makes sense to you. -- Beni Cherniavsky <cb...@us...> |
From: David G. <go...@py...> - 2003-06-12 15:04:15
|
Beni Cherniavsky wrote: > I'd like to process RST with a makefile so that I get non-zero exit > status when there are warnings - but without aborting on the first > problem. In other words, I want to decouple the sensitivty of the > exit status to message severity be different from the sensitivity to > abort processing - unless I missed something, currently the exit > status is non-zero if and only if docutils aborts processing. Sounds reasonable. How exactly would it work? What exit status would result from each of these situations? * Document processes with no issues. * Level-1 (INFO) system message is generated but not displayed (it's below the report_level setting); process completes (it's below the halt_level setting). * Level-1 (INFO) system message is generated and *is* displayed; process completes. * Level-1 (INFO) system message is generated and process aborts. Would the severity level affect the exit status? There's Level-2 (WARNING), Level-3 (ERROR), and Level-4 (SEVERE). -- David Goodger http://starship.python.net/~goodger Programmer/sysadmin for hire: http://starship.python.net/~goodger/cv |
From: Beni C. <cb...@te...> - 2003-06-12 15:23:15
|
David Goodger wrote on 2003-06-12: > Beni Cherniavsky wrote: > > I'd like to process RST with a makefile so that I get non-zero > > exit status when there are warnings - but without aborting on the > > first problem. In other words, I want to decouple the sensitivity > > of the exit status to message severity be different from the > > sensitivity to abort processing - unless I missed something, > > currently the exit status is non-zero if and only if docutils > > aborts processing. > > Sounds reasonable. How exactly would it work? What exit status would > result from each of these situations? > > * Document processes with no issues. > > * Level-1 (INFO) system message is generated but not displayed (it's > below the report_level setting); process completes (it's below the > halt_level setting). > > * Level-1 (INFO) system message is generated and *is* displayed; > process completes. > > * Level-1 (INFO) system message is generated and process aborts. > > Would the severity level affect the exit status? There's Level-2 > (WARNING), Level-3 (ERROR), and Level-4 (SEVERE). > My minimum requirement is to have some ``--exit-status=<level>`` (bad name) option so that the exit status is non-zero iff there was any message generated (never mind if ignored) at least as severe. This option should probably default to the value of ``--halt``. The second question is what should the exit status be. Returning the max encoutered message level (or 0) makes sense and can't harm. So the alghorithm would be: if max_encoutered_level >= exit_status_threshold: sys.exit(max_encoutered_level) else: sys.exit(0) I'm not sure how to implement it. Currently docutils has no ``sys.exit()`` anywhere (except optik on --help/--version), the exit status is there thanks to Python returning 1 on an uncaught exception. Where can I add ``sys.exit()`` so that programs calling docutils won't get surprise exits? This can only go into the frontend that is not called by other's code, right? -- Beni Cherniavsky <cb...@us...> |
From: David G. <go...@py...> - 2003-06-12 20:37:34
|
Beni Cherniavsky wrote: > My minimum requirement is to have some ``--exit-status=<level>`` > (bad name) option so that the exit status is non-zero iff there was > any message generated (never mind if ignored) at least as severe. How about "--exit=<level>", similar to "--halt" and "--report"? The destination would be ``settings.exit_level``. > This option should probably default to the value of ``--halt``. "--halt" will halt processing immediately, so defaulting to the same value will have no effect. Might as well set the default of "--exit" to 5. > The second question is what should the exit status be. Returning > the max encoutered message level (or 0) makes sense and can't harm. Except that at present, status==1 means "abnormal exit". Status==2 generally means "command line syntax error", although Optik/optparse doesn't support that. If we want to differentiate from a "halt" abnormal exit, we should add an offset to the max encountered message level (perhaps 100?). The help text could be as follows: --exit=<level> Enable a non-zero exit status for normal exit if non-halting system messages (at or above <level>) were generated. Levels as in --report. Default is 5 (disabled). Exit status is the maximum system message level plus 100 (101 for INFO, etc.). > So the alghorithm would be: > > if max_encoutered_level >= exit_status_threshold: > sys.exit(max_encoutered_level) > else: > sys.exit(0) I'd leave off the else clause; just allow the program to exit normally. > I'm not sure how to implement it. Keep track of the maximum system message level in docutils.utils.Reporter. > Currently docutils has no ``sys.exit()`` anywhere (except optik on > --help/--version), the exit status is there thanks to Python > returning 1 on an uncaught exception. Where can I add > ``sys.exit()`` I think the logical place for it would be at the end of docutils.core.Publisher.publish, just before ``return output``. > so that programs calling docutils won't get surprise exits? That's tricky. I think that docutils.core.Publisher.publish and the docutils.core.publish_* convenience functions could grow "enable_exit=None" parameters. Front ends that support sys.exit can pass True/1. Existing applications won't be affected. -- David Goodger http://starship.python.net/~goodger Programmer/sysadmin for hire: http://starship.python.net/~goodger/cv |
From: David G. <go...@py...> - 2003-06-16 17:45:35
|
I have implemented the "--exit" option and corresponding "exit_level" setting: --exit=<level> Enable a non-zero exit status for normal exit if non- halting system messages (at or above <level>) were generated. Levels as in --report. Default is 5 (disabled). Exit status is the maximum system message level plus 10 (11 for INFO, etc.). The ``docutils.core.Publisher.publish`` method and the ``docutils.core.publish_*`` convenience functions have grown ``enable_exit`` parameters. The default for ``publish_cmdline`` is 1 (enabled); all other defaults are None (disabled). This means that exit status is enabled for all the front-end tools, but disabled for programmatic uses (unless explicitly overridden, of course). -- David Goodger |