Arreglat bug de les assignatures que ocupen 2+ files
La taula de l'horari de l'FME utilitza l'atribut `rowspan` per fer que
una cel·la ocupi diverses files, però això no es tenia en compte al
table-parser i feia que al parsejar la taula, les files on s'omitia la
multicel·la no es parsejéssin bé les aules (ja que faltava una cel·la a
la columna de la multicel·la).
Aquest commit soluciona això.
Fixes: #12
diff --git a/TableParser.py b/TableParser.py
index 537f393..cffd880 100644
--- a/TableParser.py
+++ b/TableParser.py
@@ -25,29 +25,37 @@
table = soup.find(id="day_main")
hores = []
+ implicitClasses = []
+
for h in range(8,22):
newhour = ""
if h < 10:
newhour += "0"
- newhour += str(h);
+ newhour += str(h)
- hores.append(newhour + ":00");
- hores.append(newhour + ":30");
+ hores.append(newhour + ":00")
+ implicitClasses.append([])
+ hores.append(newhour + ":30")
+ implicitClasses.append([])
p = re.compile(r"Aula (\S+) ?\(\d*\)", re.IGNORECASE)
+ horaActual = 0
for hora in hores:
td_hora = table.find(text=hora).findNext('td')
column = 1
while hora not in td_hora.get_text():
+ while column in implicitClasses[horaActual]:
+ column += 1
classes = td_hora['class'];
if td_hora.has_attr('class') and not td_hora['class'][0] in self.EMPTY_CELL_CLASSES:
assignatura = td_hora.get_text().strip()
aulaRaw = table.find_all("th")[column].get_text().strip()
aula = p.match(aulaRaw).group(1)
- durada = int(td_hora.get("rowspan"))*30
+ files = int(td_hora.get("rowspan"))
+ durada = files*30
timeSplit = hora.split(':')
@@ -74,8 +82,14 @@
cursor2.execute("INSERT INTO classes (calendar_name, room, begins, ends) VALUES (?, ?, ?, ?)",
assignatura, aula, begins, ends)
+ for i in range(1, files - 1):
+ if i < len(implicitClasses):
+ implicitClasses[horaActual + i].append(column)
+
td_hora = td_hora.findNext('td')
column = column + 1
+ horaActual = horaActual + 1
+
if db != None:
db.commit()