Merge remote-tracking branch 'origin/v1.1'
Els commits fets incorporen una reestructuració del codi del frontend.
diff --git a/.gitmodules b/.gitmodules
index 91a3700..e69de29 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +0,0 @@
-[submodule "backend"]
- path = backend
- url = https://github.com/delefme/covid-tracability-backend
diff --git a/TableParser.py b/TableParser.py
index 537f393..faeefc3 100644
--- a/TableParser.py
+++ b/TableParser.py
@@ -25,29 +25,38 @@
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()
+ degree = td_hora.get("class")[0]
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(':')
@@ -60,22 +69,29 @@
print(("Afegint " if db != None else "") + assignatura
+ ", " + hora
+ ", " + str(durada) + "mins"
- + ", " + aula)
+ + ", " + aula
+ + ", " + degree)
if db != None:
cursor1 = db.cursor()
- cursor1.execute("SELECT id FROM classes WHERE calendar_name = ? AND room = ? AND begins = ? AND ends = ?",
- assignatura, aula, begins, ends)
+ cursor1.execute("SELECT id FROM classes WHERE calendar_name = ? AND room = ? AND begins = ? AND ends = ? AND degree = ?",
+ assignatura, aula, begins, ends, degree)
row = cursor1.fetchone()
if row:
print("[WARNING] Ja estava a la DB (id " + str(row.id) + ")")
else:
cursor2 = db.cursor()
- cursor2.execute("INSERT INTO classes (calendar_name, room, begins, ends) VALUES (?, ?, ?, ?)",
- assignatura, aula, begins, ends)
+ cursor2.execute("INSERT INTO classes (calendar_name, room, begins, ends, degree) VALUES (?, ?, ?, ?, ?)",
+ assignatura, aula, begins, ends, degree)
+
+ 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()
diff --git a/backend b/backend
deleted file mode 160000
index c16e8d1..0000000
--- a/backend
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit c16e8d15baa438954f63c81372037e5e89af88ea
diff --git a/cron-parse-tables.py b/cron-parse-tables.py
index 7ed1dee..f98816a 100644
--- a/cron-parse-tables.py
+++ b/cron-parse-tables.py
@@ -9,47 +9,59 @@
config = configparser.ConfigParser()
config.read('config.ini')
- db_host = config['db']['host']
- db_database = config['db']['database']
- db_user = config['db']['user']
- db_password = config['db']['password']
-
- connection_string = (
- 'DRIVER=MySQL ODBC 8.0 ANSI Driver;'
- 'SERVER=' + db_host + ';'
- 'DATABASE=' + db_database + ';'
- 'UID=' + db_user + ';'
- 'PWD=' + db_password + ';'
- 'charset=utf8mb4;'
- )
-
- db = pyodbc.connect(connection_string)
- db.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
- db.setencoding(encoding='utf-8')
+ loadDB = True
try:
- opts, args = getopt.getopt(argv, 'o:', ['offset='])
+ opts, args = getopt.getopt(argv, 'o:d', ['offset=', 'dryrun'])
except getopt.GetoptError:
print('Usage: python cron-parse-tables.py -o <offset_in_days>')
print(' The offset is the day relative to today that wants to be')
print(' parsed. For instance, -1 is yesterday and 1 is tomorrow.')
+ print('')
+ print('You can also use the option -d to perform a dry run (doesn\'t')
+ print('save anything to the database)')
sys.exit(2)
offset = 1
for opt, arg in opts:
if opt in ('-o', '--offset'):
offset = arg
+ elif opt in ('-d', '--dryrun'):
+ loadDB = False
else:
print('Parameter \'' + opt + '\' not recognized.')
print('')
print('Run python cron-parse-tables.py to get help on how to use')
print('this script.')
+ db = None
+
+ if loadDB:
+ db_host = config['db']['host']
+ db_database = config['db']['database']
+ db_user = config['db']['user']
+ db_password = config['db']['password']
+
+ connection_string = (
+ 'DRIVER=MySQL ODBC 8.0 ANSI Driver;'
+ 'SERVER=' + db_host + ';'
+ 'DATABASE=' + db_database + ';'
+ 'UID=' + db_user + ';'
+ 'PWD=' + db_password + ';'
+ 'charset=utf8mb4;'
+ )
+
+ db = pyodbc.connect(connection_string)
+ db.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
+ db.setencoding(encoding='utf-8')
+
offset = int(offset)
print('Parsejant les classes ' +
(('de fa ' if offset < 0 else 'de dins de ') +
str(abs(offset)) + (' dia' if abs(offset) == 1 else ' dies') if offset != 0 else 'd\'avui'))
+ if not loadDB:
+ print('NOTA: Dry run')
tomorrow = datetime.date.today() + datetime.timedelta(days=offset)