Added factory function for Message

This commit is contained in:
Oliver Hartmann 2021-03-14 11:51:33 +01:00
parent 3c7c5c5f5d
commit 381dceb80a
2 changed files with 23 additions and 21 deletions

View File

@ -1,6 +1,7 @@
from enum import Enum from enum import Enum
import re import re
import datetime import datetime
import logging
re_trade = re.compile( re_trade = re.compile(
r'Hi, I would like to buy your (?P<item>.+) listed for (?P<amount>\d+) (?P<currency>\S+) in (?P<league>\S+) ' r'Hi, I would like to buy your (?P<item>.+) listed for (?P<amount>\d+) (?P<currency>\S+) in (?P<league>\S+) '
@ -10,6 +11,8 @@ re_log = re.compile(
r'(?P<date>\d\d\d\d/\d\d/\d\d \d\d:\d\d:\d\d) (\d+) (\S+) \[(?P<level>\S+) (\S+) (\d+)\] ' r'(?P<date>\d\d\d\d/\d\d/\d\d \d\d:\d\d:\d\d) (\d+) (\S+) \[(?P<level>\S+) (\S+) (\d+)\] '
r'(?P<channel>[#@%$&]?)(?P<ToFrom>To|From)?\s?(?P<guild><\S+>)? ?(?P<user>[^:]+): (?P<message>.*)' r'(?P<channel>[#@%$&]?)(?P<ToFrom>To|From)?\s?(?P<guild><\S+>)? ?(?P<user>[^:]+): (?P<message>.*)'
) )
log = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG)
def compile_regex(conf: dict): def compile_regex(conf: dict):
@ -74,6 +77,24 @@ class Message():
if self.channel is Channel.WHISPER: if self.channel is Channel.WHISPER:
self.parse_trade() self.parse_trade()
@classmethod
def from_text(cls, text: str):
result = re_log.search(text)
if not result:
log.debug(f'Result is none for text "{text}"')
return None
date = datetime.datetime.strptime(
result.group('date'), '%Y/%m/%d %H:%M:%S')
guild = result.group('guild')
if guild:
guild = guild.strip('<>')
return cls(result.group('message'),
date,
result.group('user'),
channel_mapping[result.group('channel')],
guild,
result.group('ToFrom'))
def __str__(self) -> str: def __str__(self) -> str:
text = f'{self.date} - {self.channel.name}: ' text = f'{self.date} - {self.channel.name}: '
if self.to_from: if self.to_from:

View File

@ -1,36 +1,17 @@
import time import time
import datetime
import logging import logging
from .data import Message, channel_mapping, re_log from .data import Message
from . import gui from . import gui
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG) logging.basicConfig(level=logging.DEBUG)
def parse_log(text: str) -> Message:
result = re_log.search(text)
if not result:
log.debug(f'Result is none for text "{text}"')
return None
date = datetime.datetime.strptime(
result.group('date'), '%Y/%m/%d %H:%M:%S')
guild = result.group('guild')
if guild:
guild = guild.strip('<>')
return Message(result.group('message'),
date,
result.group('user'),
channel_mapping[result.group('channel')],
guild,
result.group('ToFrom'))
def read_log(logfile: str, app: gui.Gui) -> None: def read_log(logfile: str, app: gui.Gui) -> None:
logfile = open(logfile, 'r', encoding='utf8') logfile = open(logfile, 'r', encoding='utf8')
loglines = follow(logfile) loglines = follow(logfile)
for line in loglines: for line in loglines:
message = parse_log(line) message = Message.from_text(line)
log.debug(message) log.debug(message)
if message and message.trade and message.to_from == 'From': if message and message.trade and message.to_from == 'From':
app.add_tab(30, message) app.add_tab(30, message)