From 3c7c5c5f5da70cd509eef036edc71462c9772d52 Mon Sep 17 00:00:00 2001 From: Oliver Hartmann Date: Sun, 14 Mar 2021 11:31:43 +0100 Subject: [PATCH] Use config yaml file --- config.yaml | 6 ++++++ main.py | 8 ++++++-- requirements.txt | 3 ++- src/config.py | 6 ++++++ src/data.py | 13 +++++++++++++ src/trader.py | 9 +-------- tests/test_messages.py | 8 ++++++++ 7 files changed, 42 insertions(+), 11 deletions(-) create mode 100644 config.yaml create mode 100644 src/config.py diff --git a/config.yaml b/config.yaml new file mode 100644 index 0000000..45f3df5 --- /dev/null +++ b/config.yaml @@ -0,0 +1,6 @@ +General: + log_file: 'D:\Poe\logs\Client.txt' + log_level: 'DEBUG' +Parser: + re_log: '(?P\d\d\d\d/\d\d/\d\d \d\d:\d\d:\d\d) (\d+) (\S+) \[(?P\S+) (\S+) (\d+)\] (?P[#@%$&]?)(?PTo|From)?\s?(?P<\S+>)? ?(?P[^:]+): (?P.*)' + re_trade: 'Hi, I would like to buy your (?P.+) listed for (?P\d+) (?P\S+) in (?P\S+) \(stash tab "(?P.+)"; position: left (?P\d+), top (?P\d+)\)' diff --git a/main.py b/main.py index e8cb1e3..72f2b73 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,7 @@ from src import gui from src import trader +from src import config +from src import data from threading import Thread from argparse import Namespace, ArgumentParser @@ -8,14 +10,16 @@ def setup_args() -> Namespace: parser = ArgumentParser( description='Poe Trader', epilog="And that's how you trade") - parser.add_argument('-l', '--logfile', help='Path of the logfile that should be used', default=r'D:\Poe\logs\Client.txt') + parser.add_argument('-c', '--configfile', help='Path to the yaml config file.', default=r'config.yaml') return parser.parse_args() if __name__ == "__main__": args = setup_args() + conf = config.read_config(args.configfile) + data.compile_regex(conf) app = gui.Gui() - my_thread = Thread(target=trader.read_log, args=(args.logfile, app)) + my_thread = Thread(target=trader.read_log, args=(conf['General']['log_file'], app)) my_thread.start() app.mainloop() diff --git a/requirements.txt b/requirements.txt index 8aa50dd..cfd1875 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ -pytest==6.2.2 \ No newline at end of file +pytest==6.2.2 +pyyaml==5.4.1 \ No newline at end of file diff --git a/src/config.py b/src/config.py new file mode 100644 index 0000000..63fd46f --- /dev/null +++ b/src/config.py @@ -0,0 +1,6 @@ +import yaml + + +def read_config(filename): + with open(filename, 'r') as f: + return yaml.safe_load(f) diff --git a/src/data.py b/src/data.py index e3666ce..fcb091c 100644 --- a/src/data.py +++ b/src/data.py @@ -6,6 +6,19 @@ re_trade = re.compile( r'Hi, I would like to buy your (?P.+) listed for (?P\d+) (?P\S+) in (?P\S+) ' r'\(stash tab "(?P.+)"; position: left (?P\d+), top (?P\d+)\)' ) +re_log = re.compile( + r'(?P\d\d\d\d/\d\d/\d\d \d\d:\d\d:\d\d) (\d+) (\S+) \[(?P\S+) (\S+) (\d+)\] ' + r'(?P[#@%$&]?)(?PTo|From)?\s?(?P<\S+>)? ?(?P[^:]+): (?P.*)' +) + + +def compile_regex(conf: dict): + global re_trade, re_log + if 'General' in conf: + if 're_log' in conf['Parser']: + re_log = re.compile(conf['Parser']['re_log']) + if 're_trade' in conf['Parser']: + re_trade = re.compile(conf['Parser']['re_trade']) class Channel(Enum): diff --git a/src/trader.py b/src/trader.py index 81a77a6..bdba67a 100644 --- a/src/trader.py +++ b/src/trader.py @@ -1,20 +1,13 @@ import time import datetime -import re import logging -from .data import Message, channel_mapping +from .data import Message, channel_mapping, re_log from . import gui log = logging.getLogger(__name__) logging.basicConfig(level=logging.DEBUG) -re_log = re.compile( - r'(?P\d\d\d\d/\d\d/\d\d \d\d:\d\d:\d\d) (\d+) (\S+) \[(?P\S+) (\S+) (\d+)\] ' - r'(?P[#@%$&]?)(?PTo|From)?\s?(?P<\S+>)? ?(?P[^:]+): (?P.*)' -) - - def parse_log(text: str) -> Message: result = re_log.search(text) if not result: diff --git a/tests/test_messages.py b/tests/test_messages.py index 555a79a..c6bf9b3 100644 --- a/tests/test_messages.py +++ b/tests/test_messages.py @@ -1,9 +1,13 @@ from src import trader +from src import config +from src import data from datetime import datetime from src.data import Channel def test_message_from(): + conf = config.read_config(r'config.yaml') + data.compile_regex(conf) text = '2021/03/08 23:24:52 17931875 bb3 [INFO Client 1492] @From NyhaiPuki: Hi, I would like to buy your level 21 23% Vaal Impurity of Lightning ' \ 'listed for 18 chaos in Ritual (stash tab "$"; position: left 22, top 5)' message = trader.parse_log(text) @@ -23,6 +27,8 @@ def test_message_from(): def test_message_to(): + conf = config.read_config(r'config.yaml') + data.compile_regex(conf) text_to = '2021/01/24 23:11:23 17039703 bb2 [INFO Client 10144] @To EraseAndDelete: Thank you & good luck!' message = trader.parse_log(text_to) assert message.user == 'EraseAndDelete' @@ -35,6 +41,8 @@ def test_message_to(): def test_message_global(): + conf = config.read_config(r'config.yaml') + data.compile_regex(conf) text_global = '2021/02/10 19:01:56 2720500 bb2 [INFO Client 3464] #HarvestScarab: so by the time it was finally juiced you couldnt do it' message = trader.parse_log(text_global) assert message.user == 'HarvestScarab'