1 # vim: set et sts=4 sw=4 encoding=utf-8 :
3 class BadRouteError(Exception):
5 def __init__(self,cmd):
11 class CommandNotFoundError(Exception):
13 def __init__(self,cmd):
21 def __init__(self, routes=dict()):
24 def dispatch(self, route):
25 route = route.split() # TODO considerar comillas
27 handler = self.routes[route[0]]
29 while not callable(handler):
30 handler = getattr(handler, route[0])
35 raise CommandNotFoundError(route[0])
36 except AttributeError:
37 raise BadRouteError(route[0])
46 class TestClassSubHandler:
48 def subcmd(self, *args):
49 print 'class.subclass.subcmd:', args
54 def cmd1(self, *args):
55 print 'class.cmd1:', args
57 def cmd2(self, *args):
58 print 'class.cmd2:', args
60 subclass = TestClassSubHandler()
63 if __name__ == '__main__':
70 d.dispatch('func arg1 arg2 arg3')
71 d.dispatch('inst cmd1 arg1 arg2 arg3 arg4')
72 d.dispatch('inst subclass subcmd arg1 arg2 arg3 arg4 arg5')
76 # * Soportar comillas para argumentos con espacios y otros caracteres, onda:
77 # 'misc set motd "Hola!\nEste es el servidor de garombia"'
79 # * Soportar keyword arguments, onda que:
80 # 'dns set pepe=10.10.10.1 juan=10.10.10.2'
81 # se mapee a algo como: dns.set(pepe='10.10.10.1', juan='10.10.10.2')
83 # Estas cosas quedan sujetas a necesitada y a definición del protocolo.
84 # Para mí lo ideal es que el protocolo de red sea igual que la consola del
85 # usuario, porque después de todo no va a ser más que eso, mandar comanditos.
87 # Por otro lado, el cliente de consola, por que no es el cliente web pero
88 # accedido via ssh usando un navegador de texto como w3m???