Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6f11554c18 | |||
| 03fed1e1e4 | |||
| be5ac238bc |
@@ -1,6 +1,6 @@
|
||||
[Application]
|
||||
name=Solo Auswertung
|
||||
version=0.9.4
|
||||
version=0.9.5
|
||||
# How to launch the app - this calls the 'main' function from the 'myapp' package:
|
||||
entry_point=main:main
|
||||
# icon=myapp.ico
|
||||
|
||||
@@ -16,7 +16,6 @@ def main():
|
||||
cli = solo_turnier.cli.Cli(l)
|
||||
|
||||
batchWorker = solo_turnier.batch.BatchWorker(cli)
|
||||
batchWorker.prepare()
|
||||
|
||||
if cli.showGUI():
|
||||
raise Exception('Not yet implemented')
|
||||
|
||||
@@ -5,8 +5,6 @@ import os
|
||||
import pprint
|
||||
|
||||
import tabulate
|
||||
import tkinter.filedialog
|
||||
import tkinter.simpledialog
|
||||
|
||||
class BatchWorker:
|
||||
def __init__(
|
||||
@@ -15,33 +13,16 @@ class BatchWorker:
|
||||
):
|
||||
self.l = logging.getLogger('solo_turnier.batch')
|
||||
self.config = config
|
||||
self.importPath = None
|
||||
|
||||
def prepare(self):
|
||||
self.importPath = self.config.importHtmlPath()
|
||||
if self.importPath is None:
|
||||
self.l.debug('No HTML import path was provided.')
|
||||
self.importPath = tkinter.filedialog.askdirectory(mustexist=True, title='HMTL Export auswählen')
|
||||
|
||||
if self.importPath is None or len(self.importPath) == 0:
|
||||
self.l.critical('Import path was not selected. Aborting.')
|
||||
tkinter.simpledialog.messagebox.showerror(
|
||||
title='Invalid HTML path selected',
|
||||
message='You did not select an appropriate folder. Aborting now.'
|
||||
)
|
||||
exit(1)
|
||||
|
||||
self.l.debug('Using import path %s', self.importPath)
|
||||
|
||||
def run(self, removeFilteredParicipants=True):
|
||||
self.l.debug(self.config.__dict__)
|
||||
|
||||
locator = solo_turnier.html_locator.HtmlLocator()
|
||||
self.l.info('Checking for feasible preview HTML export files in "%s"', self.importPath)
|
||||
htmlCandidatesPreview = locator.findPreviewRoundCandidates(self.importPath)
|
||||
self.l.info('Checking for feasible preview HTML export files in "%s"', self.config.importHtmlPath())
|
||||
htmlCandidatesPreview = locator.findPreviewRoundCandidates(self.config.importHtmlPath())
|
||||
self.l.debug('Found HTML file candidates for preview rounds: %s', htmlCandidatesPreview)
|
||||
|
||||
htmlResultFiles = locator.findCandidates(self.importPath)
|
||||
htmlResultFiles = locator.findCandidates(self.config.importHtmlPath())
|
||||
self.l.debug('Using HTML result files for result extraction: %s', htmlResultFiles)
|
||||
|
||||
worker = solo_turnier.worker.Worker()
|
||||
|
||||
@@ -10,7 +10,7 @@ class Cli:
|
||||
parser.add_argument('--no-flask', action='store_false', dest='flask', help='Disable the internal flask web server')
|
||||
parser.add_argument('--port', help='The port to listen for incoming requests', default='8082')
|
||||
|
||||
parser.add_argument('html', help='The path from where to look for HTML export files', nargs='?', default=None)
|
||||
parser.add_argument('html', help='The path from where to look for HTML export files', nargs=1, default=['.'])
|
||||
parser.add_argument('-o', '--output', help='Set the output path of the script', nargs=1, default=[None])
|
||||
parser.add_argument('--all-participants', '-a', action='store_true', help='Show all participants not only finalists')
|
||||
|
||||
@@ -40,7 +40,7 @@ class Cli:
|
||||
return self.__args.flask
|
||||
|
||||
def importHtmlPath(self):
|
||||
return self.__args.html
|
||||
return self.__args.html[0]
|
||||
|
||||
def importCSVPath(self):
|
||||
return self.__args.import_from[0]
|
||||
|
||||
@@ -8,6 +8,10 @@ from .types import HtmlPreviewImport as HtmlImport, HtmlResultImport
|
||||
from .group import GroupParser
|
||||
from .competition_class import CompetitionClassParser
|
||||
|
||||
class IncompleteRoundException(Exception):
|
||||
def __init__(self, *args):
|
||||
super(IncompleteRoundException, self).__init__(*args)
|
||||
|
||||
class HtmlParser:
|
||||
|
||||
def __init__(self, text: str, fileName: str = None):
|
||||
@@ -73,7 +77,8 @@ class HtmlParser:
|
||||
def __parseFirstTable(table):
|
||||
roundName = table.tr.td.contents[0]
|
||||
if roundName != 'Endrunde':
|
||||
raise Exception('Could not parse HTML file')
|
||||
self.l.warning('Found table with round name %s.', roundName)
|
||||
raise IncompleteRoundException('Could not parse HTML file')
|
||||
|
||||
__parseRows(table.find_all('tr')[2:], True)
|
||||
|
||||
@@ -82,10 +87,14 @@ class HtmlParser:
|
||||
__parseRows(table.find_all('tr'), False)
|
||||
|
||||
tables = self.soup.find('div', class_='extract').find_all('table')
|
||||
if len(tables) > 0:
|
||||
__parseFirstTable(tables[0])
|
||||
|
||||
try:
|
||||
if len(tables) > 0:
|
||||
__parseFirstTable(tables[0])
|
||||
|
||||
__parseRemainingTables(tables[1:])
|
||||
__parseRemainingTables(tables[1:])
|
||||
except IncompleteRoundException:
|
||||
pass
|
||||
|
||||
# title = self.soup.find('div', class_='eventhead').table.tr.td.contents[0]
|
||||
|
||||
|
||||
@@ -177,10 +177,14 @@ class ResultExtractor:
|
||||
for filePair in files:
|
||||
with open(filePair[0], 'r') as fp:
|
||||
text = fp.read()
|
||||
with open(filePair[1], 'r') as fp:
|
||||
textTab = fp.read()
|
||||
parser = html_parser.HtmlParser(text, filePair[0])
|
||||
parserTab = html_parser.HtmlParser(textTab, filePair[1])
|
||||
|
||||
if filePair[1] is None:
|
||||
parserTab = None
|
||||
else:
|
||||
with open(filePair[1], 'r') as fp:
|
||||
textTab = fp.read()
|
||||
parserTab = html_parser.HtmlParser(textTab, filePair[1])
|
||||
|
||||
try:
|
||||
data = parser.guessDataFromHtmlTitle()
|
||||
@@ -247,8 +251,11 @@ class ResultExtractor:
|
||||
self.l.debug('Extracting data from file %s', fileName)
|
||||
self._analyzeSingleParser(parsers[fileNameTuple][0], ret)
|
||||
|
||||
self.l.debug('Fetching individual result of combined competitions in %s', fileName)
|
||||
self._analyzeIndividualResults(parsers[fileNameTuple][1], ret)
|
||||
if parsers[fileNameTuple][1] is None:
|
||||
self.l.info('Skipping extraction of individual result as class is not yet finished.')
|
||||
else:
|
||||
self.l.debug('Fetching individual result of combined competitions in %s', fileName)
|
||||
self._analyzeIndividualResults(parsers[fileNameTuple][1], ret)
|
||||
|
||||
return ret
|
||||
|
||||
|
||||
Reference in New Issue
Block a user