dummy-frontend.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import sys
  2. from backends.support import ResourceCategory, ResourceRawHTML
  3. from backends.schoolloop import SchoolloopBackend
  4. from backends.haiku import HaikuBackend
  5. from backends.webassign import WebassignBackend
  6. from backends.dummy import DummyBackend
  7. backends = [DummyBackend, SchoolloopBackend, HaikuBackend, WebassignBackend]
  8. backend = { x.__name__ : x for x in backends } [sys.argv[1]] ()
  9. from http.client import HTTPConnection
  10. import logging
  11. HTTPConnection.debuglevel = 1
  12. logging.basicConfig()
  13. logging.getLogger().setLevel(logging.DEBUG)
  14. requests_log = logging.getLogger("requests.packages.urllib3")
  15. requests_log.setLevel(logging.DEBUG)
  16. requests_log.propagate = True
  17. def authenticate():
  18. config = {
  19. "Email": sys.argv[2],
  20. "Username": sys.argv[2],
  21. "Password": sys.argv[3],
  22. "School": sys.argv[4]
  23. }
  24. if backend.login(config):
  25. backend.authenticated = True
  26. else:
  27. print("Bad credentials")
  28. sys.exit(1)
  29. def dump_resources(rsrc, count):
  30. if isinstance(rsrc, ResourceCategory):
  31. print((" " * count) + rsrc.name)
  32. for child in rsrc.children:
  33. dump_resources(child, count + 1)
  34. if rsrc.name == "Welcome":
  35. for child in rsrc.contents:
  36. dump_resources(child, count + 1)
  37. elif isinstance(rsrc, ResourceRawHTML):
  38. print((" " * count) + rsrc.name + ": " + rsrc.html)
  39. else:
  40. print((" " * count) + rsrc.name + " (" + type(rsrc).__name__ + ")")
  41. authenticate()
  42. for course in backend.courses:
  43. print(course.title + " by " + course.teacher + " (ID " + course.id + ")")
  44. try:
  45. print("Course grade: " + str(course.grade_summary))
  46. if course.title == "TODO: Don't waste bandwidth":
  47. for category in course.grades:
  48. print(category.name + ": " + str(round(category.mean * 100)) + "%")
  49. for grade in category.grades:
  50. print(".. " + grade.name + ": " + str(round(grade.grade * 100)) + "%")
  51. except AttributeError:
  52. print("Backend does not implement grades")
  53. try:
  54. dump_resources(course.resources, 0)
  55. except AttributeError:
  56. print("Backend does not implement resources")
  57. try:
  58. for task in course.tasks:
  59. print("- " + task.name)
  60. print(task.resources)
  61. except AttributeError:
  62. print("Backend does not implement tasks")
  63. print("----")