]> git.llucax.com Git - software/pymin.git/blobdiff - pymin/dispatcher.py
Bugfix: use hasattr() right when looking for help.
[software/pymin.git] / pymin / dispatcher.py
index 0127d4f6410cc9fe10f49aa818236d45453f566d..7e918bd113bf6c1b37ad3c911d949dfc1307be21 100644 (file)
@@ -55,17 +55,18 @@ class CommandError(Error):
         return u'Error in command "%s".' % u' '.join(self.command)
 
 class WrongArgumentsError(CommandError):
         return u'Error in command "%s".' % u' '.join(self.command)
 
 class WrongArgumentsError(CommandError):
-    r"""WrongArgumentsError() -> WrongArgumentsError instance.
+    r"""WrongArgumentsError(handler, message) -> WrongArgumentsError instance.
 
     This exception is raised when an empty command string is received.
     """
 
 
     This exception is raised when an empty command string is received.
     """
 
-    def __init__(self, message):
+    def __init__(self, handler, message):
         r"Initialize the object, see class documentation for more info."
         r"Initialize the object, see class documentation for more info."
+        self.handler = handler
         self.message = message
 
     def __unicode__(self):
         self.message = message
 
     def __unicode__(self):
-        return self.message
+        return u'Command "%s" %s.' % (self.handler.__name__, self.message)
 
 class CommandNotSpecifiedError(CommandError):
     r"""CommandNotSpecifiedError() -> CommandNotSpecifiedError instance.
 
 class CommandNotSpecifiedError(CommandError):
     r"""CommandNotSpecifiedError() -> CommandNotSpecifiedError instance.
@@ -208,7 +209,7 @@ class Handler:
         if not hasattr(self, command.encode('utf-8')):
             raise HelpNotFoundError(command)
         handler = getattr(self, command.encode('utf-8'))
         if not hasattr(self, command.encode('utf-8')):
             raise HelpNotFoundError(command)
         handler = getattr(self, command.encode('utf-8'))
-        if not is_handler(handler) and not hasattr(handler):
+        if not is_handler(handler) and not hasattr(handler, 'handler_help'):
             raise HelpNotFoundError(command)
         return handler.handler_help
 
             raise HelpNotFoundError(command)
         return handler.handler_help
 
@@ -384,6 +385,7 @@ def parse_command(command):
     return (seq, dic)
 
 args_re = re.compile(r'\w+\(\) takes (.+) (\d+) \w+ \((\d+) given\)')
     return (seq, dic)
 
 args_re = re.compile(r'\w+\(\) takes (.+) (\d+) \w+ \((\d+) given\)')
+kw_re = re.compile(r'\w+\(\) got an unexpected keyword argument (.+)')
 
 class Dispatcher:
     r"""Dispatcher([root]) -> Dispatcher instance :: Command dispatcher.
 
 class Dispatcher:
     r"""Dispatcher([root]) -> Dispatcher instance :: Command dispatcher.
@@ -459,8 +461,13 @@ class Dispatcher:
                 pl = ''
                 if n_ok > 1:
                     pl = 's'
                 pl = ''
                 if n_ok > 1:
                     pl = 's'
-                raise WrongArgumentsError(u'%s takes %s %s argument%s, %s given'
-                            % (handler.__name__, quant, n_ok, pl, n_bad))
+                raise WrongArgumentsError(handler, u'takes %s %s argument%s, '
+                            '%s given' % (quant, n_ok, pl, n_bad))
+            m = kw_re.match(unicode(e))
+            if m:
+                (kw,)  = m.groups()
+                raise WrongArgumentsError(handler,
+                        u'got an unexpected keyword argument %s' % kw)
             raise
 
 
             raise