Changeset 8414 for main/waeup.kofa/trunk/src/waeup/kofa
- Timestamp:
- 10 May 2012, 22:06:17 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
main/waeup.kofa/trunk/src/waeup/kofa/students/export.py
r8411 r8414 33 33 'coursetickets', 'studentpayments') 34 34 35 class StudentsExporter(grok.GlobalUtility, ExporterBase): 36 """Exporter for Students. 37 """ 35 def get_students(site): 36 """Get all students registered in catalog in `site`. 37 """ 38 catalog = queryUtility( 39 ICatalog, context=site, name='students_catalog', default=None) 40 if catalog is None: 41 return [] 42 students = catalog.searchResults(student_id=(None, None)) 43 return students 44 45 def get_studycourses(students): 46 """Get studycourses of `students`. 47 """ 48 return [x.get('studycourse', None) for x in students 49 if x is not None] 50 51 def get_levels(students): 52 """Get all studylevels of `students`. 53 """ 54 levels = [] 55 for course in get_studycourses(students): 56 for level in course.values(): 57 levels.append(level) 58 return levels 59 60 def get_tickets(students): 61 """Get all course tickets of `students`. 62 """ 63 tickets = [] 64 for level in get_levels(students): 65 for ticket in level.values(): 66 tickets.append(ticket) 67 return tickets 68 69 def get_payments(students): 70 """Get all payments of `students`. 71 """ 72 payments = [] 73 for student in students: 74 for payment in student.get('payments', {}).values(): 75 payments.append(payment) 76 return payments 77 78 79 class StudentExporterBase(ExporterBase): 80 """Exporter for students or related objects. 81 82 This is a baseclass. 83 """ 84 grok.baseclass() 38 85 grok.implements(ICSVStudentExporter) 39 86 grok.provides(ICSVStudentExporter) 87 88 def export(self, values, filepath=None): 89 """Export `values`, an iterable, as CSV file. 90 91 If `filepath` is ``None``, a raw string with CSV data is returned. 92 """ 93 writer, outfile = self.get_csv_writer(filepath) 94 for value in values: 95 self.write_item(value, writer) 96 return self.close_outfile(filepath, outfile) 97 98 99 class StudentsExporter(grok.GlobalUtility, StudentExporterBase): 100 """Exporter for Students. 101 """ 40 102 grok.name('students') 41 103 … … 46 108 title = _(u'Students') 47 109 48 def export(self, students, filepath=None):49 """Export `students`, an iterable, as CSV file.50 51 If `filepath` is ``None``, a raw string with CSV data is returned.52 """53 writer, outfile = self.get_csv_writer(filepath)54 for student in students:55 self.write_item(student, writer)56 return self.close_outfile(filepath, outfile)57 58 110 def export_all(self, site, filepath=None): 59 111 """Export students into filepath as CSV data. … … 61 113 If `filepath` is ``None``, a raw string with CSV data is returned. 62 114 """ 63 catalog = queryUtility( 64 ICatalog, context=site, name='students_catalog', default=None) 65 if catalog is None: 66 return self.export([], filepath) 67 students = catalog.searchResults( 68 student_id=(None, None)) 69 return self.export(students, filepath) 115 return self.export(get_students(site), filepath) 70 116 71 117 def export_student(self, student, filepath=None): 72 118 return self.export([student], filepath=filepath) 73 119 74 class StudentStudyCourseExporter(grok.GlobalUtility, ExporterBase): 120 121 class StudentStudyCourseExporter(grok.GlobalUtility, StudentExporterBase): 75 122 """Exporter for StudentStudyCourses. 76 123 """ 77 grok.implements(ICSVStudentExporter)78 grok.provides(ICSVStudentExporter)79 124 grok.name('studentstudycourses') 80 125 … … 98 143 value, name, context=context) 99 144 100 101 def export(self, study_courses, filepath=None):102 """Export `study_courses`, an iterable, as CSV file.103 104 If `filepath` is ``None``, a raw string with CSV data is returned.105 """106 writer, outfile = self.get_csv_writer(filepath)107 for study_course in study_courses:108 self.write_item(study_course, writer)109 return self.close_outfile(filepath, outfile)110 111 145 def export_all(self, site, filepath=None): 112 146 """Export study courses into filepath as CSV data. … … 114 148 If `filepath` is ``None``, a raw string with CSV data is returned. 115 149 """ 116 catalog = queryUtility( 117 ICatalog, context=site, name='students_catalog', default=None) 118 if catalog is None: 119 return self.export([], filepath) 120 students = catalog.searchResults( 121 student_id=(None, None)) 122 study_courses = [x.get('studycourse', None) for x in students 123 if x is not None] 124 return self.export(study_courses, filepath) 125 126 def export_student(self, student, filepath=None): 127 if 'studycourse' in student.keys(): 128 return self.export([student['studycourse']], filepath=filepath) 129 return self.export([], filepath=filepath) 130 131 132 class StudentStudyLevelExporter(grok.GlobalUtility, ExporterBase): 150 return self.export(get_studycourses(get_students(site)), filepath) 151 152 def export_student(self, student, filepath=None): 153 """Export studycourse of a single student object. 154 """ 155 return self.export(get_studycourses([student]), filepath) 156 157 158 class StudentStudyLevelExporter(grok.GlobalUtility, StudentExporterBase): 133 159 """Exporter for StudentStudyLevels. 134 160 """ 135 grok.implements(ICSVStudentExporter)136 grok.provides(ICSVStudentExporter)137 161 grok.name('studentstudylevels') 138 162 … … 163 187 value, name, context=context) 164 188 165 def export(self, study_levels, filepath=None):166 """Export `study_levels`, an iterable, as CSV file.167 168 If `filepath` is ``None``, a raw string with CSV data is returned.169 """170 writer, outfile = self.get_csv_writer(filepath)171 for study_level in study_levels:172 self.write_item(study_level, writer)173 return self.close_outfile(filepath, outfile)174 175 189 def export_all(self, site, filepath=None): 176 190 """Export study levels into filepath as CSV data. … … 178 192 If `filepath` is ``None``, a raw string with CSV data is returned. 179 193 """ 180 catalog = queryUtility( 181 ICatalog, context=site, name='students_catalog', default=None) 182 if catalog is None: 183 return self.export([], filepath) 184 students = catalog.searchResults( 185 student_id=(None, None)) 186 levels = [] 187 study_courses = [x.get('studycourse', None) for x in students 188 if x is not None] 189 for course in study_courses: 190 for level in course.values(): 191 levels.append(level) 192 return self.export(levels, filepath) 193 194 def export_student(self, student, filepath=None): 195 if 'studycourse' in student.keys(): 196 return self.export(student['studycourse'].values(), 197 filepath=filepath) 198 return self.export([], filepath=filepath) 199 200 class CourseTicketExporter(grok.GlobalUtility, ExporterBase): 194 return self.export(get_levels(get_students(site)), filepath) 195 196 def export_student(self, student, filepath=None): 197 return self.export(get_levels([student]), filepath) 198 199 class CourseTicketExporter(grok.GlobalUtility, StudentExporterBase): 201 200 """Exporter for CourseTickets. 202 201 """ 203 grok.implements(ICSVStudentExporter)204 grok.provides(ICSVStudentExporter)205 202 grok.name('coursetickets') 206 203 … … 226 223 value, name, context=context) 227 224 228 def export(self, course_tickets, filepath=None):229 """Export `course_tickets`, an iterable, as CSV file.230 231 If `filepath` is ``None``, a raw string with CSV data is returned.232 """233 writer, outfile = self.get_csv_writer(filepath)234 for ticket in course_tickets:235 self.write_item(ticket, writer)236 return self.close_outfile(filepath, outfile)237 238 225 def export_all(self, site, filepath=None): 239 226 """Export course tickets into filepath as CSV data. … … 241 228 If `filepath` is ``None``, a raw string with CSV data is returned. 242 229 """ 243 catalog = queryUtility( 244 ICatalog, context=site, name='students_catalog', default=None) 245 if catalog is None: 246 return self.export([], filepath) 247 students = catalog.searchResults( 248 student_id=(None, None)) 249 levels = [] 250 study_courses = [x.get('studycourse', None) for x in students 251 if x is not None] 252 for course in study_courses: 253 for level in course.values(): 254 levels.append(level) 255 256 tickets = [] 257 for level in levels: 258 for ticket in level.values(): 259 tickets.append(ticket) 260 return self.export(tickets, filepath) 261 262 def export_student(self, student, filepath=None): 263 if 'studycourse' not in student.keys(): 264 return self.export([], filepath=filepath) 265 levels = student['studycourse'].values() 266 tickets = [] 267 for level in levels: 268 for ticket in level.values(): 269 tickets.append(ticket) 270 return self.export(tickets, filepath=filepath) 271 272 class PaymentsExporter(grok.GlobalUtility, ExporterBase): 230 return self.export(get_tickets(get_students(site)), filepath) 231 232 def export_student(self, student, filepath=None): 233 return self.export(get_tickets([student]), filepath) 234 235 236 class PaymentsExporter(grok.GlobalUtility, StudentExporterBase): 273 237 """Exporter for OnlinePayment instances. 274 238 """ 275 grok.implements(ICSVStudentExporter)276 grok.provides(ICSVStudentExporter)277 239 grok.name('studentpayments') 278 240 … … 296 258 value, name, context=context) 297 259 298 def export(self, payments, filepath=None):299 """Export `payments`, an iterable, as CSV file.300 301 If `filepath` is ``None``, a raw string with CSV data is returned.302 """303 writer, outfile = self.get_csv_writer(filepath)304 for payment in payments:305 self.write_item(payment, writer)306 return self.close_outfile(filepath, outfile)307 308 260 def export_all(self, site, filepath=None): 309 261 """Export payments into filepath as CSV data. … … 311 263 If `filepath` is ``None``, a raw string with CSV data is returned. 312 264 """ 313 catalog = queryUtility( 314 ICatalog, context=site, name='students_catalog', default=None) 315 if catalog is None: 316 return self.export([], filepath) 317 students = catalog.searchResults( 318 student_id=(None, None)) 319 payments = [] 320 for student in students: 321 if not 'payments' in student.keys(): 322 continue 323 for payment in student['payments'].values(): 324 payments.append(payment) 325 return self.export(payments, filepath) 326 327 def export_student(self, student, filepath=None): 328 if not 'payments' in student.keys(): 329 return self.export([], filepath=filepath) 330 return self.export(student['payments'].values(), filepath=filepath) 265 return self.export(get_payments(get_students(site)), filepath) 266 267 def export_student(self, student, filepath=None): 268 return self.export(get_payments([student]), filepath)
Note: See TracChangeset for help on using the changeset viewer.