labels: Use BatchType to match, pass lines
not line
, batch ID isn't a label,
fire event on label response
This commit is contained in:
parent
2470c1ec03
commit
2d46fe0cbf
2 changed files with 16 additions and 9 deletions
|
@ -31,20 +31,22 @@ class Module(ModuleManager.BaseModule):
|
||||||
label = str(uuid.uuid4())
|
label = str(uuid.uuid4())
|
||||||
event["line"].tags[tag_key] = label
|
event["line"].tags[tag_key] = label
|
||||||
|
|
||||||
event["server"]._label_cache[label] = event["line"]
|
event["server"]._label_cache[label] = [event["line"],
|
||||||
|
event["events"]]
|
||||||
|
|
||||||
@utils.hook("raw.received")
|
@utils.hook("raw.received")
|
||||||
def raw_recv(self, event):
|
def raw_recv(self, event):
|
||||||
if not event["line"].command == "BATCH":
|
if not event["line"].command == "BATCH":
|
||||||
label = TAG.get_value(event["line"].tags)
|
label = TAG.get_value(event["line"].tags)
|
||||||
if not label == None:
|
if not label == None:
|
||||||
self._recv(event["server"], label, event["line"])
|
self._recv(event["server"], label, [event["line"]])
|
||||||
|
|
||||||
@utils.hook("received.batch.end")
|
@utils.hook("received.batch.end")
|
||||||
def batch_end(self, event):
|
def batch_end(self, event):
|
||||||
if TAG.match(event["batch"].type):
|
if BATCH.match(event["batch"].type):
|
||||||
self._recv(event["server"], event["batch"].identifier, None)
|
label = TAG.get_value(event["batch"].tags)
|
||||||
|
self._recv(event["server"], label, event["batch"].get_lines())
|
||||||
|
|
||||||
def _recv(self, server, label, line):
|
def _recv(self, server, label, lines):
|
||||||
cached_line = server._label_cache.pop(label)
|
cached_line, cached_events = server._label_cache.pop(label)
|
||||||
# do something with the line!
|
cached_events.on("labeled-response").call(lines=lines)
|
||||||
|
|
|
@ -275,11 +275,16 @@ class Capability(object):
|
||||||
self._caps = set([name, draft_name])
|
self._caps = set([name, draft_name])
|
||||||
self._on_ack_callbacks = [
|
self._on_ack_callbacks = [
|
||||||
] # type: typing.List[typing.Callable[[], None]]
|
] # type: typing.List[typing.Callable[[], None]]
|
||||||
|
|
||||||
def available(self, capabilities: typing.Iterable[str]
|
def available(self, capabilities: typing.Iterable[str]
|
||||||
) -> typing.Optional[str]:
|
) -> typing.Optional[str]:
|
||||||
match = list(set(capabilities)&self._caps)
|
match = list(set(capabilities)&self._caps)
|
||||||
return match[0] if match else None
|
return match[0] if match else None
|
||||||
|
|
||||||
|
def match(self, capability: str) -> typing.Optional[str]:
|
||||||
|
cap = list(set([capability])&self._caps)
|
||||||
|
return cap[0] if cap else None
|
||||||
|
|
||||||
def copy(self):
|
def copy(self):
|
||||||
return Capability(*self._caps)
|
return Capability(*self._caps)
|
||||||
|
|
||||||
|
@ -297,8 +302,8 @@ class MessageTag(object):
|
||||||
def get_value(self, tags: typing.Dict[str, str]) -> typing.Optional[str]:
|
def get_value(self, tags: typing.Dict[str, str]) -> typing.Optional[str]:
|
||||||
key = list(set(tags.keys())&self._names)
|
key = list(set(tags.keys())&self._names)
|
||||||
return tags[key[0]] if key else None
|
return tags[key[0]] if key else None
|
||||||
def match(self, s: str) -> typing.Optional[str]:
|
def match(self, tag: str) -> typing.Optional[str]:
|
||||||
key = list(set([s])&self._names)
|
key = list(set([tag])&self._names)
|
||||||
return key[0] if key else None
|
return key[0] if key else None
|
||||||
|
|
||||||
class BatchType(object):
|
class BatchType(object):
|
||||||
|
|
Loading…
Reference in a new issue