aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar jesopo2018-11-05 11:56:28 +0000
committerGravatar jesopo2018-11-05 11:56:28 +0000
commit9c233cd4dd0db236ea735bc443e75425c4af1992 (patch)
tree945ca9ba9c82cd7cc70a70322da94cf6ace84378
parentRefactor IRCServer .connect() logic (diff)
signature
Add src.utils.parse.keyvalue, mostly for IRCv3 CAP negotiation
-rw-r--r--modules/line_handler.py9
-rw-r--r--src/utils/parse.py10
2 files changed, 11 insertions, 8 deletions
diff --git a/modules/line_handler.py b/modules/line_handler.py
index c70f22fa..04ac39cb 100644
--- a/modules/line_handler.py
+++ b/modules/line_handler.py
@@ -247,14 +247,7 @@ class Module(ModuleManager.BaseModule):
# the server is telling us about its capabilities!
@utils.hook("raw.cap")
def cap(self, event):
- capabilities_list = event["args"][2].split(" ")
- capabilities = {}
- for capability in capabilities_list:
- argument = None
- if "=" in capability:
- capability, argument = capability.split("=", 1)
- capabilities[capability] = argument
-
+ capabilities = utils.parse.keyvalue(event["args"][2])
subcommand = event["args"][1].lower()
is_multiline = len(event["args"]) > 2 and event["args"][2] == "*"
diff --git a/src/utils/parse.py b/src/utils/parse.py
index 03a585c2..4fa3bb79 100644
--- a/src/utils/parse.py
+++ b/src/utils/parse.py
@@ -55,3 +55,13 @@ def docstring(s: str) -> Docstring:
description += line
return Docstring(description, items, var_items)
+def keyvalue(s, delimiter: str=" ") -> typing.Dict[str, str]:
+ items = {}
+ pairs = s.split(delimiter)
+ for pair in pairs:
+ key, sep, value = pair.partition("=")
+ if sep:
+ items[key] = value
+ else:
+ items[key] = None
+ return items