PyKubeGrader 0.3.12__tar.gz → 0.3.13__tar.gz

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.
Files changed (80) hide show
  1. {pykubegrader-0.3.12/src/PyKubeGrader.egg-info → pykubegrader-0.3.13}/PKG-INFO +1 -1
  2. {pykubegrader-0.3.12 → pykubegrader-0.3.13/src/PyKubeGrader.egg-info}/PKG-INFO +1 -1
  3. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/grade_reports/grade_report.py +22 -7
  4. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/grade_reports/grading_config.py +3 -0
  5. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/.coveragerc +0 -0
  6. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/.github/workflows/main.yml +0 -0
  7. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/.gitignore +0 -0
  8. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/.readthedocs.yml +0 -0
  9. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/AUTHORS.rst +0 -0
  10. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/CHANGELOG.rst +0 -0
  11. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/CONTRIBUTING.rst +0 -0
  12. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/LICENSE.txt +0 -0
  13. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/README.rst +0 -0
  14. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/docs/Makefile +0 -0
  15. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/docs/_static/Drexel_blue_Logo_square_Dark.png +0 -0
  16. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/docs/_static/Drexel_blue_Logo_square_Light.png +0 -0
  17. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/docs/_static/custom.css +0 -0
  18. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/docs/authors.rst +0 -0
  19. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/docs/changelog.rst +0 -0
  20. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/docs/conf.py +0 -0
  21. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/docs/contributing.rst +0 -0
  22. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/docs/index.rst +0 -0
  23. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/docs/license.rst +0 -0
  24. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/docs/readme.rst +0 -0
  25. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/docs/requirements.txt +0 -0
  26. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/examples/.responses.json +0 -0
  27. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/examples/true_false.ipynb +0 -0
  28. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/pyproject.toml +0 -0
  29. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/ruff.toml +0 -0
  30. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/setup.cfg +0 -0
  31. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/setup.py +0 -0
  32. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/PyKubeGrader.egg-info/SOURCES.txt +0 -0
  33. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/PyKubeGrader.egg-info/dependency_links.txt +0 -0
  34. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/PyKubeGrader.egg-info/entry_points.txt +0 -0
  35. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/PyKubeGrader.egg-info/not-zip-safe +0 -0
  36. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/PyKubeGrader.egg-info/requires.txt +0 -0
  37. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/PyKubeGrader.egg-info/top_level.txt +0 -0
  38. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/__init__.py +0 -0
  39. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/build/__init__.py +0 -0
  40. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/build/api_notebook_builder.py +0 -0
  41. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/build/build_folder.py +0 -0
  42. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/build/clean_folder.py +0 -0
  43. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/build/collate.py +0 -0
  44. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/build/markdown_questions.py +0 -0
  45. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/grade_reports/__grade_reports.py +0 -0
  46. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/grade_reports/assignments.py +0 -0
  47. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/grade_reports/class_grade_report.py +0 -0
  48. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/grade_reports/test.ipynb +0 -0
  49. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/graders/__init__.py +0 -0
  50. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/graders/late_assignments.py +0 -0
  51. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/grading_tester.ipynb +0 -0
  52. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/initialize.py +0 -0
  53. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/log_parser/__init__.py +0 -0
  54. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/log_parser/parse.ipynb +0 -0
  55. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/log_parser/parse.py +0 -0
  56. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/submit/submit_assignment.py +0 -0
  57. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/telemetry.py +0 -0
  58. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/tokens/generator.py +0 -0
  59. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/tokens/token_panel.py +0 -0
  60. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/tokens/tokens.py +0 -0
  61. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/tokens/validate_token.py +0 -0
  62. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/utils.py +0 -0
  63. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/validate.py +0 -0
  64. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/widgets/__init__.py +0 -0
  65. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/widgets/multiple_choice.py +0 -0
  66. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/widgets/question_processor.py +0 -0
  67. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/widgets/reading_question.py +0 -0
  68. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/widgets/select_many.py +0 -0
  69. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/widgets/student_info.py +0 -0
  70. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/widgets/style.py +0 -0
  71. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/widgets/true_false.py +0 -0
  72. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/widgets/types_question.py +0 -0
  73. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/widgets_base/__init__.py +0 -0
  74. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/widgets_base/multi_select.py +0 -0
  75. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/widgets_base/reading.py +0 -0
  76. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/src/pykubegrader/widgets_base/select.py +0 -0
  77. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/test.ipynb +0 -0
  78. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/tests/conftest.py +0 -0
  79. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/tests/import_test.py +0 -0
  80. {pykubegrader-0.3.12 → pykubegrader-0.3.13}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: PyKubeGrader
3
- Version: 0.3.12
3
+ Version: 0.3.13
4
4
  Summary: Add a short description here!
5
5
  Home-page: https://github.com/pyscaffold/pyscaffold/
6
6
  Author: jagar2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: PyKubeGrader
3
- Version: 0.3.12
3
+ Version: 0.3.13
4
4
  Summary: Add a short description here!
5
5
  Home-page: https://github.com/pyscaffold/pyscaffold/
6
6
  Author: jagar2
@@ -10,6 +10,7 @@ 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
 
15
16
  import pandas as pd
@@ -29,7 +30,7 @@ class GradeReport:
29
30
  start_date (str, optional): The start date of the course. Defaults to "2025-01-06".
30
31
  verbose (bool, optional): Indicates if verbose output should be displayed. Defaults to True.
31
32
  """
32
- self.assignments, self.student_subs = get_assignments_submissions(params=params)
33
+ self.assignments, self.student_subs = get_assignments_submissions(params=params)
33
34
 
34
35
  self.start_date = start_date
35
36
  self.verbose = verbose
@@ -48,6 +49,7 @@ class GradeReport:
48
49
  self.calculate_grades()
49
50
  self.update_assignments_not_due_yet()
50
51
  self.calculate_grades()
52
+ self.duplicate_scores()
51
53
  self.drop_lowest_n_for_types(1)
52
54
  self.update_weekly_table()
53
55
  self._build_running_avg()
@@ -400,13 +402,26 @@ class GradeReport:
400
402
 
401
403
  # Exempt the lowest `n` assignments
402
404
  dropped = []
403
- i = -1
405
+ i = 0
406
+ j = 0
404
407
  while i < n:
405
- i += 1
406
- valid_assignments[i].exempted = True
407
- if valid_assignments[i].week in self.optional_drop_week:
408
+ valid_assignments[i+j].exempted = True
409
+ if valid_assignments[i+j].week in self.optional_drop_week:
410
+ j += 1
408
411
  continue
409
- dropped.append(valid_assignments[i])
410
- self.student_assignments_dropped.append(valid_assignments[i])
412
+ dropped.append(valid_assignments[i+j])
413
+ self.student_assignments_dropped.append(valid_assignments[i+j])
414
+ i += 1
411
415
 
412
416
  self.calculate_grades()
417
+
418
+ def duplicate_scores(self):
419
+ """Duplicate scores from one assignment to another"""
420
+
421
+ for (week, assignment_type), (duplicate_week, duplicate_assignment_type) in duplicated_scores:
422
+ assignment = self.get_graded_assignment(week, assignment_type)[0]
423
+ duplicate_assignment = self.get_graded_assignment(duplicate_week, duplicate_assignment_type)[0]
424
+ duplicate_assignment.score = assignment.score
425
+ duplicate_assignment._score = assignment._score
426
+ duplicate_assignment.exempted = assignment.exempted
427
+
@@ -61,6 +61,9 @@ dropped_assignments = [
61
61
  "labattendance",
62
62
  ]
63
63
 
64
+ # Duplicated scores, a list of tuples of assignment types and weeks where the scores will be duplicated
65
+ duplicated_scores = [[(7, "lab"), (7, "homework")]]
66
+
64
67
  # TAs and other users to skip in class grade report
65
68
  skipped_users = ['JCA', 'jca92', 'cnp68', 'dak329', 'xz498', 'ag4328', 'rg897', 'jce63', 'qt49']
66
69
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes