Use config yaml file

This commit is contained in:
Oliver Hartmann 2021-03-14 11:31:43 +01:00
parent 11bde6d597
commit 3c7c5c5f5d
7 changed files with 42 additions and 11 deletions

6
config.yaml Normal file
View File

@ -0,0 +1,6 @@
General:
log_file: 'D:\Poe\logs\Client.txt'
log_level: 'DEBUG'
Parser:
re_log: '(?P<date>\d\d\d\d/\d\d/\d\d \d\d:\d\d:\d\d) (\d+) (\S+) \[(?P<level>\S+) (\S+) (\d+)\] (?P<channel>[#@%$&]?)(?P<ToFrom>To|From)?\s?(?P<guild><\S+>)? ?(?P<user>[^:]+): (?P<message>.*)'
re_trade: 'Hi, I would like to buy your (?P<item>.+) listed for (?P<amount>\d+) (?P<currency>\S+) in (?P<league>\S+) \(stash tab "(?P<tab>.+)"; position: left (?P<col>\d+), top (?P<row>\d+)\)'

View File

@ -1,5 +1,7 @@
from src import gui from src import gui
from src import trader from src import trader
from src import config
from src import data
from threading import Thread from threading import Thread
from argparse import Namespace, ArgumentParser from argparse import Namespace, ArgumentParser
@ -8,14 +10,16 @@ def setup_args() -> Namespace:
parser = ArgumentParser( parser = ArgumentParser(
description='Poe Trader', epilog="And that's how you trade") 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() return parser.parse_args()
if __name__ == "__main__": if __name__ == "__main__":
args = setup_args() args = setup_args()
conf = config.read_config(args.configfile)
data.compile_regex(conf)
app = gui.Gui() 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() my_thread.start()
app.mainloop() app.mainloop()

View File

@ -1 +1,2 @@
pytest==6.2.2 pytest==6.2.2
pyyaml==5.4.1

6
src/config.py Normal file
View File

@ -0,0 +1,6 @@
import yaml
def read_config(filename):
with open(filename, 'r') as f:
return yaml.safe_load(f)

View File

@ -6,6 +6,19 @@ 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+) '
r'\(stash tab "(?P<tab>.+)"; position: left (?P<col>\d+), top (?P<row>\d+)\)' r'\(stash tab "(?P<tab>.+)"; position: left (?P<col>\d+), top (?P<row>\d+)\)'
) )
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<channel>[#@%$&]?)(?P<ToFrom>To|From)?\s?(?P<guild><\S+>)? ?(?P<user>[^:]+): (?P<message>.*)'
)
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): class Channel(Enum):

View File

@ -1,20 +1,13 @@
import time import time
import datetime import datetime
import re
import logging import logging
from .data import Message, channel_mapping from .data import Message, channel_mapping, re_log
from . import gui from . import gui
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG) logging.basicConfig(level=logging.DEBUG)
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<channel>[#@%$&]?)(?P<ToFrom>To|From)?\s?(?P<guild><\S+>)? ?(?P<user>[^:]+): (?P<message>.*)'
)
def parse_log(text: str) -> Message: def parse_log(text: str) -> Message:
result = re_log.search(text) result = re_log.search(text)
if not result: if not result:

View File

@ -1,9 +1,13 @@
from src import trader from src import trader
from src import config
from src import data
from datetime import datetime from datetime import datetime
from src.data import Channel from src.data import Channel
def test_message_from(): 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 ' \ 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)' 'listed for 18 chaos in Ritual (stash tab "$"; position: left 22, top 5)'
message = trader.parse_log(text) message = trader.parse_log(text)
@ -23,6 +27,8 @@ def test_message_from():
def test_message_to(): 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!' 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) message = trader.parse_log(text_to)
assert message.user == 'EraseAndDelete' assert message.user == 'EraseAndDelete'
@ -35,6 +41,8 @@ def test_message_to():
def test_message_global(): 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' 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) message = trader.parse_log(text_global)
assert message.user == 'HarvestScarab' assert message.user == 'HarvestScarab'