Add keyworded arguments in command received
This commit is contained in:
parent
a1e7a7cff8
commit
39b7ecdaa4
@ -21,11 +21,12 @@ class Command(Abstract):
|
|||||||
|
|
||||||
"""This class represents a specialized TextMessage"""
|
"""This class represents a specialized TextMessage"""
|
||||||
|
|
||||||
def __init__(self, cmd, args=None, *nargs, **kargs):
|
def __init__(self, cmd, args=None, kwargs=None, *nargs, **kargs):
|
||||||
Abstract.__init__(self, *nargs, **kargs)
|
Abstract.__init__(self, *nargs, **kargs)
|
||||||
|
|
||||||
self.cmd = cmd
|
self.cmd = cmd
|
||||||
self.args = args if args is not None else list()
|
self.args = args if args is not None else list()
|
||||||
|
self.kwargs = kwargs if kwargs is not None else dict()
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.cmd + " @" + ",@".join(self.args)
|
return self.cmd + " @" + ",@".join(self.args)
|
||||||
|
@ -51,9 +51,11 @@ class Socket(AbstractVisitor):
|
|||||||
|
|
||||||
|
|
||||||
def visit_Command(self, msg):
|
def visit_Command(self, msg):
|
||||||
res = Text("!%s%s%s" % (msg.cmd,
|
res = Text("!%s%s%s%s%s" % (msg.cmd,
|
||||||
" " if len(msg.args) else "",
|
" " if len(msg.kwargs) else "",
|
||||||
" ".join(msg.args)),
|
" ".join(["@%s=%s" % (k, msg.kwargs[k]) if msg.kwargs[k] is not None else "@%s" % k for k in msg.kwargs]),
|
||||||
|
" " if len(msg.args) else "",
|
||||||
|
" ".join(msg.args)),
|
||||||
server=msg.server, date=msg.date,
|
server=msg.server, date=msg.date,
|
||||||
to=msg.to, frm=msg.frm)
|
to=msg.to, frm=msg.frm)
|
||||||
res.accept(self)
|
res.accept(self)
|
||||||
|
@ -72,6 +72,32 @@ class TestSocketPrinter(unittest.TestCase):
|
|||||||
),
|
),
|
||||||
"!COMMAND TEXT"
|
"!COMMAND TEXT"
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
Command(cmd="COMMAND",
|
||||||
|
kwargs={"KEY1": "VALUE"},
|
||||||
|
),
|
||||||
|
"!COMMAND @KEY1=VALUE"
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Command(cmd="COMMAND",
|
||||||
|
args=["TEXT"],
|
||||||
|
kwargs={"KEY1": "VALUE"},
|
||||||
|
),
|
||||||
|
"!COMMAND @KEY1=VALUE TEXT"
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Command(cmd="COMMAND",
|
||||||
|
kwargs={"KEY2": None},
|
||||||
|
),
|
||||||
|
"!COMMAND @KEY2"
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Command(cmd="COMMAND",
|
||||||
|
args=["TEXT"],
|
||||||
|
kwargs={"KEY2": None},
|
||||||
|
),
|
||||||
|
"!COMMAND @KEY2 TEXT"
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -177,7 +177,25 @@ class IRC(Abstract):
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
args = text.split(' ')
|
args = text.split(' ')
|
||||||
|
|
||||||
return message.Command(cmd=args[0], args=args[1:], **common_args)
|
# Extract explicit named arguments: @key=value or just @key
|
||||||
|
kwargs = {}
|
||||||
|
for i in range(len(args) - 1, 0, -1):
|
||||||
|
arg = args[i]
|
||||||
|
if len(arg) > 2:
|
||||||
|
if arg[0:1] == '\\@':
|
||||||
|
args[i] = arg[1:]
|
||||||
|
elif arg[0] == '@':
|
||||||
|
arsp = arg[1:].split("=", 1)
|
||||||
|
if len(arsp) == 2:
|
||||||
|
kwargs[arsp[0]] = arsp[1]
|
||||||
|
else:
|
||||||
|
kwargs[arg[1:]] = None
|
||||||
|
args.pop(i)
|
||||||
|
|
||||||
|
return message.Command(cmd=args[0],
|
||||||
|
args=args[1:],
|
||||||
|
kwargs=kwargs,
|
||||||
|
**common_args)
|
||||||
|
|
||||||
# Is this an ask for this bot?
|
# Is this an ask for this bot?
|
||||||
elif designated is not None:
|
elif designated is not None:
|
||||||
|
Loading…
Reference in New Issue
Block a user