Example #1
0
 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("", "")
Example #2
0
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()
Example #3
0
 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)
Example #4
0
 def __init__(self, deployment_config):
     super(SchoolRosterListener, self).__init__()
     self.school_buffers = {}
     self.all_buffer = []
     self.cloud_writer = SchoolCloudWriter(deployment_config)