diff --git a/.sprofile b/.2022rkhondakprofile similarity index 100% rename from .sprofile rename to .2022rkhondakprofile diff --git a/.tprofile b/.eharris1profile similarity index 100% rename from .tprofile rename to .eharris1profile diff --git a/CLI/student.py b/CLI/student.py index a97da2c..ae61396 100644 --- a/CLI/student.py +++ b/CLI/student.py @@ -13,9 +13,9 @@ import datetime # git clone student directory ==> /classes/assignments # get teacher info from api -def getStudent(ion_user): +def getStudent(ion_user, password): URL = "http://127.0.0.1:8000/api/students/" + ion_user + "/" - r = requests.get(url=URL, auth=('raffukhondaker', 'hackgroup1')) + r = requests.get(url=URL, auth=(ion_user, password)) if (r.status_code == 200): data = r.json() return data @@ -30,33 +30,60 @@ def getStudent(ion_user): print(r.status_code) #makes a GET request to given url, returns dict -def getDB(url): - r = requests.get(url=url, auth=('raffukhondaker', 'hackgroup1')) +def getDB(user, pwd, url): + """ + Sends a GET request to the URL + :param url: URL for request + """ + r = requests.get(url=url, auth=(user, pwd)) print("GET:" + str(r.status_code)) - return (r.json()) - -#makes a PATCH (updates instance) request to given url, returns dict -def patchDB(data, url): - r = requests.patch(url = url, data=data, auth=('raffukhondaker','hackgroup1')) - print("PATCH:" + str(r.status_code)) return(r.json()) +#makes a PATCH (updates instance) request to given url, returns dict +def patchDB(user, pwd, data, url): + """ + Sends a PATCH request to the URL + :param data: + :param url: URL for request + """ + r = requests.patch(url=url, data=data, auth=(user, pwd)) + print("PATCH:" + str(r.status_code)) + return r.json() + + #makes a POST (makes new instance) request to given url, returns dict -def postDB(data, url): - r = requests.post(url=url, data=data, auth=('raffukhondaker', 'hackgroup1')) +def postDB(user, pwd, data, url): + """ + Sends a POST request to the URL + :param data: + :param url: URL for request + """ + r = requests.post(url=url, data=data, auth=(user, pwd)) print("POST:" + str(r.status_code)) - return (r.json()) + return r.json() + #makes a PUT (overwrites instance) request to given url, returns dict -def putDB(data, url): - r = requests.put(url=url, data=data, auth=('raffukhondaker', 'hackgroup1')) +def putDB(user, pwd, data, url): + """ + Sends a PUT request to the URL + :param data: + :param url: URL for request + """ + r = requests.put(url=url, data=data, auth=(user, pwd)) print("PUT:" + str(r.status_code)) - return (r.json()) + return r.json() + #makes a DELETE (delete instance) request to given url, returns dict -def delDB(url): - r = requests.delete(url=url, auth=('raffukhondaker', 'hackgroup1')) +def delDB(user, pwd, url): + """ + Sends a DELETE request to the URL + :param url: URL for request + """ + r = requests.delete(url=url, auth=(user, pwd)) print("DELETE:" + str(r.status_code)) + return None def command(command): @@ -75,7 +102,7 @@ def command(command): # public methods: deleteClass, makeClass, update class Student: - def __init__(self, data): + def __init__(self, data, password): # teacher info already stored in API # intitialze fields after GET request self.git = data['git'] @@ -84,6 +111,7 @@ class Student: self.grade = data['grade'] self.completed = data['completed'] self.user = data['user'] + self.password = password # classes in id form (Example: 4,5) # storing actual classes cid = data['classes'].split(",") @@ -98,7 +126,7 @@ class Student: classes = [] for c in cid: url = "http://127.0.0.1:8000/api/classes/" + str(c) + "/" - classes.append(getDB(url)) + classes.append(getDB(self.username, self.password,url)) self.classes = classes self.sclass = str(data['classes']) @@ -116,7 +144,7 @@ class Student: nclasses = [] for c in nid: url = "http://127.0.0.1:8000/api/classes/" + str(c) + "/" - nclasses.append(getDB(url)) + nclasses.append(getDB(self.username, self.password,url)) self.new = nclasses self.snew = str(data['added_to']) @@ -143,7 +171,7 @@ class Student: data = { 'repo': self.repo } - print(patchDB(data, self.url)) + print(patchDB(self.username, self.password,data, self.url)) print("Synced to " + self.username) def getClasses(self): @@ -158,7 +186,7 @@ class Student: print(c['name']) alist = c['assignments'] for a in alist: - ass = getDB("http://127.0.0.1:8000/api/assignments/" + a) + ass = getDB(self.username, self.password,"http://127.0.0.1:8000/api/assignments/" + a) now = datetime.datetime.now() try: due = ass['due_date'].replace("T", " ").replace("Z", "") @@ -180,7 +208,7 @@ class Student: command("git checkout master") for c in self.classes: print("UPDATING CLASS: " + str(c['name'])) - data = getDB("http://127.0.0.1:8000/api/classes/" + str(c['name'])) + data = getDB(self.username, self.password,"http://127.0.0.1:8000/api/classes/" + str(c['name'])) # command("git checkout master") command("git checkout " + data['name']) command("git add .") @@ -213,7 +241,7 @@ class Student: # add classes from 'new' field def addClass(self, cid): - data = getDB('http://127.0.0.1:8000/api/classes/' + str(cid)) + data = getDB(self.username, self.password,'http://127.0.0.1:8000/api/classes/' + str(cid)) if ((cid in self.snew) == False or (self.username in data['confirmed'])): print("Already enrolled in this class.") return None @@ -224,7 +252,7 @@ class Student: # add class teacher as cocllaborator to student repo print(os.getcwd()) pwd = input("Enter Github password: ") - tgit = getDB("http://127.0.0.1:8000/api/teachers/" + data['teacher'] + "/")['git'] + tgit = getDB(self.username, self.password,"http://127.0.0.1:8000/api/teachers/" + data['teacher'] + "/")['git'] url = "curl -i -u " + self.git + ":" + pwd + " -X PUT -d '' " + "'https://api.github.com/repos/" + self.git + "/" + self.username + "/collaborators/" + tgit + "'" print(url) os.system(url) @@ -277,7 +305,7 @@ class Student: # recreate sclass field, using ids for c in self.new: snew = snew + str(c['name']) + "," - new.append(getDB("http://127.0.0.1:8000/api/classes/" + str(cid))) + new.append(getDB(self.username, self.password,"http://127.0.0.1:8000/api/classes/" + str(cid))) self.snew = snew self.new = new break @@ -289,7 +317,7 @@ class Student: 'classes': self.sclass } print(self.url) - print(patchDB(data, self.url)) + print(patchDB(self.username, self.password,data, self.url)) return data def submit(self, path): @@ -379,8 +407,8 @@ class Student: os.chdir(cdir) -# data = getStudent("2022rkhondak") -# s = Student(data) +#data = getStudent("2022rkhondak", "PWD") +#s = Student(data, "PWD") # s.viewClass("APLit_eharris1") # #s.addClass("APLit_eharris1") # # #s.update() diff --git a/CLI/teacher.py b/CLI/teacher.py index c332b3f..363d80c 100644 --- a/CLI/teacher.py +++ b/CLI/teacher.py @@ -26,14 +26,16 @@ from datetime import datetime # git clone student directory ==> /classes/assignments # get teacher info from api -def getTeacher(ion_user): +def getTeacher(ion_user, password): """ Gets information about a teacher from the api :param ion_user: a teacher + :param password: a string :return: teacher information or error """ URL = "http://127.0.0.1:8000/api/teachers/" + ion_user + "/" - r = requests.get(url=URL, auth=('raffukhondaker', 'hackgroup1')) + r = requests.get(url=URL, auth=(ion_user,password)) + print(r.json()) if r.status_code == 200: data = r.json() return data @@ -48,58 +50,67 @@ def getTeacher(ion_user): print(r.status_code) #makes a GET request to given url, returns dict -def getDB(url): +def getDB(user, pwd, url): """ Sends a GET request to the URL + :param user: a string + :param password: a string :param url: URL for request """ - r = requests.get(url=url, auth=('raffukhondaker', 'hackgroup1')) + r = requests.get(url=url, auth=(user, pwd)) print("GET:" + str(r.status_code)) return(r.json()) #makes a PATCH (updates instance) request to given url, returns dict -def patchDB(data, url): +def patchDB(user, pwd, data, url): """ Sends a PATCH request to the URL :param data: + :param user: a string + :param password: a string :param url: URL for request """ - r = requests.patch(url=url, data=data, auth=('raffukhondaker', 'hackgroup1')) + r = requests.patch(url=url, data=data, auth=(user, pwd)) print("PATCH:" + str(r.status_code)) return r.json() #makes a POST (makes new instance) request to given url, returns dict -def postDB(data, url): +def postDB(user, pwd, data, url): """ Sends a POST request to the URL :param data: + :param user: a string + :param password: a string :param url: URL for request """ - r = requests.post(url=url, data=data, auth=('raffukhondaker', 'hackgroup1')) + r = requests.post(url=url, data=data, auth=(user, pwd)) print("POST:" + str(r.status_code)) return r.json() #makes a PUT (overwrites instance) request to given url, returns dict -def putDB(data, url): +def putDB(user, pwd, data, url): """ Sends a PUT request to the URL - :param data: + :param user: a string + :param password: a string :param url: URL for request """ - r = requests.put(url=url, data=data, auth=('raffukhondaker', 'hackgroup1')) + r = requests.put(url=url, data=data, auth=(user, pwd)) print("PUT:" + str(r.status_code)) return r.json() #makes a DELETE (delete instance) request to given url, returns dict -def delDB(url): +def delDB(user, pwd, url): """ Sends a DELETE request to the URL + :param user: a string + :param password: a string :param url: URL for request """ - r = requests.delete(url=url, auth=('raffukhondaker', 'hackgroup1')) + r = requests.delete(url=url, auth=(user, pwd)) print("DELETE:" + str(r.status_code)) return None @@ -123,7 +134,7 @@ def command(command): # public methods: deleteClass, makeClass, update class Teacher: - def __init__(self, data): + def __init__(self, data, password): # teacher info already stored in API # intitialze fields after GET request """ @@ -134,6 +145,7 @@ class Teacher: self.username = data['ion_user'] self.url = "http://127.0.0.1:8000/api/teachers/" + self.username + "/" self.id = data['user'] + self.password = password # classes in id form (Example: 4,5) # array @@ -218,15 +230,22 @@ class Teacher: return if self.checkClass(path): cpath = self.username + "/" + cname + subject = cname.split("_")[0] + period = int(input("Enter period: ")) + while(not (type(period) is int and period >= 0)): + print("Incorrect format") + period = int(input("Enter period: ")) data = { "name": cname, "repo": "", "path": cpath, + "subject": subject, + "period":period, "teacher": self.username, "owner": self.id } # make class instance in db - postDB(data, 'http://127.0.0.1:8000/api/classes/') + postDB(self.username, self.password, data, 'http://127.0.0.1:8000/api/classes/') time.sleep(1) self.classes.append(cname) # add to instance @@ -235,7 +254,7 @@ class Teacher: 'classes': self.classes } print(self.classes) - print(patchDB(data, 'http://127.0.0.1:8000/api/teachers/' + self.username + "/")) + print(patchDB(self.username, self.password, data, 'http://127.0.0.1:8000/api/teachers/' + self.username + "/")) # make a new class from scratch # subject: string, assignments: list @@ -248,7 +267,7 @@ class Teacher: # check if class exists path = self.username + "/" + cname isclass = False - acourses = getDB("http://127.0.0.1:8000/api/classes/")['results'] + acourses = getDB(self.username, self.password, "http://127.0.0.1:8000/api/classes/")['results'] for c in acourses: if c['name'] == cname: isclass = True @@ -300,7 +319,7 @@ class Teacher: # 'classes':self.classes, # } # print(patchDB(data, self.url)) - delDB("http://127.0.0.1:8000/api/classes/" + cname + "/") + delDB(self.username, self.password, "http://127.0.0.1:8000/api/classes/" + cname + "/") break # remove locally @@ -318,7 +337,7 @@ class Teacher: :return: True if student exists, False otherwise """ r = requests.get(url="http://127.0.0.1:8000/api/students/" + student + "/", - auth=('raffukhondaker', 'hackgroup1')) + auth=(self.username, self.password)) if r.status_code != 200: return False return True @@ -333,7 +352,7 @@ class Teacher: if not self.isStudent(sname): print(sname + " does not exist.") return False - course = getDB("http://127.0.0.1:8000/api/classes/" + cname) + course = getDB(self.username, self.password, "http://127.0.0.1:8000/api/classes/" + cname) if sname in str(course['unconfirmed']): print(sname + " already requested.") return True @@ -341,7 +360,7 @@ class Teacher: print(sname + " already enrolled.") return False - student = getDB("http://127.0.0.1:8000/api/students/" + sname) + student = getDB(self.username, self.password, "http://127.0.0.1:8000/api/students/" + sname) try: if student['added_to'] == "": student['added_to'] = course['name'] @@ -354,8 +373,8 @@ class Teacher: data = { 'added_to': student['added_to'], } - student = patchDB(data, "http://localhost:8000/api/students/" + student['ion_user'] + "/") - student = getDB("http://localhost:8000/api/students/" + sname + "/") + student = patchDB(self.username, self.password, data, "http://localhost:8000/api/students/" + student['ion_user'] + "/") + student = getDB(self.username, self.password, "http://localhost:8000/api/students/" + sname + "/") if not course['unconfirmed']: course['unconfirmed'] = student['ion_user'] else: @@ -364,7 +383,7 @@ class Teacher: "unconfirmed": course['unconfirmed'] } print(cinfo) - patchDB(cinfo, "http://localhost:8000/api/classes/" + course['name'] + "/") + patchDB(self.username, self.password, cinfo, "http://localhost:8000/api/classes/" + course['name'] + "/") return True # Student should have confirmed on their endd, but class had not been updated yet @@ -380,8 +399,8 @@ class Teacher: print(sname + " does not exist.") return False - student = getDB("http://127.0.0.1:8000/api/students/" + sname) - course = getDB("http://127.0.0.1:8000/api/classes/" + cname) + student = getDB(self.username, self.password, "http://127.0.0.1:8000/api/students/" + sname) + course = getDB(self.username, self.password, "http://127.0.0.1:8000/api/classes/" + cname) if (os.path.exists(self.username + "/Students/" + cname + "/" + student['ion_user']) or ( student['ion_user'] in course['confirmed']) == True): @@ -435,7 +454,7 @@ class Teacher: "confirmed": course["confirmed"], "unconfirmed": course['unconfirmed'] } - print(putDB(course, "http://localhost:8000/api/classes/" + course['name'] + "/")) + print(putDB(self.username, self.password, course, "http://localhost:8000/api/classes/" + course['name'] + "/")) return True # goes through list of studennts, tries to add, then request, return unconfirmed students @@ -494,7 +513,7 @@ class Teacher: print("Due-date format is incorrect") return False - course = getDB("http://127.0.0.1:8000/api/classes/" + course) + course = getDB(self.username, self.password, "http://127.0.0.1:8000/api/classes/" + course) if aname in str(course['assignments']): print("Assignment name already taken.") return False @@ -525,22 +544,23 @@ class Teacher: print(st + " already has assignment") # check if assignment already exists - r = requests.get(url='http://127.0.0.1:8000/api/assignments/' + aname, auth=('raffukhondaker', 'hackgroup1')) + r = requests.get(url='http://127.0.0.1:8000/api/assignments/' + aname, auth=(self.username, self.password)) if r.status_code != 200: ass = { 'name': oname, 'path': path, 'classes': course['name'], 'teacher': self.username, - 'due_date': due + 'due_date': due, + 'owner':self.id } - postDB(ass, 'http://127.0.0.1:8000/api/assignments/') + postDB(self.username, self.password, ass, 'http://127.0.0.1:8000/api/assignments/') course['assignments'].append(oname) cinfo = { "assignments": course['assignments'], } - print(patchDB(cinfo, "http://127.0.0.1:8000/api/classes/" + course['name'] + "/")) + print(patchDB(self.username, self.password, cinfo, "http://127.0.0.1:8000/api/classes/" + course['name'] + "/")) return True else: print("Assignment already addedd") @@ -561,12 +581,12 @@ class Teacher: d = { 'due_date': due, } - print(patchDB(d, 'http://localhost:8000/api/assignments/' + oname + "/")) + print(patchDB(self.username, self.password, d, 'http://localhost:8000/api/assignments/' + oname + "/")) print("Due-date changed " + due) except: print("Due-date is the same") input() - course = getDB("http://127.0.0.1:8000/api/classes/" + course) + course = getDB(self.username, self.password, "http://127.0.0.1:8000/api/classes/" + course) slist = os.listdir(os.getcwd() + "/" + self.username + "/Students/" + course['name']) cdir = os.getcwd() for st in slist: @@ -597,7 +617,7 @@ class Teacher: os.chdir(cdir) def getCommits(self, student, course, commits): - course = getDB("http://127.0.0.1:8000/api/classes/" + course) + course = getDB(self.username, self.password, "http://127.0.0.1:8000/api/classes/" + course) try: if not (student in course['confirmed']): print("Student not in class") @@ -645,7 +665,7 @@ class Teacher: :param course: the course :param commits: commits the CLI has made for the assignment """ - course = getDB("http://127.0.0.1:8000/api/classes/" + course + "/") + course = getDB(self.username, self.password, "http://127.0.0.1:8000/api/classes/" + course + "/") ar = self.getCommits(student, course['name'], commits) commit = ar[len(ar) - 1][0] start = "" @@ -670,7 +690,7 @@ class Teacher: def afterSubmit(self, course, assignment, student): - assignment = getDB("http://127.0.0.1:8000/api/assignments/" + assignment) + assignment = getDB(self.username, self.password, "http://127.0.0.1:8000/api/assignments/" + assignment) # assignment = { # 'name': assignment, # 'due_date': "2020-04-11 16:58:33.383124", @@ -705,8 +725,9 @@ class Teacher: print("heheheh") -# data = getTeacher("eharris1") -# t = Teacher(data) +# data = getTeacher("eharris1","PWD") +# print(data) +# t = Teacher(data, "PWD") # t.makeClass("APLit_eharris1") # t.updateAssignment("eharris1/APLit_eharris1/BookReport", "APLit_eharris1", '2020-08-11 16:58:33.383124') # ar = ['2022rkhondak','2022inafi','2023rumareti'] diff --git a/Website/api/serializers.py b/Website/api/serializers.py index 40521ac..7d7b2aa 100644 --- a/Website/api/serializers.py +++ b/Website/api/serializers.py @@ -34,7 +34,7 @@ class ClassSerializer(serializers.ModelSerializer): class Meta: model = Class # fields = ['url','name', 'repo','path', "teacher",'assignments',"default_file", 'confirmed', 'unconfirmed','owner'] - fields = ['name', 'repo','path','assignments',"teacher","default_file", 'confirmed', 'unconfirmed','owner'] + fields = ['name', 'repo','path','subject','period','assignments',"teacher","default_file", 'confirmed', 'unconfirmed','owner'] class StudentSerializer(serializers.ModelSerializer): # Class = ClassSerializer(many=True, read_only=True,allow_null=True) diff --git a/eharris1/APLit_eharris1/BookReport/rubric.txt b/eharris1/APLit_eharris1/BookReport/rubric.txt deleted file mode 100644 index a65722f..0000000 --- a/eharris1/APLit_eharris1/BookReport/rubric.txt +++ /dev/null @@ -1,7 +0,0 @@ -kskskksks -kskskksks -kskskksks -kskskksks -kskskksks -kskskksks -kskskksks \ No newline at end of file diff --git a/eharris1/APLit_eharris1/BookReport/sample.txt b/eharris1/APLit_eharris1/BookReport/sample.txt deleted file mode 100644 index e69de29..0000000 diff --git a/eharris1/APLit_eharris1/Essay1_APLit_eharris1/instruct.txt b/eharris1/APLit_eharris1/Essay1_APLit_eharris1/instruct.txt deleted file mode 100644 index e69de29..0000000 diff --git a/eharris1/APLit_eharris1/Essay2/instruct.txt b/eharris1/APLit_eharris1/Essay2/instruct.txt deleted file mode 100644 index e69de29..0000000 diff --git a/eharris1/Art12_eharris1/Painting1/rubric.txt b/eharris1/Art12_eharris1/Painting1/rubric.txt deleted file mode 100644 index e69de29..0000000 diff --git a/eharris1/English11_eharris1/README.md b/eharris1/English11_eharris1/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/eharris1/APLit_eharris1/README.md b/eharris1/English12_eharris1/README.md similarity index 100% rename from eharris1/APLit_eharris1/README.md rename to eharris1/English12_eharris1/README.md diff --git a/skoolos.py b/skoolos.py index 2941c21..ad7491b 100644 --- a/skoolos.py +++ b/skoolos.py @@ -35,7 +35,9 @@ def main(): print("╚═════╝░╚═╝░░╚═╝░╚════╝░░╚════╝░╚══════╝  ░╚════╝░╚═════╝░") print("") - if not (os.path.exists(".sprofile") or os.path.exists(".tprofile")): + profiles = os.listdir() + + if not ("profile" in str(profiles)): try: URL = "http://127.0.0.1:8000/api/" r = requests.get(url = URL) @@ -60,6 +62,7 @@ def main(): info.append(d) users.append(str(count) + ") " + d['username']) count = count+1 + users.append(str(count) + ") Make new user") user = [ { 'type': 'list', @@ -69,6 +72,9 @@ def main(): }, ] u = int(prompt(user)['user'].split(")")[0]) -1 + if(u+1 == count): + authenticate() + return data = info[u] PWD = data['password'] USER = data['username'] @@ -78,16 +84,18 @@ def main(): else: teacherCLI(USER, PWD) -################################################ STUDENT METHODS +#################################################################################################### STUDENT METHODS def studentCLI(user, password): from CLI import student data = getUser(user, password, 'student') - student = student.Student(data) + student = student.Student(data, password) student.update() EXIT = False while(not EXIT): course = chooseClassStudent(student) + if(course == "Exit SkoolOS"): + return EXIT = classOptionsStudent(student, course) #return class @@ -137,7 +145,37 @@ def classOptionsStudent(student, course): return True -################################################ TEACHER METHODS +#################################################################################################### TEACHER METHODS +def teacherCLI(user, password): + from CLI import teacher + data = getUser(user, password, 'teacher') + print(data) + teacher = teacher.Teacher(data, password) + EXIT = False + # 1. make a class + # 2. add studeents to an existing class + # 3. Get progress logs on a student + # 2. make an assignment for a class + # 3. view student submissions for an assignment + while(not EXIT): + #Options: '1) Request Student', "2) Add assignment", "3) View student information", "4) Exit" + course = chooseGeneralTeacher(teacher) + if course == "Exit SkoolOS": + EXIT = True + elif course == "Make New Class": + EXIT = makeClassTeacher(teacher) + #selected a class + else: + option = classOptionsTeacher(teacher, course) + if(option == '1'): + EXIT = addStudentsTeacher(teacher, course) + elif(option == '2'): + EXIT = addAssignmentTeacher(teacher, course) + elif(option == '3'): + EXIT = viewStudentsTeacher(teacher, course) + else: + EXIT = True + def chooseGeneralTeacher(teacher): carray = [] for c in teacher.classes: @@ -155,33 +193,18 @@ def chooseGeneralTeacher(teacher): course = prompt(courses)['course'] return course -def teacherCLI(user, password): - from CLI import teacher - data = getUser(user, password, 'teacher') - print(data) - teacher = teacher.Teacher(data) - # 1. make a class - # 2. add studeents to an existing class - # 3. Get progress logs on a student - # 2. make an assignment for a class - # 3. view student submissions for an assignment - carray = [] - for c in teacher.classes: - carray.append(c) - carray.append("Make New Class") - carray.append("Exit SkoolOS") - courses = [ +def makeClassTeacher(teacher): + questions = [ { - 'type': 'list', - 'name': 'course', - 'choices':carray, - 'message': 'Select class: ', + 'type': 'input', + 'name': 'cname', + 'message': 'Class Name (Must be: _): ', }, ] - course = chooseGeneralTeacher(teacher) - if course == "Exit SkoolOS": - teacher.exitCLI() - if course == "Make New Class": + cname = prompt(questions)['cname'] + print(cname) + while(not ("_" + teacher.username) in cname): + print("Incorrect naming format") questions = [ { 'type': 'input', @@ -190,137 +213,165 @@ def teacherCLI(user, password): }, ] cname = prompt(questions)['cname'] - print(cname) - teacher.makeClass(cname) - soption = ["1) Add individual student", "2) Add list of students through path", "3) Exit"] - questions = [ - { - 'type': 'list', - 'choices':soption, - 'name': 'students', - 'message': 'Add Students): ', - }, - ] - choice = prompt(questions)['students'].split(")")[0] - if("1" == choice): - s = input("Student name: ") - teacher.addStudent(s, cname) - if("2" == choice): - print("File must be .txt and have 1 student username per line") - path = input("Relative Path: ") - while(not os.path.exists(path)): - if(path == 'N'): - sys.exit(0) - print(path + " is not a valid path") - path = input("Enter file path ('N' to exit): ") - f = open(path, 'r') - students = f.read().splitlines() - teacher.reqAddStudentList(students, cname) - else: - print("Class: " + course) - unconf = getDB("http://localhost:8000/api/classes/" + course)['unconfirmed'] - for s in unconf: - teacher.addStudent(s, course) - options = ['1) Request Student', "2) Add assignment", "3) View student information", "Exit"] + teacher.makeClass(cname) + soption = ["1) Add individual student", "2) Add list of students through path", "3) Exit"] + questions = [ + { + 'type': 'list', + 'choices':soption, + 'name': 'students', + 'message': 'Add Students): ', + }, + ] + choice = prompt(questions)['students'].split(")")[0] + if("1" == choice): + s = input("Student name: ") + teacher.addStudent(s, cname) + if("2" == choice): + print("File must be .txt and have 1 student username per line") + path = input("Relative Path: ") + while(not os.path.exists(path)): + if(path == 'N'): + return True + print(path + " is not a valid path") + path = input("Enter file path ('N' to exit): ") + f = open(path, 'r') + students = f.read().splitlines() + teacher.reqAddStudentList(students, cname) + return False + +def classOptionsTeacher(teacher, course): + print("Class: " + course) + unconf = getDB(teacher.username, teacher.password, "http://localhost:8000/api/classes/" + course)['unconfirmed'] + for s in unconf: + teacher.addStudent(s, course) + options = ['1) Request Student', "2) Add assignment", "3) View student information", "4) Exit"] + questions = [ + { + 'type': 'list', + 'name': 'course', + 'choices':options, + 'message': 'Select option: ', + }, + ] + option = prompt(questions)['course'].split(")")[0] + return option + +def addStudentsTeacher(teacher, course): + soption = ["1) Add individual student", "2) Add list of students through path", "3) Exit"] + questions = [ + { + 'type': 'list', + 'choices':soption, + 'name': 'students', + 'message': 'Add list of students (input path): ', + }, + ] + schoice = prompt(questions)['students'].split(")")[0] + if(schoice == '1'): questions = [ { - 'type': 'list', - 'name': 'course', - 'choices':options, - 'message': 'Select option: ', + 'type': 'input', + 'name': 'student', + 'message': 'Student Name: ', }, ] - option = prompt(questions)['course'].split(")")[0] - if(option == '1'): - soption = ["1) Add individual student", "2) Add list of students through path", "3) Exit"] - questions = [ - { - 'type': 'list', - 'choices':soption, - 'name': 'students', - 'message': 'Add list of students (input path): ', - }, - ] - schoice = prompt(questions)['students'].split(")")[0] - if(schoice == '1'): - questions = [ - { - 'type': 'input', - 'name': 'student', - 'message': 'Student Name: ', - }, - ] - s = prompt(questions)['student'] - teacher.reqStudent(s, course) - if(schoice == '2'): - questions = [ - { - 'type': 'input', - 'name': 'path', - 'message': 'Path: ', - }, - ] - path = prompt(questions)['path'] - while(not os.path.exists(path)): - if(path == 'N'): - sys.exit(0) - print(path + " is not a valid path") - path = input("Enter file path ('N' to exit): ") - f = open(path, 'r') - students = f.read().splitlines() - teacher.reqAddStudentList(students, course) - else: + s = prompt(questions)['student'] + teacher.reqStudent(s, course) + return False + if(schoice == '2'): + questions = [ + { + 'type': 'input', + 'name': 'path', + 'message': 'Path: ', + }, + ] + path = prompt(questions)['path'] + while(not os.path.exists(path)): + if(path == 'N'): sys.exit(0) - if(option == '2'): - nlist = os.listdir(teacher.username + "/" + course) - alist = getDB("http://localhost:8000/api/classes/" + course)['assignments'] - print(nlist) - tlist = [] - b = True - for n in nlist: - b = True - print(teacher.username + "/" + course + "/" + n) - for a in alist: - if(n in a or n == a): - #print("Assignments: " + n) - b = False - if(not os.path.isdir(teacher.username + "/" + course + "/" + n)): - b = False - if(b): - tlist.append(n) + print(path + " is not a valid path") + path = input("Enter file path ('N' to exit): ") + f = open(path, 'r') + students = f.read().splitlines() + teacher.reqAddStudentList(students, course) + return False + else: + return True + +def addAssignmentTeacher(teacher, course): + nlist = os.listdir(teacher.username + "/" + course) + alist = getDB(teacher.username, teacher.password, "http://localhost:8000/api/classes/" + course)['assignments'] + print(nlist) + tlist = [] + b = True + for n in nlist: + b = True + print(teacher.username + "/" + course + "/" + n) + for a in alist: + if(n in a or n == a): + #print("Assignments: " + n) + b = False + if(not os.path.isdir(teacher.username + "/" + course + "/" + n)): + b = False + if(b): + tlist.append(n) - nlist = tlist - if(len(nlist) == 0): - print("No new assignments found") - sys.exit(0) - questions = [ - { - 'type': 'list', - 'choices':nlist, - 'name': 'assignment', - 'message': 'Select new assignment: ', - }, - ] - ass = prompt(questions)['assignment'] - apath = teacher.username + "/" + course + "/" + ass + nlist = tlist + if(len(nlist) == 0): + print("No new assignments found") + print("To make an assignment: make a subdirectory in the " + course + " folder. Add a file within the new folder") + return False + questions = [ + { + 'type': 'list', + 'choices':nlist, + 'name': 'assignment', + 'message': 'Select new assignment: ', + }, + ] + ass = prompt(questions)['assignment'] + apath = teacher.username + "/" + course + "/" + ass + due = input("Enter due date (Example: 2020-08-11 16:58): ") + due = due + ":33.383124" + due = due.strip() + f = False + while(not f): + try: + datetime.datetime.strptime(due, '%Y-%m-%d %H:%M:%S.%f') + f = True + except: + print("Due-date format is incorrect.") + print(due) due = input("Enter due date (Example: 2020-08-11 16:58): ") due = due + ":33.383124" - due = due.strip() - f = False - while(not f): - try: - datetime.datetime.strptime(due, '%Y-%m-%d %H:%M:%S.%f') - f = True - except: - print("Due-date format is incorrect.") - print(due) - due = input("Enter due date (Example: 2020-08-11 16:58): ") - due = due + ":33.383124" - teacher.addAssignment(apath, course, due) + teacher.addAssignment(apath, course, due) + return False -###################################################################### +def viewStudentsTeacher(teacher, course): + data = getDB(teacher.username, teacher.password, "http://127.0.0.1:8000/api/classes/" + course) + students = data["confirmed"] + unconf = data['unconfirmed'] + print("Studented in class: ") + for s in students: + print(s) + print("Requsted Students: ") + for s in unconf: + print(s) + student = input("View student (Enter student's ion username): ") + while((not student in str(data['confirmed'])) or (not student in str(data['unconfirmed']))): + print("Student not affiliated with class") + student = input("View student ('N' to exit): ") + if student == 'N': + return True + print(getDB(teacher.username, teacher.password, "http://127.0.0.1:8000/api/students/" + student + "/")) + + + +############################################################################################################################################ def getUser(ion_user, password, utype): @@ -328,6 +379,7 @@ def getUser(ion_user, password, utype): URL = "http://127.0.0.1:8000/api/students/" + ion_user + "/" else: URL = "http://127.0.0.1:8000/api/teachers/" + ion_user + "/" + print(URL) r = requests.get(url = URL, auth=(ion_user,password)) print(r.json()) if(r.status_code == 200): @@ -343,28 +395,29 @@ def getUser(ion_user, password, utype): else: print(r.status_code) return None -def patchDB(data, url): - r = requests.patch(url = url, data=data, auth=('raffukhondaker','hackgroup1')) + +def patchDB(USER, PWD, url, data): + r = requests.patch(url = url, data=data, auth=(USER,PWD)) print("PATH:" + str(r.status_code)) return(r.json()) -def getDB(url): - r = requests.get(url = url, auth=('raffukhondaker','hackgroup1')) +def getDB(USER, PWD, url): + r = requests.get(url = url, auth=(USER,PWD)) print("GET:" + str(r.status_code)) return(r.json()) -def postDB(data, url): - r = requests.post(url = url, data=data, auth=('raffukhondaker','hackgroup1')) +def postDB(USER, PWD, url, data): + r = requests.post(url = url, data=data, auth=(USER,PWD)) print("POST:" + str(r.status_code)) return(r.json()) -def putDB(data, url): - r = requests.put(url = url, data=data, auth=('raffukhondaker','hackgroup1')) +def putDB(USER, PWD, url, data): + r = requests.put(url = url, data=data, auth=(USER,PWD)) print("PUT:" + str(r.status_code)) return(r.json()) -def delDB(url): - r = requests.delete(url = url, auth=('raffukhondaker','hackgroup1')) +def delDB(USER, PWD, url): + r = requests.delete(url = url, auth=(USER,PWD)) print("DELETE:" + str(r.status_code)) return None @@ -403,10 +456,7 @@ def authenticate(): #Linux: chromdriver-linux #Macos: chromdriver-mac #Windows: chromdriver.exe - if('CLI' in os.getcwd()): - path = os.path.join(os.getcwd(), '../','chromedriver-mac') - else: - path = os.path.join(os.getcwd(), 'chromedriver-mac') + path = os.path.join(os.getcwd(),'chromedriver','chromedriver-mac') browser = webdriver.Chrome(path) @@ -465,7 +515,8 @@ def authenticate(): 'is_student':is_student, 'password':pwd, } - profileFile = open(".sprofile", "w") + fname = "." + username + "profile" + profileFile = open(fname, "w") profileFile.write(json.dumps(profile)) profileFile.close() @@ -479,11 +530,13 @@ def authenticate(): 'is_student':is_student, 'password':pwd, } - profileFile = open(".tprofile", "w") + fname = "." + username + "profile" + profileFile = open(fname, "w") profileFile.write(json.dumps(profile)) profileFile.close() - sys.exit + sys.exit(0) + def create_server(): port = 8000