"""Batch processing components for academics objects. Batch processors eat CSV files to add, update or remove large numbers of certain kinds of objects at once. Here we define the processors for academics specific objects like faculties, departments and the like. """ import grok from zope.interface import Interface from waeup.sirp.interfaces import IBatchProcessor from waeup.sirp.students.interfaces import IStudent from waeup.sirp.utils.batching import BatchProcessor class StudentProcessor(BatchProcessor): """A batch processor for IStudent objects. """ grok.implements(IBatchProcessor) grok.provides(IBatchProcessor) grok.context(Interface) util_name = 'studentimporter' grok.name(util_name) name = u'Student Importer' iface = IStudent location_fields = ['student_id',] factory_name = 'waeup.Student' mode = None @property def req(self): result = dict( create = self.required_fields, update = self.location_fields, remove = self.location_fields, ) return result def parentsExist(self, row, site): return 'students' in site.keys() # The entry never exists in create mode. def entryExists(self, row, site): if row.has_key('student_id'): return row['student_id'] in site['students'].keys() return False def getParent(self, row, site): return site['students'] def getEntry(self, row, site): if not self.entryExists(row, site): return None parent = self.getParent(row, site) return parent.get(row['student_id']) def addEntry(self, obj, row, site): parent = self.getParent(row, site) parent.addStudent(obj) return def delEntry(self, row, site): parent = self.getParent(row, site) del parent[row['student_id']] pass