From 3045fc2fd106a53818fdba027c8bba5e5f93da9b Mon Sep 17 00:00:00 2001 From: Shiz Date: Thu, 13 Feb 2014 07:28:52 +0100 Subject: [PATCH] Implement creation of tagged messages. --- pydle/features/ircv3_2/tags.py | 19 +++++++++++++------ pydle/features/rfc1459/parsing.py | 9 +++++---- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/pydle/features/ircv3_2/tags.py b/pydle/features/ircv3_2/tags.py index 9cc835d..4c55dec 100644 --- a/pydle/features/ircv3_2/tags.py +++ b/pydle/features/ircv3_2/tags.py @@ -11,11 +11,10 @@ TAGGED_MESSAGE_LENGTH_LIMIT = 1024 class TaggedMessage(rfc1459.RFC1459Message): - def __init__(self, command, params, tags=None, **kw): - if tags is None: - tags = {} - super().__init__(command, params, **kw) - self.tags = tags + def __init__(self, tags=None, **kw): + super().__init__(**kw) + self._kw['tags'] = tags + self.__dict__.update(self._kw) @classmethod def parse(cls, line, encoding=pydle.protocol.DEFAULT_ENCODING): @@ -40,6 +39,7 @@ class TaggedMessage(rfc1459.RFC1459Message): message = message[:-len(pydle.protocol.LINE_SEPARATOR)] elif message.endswith(pydle.protocol.MINIMAL_LINE_SEPARATOR): message = message[:-len(pydle.protocol.MINIMAL_LINE_SEPARATOR)] + raw = message # Parse tags. tags = {} @@ -57,7 +57,7 @@ class TaggedMessage(rfc1459.RFC1459Message): # Parse rest of message. message = super().parse(message.lstrip().encode(encoding), encoding=encoding) - return TaggedMessage(message.command, message.params, _raw=message._raw, _valid=message._valid and valid, source=message.source, tags=tags, **message.kw) + return TaggedMessage(_raw=raw, _valid=message._valid and valid, tags=tags, **message._kw) def construct(self, force=False): """ @@ -89,6 +89,13 @@ class TaggedMessageSupport(rfc1459.RFC1459Support): def _enable_message_tags(self): self._message_tags_enabled = True + def _create_message(self, command, *params, tags={}, **kwargs): + message = super()._create_message(command, *params, **kwargs) + if self._message_tags_enabled: + return TaggedMessage(tags=tags, **message._kw) + else: + return message + def _parse_message(self): if self._message_tags_enabled: sep = rfc1459.parsing.MINIMAL_LINE_SEPARATOR.encode(self.encoding) diff --git a/pydle/features/rfc1459/parsing.py b/pydle/features/rfc1459/parsing.py index 58eb96c..b8e4dcd 100644 --- a/pydle/features/rfc1459/parsing.py +++ b/pydle/features/rfc1459/parsing.py @@ -5,12 +5,13 @@ from . import protocol class RFC1459Message(pydle.protocol.Message): def __init__(self, command, params, source=None, _raw=None, _valid=True, **kw): - self.command = command - self.params = params - self.source = source - self.kw = kw + self._kw = kw + self._kw['command'] = command + self._kw['params'] = params + self._kw['source'] = source self._valid = _valid self._raw = _raw + self.__dict__.update(self._kw) @classmethod def parse(cls, line, encoding=pydle.protocol.DEFAULT_ENCODING):