Return truncted data from encode_truncate and hold it in IRCLine.Line
This commit is contained in:
parent
7952d4c366
commit
bd9eaad0b2
3 changed files with 12 additions and 6 deletions
|
@ -2,9 +2,11 @@ import datetime, typing
|
||||||
from src import IRCObject
|
from src import IRCObject
|
||||||
|
|
||||||
class Line(IRCObject.Object):
|
class Line(IRCObject.Object):
|
||||||
def __init__(self, send_time: datetime.datetime, data: bytes):
|
def __init__(self, send_time: datetime.datetime, data: bytes,
|
||||||
|
truncated: str):
|
||||||
self.send_time = send_time
|
self.send_time = send_time
|
||||||
self.data = data
|
self.data = data
|
||||||
|
self.truncated = truncated
|
||||||
|
|
||||||
self._on_send = [] # type: typing.List[typing.Callable[[], None]]
|
self._on_send = [] # type: typing.List[typing.Callable[[], None]]
|
||||||
|
|
||||||
|
|
|
@ -315,10 +315,11 @@ class Server(IRCObject.Object):
|
||||||
break
|
break
|
||||||
|
|
||||||
line_stripped = line.split("\n", 1)[0].strip("\r")
|
line_stripped = line.split("\n", 1)[0].strip("\r")
|
||||||
encoded = utils.encode_truncate(line_stripped, "utf8", LINE_CUTOFF)
|
encoded, truncated = utils.encode_truncate(
|
||||||
|
line_stripped, "utf8", LINE_CUTOFF)
|
||||||
encoded = b"%s\r\n" % encoded
|
encoded = b"%s\r\n" % encoded
|
||||||
|
|
||||||
line_obj = IRCLine.Line(datetime.datetime.utcnow(), encoded)
|
line_obj = IRCLine.Line(datetime.datetime.utcnow(), encoded, truncated)
|
||||||
self.queued_lines.append(line_obj)
|
self.queued_lines.append(line_obj)
|
||||||
|
|
||||||
self.bot.log.debug("%s (raw send) | %s", [str(self), line])
|
self.bot.log.debug("%s (raw send) | %s", [str(self), line])
|
||||||
|
|
|
@ -190,12 +190,15 @@ def is_ip(s: str) -> bool:
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def encode_truncate(s: str, encoding: str, byte_max: int) -> bytes:
|
def encode_truncate(s: str, encoding: str, byte_max: int
|
||||||
|
) -> typing.Tuple[bytes, str]:
|
||||||
encoded = b""
|
encoded = b""
|
||||||
for character in s:
|
truncated = ""
|
||||||
|
for i, character in enumerate(s):
|
||||||
encoded_character = character.encode(encoding)
|
encoded_character = character.encode(encoding)
|
||||||
if len(encoded + encoded_character) > byte_max:
|
if len(encoded + encoded_character) > byte_max:
|
||||||
|
truncated = s[i:]
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
encoded += encoded_character
|
encoded += encoded_character
|
||||||
return encoded
|
return encoded, truncated
|
||||||
|
|
Loading…
Reference in a new issue