diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..19800f8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +__pycache__ +*~ +/venv/ diff --git a/covscraper/rooms.py b/covscraper/rooms.py index a1147f4..29bd574 100644 --- a/covscraper/rooms.py +++ b/covscraper/rooms.py @@ -49,5 +49,12 @@ "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",)} diff --git a/findroom.py b/findroom.py index 35004ca..01a1e16 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":"True"} 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([ i for i in params["equip"].split(",") if i != ""]) 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["date"] = datetime.datetime.strptime(params["date"], "%d/%m/%Y") if params["date"] else datetime.datetime.now() params["till"] = params["date"] + datetime.timedelta(hours=params["for"]) @@ -46,17 +47,24 @@ 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",[])) ): - print( "skip" ) + + 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: - print("{} - {} - {}".format(room,data["desc"],data.get("equip",None))) - #print(("Busy","Free")[free]) + + if free or "free" not in params: + if params["verbose"] or free: + print("{} - {} - {}".format(room,("Busy","Free")[free],data["desc"])) sys.exit(0) + + 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) +