From bb1a6a800c18fb0bdd668bd072940f8c7a50c599 Mon Sep 17 00:00:00 2001 From: digehode Date: Mon, 25 Nov 2019 23:38:51 +0000 Subject: [PATCH 1/6] Added ECB Meeting rooms --- covscraper/rooms.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/covscraper/rooms.py b/covscraper/rooms.py index 3fa6492..64bcb99 100644 --- a/covscraper/rooms.py +++ b/covscraper/rooms.py @@ -48,5 +48,16 @@ "EC2-13": {"desc":"", "size":7*6, "equip":("pc",)}, "EC2-14": {"desc":"gameslab", "size":7*6, "equip":("pc",)}, "EC2-24": {"desc":"planet", "size":None}, -"EC2-25": {"desc":"planet", "size":None} +"EC2-25": {"desc":"planet", "size":None}, + + +"EC3-35": {"desc":"Meeting Room - 24 - No students AV but bring your own laptop", "size":24, "equip":("meeting",)}, +"EC3-37": {"desc":"Private Space (EC Use Only - 10) No students No AV/PC", "size":10, "equip":("meeting",)}, +"EC3-07": {"desc":"Private Space (EC Use Only) 8 - No students No AV/PC", "size":8, "equip":("meeting",)}, +"EC3-42": {"desc":"Private Space (EC Use Only) 8 - No students No AV/PC", "size":8, "equip":("meeting",)}, +"EC4-32": {"desc":"Meeting Room - 18 - No students AV but bring your own laptop", "size":18, "equip":("meeting",)}, +"EC4-11": {"desc":"Private Space (EC Use Only - Dean' Office)", "size":None, "equip":("meeting",)}, +"EC4-38": {"desc":"Private Space (EC Use Only) 8 -No students No AV/PC", "size":8, "equip":("meeting",)} + + } From e8ee05fc4a77f530cc84966c5547002d1d8658a1 Mon Sep 17 00:00:00 2001 From: digehode Date: Tue, 26 Nov 2019 00:02:12 +0000 Subject: [PATCH 2/6] Added verbosity option allowing --verbosity=False to remove non-positive results --- findroom.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/findroom.py b/findroom.py index 828215a..6ae2c3e 100644 --- a/findroom.py +++ b/findroom.py @@ -2,11 +2,12 @@ import covscraper import datetime import sys +import ast if __name__ == "__main__": usageTxt = "help" - params = {"user": None, "pass": None, "room": "", "equip": "", "course": "", "uid": "", "date": None, "for": 1.0} + params = {"user": None, "pass": None, "room": "", "equip": "", "course": "", "uid": "", "date": None, "for": 1.0, "verbose":"False"} week = covscraper.timetableapi.cov_week(datetime.datetime.now()) # configure flags @@ -21,7 +22,7 @@ # process flags for o, a in opts: if o in ("-h", "--help"): - print(usageText) + print(usageTxt) sys.exit(1) elif o in ("free",): params["free"] = True @@ -35,7 +36,7 @@ if not params["pass"]: params["pass"] = getpass.getpass("password: ") params["equip"] = set(params["equip"].split(",")) params["for"] = float(params["for"]) - + params["verbose"]=ast.literal_eval(params["verbose"]) params["date"] = datetime.datetime.strptime(params["date"], "%d/%m/%Y %H:%M") if params["date"] else datetime.datetime.now() params["till"] = params["date"] + datetime.timedelta(hours=params["for"]) @@ -45,13 +46,18 @@ session = covscraper.auth.Authenticator(params["user"], params["pass"]) for room, data in covscraper.rooms.ROOMS.items(): + if len(params["equip"])!=0 and not (params["equip"] <= set(data.get("equip",[]))): + if params["verbose"]: + print(room,"does not have appropriate equipment") + continue slots = covscraper.timetableapi.get_timetable( session, room=room) slots = [ s for s in slots if (s["start"] <= params["date"] and params["date"] < s["end"]) \ or (s["start"] <= params["till"] and params["till"] < s["end"]) ] free = slots == [] if free or "free" not in params: - print("{} - {} - {}".format(room,("Busy","Free")[free],data["desc"])) + if params["verbose"] or free: + print("{} - {} - {}".format(room,("Busy","Free")[free],data["desc"])) sys.exit(0) - \ No newline at end of file + From aba6bc5b9597795d1340df5e5fa694506e5a09bd Mon Sep 17 00:00:00 2001 From: digehode Date: Tue, 26 Nov 2019 00:04:13 +0000 Subject: [PATCH 3/6] Switched to verbose by default so bhaviour defaults to original --- findroom.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/findroom.py b/findroom.py index 6ae2c3e..51cac2f 100644 --- a/findroom.py +++ b/findroom.py @@ -7,7 +7,7 @@ if __name__ == "__main__": usageTxt = "help" - params = {"user": None, "pass": None, "room": "", "equip": "", "course": "", "uid": "", "date": None, "for": 1.0, "verbose":"False"} + params = {"user": None, "pass": None, "room": "", "equip": "", "course": "", "uid": "", "date": None, "for": 1.0, "verbose":"True"} week = covscraper.timetableapi.cov_week(datetime.datetime.now()) # configure flags From 0f7d11f6bdaa3ffa7ad636290c6a58ad8a170482 Mon Sep 17 00:00:00 2001 From: digehode Date: Wed, 26 Aug 2020 10:56:59 +0100 Subject: [PATCH 4/6] Added staff lookup --- staff_lookup.py | 91 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100755 staff_lookup.py diff --git a/staff_lookup.py b/staff_lookup.py new file mode 100755 index 0000000..8982a26 --- /dev/null +++ b/staff_lookup.py @@ -0,0 +1,91 @@ +#!python3 +import urllib.parse +import getopt, getpass +import sys, ast +import covscraper +import json +SET="2019-2020" +TYPE="lecturer" + +# Who decided to send useless names back? +MATCH="Item1" +USERID="Item2" +NAME="Item3" + + +if __name__=="__main__": + usageTxt = "help" + params = {"user": None, "pass": None, "name": "", "verbose":"False"} + + + # configure flags + shortopts = "".join(["{:.1}:".format(i) for i in params]) + longopts = ["help","free"]+["{}=".format(i) for i in params] + try: + opts, args = getopt.getopt(sys.argv[1:], shortopts, longopts) + except getopt.GetoptError as e: + print(e) + sys.exit(1) + + # process flags + for o, a in opts: + if o in ("-h", "--help"): + print(usageTxt) + sys.exit(1) + elif o in ("free",): + params["free"] = True + + for p in params: + if o in ("-{:.1}".format(p), "--{}".format(p)): + params[p] = a + + + #Make sure there is soemthing to search + if len(args)==0: + print(f"Usage:\n\n\t{sys.argv[0]} [search string]\n") + sys.exit(1) + + lookfor=" ".join(args) + + # handle defaults + if not params["user"]: params["user"] = input("username: ") + if not params["pass"]: params["pass"] = getpass.getpass("password: ") + + params["verbose"]=ast.literal_eval(params["verbose"]) + + name=urllib.parse.quote_plus(lookfor) + qs=f"https://webapp.coventry.ac.uk/Timetable-main/Lookup?type={TYPE}&query={name}&setid={SET}" + + if(params["verbose"]): + print(f"Searching for: {lookfor}") + print(f"Query string is: {qs}") + + + try: + session = covscraper.auth.Authenticator(params["user"], params["pass"]) + response=session.get(qs) + if params["verbose"]: + print(f"Status code: {response.status_code}") + + if response.status_code==200: + data=json.loads(response.text) + matched=False + for i in data: + if i[MATCH]==0: + print(f"{i[USERID]}\t{i[NAME]}") + matched=True + if params["verbose"] or not matched: + print("Inexact matches:") + for i in data: + if i[MATCH]!=0: + print(f"{i[USERID]}\t{i[NAME]}\t({i[MATCH]} distance)") + + + else: + print(f"Failed to retrieve data: {response.status_code}") + # import code + # code.interact(local=locals()) + except covscraper.auth.AuthenticationFailure: + print("Failed to authenticate") + sys.exit(1) + From 592432eff9839396710596c044ed1223a4bb1636 Mon Sep 17 00:00:00 2001 From: digehode Date: Wed, 26 Aug 2020 11:00:19 +0100 Subject: [PATCH 5/6] Added rooms --- covscraper/rooms.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/covscraper/rooms.py b/covscraper/rooms.py index 3fa6492..6d292e9 100644 --- a/covscraper/rooms.py +++ b/covscraper/rooms.py @@ -48,5 +48,14 @@ "EC2-13": {"desc":"", "size":7*6, "equip":("pc",)}, "EC2-14": {"desc":"gameslab", "size":7*6, "equip":("pc",)}, "EC2-24": {"desc":"planet", "size":None}, -"EC2-25": {"desc":"planet", "size":None} +"EC2-25": {"desc":"planet", "size":None}, + +"EC3-35": {"desc":"Meeting Room - 24 - No students AV but bring your own laptop", "size":24, "equip":("meeting",)}, +"EC3-37": {"desc":"Private Space (EC Use Only - 10) No students No AV/PC", "size":10, "equip":("meeting",)}, +"EC3-07": {"desc":"Private Space (EC Use Only) 8 - No students No AV/PC", "size":8, "equip":("meeting",)}, +"EC3-42": {"desc":"Private Space (EC Use Only) 8 - No students No AV/PC", "size":8, "equip":("meeting",)}, +"EC4-32": {"desc":"Meeting Room - 18 - No students AV but bring your own laptop", "size":18, "equip":("meeting",)}, +"EC4-11": {"desc":"Private Space (EC Use Only - Dean' Office)", "size":None, "equip":("meeting",)}, +"EC4-38": {"desc":"Private Space (EC Use Only) 8 -No students No AV/PC", "size":8, "equip":("meeting",)} + } From fdb1728e8034a13b70c351a59a074ab638258ff1 Mon Sep 17 00:00:00 2001 From: digehode Date: Wed, 26 Aug 2020 11:00:57 +0100 Subject: [PATCH 6/6] Updated gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..19800f8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +__pycache__ +*~ +/venv/