[Yum-devel] [PATCH] add doUtilTransaction() method to YumUtilBase.
Tim Lauridsen
tim.lauridsen at googlemail.com
Wed Sep 16 17:03:01 UTC 2009
On 09/16/2009 06:44 PM, Seth Vidal wrote:
> This method handles a bunch of the exit cases we deal
> with coming out of doTransaction() so we don't have to write
> the same exception catching code over and over again. This will be tied into
> some yum-utils updates, too.
> ---
> utils.py | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
> 1 files changed, 61 insertions(+), 4 deletions(-)
>
> diff --git a/utils.py b/utils.py
> index 5456c68..aebb959 100644
> --- a/utils.py
> +++ b/utils.py
> @@ -18,11 +18,15 @@ import time
>
> import yum
> from cli import *
> +from yum import Errors
> from yum import _
> +from yum import logginglevels
> from optparse import OptionGroup
>
> import yum.plugins as plugins
>
> +
> +
> class YumUtilBase(YumBaseCli):
> def __init__(self,name,ver,usage):
> YumBaseCli.__init__(self)
> @@ -46,7 +50,7 @@ class YumUtilBase(YumBaseCli):
> while True:
> try:
> self.doLock()
> - except yum.Errors.LockError, e:
> + except Errors.LockError, e:
> if "%s" %(e.msg,) != lockerr:
> lockerr = "%s" %(e.msg,)
> self.logger.critical(lockerr)
> @@ -83,7 +87,7 @@ class YumUtilBase(YumBaseCli):
> pc.enabled_plugins = self._parser._splitArg(opts.enableplugins)
> self.conf
>
> - except yum.Errors.ConfigError, e:
> + except Errors.ConfigError, e:
> self.logger.critical(_('Config Error: %s'), e)
> sys.exit(1)
> except ValueError, e:
> @@ -108,10 +112,63 @@ class YumUtilBase(YumBaseCli):
> self._getRpmDB()
> self._getRepos(doSetup = True)
> self._getSacks()
> - except yum.Errors.YumBaseError, msg:
> + except Errors.YumBaseError, msg:
> self.logger.critical(str(msg))
> sys.exit(1)
> -
> +
> + def doUtilTransaction(self):
> + def exUserCancel():
> + self.logger.critical(_('\n\nExiting on user cancel'))
> + if unlock(): return 200
> + return 1
> +
> + def exIOError(e):
> + if e.errno == 32:
> + self.logger.critical(_('\n\nExiting on Broken Pipe'))
> + else:
> + self.logger.critical(_('\n\n%s') % str(e))
> + if unlock(): return 200
> + return 1
> +
> + def exPluginExit(e):
> + '''Called when a plugin raises PluginYumExit.
> +
> + Log the plugin's exit message if one was supplied.
> + ''' # ' xemacs hack
> + exitmsg = str(e)
> + if exitmsg:
> + self.logger.warn('\n\n%s', exitmsg)
> + if unlock(): return 200
> + return 1
> +
> + def exFatal(e):
> + self.logger.critical('\n\n%s', to_unicode(e.value))
> + if unlock(): return 200
> + return 1
> +
> + def unlock():
> + try:
> + self.closeRpmDB()
> + self.doUnlock()
> + except Errors.LockError, e:
> + return 200
> + return 0
> +
> + try:
> + return_code = self.doTransaction()
> + except plugins.PluginYumExit, e:
> + return exPluginExit(e)
> + except Errors.YumBaseError, e:
> + return exFatal(e)
> + except KeyboardInterrupt:
> + return exUserCancel()
> + except IOError, e:
> + return exIOError(e)
> +
> + self.verbose_logger.log(logginglevels.INFO_2, _('Complete!'))
> + if unlock(): return 200
> + return return_code
> +
> def main():
> name = 'testutil'
> ver = '0.1'
>
Looks good to me
Tim
More information about the Yum-devel
mailing list