From 4bc626b163691a438e8dd2074f68573800cf0290 Mon Sep 17 00:00:00 2001 From: Christian Wolf Date: Thu, 14 Mar 2024 19:07:32 +0100 Subject: [PATCH] Fixed some code styings --- src/solo_turnier/html_parser.py | 86 ++++++++++++------- src/solo_turnier/output.py | 6 +- src/solo_turnier/static/style.css | 54 ++++++------ .../types/singleParticipantResult.py | 2 +- 4 files changed, 87 insertions(+), 61 deletions(-) diff --git a/src/solo_turnier/html_parser.py b/src/solo_turnier/html_parser.py index ed6e1e2..9818e73 100644 --- a/src/solo_turnier/html_parser.py +++ b/src/solo_turnier/html_parser.py @@ -43,7 +43,10 @@ class HtmlParser: match = re.compile('.*?OT, Solos (.*?)(?: ".*")?').fullmatch(title) if match is None: - self.l.debug('Parsing HTML page title "%s" as OT failed. Falling back to legacy ETW.', title) + self.l.debug( + 'Parsing HTML page title "%s" as OT failed. Falling back to legacy ETW.', + title, + ) match = re.compile('.*?ETW, Solos (.*?)(?: ".*")?').fullmatch(title) if match is None: self.l.info( @@ -65,11 +68,14 @@ class HtmlParser: participants = {} nameRegex = re.compile("(.*) \\(([0-9]+)\\)") + def __parseNameAndId(string: str, tds) -> tuple[str, str]: match = nameRegex.fullmatch(string) if match is None: self.l.error("Could not match %s to regex search pattern", str(tds)) - raise CannotParseRowException(f"Could not match {tds} to regex search pattern for 'name (id)'") + raise CannotParseRowException( + f"Could not match {tds} to regex search pattern for 'name (id)'" + ) name = match.group(1) number = match.group(2) return name, number @@ -78,31 +84,33 @@ class HtmlParser: def parseRow(row): for parser in parsers: try: - parser(row('td')) + parser(row("td")) return except CannotParseRowException: pass - + # No parser was found if we get here. - self.l.error('Cannot parse row in table.') + self.l.error("Cannot parse row in table.") for row in rows: parseRow(row) - + def __ensureLength(tds, length): if len(tds) != length: - raise CannotParseRowException('The row has %d entries but %d are expected.' % (len(tds), length)) - + raise CannotParseRowException( + "The row has %d entries but %d are expected." % (len(tds), length) + ) + def __parseFormationRowGeneric(tds, finalist): - __ensureLength(tds, 2) + __ensureLength(tds, 2) - place = tds[0].contents[0] - name, number = __parseNameAndId(tds[1].contents[0], tds) + place = tds[0].contents[0] + name, number = __parseNameAndId(tds[1].contents[0], tds) - participant = HtmlParticipant(name, number) - participant.finalist = finalist - participant.club = '' - participants[participant] = place + participant = HtmlParticipant(name, number) + participant.finalist = finalist + participant.club = "" + participants[participant] = place def __parseFirstTable(table): roundName = table.tr.td.contents[0] @@ -124,10 +132,16 @@ class HtmlParser: participant = HtmlParticipant(name, number) participant.finalist = True participant.club = tdClub.contents[0] - + participants[participant] = place - __parseRows(table.find_all("tr")[2:], [__parsePairRow, __parseFormationRow,]) + __parseRows( + table.find_all("tr")[2:], + [ + __parsePairRow, + __parseFormationRow, + ], + ) def __parseRemainingTables(tables): @@ -143,40 +157,54 @@ class HtmlParser: participant = HtmlParticipant(name, number) participant.finalist = False participant.club = tds[2].contents[0] - + participants[participant] = place def __parseSeparatorRow(tds): __ensureLength(tds, 1) if len(list(tds[0].stripped_strings)) == 0: return - raise CannotParseRowException('No empty string') - - regexZwischenRunde = re.compile('[1-9]\. Zwischenrunde') + raise CannotParseRowException("No empty string") + + regexZwischenRunde = re.compile("[1-9]\. Zwischenrunde") + def __parseRoundHeading(tds): __ensureLength(tds, 1) - s = ''.join(tds[0].stripped_strings) - if s.startswith('Vorrunde'): + s = "".join(tds[0].stripped_strings) + if s.startswith("Vorrunde"): return if regexZwischenRunde.match(s) is not None: return - raise CannotParseRowException('Kein Header einer Runde gefunden.') - + raise CannotParseRowException("Kein Header einer Runde gefunden.") + def __parseAllSolosQualifiedFormation(tds): __ensureLength(tds, 2) if tds[1].contents[0].startswith("Alle Starter weiter genommen."): return - raise CannotParseRowException('Not found the text "Alle Starter weiter genommen"') + raise CannotParseRowException( + 'Not found the text "Alle Starter weiter genommen"' + ) def __parseAllSolosQualifiedPair(tds): __ensureLength(tds, 3) if tds[1].contents[0].startswith("Alle Mannschaften weiter genommen."): return - raise CannotParseRowException('Not found the text "Alle Mannschaften weiter genommen"') + raise CannotParseRowException( + 'Not found the text "Alle Mannschaften weiter genommen"' + ) - for table in tables: - __parseRows(table.find_all("tr"), [__parseAllSolosQualifiedFormation, __parseAllSolosQualifiedPair, __parsePairRow, __parseFormationRow, __parseSeparatorRow, __parseRoundHeading]) + __parseRows( + table.find_all("tr"), + [ + __parseAllSolosQualifiedFormation, + __parseAllSolosQualifiedPair, + __parsePairRow, + __parseFormationRow, + __parseSeparatorRow, + __parseRoundHeading, + ], + ) tables = self.soup.find("div", class_="extract").find_all("table") diff --git a/src/solo_turnier/output.py b/src/solo_turnier/output.py index 2eb94ed..af900d4 100644 --- a/src/solo_turnier/output.py +++ b/src/solo_turnier/output.py @@ -132,10 +132,10 @@ class ConsoleOutputter(AbstractOutputter): mappedResults = map(mapResultColumn, results) - participantName = f'{participant.name} ({participant.id})' + participantName = f"{participant.name} ({participant.id})" if participant.club is not None: - participantName = f'{participantName}, {participant.club}' - + participantName = f"{participantName}, {participant.club}" + tableRow = [f"{participantName}"] + list(mappedResults) tableData.append(tableRow) diff --git a/src/solo_turnier/static/style.css b/src/solo_turnier/static/style.css index 1320070..6752dcf 100644 --- a/src/solo_turnier/static/style.css +++ b/src/solo_turnier/static/style.css @@ -1,53 +1,51 @@ - .tab-summary { - width: 100%; - border-collapse: collapse; + width: 100%; + border-collapse: collapse; } .tab-summary tr:nth-of-type(even) { - background-color: cyan; + background-color: cyan; } .tab-summary td { - text-align: center; + text-align: center; } .tab-summary td .competition-place { - font-size: smaller; - font-weight: 300; - font-style: italic; + font-size: smaller; + font-weight: 300; + font-style: italic; } .tab-summary .no-finalist { - color: gray; + color: gray; } .tab-summary .no-finalist-dance { - color: gray; - text-decoration-style: solid; - text-decoration-line: line-through; + color: gray; + text-decoration-style: solid; + text-decoration-line: line-through; } @media print { - @page { - size: landscape; - } - @page portrait { - size: portrait; - } - /* body { + @page { + size: landscape; + } + @page portrait { + size: portrait; + } + /* body { size: landscape; page-orientation: rotate-right; } */ - .section, - .section table tr, - .section table td - { - page-break-inside: avoid; - } + .section, + .section table tr, + .section table td { + page-break-inside: avoid; + } - .tab-summary .no-finalist { - color: gray; - } + .tab-summary .no-finalist { + color: gray; + } } diff --git a/src/solo_turnier/types/singleParticipantResult.py b/src/solo_turnier/types/singleParticipantResult.py index 5dca2fd..c0d9301 100644 --- a/src/solo_turnier/types/singleParticipantResult.py +++ b/src/solo_turnier/types/singleParticipantResult.py @@ -29,6 +29,6 @@ class SingleParticipantResult: def getNativePlace(self) -> str: return str(self.nativePlace) - + def isCombinedGroup(self) -> bool: return isinstance(self.competitionGroup, solo_turnier.group.CombinedGroup)