forked from AyushSavar/Assignment-Auto-Grader
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.py
More file actions
242 lines (205 loc) · 7.48 KB
/
utils.py
File metadata and controls
242 lines (205 loc) · 7.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
from pymongo import MongoClient
import os
from datetime import date
client = MongoClient('mongodb+srv://user1:hehe@atlascluster.t9cnxbb.mongodb.net/?retryWrites=true&w=majority&appName=AtlasCluster')
db = client['test_database']
assignments = db['assignments']
ta = db['ta']
graded = db['graded']
assigned = db['assigned']
def get_course(ta_id):
query = {'ta_roll_num':ta_id}
cursor = ta.find(query)
for x in cursor:
return x['course']
def get_student_courses(roll_number,table):
#table = assigned
query = {'roll_num':roll_number}
cursor = table.find(query)
s = set()
for x in cursor:
s.add(x['course'])
s = list(s)
return s
def get_roll_numbers(username):
query = {'ta_roll_num':username}
cursor = ta.find(query)
rolls = []
for x in cursor:
rolls.append(x['roll_num'])
return rolls
def insert_into_assigned(roll_num,course,assignment_num,deadline):
data = {'roll_num':roll_num,'course':course,'assignment_num':assignment_num,'deadline':deadline}
assigned.insert_one(data)
return
def get_grade(roll_number, course, assignment,file_name):
query = {'roll_num':roll_number, 'course':course, 'assignment_num':assignment,'file':file_name}
cursor = graded.find(query)
for x in cursor:
return [x['marks'],x['plag'],x['comments']]
def get_student_assignments(roll_number, course,table):
#table = assigned
query = {'roll_num':roll_number,'course': course}
cursor = table.find(query)
s = []
for x in cursor:
s.append(x['assignment_num'])
return s
def is_late_bool(roll_num,assignment_num,course,time,table):
#table = asssigned
query = {'roll_num': roll_num,'assignment_num':assignment_num,'course':course}
cursor = table.find(query)
for x in cursor:
a = x['deadline']
a = date(*map(int, a.split('-')))
if time > a:
return True
else:
return False
def add_submission(roll_number, course, assignment, file, details,table, file_name,time):
#table = assignments
is_late = is_late_bool(roll_number,assignment,course,time,assigned)
user_data = {'roll_num':roll_number,'course':course,'assignment_num':assignment,'file':file,'remarks':details, 'file_name':file_name,'islate':is_late}
try:
table.insert_one(user_data)
return "SUCCESS"
except:
return "FAIl"
##VIEW SUBMISSION
def insert_into_graded(roll_num,course,assignment_num,marks,plag,comments,file):
data = {'roll_num':roll_num,'course':course,'assignment_num':assignment_num,'marks':marks,'plag':plag,'comments':comments,'file':file}
try:
graded.insert_one(data)
return "SUCCESS"
except:
return "FAIL"
def get_submitted_assignments(roll_number, course,table):
#table = assignments
query = {'roll_num':roll_number,'course':course}
cursor = table.find(query)
s = []
for x in cursor:
s.append(x['assignment_num'])
return s
def view_submission(roll_number, course, assignment,table):
#table = graded
query = {'roll_num':roll_number,'course':course,'assignment_num': assignment}
cursor = table.find(query)
s = []
for x in cursor:
data = {'marks':x['marks'],'plag':x['plag'],'comments':x['comments']}
s.append(data)
return s
'''
def reval_request(roll_number, course, assignment, details):
print(1)
'''
##EVALUATE SUBMISSIONS
def get_assignments_to_evaluate(ta_id,table):
#table = ta
query = {'ta_roll_num':ta_id}
print(query)
cursor = ta.find(query)
s = set()
s1 = []
print(s1)
roll_nums = []
texts = []
cursor1 = assignments.find()
for x in cursor:
s1.append((x['course'],x['roll_num']))
for x in cursor1:
if (x['course'],x['roll_num']) in s1:
s.add(x['assignment_num'])
s=list(s)
return (s)
def get_uploaded_files(roll_num, assignment_num):
query = {'roll_num':roll_num, 'assignment_num': assignment_num}
cursor = assignments.find(query)
file_names = []
for x in cursor:
file_names.append(x['file_name'])
return file_names
def get_graded_files(roll_num, assignment_num):
query = {'roll_num':roll_num, 'assignment_num': assignment_num}
cursor = graded.find(query)
file_names = []
for x in cursor:
file_names.append(x['file_name'])
return file_names
def get_late_status(username, course, assignment, file_name):
query = {'roll_num':username, 'course':course, 'assignment_num':assignment, 'file_name':file_name}
cursor = assignments.find(query)
for x in cursor:
return x['islate']
def get_plag_list(ta_id, assignment):
# Fetch roll numbers of students associated with the given TA and course
query_ta = {'ta_roll_num': ta_id}
cursor_ta = ta.find(query_ta)
roll_numbers = [x['roll_num'] for x in cursor_ta]
# Fetch submissions for the given assignment and course
query_submissions = {'assignment_num': assignment, 'roll_num': {'$in': roll_numbers}}
cursor_submissions = assignments.find(query_submissions)
# Initialize a dictionary to store files grouped by roll numbers
roll_files_map = {roll_num: [] for roll_num in roll_numbers}
# Organize submissions into the dictionary using roll numbers as keys
for submission in cursor_submissions:
sub = []
sub.append(submission['file'])
roll_files_map[submission['roll_num']].append(sub)
#print("&&&&&&&&&&")
#print(submission['file'])
# Filter out roll numbers with no submissions
roll_numbers_with_submissions = [roll_num for roll_num, files in roll_files_map.items() if files]
# Convert the dictionary to the desired 2D array format
assignments_2d_array = [roll_files_map[roll_num] for roll_num in roll_numbers_with_submissions]
#print("********************")
#print(assignments_2d_array[0])
#print("********************")
#print(assignments_2d_array[1])
#print("********************")
return roll_numbers_with_submissions, assignments_2d_array
def get_students_associated(ta_id, assignment,table):
query = {'ta_roll_num':ta_id}
print(query)
cursor = ta.find(query)
s = set()
s1 = []
print(s1)
cursor1 = table.find()
for x in cursor:
s1.append((x['roll_num']))
for x in cursor1:
if (x['roll_num']) in s1 and x['assignment_num']==assignment:
s.add(x['roll_num'])
s=list(s)
return s
def return_assignment(ta_id, roll_number, course, assignment, marks, plag, comments,table):
#table = graded
user_data = {'roll_num':roll_number,'course':course,'assignment':assignment,'marks':marks,'plag':plag,'comments':comments}
table.insert_one(user_data)
return
##VIEW EVALUATIONS
def get_code(ta_id, assignment, student, file_name):
query = {'ta_roll_num':ta_id}
cursor = ta.find(query)
s = set()
s1 = []
#print(s1)
cursor1 = assignments.find()
for x in cursor:
s1.append((x['course']))
print("S!!")
print(s1)
for x in cursor1:
if (x['roll_num'])==student and x['assignment_num']==assignment and x['course'] in s1 and x['file_name']==file_name:
return x['file'].decode('utf-8')
def get_evaluated_assignments(assignment,ta_id,roll_number,table):
#table = graded
query = {'assignment':assignment,'ta_roll_num':ta_id,'roll_num':roll_number}
cursor = table.find(query)
s = []
for x in cursor:
data = {'marks':x['marks'],'plag':x['plag'],'comments':x['comments']}
s.append(data)
return(s)