def load_park_district_courts(csv_file): rows = CSVKitReader(csv_file) patterns = { 'FACILITY NAME': 'BASKETBALL', } # HACK: More human-readable indexes into fields in the rows of # the CSV file. Maybe there's a DictReader subclass that let's one # index by column name, or a method of ``CSVKitReader`` that # resolves column indexes from their names name_index = 0 number_index = 1 facility_name_index = 2 facility_type_index = 3 location_index = 6 filter_reader = FilteringCSVReader(rows, patterns=patterns, header=True) filter_reader.next() # Skip header for row in filter_reader: lat, lng = split_location(row[location_index]) court = ParkDistrictCourt( name=row[name_index], point=[lng, lat], official_name=row[name_index], park_num=row[number_index], facility_name=row[facility_name_index], facility_type=row[facility_type_index], ) court.save()
def test_no_header(self): fcr = FilteringCSVReader(iter(self.tab1),patterns={ 2: 'only' },header=False) self.assertEqual(self.tab1[2],fcr.next()) self.assertEqual(self.tab1[3],fcr.next()) try: fcr.next() self.fail("Should be no more rows left.") except StopIteration: pass
def test_mixed_indices_and_column_names_in_patterns(self): fcr = FilteringCSVReader(iter(self.tab2),patterns = {'age': 'only', 0: '2'}) self.assertEqual(self.tab2[0],fcr.next()) self.assertEqual(self.tab2[4],fcr.next()) try: fcr.next() self.fail("Should be no more rows left.") except StopIteration: pass
def test_no_header(self): fcr = FilteringCSVReader(iter(self.tab1),patterns={ 2: 'only' },header=False) self.assertEqual(self.tab1[2],fcr.next()) self.assertEqual(self.tab1[3],fcr.next()) try: fcr.next() self.fail("Should be no more rows left.") except StopIteration: pass
def test_inverse(self): fcr = FilteringCSVReader(iter(self.tab2), patterns=['1'], inverse=True) self.assertEqual(self.tab2[0], fcr.next()) self.assertEqual(self.tab2[2], fcr.next()) self.assertEqual(self.tab2[4], fcr.next()) try: fcr.next() self.fail("Should be no more rows left.") except StopIteration: pass
def test_pattern(self): fcr = FilteringCSVReader(iter(self.tab1), patterns=['1']) self.assertEqual(self.tab1[0], fcr.next()) self.assertEqual(self.tab1[1], fcr.next()) self.assertEqual(self.tab1[4], fcr.next()) try: fcr.next() self.fail("Should be no more rows left.") except StopIteration: pass
def test_inverse(self): fcr = FilteringCSVReader(iter(self.tab2),patterns = ['1'], inverse=True) self.assertEqual(self.tab2[0],fcr.next()) self.assertEqual(self.tab2[2],fcr.next()) self.assertEqual(self.tab2[4],fcr.next()) try: fcr.next() self.fail("Should be no more rows left.") except StopIteration: pass
def test_pattern(self): fcr = FilteringCSVReader(iter(self.tab1),patterns=['1']) self.assertEqual(self.tab1[0],fcr.next()) self.assertEqual(self.tab1[1],fcr.next()) self.assertEqual(self.tab1[4],fcr.next()) try: fcr.next() self.fail("Should be no more rows left.") except StopIteration: pass
def test_regex(self): pattern = re.compile(".*(Reader|Tribune).*") fcr = FilteringCSVReader(iter(self.tab1), patterns={1: pattern}) self.assertEqual(self.tab1[0], fcr.next()) self.assertEqual(self.tab1[1], fcr.next()) self.assertEqual(self.tab1[3], fcr.next()) self.assertEqual(self.tab1[4], fcr.next()) try: fcr.next() self.fail("Should be no more rows left.") except StopIteration: pass
def test_regex(self): pattern = re.compile(".*(Reader|Tribune).*") fcr = FilteringCSVReader(iter(self.tab1),patterns = { 1: pattern }) self.assertEqual(self.tab1[0],fcr.next()) self.assertEqual(self.tab1[1],fcr.next()) self.assertEqual(self.tab1[3],fcr.next()) self.assertEqual(self.tab1[4],fcr.next()) try: fcr.next() self.fail("Should be no more rows left.") except StopIteration: pass