diff --git a/.sprofile b/.sprofile new file mode 100644 index 0000000..544f6b1 --- /dev/null +++ b/.sprofile @@ -0,0 +1 @@ +{"username": "2022rkhondak", "grade": 10, "is_student": true, "password": "hackgroup1"} \ No newline at end of file diff --git a/.tprofile b/.tprofile new file mode 100644 index 0000000..b141284 --- /dev/null +++ b/.tprofile @@ -0,0 +1 @@ +{"username": "eharris1", "is_student": false, "password": "hackgroup1"} \ No newline at end of file diff --git a/CLI/commands.py b/CLI/commands.py deleted file mode 100644 index b89acfc..0000000 --- a/CLI/commands.py +++ /dev/null @@ -1,177 +0,0 @@ -from __future__ import print_function, unicode_literals -from PyInquirer import prompt, print_json -import json -import os -import argparse - -''' -my_parser = argparse.ArgumentParser(prog='skool', description='Let SkoolOS control your system', epilog="Try again") -my_parser.add_argument('--init', action="store_true") #returns true if run argument -args = my_parser.parse_args() - -update() -outputs = vars(args) -if(outputs['init']): - start() -''' - - -# already created account through website, has to login -def update(): - """ - Gets data from the database - :return: - """ - return - - -def yesorno(question): - questions = [ - { - 'type': 'input', - 'name': 'response', - 'message': question, - }, - ] - answers = prompt(questions) - if answers["response"] == "y": - return True - return False - - -def login(): - """ - Login to the website with a username and password - :return: user information json if successful, None otherwise - """ - # enter username - # enter password - questions = [ - { - 'type': 'input', - 'name': 'webmail', - 'message': 'What\'s TJ Webmail', - }, - { - 'type': 'password', - 'name': 'password', - 'message': 'Password?', - }, - ] - user = prompt(questions) - # reading from json of users (replace w GET to database) to check if user is registered - with open('users.json', 'r') as json_file: - data = json.load(json_file) - for i in range(len(data)): - if user["webmail"] == data[i]["webmail"]: - if user["password"] == data[i]["password"]: - print("Logged in!") - return data[i] - else: - print("Password incorrect. Try again.") - return None - print("User not found. Please Try again") - return None - - -# did not create account through website, has to signup/login -def signup(): - """ - Used to create an account for the service. - Called if the user does not have an existing account and must create one. - :return: the new user account - """ - questions = [ - { - 'type': 'input', - 'name': 'first-name', - 'message': 'What\'s your first name', - }, - { - 'type': 'input', - 'name': 'last-name', - 'message': 'What\'s your last name?', - }, - { - 'type': 'list', - 'name': 'grade', - 'message': 'Grade?', - 'choices': ["9", "10", "11", "12"] - }, - { - 'type': 'input', - 'name': 'webmail', - 'message': 'What\'s your TJ Webmail?', - }, - { - 'type': 'password', - 'name': 'password', - 'message': 'Password?', - }, - ] - user = prompt(questions) - for i in user: - if user[i] == "": - print("Some forms were left blank. Try again.\n") - return None - if len(user["password"]) < 6: - print("Password is too short. Try again.") - return None - if not ("@tjhsst.edu" in user['webmail']): - print("Webmail entered was not a @tjhhsst.edu. Try again.") - return None - - user["classes"] = [] - with open('users.json', 'r') as json_file: - data = json.load(json_file) - data.append(user) - open("users.json", "w").write(str(json.dumps(data))) - return user - - -def relogin(): - """ - Login to an already verified user account - :return: - """ - questions = [ - { - 'type': 'list', - 'name': 'choice', - 'message': '', - 'choices': ["Continue as current user", "Login into new user", "Sign up into new account"] - }, - ] - answer = prompt(questions) - - -def setup(user): - # Read classes/assignenments and setup directory: - # SkoolOS/Math/Week1 - """ - Reads classes and assignments of/for the user and properly sets of their work directory - :param user: - :return: - """ - for c in user["classes"]: - os.makedirs(c) - for a in user["classes"][c]: - os.makedirs(c + "/" + a) - - -def start(): - """ - Prompts the user for whether or not they have an account and allows them to login/signup depending on their response - :return: - """ - if not os.path.exists(".login.txt"): - b = yesorno("Do you have a SkoolOS account?(y/N)") - if b: - user = login() - if user is not None: - setup(user) - open(".login.txt", "w").write(str(user)) - else: - user = signup() - if user is not None: - open(".login.txt").write(str(user)) diff --git a/CLI/index.html b/CLI/index.html deleted file mode 100644 index a21b847..0000000 --- a/CLI/index.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - Sign in with Ion - - - Sign in with - - \ No newline at end of file diff --git a/CLI/oauth/template.html b/CLI/oauth/template.html deleted file mode 100644 index 6452ea8..0000000 --- a/CLI/oauth/template.html +++ /dev/null @@ -1,23 +0,0 @@ - - - Sign into Ion - - - - - - -
- - - Sign in with Ion - -
- - \ No newline at end of file diff --git a/CLI/student.py b/CLI/student.py index 8559979..fd75366 100644 --- a/CLI/student.py +++ b/CLI/student.py @@ -149,7 +149,7 @@ class Student: classes = self.classes for c in classes: print(c['name']) - alist = c['assignments'].split(",") + alist = c['assignments'] for a in alist: ass = getDB("http://127.0.0.1:8000/api/assignments/" + a) now = datetime.datetime.now() @@ -331,12 +331,13 @@ class Student: if c['name'] == courses: command("git checkout " + courses) print(os.listdir()) - return + break os.chdir(cdir) print("Class not found") return def exitCLI(self): + print(os.getcwd()) self.update() command("git checkout master") @@ -368,11 +369,11 @@ class Student: command('git checkout master') os.chdir(cdir) -data = getStudent("2022rkhondak") -s = Student(data) -#s.viewClass("APLit_eharris1") -s.addClass("APLit_eharris1") -# #s.update() +# data = getStudent("2022rkhondak") +# s = Student(data) +# s.viewClass("APLit_eharris1") +# #s.addClass("APLit_eharris1") +# # #s.update() # s.exitCLI() def main(): diff --git a/CLI/teacher.py b/CLI/teacher.py index b062c15..08f0a70 100644 --- a/CLI/teacher.py +++ b/CLI/teacher.py @@ -365,6 +365,7 @@ class Teacher: def addAssignment(self, path, course, due): parts = path.split("/") aname = parts[len(parts)-1] + oname = aname + "_" + course if(os.path.isdir(path) == 0 or len(parts) < 3) or aname in str(self.classes): print("Not valid path.") @@ -373,9 +374,9 @@ class Teacher: print("Not in valid class directory") return False #parts of assignment name (Essay1, APLit) - if((course in aname) == False): - print("Assignment named incorrectly; could be "+ aname + "_" + course) - return False + # if((course in aname) == False): + # print("Assignment named incorrectly; could be "+ aname + "_" + course) + # return False ar = [x[2] for x in os.walk(path)] print(ar) @@ -383,10 +384,10 @@ class Teacher: if len(folder) == 0: print("Assignment is completely empty, needs a file.") return False - p1 = course.split("_")[0] - if(p1 in aname == False): - print(aname + "incorrectly formated: must be " + aname + "_" + p1 + ".") - return False + # p1 = course.split("_")[0] + # if(p1 in aname == False): + # print(aname + "incorrectly formated: must be " + aname + "_" + p1 + ".") + # return False try: datetime.strptime(due, '%Y-%m-%d %H:%M:%S.%f') except: @@ -397,9 +398,8 @@ class Teacher: if(aname in str(course['assignments'])): print("Assignment name already taken.") return False - print(course['assignments']) - input() + print(aname) #################### FINISH VERIFYING if(os.path.exists(os.getcwd() + "/" + self.username + "/Students/" + course['name']) == False): @@ -428,14 +428,14 @@ class Teacher: r = requests.get(url = 'http://127.0.0.1:8000/api/assignments/' + aname, auth=('raffukhondaker','hackgroup1')) if(r.status_code != 200): ass = { - 'name': aname, + 'name': oname, 'path':path, 'classes':course['name'], 'teacher':self.username, 'due_date':due } postDB(ass, 'http://127.0.0.1:8000/api/assignments/') - course['assignments'].append(aname) + course['assignments'].append(oname) cinfo = { "assignments": course['assignments'], @@ -451,6 +451,7 @@ class Teacher: def updateAssignment(self, path, course, due): parts = path.split("/") aname = parts[len(parts)-1] + oname=aname + "_" + course if(os.path.isdir(path) == False): print(path + " is not an assignment.") return @@ -460,7 +461,7 @@ class Teacher: d = { 'due_date':due, } - patchDB(d, 'http://localhost:8000/api/assignments/' + aname + "/") + print(patchDB(d, 'http://localhost:8000/api/assignments/' + oname + "/")) print("Due-date changed " + due) except: print("Due-date is the same") @@ -471,19 +472,15 @@ class Teacher: for st in slist: if st in course['confirmed']: spath = os.path.join(os.getcwd() + "/" + self.username + "/Students/" + course['name'], st) - if(os.path.exists(spath + "/" + aname) == False): - os.mkdir(spath + "/" + aname) - print(st) - print(copy_tree(path, spath + "/" + aname)) - os.chdir(spath) - command('git checkout ' + course['name']) - command('git pull origin ' + course['name']) - command('git add .') - command('git commit -m Hello') - command('git push -u origin ' + course['name']) - os.chdir(cdir) - else: - print(st + " already has assignment") + print(st) + print(copy_tree(path, spath + "/" + aname)) + os.chdir(spath) + #command('git checkout ' + course['name']) + command('git add .') + command('git commit -m Hello') + command('git pull origin ' + course['name']) + command('git push -u origin ' + course['name']) + os.chdir(cdir) #pull student's work, no modifications def getStudents(self, course): @@ -595,10 +592,10 @@ class Teacher: print("heheheh") -data = getTeacher("eharris1") -t = Teacher(data) +# data = getTeacher("eharris1") +# t = Teacher(data) #t.makeClass("APLit_eharris1") -#t.addAssignment("eharris1/APLit_eharris1/Essay1_eharris1", "APLit_eharris1", '2020-08-11 16:58:33.383124') +# t.updateAssignment("eharris1/APLit_eharris1/BookReport", "APLit_eharris1", '2020-08-11 16:58:33.383124') #ar = ['2022rkhondak','2022inafi','2023rumareti'] #extra = t.reqAddStudentList(ar, "APLit_eharris1") #print(extra) diff --git a/eharris1/APLit_eharris1/BookReport/rubric.txt b/eharris1/APLit_eharris1/BookReport/rubric.txt new file mode 100644 index 0000000..a65722f --- /dev/null +++ b/eharris1/APLit_eharris1/BookReport/rubric.txt @@ -0,0 +1,7 @@ +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 new file mode 100644 index 0000000..e69de29 diff --git a/eharris1/APLit_eharris1/Essay2/instruct.txt b/eharris1/APLit_eharris1/Essay2/instruct.txt new file mode 100644 index 0000000..e69de29 diff --git a/skoolos.py b/skoolos.py index 501429e..2dd9b68 100644 --- a/skoolos.py +++ b/skoolos.py @@ -35,7 +35,7 @@ def main(): print("╚═════╝░╚═╝░░╚═╝░╚════╝░░╚════╝░╚══════╝  ░╚════╝░╚═════╝░") print("") - if not os.path.exists(".profile"): + if not (os.path.exists(".sprofile") or os.path.exists(".tprofile")): try: URL = "http://127.0.0.1:8000/api/" r = requests.get(url = URL) @@ -47,7 +47,10 @@ def main(): #webbrowser.open("http://127.0.0.1:8000/login", new=2) authenticate() else: - f = open('.profile','r') + try: + f = open('.tprofile','r') + except: + f = open('.sprofile','r') data = json.loads(f.read()) f.close() PWD = data['password'] @@ -64,7 +67,7 @@ def main(): # pass def studentCLI(user, password): from CLI import student - data = getUser(user, password) + data = getUser(user, password, 'student') student = student.Student(data) carray = student.sclass.split(",") if(len(carray) == 1 and carray[0] == ""): @@ -80,24 +83,25 @@ def studentCLI(user, password): 'message': 'Select class: ', }, ] - course = prompt(courses) + course = prompt(courses)['course'] + print(course) if course == "Exit SkoolOS": student.exitCLI() else: student.viewClass(course) - student.getAssignments(course, datetime.datetime.now()) + student.getAssignments(course, 100) def teacherCLI(user, password): from CLI import teacher - data = getUser(user, password) + 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 = teacher.sclass.split(",") - carray.remove("") + carray = teacher.classes carray.append("Exit SkoolOS") carray.append("Make New Class") courses = [ @@ -108,7 +112,7 @@ def teacherCLI(user, password): 'message': 'Select class: ', }, ] - course = prompt(courses) + course = prompt(courses)['course'] if course == "Exit SkoolOS": teacher.exitCLI() if course == "Make New Class": @@ -119,7 +123,7 @@ def teacherCLI(user, password): 'message': 'Class Name: ', }, ] - cname = prompt(questions) + cname = prompt(questions)['cname'] teacher.makeClass(cname) soption = ["1) Add individual student", "2) Add list of students through path", "3) Exit"] questions = [ @@ -130,7 +134,7 @@ def teacherCLI(user, password): 'message': 'Add list of students (input path): ', }, ] - choice = prompt(questions).split(")") + choice = prompt(questions)['students'].split(")")[0] if("1" == choice): s = input("Student name: ") teacher.addStudent(s, cname) @@ -140,8 +144,11 @@ def teacherCLI(user, password): print(p + " does not exist.") else: - print("Class: " + cname) - options = ['1) Add student', "2) Add assignment", "3) View student information"] + print("Class: " + course) + unconf = getDB("http://localhost:8000/api/classes/" + course)['unconfirmed'] + for s in unconf: + teacher.addStudent() + options = ['1) Request Student', "2) Add assignment", "3) View student information"] questions = [ { 'type': 'list', @@ -150,23 +157,102 @@ def teacherCLI(user, password): 'message': 'Select option: ', }, ] - option = prompt(questions) + 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: + sys.exit() + 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)): + nlist.remove(n) + b = False + if(b): + tlist.append(n) -def getUser(ion_user, password): - URL = "http://127.0.0.1:8000/api/students/" + ion_user + "/" + + 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'] + + +def getUser(ion_user, password, utype): + if('student' in utype): + URL = "http://127.0.0.1:8000/api/students/" + ion_user + "/" + else: + URL = "http://127.0.0.1:8000/api/teachers/" + ion_user + "/" r = requests.get(url = URL, auth=(ion_user,password)) + print(r.json()) if(r.status_code == 200): data = r.json() + print(200) return data elif(r.status_code == 404): - return None print("Make new account!") + return None elif(r.status_code == 403): - return None print("Invalid username/password") - else: return None + else: print(r.status_code) + return None def patchDB(data, url): r = requests.patch(url = url, data=data, auth=('raffukhondaker','hackgroup1')) print("PATH:" + str(r.status_code)) @@ -233,22 +319,6 @@ def authenticate(): path = os.path.join(os.getcwd(), 'chromedriver-mac') browser = webdriver.Chrome(path) - # web_dir = os.path.join(os.getcwd(), 'CLI', 'oauth') - # print(web_dir) - # os.chdir(web_dir) - # if os.path.exists("index.html"): - # os.remove("index.html") - - # template = open("template.html", "r") - # index = open("index.html", "w") - # for line in template: - # index.write(line.replace('AUTH_URL', authorization_url)) - # template.close() - # index.close() - - # server = Thread(target=create_server) - # server.daemon = True - # server.start() browser.get("localhost:8000/login") @@ -305,7 +375,7 @@ def authenticate(): 'is_student':is_student, 'password':pwd, } - profileFile = open(".profile", "w") + profileFile = open(".sprofile", "w") profileFile.write(json.dumps(profile)) profileFile.close() @@ -314,14 +384,12 @@ def authenticate(): r = requests.get(url = "http://localhost:8000/api/teachers/" + user + "/", auth=(user,pwd)) profile = r.json() username = profile['ion_user'] - grade = profile['grade'] profile = { 'username':username, - 'grade':grade, 'is_student':is_student, 'password':pwd, } - profileFile = open(".profile", "w") + profileFile = open(".tprofile", "w") profileFile.write(json.dumps(profile)) profileFile.close() diff --git a/snew.py b/snew.py index b6437f8..c6aade6 100644 --- a/snew.py +++ b/snew.py @@ -83,18 +83,23 @@ class Students: # } # c = Class.objects.get(name='Math5') -data = requests.get(url = "http://localhost:8000/api/classes/Math5", auth=('raffukhondaker','hackgroup1')).json() +# data = requests.get(url = "http://localhost:8000/api/classes/Math5", auth=('raffukhondaker','hackgroup1')).json() -r = requests.post(url = "http://localhost:8000/api/classes/", data={'name':'English11', 'teacher':'eharris1', 'owner':2}, auth=('raffukhondaker','hackgroup1')) +# r = requests.post(url = "http://localhost:8000/api/classes/", data={'name':'English11', 'teacher':'eharris1', 'owner':2}, auth=('raffukhondaker','hackgroup1')) -print("POST:" + str(r.json())) +# print("POST:" + str(r.json())) +# # print(r.json()) +# # print(c.name) +# # c = { +# # 'classes':c +# # } +# # print(c) +# r = requests.patch(url = "http://localhost:8000/api/teachers/eharris1/", data={'classes':['English11']}, auth=('raffukhondaker','hackgroup1')) # print(r.json()) -# print(c.name) -# c = { -# 'classes':c -# } -# print(c) -r = requests.patch(url = "http://localhost:8000/api/teachers/eharris1/", data={'classes':['English11']}, auth=('raffukhondaker','hackgroup1')) -print(r.json()) +import bgservice.bgservice as bg + +bg.watch_dir('2022rkhondak', 'eharris1') +time.sleep(60) +bg.stop_watching() diff --git a/students.txt b/students.txt new file mode 100644 index 0000000..80bb6da --- /dev/null +++ b/students.txt @@ -0,0 +1 @@ +2022rkhondak \ No newline at end of file