def test_school_cloud_writer_throws_value_error_on_empty_params(self): cw = SchoolCloudWriter(self.config) with self.assertRaises(ValueError): f = cw.open("", "grade") with self.assertRaises(ValueError): f = cw.open("school", "") with self.assertRaises(ValueError): f = cw.open("", "")
class SchoolRosterListener(AbstractListener): """ Drops students into a series of .csv files on GCS, grouped by school then grade. Also creates a compiled file containing everyone for district admins. Expects students to have the following fields completed: """ fieldnames = ("lname", "fname", "anon_email", "password", "school_name", "grade") headers = dict((n, n) for n in fieldnames) Placement = namedtuple("Placement", ["school", "grade"]) def __init__(self, deployment_config): super(SchoolRosterListener, self).__init__() self.school_buffers = {} self.all_buffer = [] self.cloud_writer = SchoolCloudWriter(deployment_config) def accept(self, student): print_student = self.reduce(self.fieldnames, student) school = getattr(student, "school_name") grade = getattr(student, "grade") place = self.Placement(school=school, grade=grade) if not place in self.school_buffers: self.school_buffers[place] = [] self.school_buffers[place].append(print_student) self.all_buffer.append(print_student) def close(self): self.close_school_buffers() self.close_all_buffer() def close_school_buffers(self): for place in self.school_buffers: self.close_buffer(self.school_buffers[place], place.school, place.grade) def close_all_buffer(self): self.close_buffer(self.all_buffer, "all", "students") def close_buffer(self, raw_buffer, school, grade): sorted_buffer = sorted(raw_buffer, key=itemgetter("lname", "fname", "anon_email")) self.write_buffer_to_gcs(sorted_buffer, school, grade) def write_buffer_to_gcs(self, sorted_buffer, school, grade): out_file = self.cloud_writer.open(school=school, grade=grade) out_writer = csv.DictWriter(out_file, fieldnames=self.fieldnames) out_writer.writerow(self.headers) for student in sorted_buffer: out_writer.writerow(student) out_file.close()
def test_school_cloud_writer(self): cw = SchoolCloudWriter(self.config) f = cw.open("school", "grade") exp_path = "/bucket/school-subdir_school/school_grade.csv" self.cloud_writer_test(cw, f, exp_path)