PyKubeGrader 0.3.12__py3-none-any.whl → 0.3.14__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {PyKubeGrader-0.3.12.dist-info → PyKubeGrader-0.3.14.dist-info}/METADATA +1 -1
- {PyKubeGrader-0.3.12.dist-info → PyKubeGrader-0.3.14.dist-info}/RECORD +11 -11
- pykubegrader/build/__init__.py +9 -0
- pykubegrader/build/api_notebook_builder.py +1 -1
- pykubegrader/build/build_folder.py +1 -1
- pykubegrader/grade_reports/grade_report.py +23 -7
- pykubegrader/grade_reports/grading_config.py +5 -1
- {PyKubeGrader-0.3.12.dist-info → PyKubeGrader-0.3.14.dist-info}/LICENSE.txt +0 -0
- {PyKubeGrader-0.3.12.dist-info → PyKubeGrader-0.3.14.dist-info}/WHEEL +0 -0
- {PyKubeGrader-0.3.12.dist-info → PyKubeGrader-0.3.14.dist-info}/entry_points.txt +0 -0
- {PyKubeGrader-0.3.12.dist-info → PyKubeGrader-0.3.14.dist-info}/top_level.txt +0 -0
@@ -4,17 +4,17 @@ pykubegrader/initialize.py,sha256=Bwu1q18l18FB9lGppvt-L41D5gzr3S8t6zC0_UbrASw,39
|
|
4
4
|
pykubegrader/telemetry.py,sha256=0Is-LhpVoKcEjmgqEjCfNLCKJVGAmJaQmD2VHF8KI9w,16396
|
5
5
|
pykubegrader/utils.py,sha256=jlJklKvRhY3O7Hz2aaU1m0y3p_n9eMAXNnAF7LUEaPY,1275
|
6
6
|
pykubegrader/validate.py,sha256=OKnItGyd-L8QPKcsE0KRuwBI_IxKiJzMLJKZiA2j3II,11184
|
7
|
-
pykubegrader/build/__init__.py,sha256=
|
8
|
-
pykubegrader/build/api_notebook_builder.py,sha256=
|
9
|
-
pykubegrader/build/build_folder.py,sha256=
|
7
|
+
pykubegrader/build/__init__.py,sha256=GbGvLEBiHoWgoo0NWK5_NPw1osnGDninQ_uCAjlMucY,312
|
8
|
+
pykubegrader/build/api_notebook_builder.py,sha256=294rVGuJLaIPW8a6ClbgPVizNFpBxKxhqr-D3y-do6k,25748
|
9
|
+
pykubegrader/build/build_folder.py,sha256=lzbaW-yCGYz8RDYS12GZvzgTuO7qhATchAtbirupWsE,87645
|
10
10
|
pykubegrader/build/clean_folder.py,sha256=8N0KyL4eXRs0DCw-V_2jR9igtFs_mOFMQufdL6tD-38,1323
|
11
11
|
pykubegrader/build/collate.py,sha256=cVvF7tf2U3iiH4R_dbghTcieedIx5w3Fyw9L_llInM8,6754
|
12
12
|
pykubegrader/build/markdown_questions.py,sha256=cSh8mkHK3hh-etJdgrZu9UQi1WPrKQtofkzLCUp1Z-w,4676
|
13
13
|
pykubegrader/grade_reports/__grade_reports.py,sha256=n8H_n9jdZRSPn2zlIf-GQt_Y8w91p6M8ZbdVH76Sg5k,2303
|
14
14
|
pykubegrader/grade_reports/assignments.py,sha256=I9NesLhwLelgqUekXfQCEGH-zTMAOjfb942eZYeh-Yo,7811
|
15
15
|
pykubegrader/grade_reports/class_grade_report.py,sha256=9Uuvy-xoABtjTjv-05VYhmowebgTrgEFSgh1Grws-cQ,5078
|
16
|
-
pykubegrader/grade_reports/grade_report.py,sha256=
|
17
|
-
pykubegrader/grade_reports/grading_config.py,sha256=
|
16
|
+
pykubegrader/grade_reports/grade_report.py,sha256=_os3x9IpfTcSkIzxzsD06yldTqQu-N5io6VnlzFASoI,16963
|
17
|
+
pykubegrader/grade_reports/grading_config.py,sha256=BT85hObvSbietg6SCeHudphM-G2yVzWPS4XqzC0zSV0,2580
|
18
18
|
pykubegrader/grade_reports/test.ipynb,sha256=NkMZHcfBd-uJw3i1Y9ux-epBP5GiVFEhda5wxEbK0cU,808
|
19
19
|
pykubegrader/graders/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
20
20
|
pykubegrader/graders/late_assignments.py,sha256=_2-rA5RqO0BWY9WAQA_mbCxxPKTOiJOl-byD2CYWaE0,1393
|
@@ -39,9 +39,9 @@ pykubegrader/widgets_base/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-
|
|
39
39
|
pykubegrader/widgets_base/multi_select.py,sha256=WhpS7a8V3BOuEfEyFPzcDhMbgr7p1a4FFh_mKU1HLbI,4226
|
40
40
|
pykubegrader/widgets_base/reading.py,sha256=ChUS3NOTa_HLtNpxR8hGX80LPKMvYMypnR6dFknfxus,5430
|
41
41
|
pykubegrader/widgets_base/select.py,sha256=qP31bjTWIn8LEgKwtNUJbgJnum6P7bx6A_At-u1ivFk,2750
|
42
|
-
PyKubeGrader-0.3.
|
43
|
-
PyKubeGrader-0.3.
|
44
|
-
PyKubeGrader-0.3.
|
45
|
-
PyKubeGrader-0.3.
|
46
|
-
PyKubeGrader-0.3.
|
47
|
-
PyKubeGrader-0.3.
|
42
|
+
PyKubeGrader-0.3.14.dist-info/LICENSE.txt,sha256=YTp-Ewc8Kems8PJEE27KnBPFnZSxoWvSg7nnknzPyYw,1546
|
43
|
+
PyKubeGrader-0.3.14.dist-info/METADATA,sha256=V-63Jn1GT9fcURDnCllMN2yhYLkUslXm0GnnUb4X95A,2758
|
44
|
+
PyKubeGrader-0.3.14.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
45
|
+
PyKubeGrader-0.3.14.dist-info/entry_points.txt,sha256=RR57KvzDRJrP4omy5heS5cZ3E7g56YxcxJhDnp57ZU0,253
|
46
|
+
PyKubeGrader-0.3.14.dist-info/top_level.txt,sha256=e550Klfze6higFxER1V62fnGOcIgiKRbsrl9CC4UdtQ,13
|
47
|
+
PyKubeGrader-0.3.14.dist-info/RECORD,,
|
pykubegrader/build/__init__.py
CHANGED
@@ -1 +1,10 @@
|
|
1
|
+
# Auto-generated __init__.py
|
1
2
|
|
3
|
+
from . import clean_folder
|
4
|
+
from . import api_notebook_builder
|
5
|
+
from . import collate
|
6
|
+
from . import build_folder
|
7
|
+
from . import passwords
|
8
|
+
from . import markdown_questions
|
9
|
+
|
10
|
+
__all__ = ['clean_folder', 'api_notebook_builder', 'collate', 'build_folder', 'passwords', 'markdown_questions']
|
@@ -204,7 +204,7 @@ class FastAPINotebookBuilder:
|
|
204
204
|
max_question_points = self.get_max_question_points(cell_dict)
|
205
205
|
|
206
206
|
# store the max points for the question
|
207
|
-
self.max_question_points[f
|
207
|
+
self.max_question_points[f'{cell_dict["question"]}'] = max_question_points
|
208
208
|
|
209
209
|
self.total_points += max_question_points
|
210
210
|
|
@@ -83,7 +83,7 @@ class NotebookProcessor:
|
|
83
83
|
self.require_key = assignment.get("require_key", False)
|
84
84
|
self.assignment_tag = assignment.get(
|
85
85
|
"assignment_tag",
|
86
|
-
f
|
86
|
+
f'week{assignment.get("week")}-{self.assignment_type}',
|
87
87
|
)
|
88
88
|
else:
|
89
89
|
self.assignment_type = self.assignment_tag.split("-")[0].lower()
|
@@ -10,8 +10,10 @@ from pykubegrader.grade_reports.grading_config import (
|
|
10
10
|
optional_drop_week,
|
11
11
|
exclude_from_running_avg,
|
12
12
|
custom_grade_adjustments,
|
13
|
+
duplicated_scores,
|
13
14
|
)
|
14
15
|
|
16
|
+
|
15
17
|
import pandas as pd
|
16
18
|
from datetime import datetime
|
17
19
|
from IPython.display import display
|
@@ -29,7 +31,7 @@ class GradeReport:
|
|
29
31
|
start_date (str, optional): The start date of the course. Defaults to "2025-01-06".
|
30
32
|
verbose (bool, optional): Indicates if verbose output should be displayed. Defaults to True.
|
31
33
|
"""
|
32
|
-
self.assignments, self.student_subs = get_assignments_submissions(params=params)
|
34
|
+
self.assignments, self.student_subs = get_assignments_submissions(params=params)
|
33
35
|
|
34
36
|
self.start_date = start_date
|
35
37
|
self.verbose = verbose
|
@@ -48,6 +50,7 @@ class GradeReport:
|
|
48
50
|
self.calculate_grades()
|
49
51
|
self.update_assignments_not_due_yet()
|
50
52
|
self.calculate_grades()
|
53
|
+
self.duplicate_scores()
|
51
54
|
self.drop_lowest_n_for_types(1)
|
52
55
|
self.update_weekly_table()
|
53
56
|
self._build_running_avg()
|
@@ -400,13 +403,26 @@ class GradeReport:
|
|
400
403
|
|
401
404
|
# Exempt the lowest `n` assignments
|
402
405
|
dropped = []
|
403
|
-
i =
|
406
|
+
i = 0
|
407
|
+
j = 0
|
404
408
|
while i < n:
|
405
|
-
i
|
406
|
-
valid_assignments[i].
|
407
|
-
|
409
|
+
valid_assignments[i+j].exempted = True
|
410
|
+
if valid_assignments[i+j].week in self.optional_drop_week:
|
411
|
+
j += 1
|
408
412
|
continue
|
409
|
-
dropped.append(valid_assignments[i])
|
410
|
-
self.student_assignments_dropped.append(valid_assignments[i])
|
413
|
+
dropped.append(valid_assignments[i+j])
|
414
|
+
self.student_assignments_dropped.append(valid_assignments[i+j])
|
415
|
+
i += 1
|
411
416
|
|
412
417
|
self.calculate_grades()
|
418
|
+
|
419
|
+
def duplicate_scores(self):
|
420
|
+
"""Duplicate scores from one assignment to another"""
|
421
|
+
|
422
|
+
for (week, assignment_type), (duplicate_week, duplicate_assignment_type) in duplicated_scores:
|
423
|
+
assignment = self.get_graded_assignment(week, assignment_type)[0]
|
424
|
+
duplicate_assignment = self.get_graded_assignment(duplicate_week, duplicate_assignment_type)[0]
|
425
|
+
duplicate_assignment.score = assignment.score
|
426
|
+
duplicate_assignment._score = assignment._score
|
427
|
+
duplicate_assignment.exempted = assignment.exempted
|
428
|
+
|
@@ -22,7 +22,8 @@ custom_grade_adjustments = {
|
|
22
22
|
("lecture", 4): lambda score: 100.0 if score > 0 else 0.0,
|
23
23
|
("lecture", 5): lambda score: 100.0 if score > 0 else 0.0,
|
24
24
|
("lecture", 7): lambda score: 100.0,
|
25
|
-
|
25
|
+
("quiz", 7): lambda score: min(score, 100.0),
|
26
|
+
}
|
26
27
|
|
27
28
|
# Exempted assignments, key is a tuple of assignment type and week
|
28
29
|
globally_exempted_assignments = [
|
@@ -61,6 +62,9 @@ dropped_assignments = [
|
|
61
62
|
"labattendance",
|
62
63
|
]
|
63
64
|
|
65
|
+
# Duplicated scores, a list of tuples of assignment types and weeks where the scores will be duplicated
|
66
|
+
duplicated_scores = [[(7, "lab"), (7, "homework")]]
|
67
|
+
|
64
68
|
# TAs and other users to skip in class grade report
|
65
69
|
skipped_users = ['JCA', 'jca92', 'cnp68', 'dak329', 'xz498', 'ag4328', 'rg897', 'jce63', 'qt49']
|
66
70
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|