requisite_processor 0.2.5__tar.gz → 0.2.6__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: requisite_processor
3
- Version: 0.2.5
3
+ Version: 0.2.6
4
4
  Summary: Module for working with course requisite data and checking requisite satisfaciton.
5
5
  Author: Michael Hickman
6
6
  Author-email: mhickman@unm.edu
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "requisite_processor"
3
- version = "0.2.5"
3
+ version = "0.2.6"
4
4
  description = "Module for working with course requisite data and checking requisite satisfaciton."
5
5
  authors = ["Michael Hickman <mhickman@unm.edu>"]
6
6
  readme = "README.md"
@@ -1,4 +1,5 @@
1
1
  import re
2
+ from typing import List
2
3
  from requisite_processor.requisite_check import RequisiteCheckResult
3
4
 
4
5
  class RequisiteProcessor:
@@ -88,6 +89,28 @@ class RequisiteProcessor:
88
89
  return self.__traverse_prereqs(prereq_rule, academic_period, courses_taken, test_scores, ignore_grades)
89
90
 
90
91
 
92
+ def fast_check(self, course_code: str, courses_taken = None, academic_period = None) -> bool:
93
+ if academic_period is None:
94
+ academic_period = self.latest_available_academic_period
95
+
96
+ if academic_period not in self.prerequisite_rules:
97
+ raise self.AcademicPeriodNotFound(f"The academic period '{academic_period}' is not found in the given prerequisite data.")
98
+
99
+ if course_code not in self.prerequisite_rules[academic_period]:
100
+ raise self.CourseNotFound(f"Course {course_code} not found in {academic_period}")
101
+
102
+ prereq_rule = self.prerequisite_rules[academic_period][course_code]
103
+
104
+ if prereq_rule is None:
105
+ return True
106
+
107
+ if courses_taken is None:
108
+ courses_taken = []
109
+
110
+ return self.__fast_check(prereq_rule, courses_taken)
111
+
112
+
113
+
91
114
  def __grade_score(self, grade) -> float:
92
115
  grades = {
93
116
  'A+': 4.3, 'A': 4, 'A-': 3.7,
@@ -187,6 +210,37 @@ class RequisiteProcessor:
187
210
  return result
188
211
 
189
212
 
213
+ def __fast_check(self, prereq_data: dict, courses_taken: List[str]) -> bool:
214
+ if prereq_data['type'] == 'placement_test':
215
+ raise NotImplementedError('Not Implemented')
216
+
217
+
218
+ if prereq_data['type'] == 'course':
219
+ for course in courses_taken:
220
+ if course == prereq_data['course']['code']:
221
+ return True
222
+
223
+ return False
224
+
225
+
226
+ if prereq_data['type'] == 'and':
227
+ for sub_prereq_data in prereq_data['operands']:
228
+ if self.__fast_check(sub_prereq_data, courses_taken) is False:
229
+ return False
230
+
231
+ return True
232
+
233
+
234
+ if prereq_data['type'] == 'or':
235
+ for sub_prereq_data in prereq_data['operands']:
236
+ if self.__fast_check(sub_prereq_data, courses_taken) is True:
237
+ return True
238
+
239
+ return False
240
+
241
+ return False
242
+
243
+
190
244
  def __reduce_rule(self, prereq_data, filter_rule):
191
245
  if prereq_data is None:
192
246
  return None