- Timestamp:
- 30 Jan 2012, 07:41:17 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
main/waeup.sirp/trunk/src/waeup/sirp/students/batching.py
r7534 r7536 37 37 from waeup.sirp.students.interfaces import ( 38 38 IStudent, IStudentStudyCourse, 39 IStudentUpdateByRegNo, IStudentUpdateByMatricNo) 39 IStudentUpdateByRegNo, IStudentUpdateByMatricNo, 40 IStudentStudyLevel) 40 41 from waeup.sirp.students.workflow import IMPORTABLE_STATES 41 42 from waeup.sirp.utils.batching import BatchProcessor … … 268 269 return self.getParent(row, site) is not None 269 270 270 271 271 def entryExists(self, row, site): 272 272 return self.getEntry(row, site) is not None … … 274 274 def getEntry(self, row, site): 275 275 student = self.getParent(row, site) 276 if not student:276 if student is None: 277 277 return None 278 278 return student.get('studycourse') … … 306 306 return errs, inv_errs, conv_dict 307 307 308 class StudentStudyLevelProcessor(BatchProcessor): 309 """A batch processor for IStudentStudyLevel objects. 310 """ 311 grok.implements(IBatchProcessor) 312 grok.provides(IBatchProcessor) 313 grok.context(Interface) 314 util_name = 'studylevelimporter' 315 grok.name(util_name) 316 317 name = u'StudentStudyLevel Importer' 318 iface = IStudentStudyLevel 319 factory_name = 'waeup.StudentStudyLevel' 320 321 location_fields = [] 322 323 mode = None 324 325 @property 326 def available_fields(self): 327 return sorted(list(set( 328 ['student_id','reg_number','matric_number','level'] + getFields( 329 self.iface).keys()))) 330 331 def checkHeaders(self, headerfields, mode='ignore'): 332 if not 'reg_number' in headerfields and not 'student_id' \ 333 in headerfields and not 'matric_number' in headerfields: 334 raise FatalCSVError( 335 "Need at least columns student_id " + 336 "or reg_number or matric_number for import!") 337 if not 'level' in headerfields: 338 raise FatalCSVError( 339 "Need level for import!") 340 # Check for fields to be ignored... 341 not_ignored_fields = [x for x in headerfields 342 if not x.startswith('--')] 343 if len(set(not_ignored_fields)) < len(not_ignored_fields): 344 raise FatalCSVError( 345 "Double headers: each column name may only appear once.") 346 return True 347 348 def getParent(self, row, site): 349 if not 'students' in site.keys(): 350 return None 351 if 'student_id' in row.keys() and row['student_id']: 352 if row['student_id'] in site['students']: 353 student = site['students'][row['student_id']] 354 return student['studycourse'] 355 elif 'reg_number' in row.keys() and row['reg_number']: 356 reg_number = row['reg_number'] 357 #import pdb; pdb.set_trace() 358 cat = queryUtility(ICatalog, name='students_catalog') 359 results = list( 360 cat.searchResults(reg_number=(reg_number, reg_number))) 361 if results: 362 return results[0]['studycourse'] 363 elif 'matric_number' in row.keys() and row['matric_number']: 364 matric_number = row['matric_number'] 365 cat = queryUtility(ICatalog, name='students_catalog') 366 results = list( 367 cat.searchResults(matric_number=(matric_number, matric_number))) 368 if results: 369 return results[0]['studycourse'] 370 return None 371 372 def parentsExist(self, row, site): 373 return self.getParent(row, site) is not None 374 375 def entryExists(self, row, site): 376 return self.getEntry(row, site) is not None 377 378 def getEntry(self, row, site): 379 studycourse = self.getParent(row, site) 380 if studycourse is None: 381 return None 382 return studycourse.get(row['level']) 383 384 def addEntry(self, obj, row, site): 385 parent = self.getParent(row, site) 386 obj.level = int(row['level']) 387 parent[row['level']] = obj 388 return 389 390 def checkConversion(self, row, mode='ignore'): 391 """Validates all values in row. 392 """ 393 converter = IObjectConverter(self.iface) 394 errs, inv_errs, conv_dict = converter.fromStringDict( 395 row, self.factory_name) 396 # We have to check if level is a valid integer. 397 # This is not by the converter. 398 try: 399 level = int(row['level']) 400 if level not in range(0,600,10): 401 errs.append(('level','no valid integer')) 402 except ValueError: 403 errs.append(('level','no integer')) 404 return errs, inv_errs, conv_dict
Note: See TracChangeset for help on using the changeset viewer.