Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
__pycache__
*~
/venv/
11 changes: 9 additions & 2 deletions covscraper/rooms.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",)}
24 changes: 16 additions & 8 deletions findroom.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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"])
Expand All @@ -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)


91 changes: 91 additions & 0 deletions staff_lookup.py
Original file line number Diff line number Diff line change
@@ -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)