mirror of
https://github.com/Garmelon/PFERD.git
synced 2023-12-21 10:23:01 +01:00
Fix exercise date parsing for non-group submissions
ILIAS apparently changes the order of the fields as it sees fit, so we now try to parse *every* column, starting at from the right, as a date. The first column that parses successfully is then used.
This commit is contained in:
parent
921cec7ddc
commit
1fba96abcb
@ -22,6 +22,9 @@ ambiguous situations.
|
|||||||
|
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Date parsing now also works correctly in non-group exercises
|
||||||
|
|
||||||
## 3.0.0 - 2021-05-31
|
## 3.0.0 - 2021-05-31
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
@ -230,12 +230,16 @@ class IliasPage:
|
|||||||
parent_row: Tag = link.findParent("tr")
|
parent_row: Tag = link.findParent("tr")
|
||||||
children: List[Tag] = parent_row.findChildren("td")
|
children: List[Tag] = parent_row.findChildren("td")
|
||||||
|
|
||||||
# <checkbox> <name> <uploader> <date> <download>
|
|
||||||
# 0 1 2 3 4
|
|
||||||
name = _sanitize_path_name(children[1].getText().strip())
|
name = _sanitize_path_name(children[1].getText().strip())
|
||||||
date = demangle_date(children[3].getText().strip())
|
|
||||||
|
|
||||||
log.explain(f"Found exercise detail entry {name!r}")
|
log.explain(f"Found exercise detail entry {name!r}")
|
||||||
|
|
||||||
|
for child in reversed(children):
|
||||||
|
date = demangle_date(child.getText().strip(), fail_silently=True)
|
||||||
|
if date is not None:
|
||||||
|
break
|
||||||
|
if date is None:
|
||||||
|
log.warn(f"Date parsing failed for exercise entry {name!r}")
|
||||||
|
|
||||||
results.append(IliasPageElement(
|
results.append(IliasPageElement(
|
||||||
IliasElementType.FILE,
|
IliasElementType.FILE,
|
||||||
self._abs_url_from_link(link),
|
self._abs_url_from_link(link),
|
||||||
@ -522,7 +526,7 @@ german_months = ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep',
|
|||||||
english_months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
|
english_months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
|
||||||
|
|
||||||
|
|
||||||
def demangle_date(date_str: str) -> Optional[datetime]:
|
def demangle_date(date_str: str, fail_silently: bool = False) -> Optional[datetime]:
|
||||||
"""
|
"""
|
||||||
Demangle a given date in one of the following formats:
|
Demangle a given date in one of the following formats:
|
||||||
"Gestern, HH:MM"
|
"Gestern, HH:MM"
|
||||||
@ -554,6 +558,7 @@ def demangle_date(date_str: str) -> Optional[datetime]:
|
|||||||
|
|
||||||
return datetime(year, month, day, hour, minute)
|
return datetime(year, month, day, hour, minute)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
if not fail_silently:
|
||||||
log.warn(f"Date parsing failed for {date_str!r}")
|
log.warn(f"Date parsing failed for {date_str!r}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user