def test_export_csv_synonyms(self): """ test exporting a place with synonyms """ assert test_client_login(self.client, username='******', password='******') == True place_type = PlaceType.objects.get(slug='poi') place = Place(pretty_name='Donut Palace', place_type=place_type, address='100 Bubble Street', location=geos.Point(1.0, 2.0)) place.save() ps = PlaceSynonym(pretty_name='Donut Hole', place=place) ps.save() ps = PlaceSynonym(pretty_name='Donut Pally', place=place) ps.save() place = Place(pretty_name='Donut Sanctuary', place_type=place_type, address='101 Bubble Street', location=geos.Point(3.0, 4.0), url='http://www.example.org/bs') place.save() ps = PlaceSynonym(pretty_name='Sancy D', place=place) ps.save() ps = PlaceSynonym(pretty_name='D Sanc', place=place) ps.save() response = self.client.post(self.export_url, {'place_type': place_type.id}) self.assertEqual(response.status_code, 200) rows = csv.reader(StringIO(response.content)) count = 0 for row in rows: self.assertEqual(len(row), 7) synonyms = set(row[5:]) if row[0] == 'Donut Palace': self.assertEqual(row[1], '100 Bubble Street') self.assertEqual(row[2], '2.0') self.assertEqual(row[3], '1.0') self.assertEqual(row[4], '') assert 'Donut Hole' in synonyms assert 'Donut Pally' in synonyms elif row[0] == 'Donut Sanctuary': self.assertEqual(row[1], '101 Bubble Street') self.assertEqual(row[2], '4.0') self.assertEqual(row[3], '3.0') self.assertEqual(row[4], 'http://www.example.org/bs') assert 'Sancy D' in synonyms assert 'D Sanc' in synonyms else: self.fail('Unexpected Place!' % row[0]) count += 1 self.assertEqual(count, 2)
def test_export_csv(self): """ test exporting a place type as csv """ assert test_client_login(self.client, username='******', password='******') == True place_type = PlaceType.objects.get(slug='poi') place = Place(pretty_name='Donut Palace', place_type=place_type, address='100 Bubble Street', location=geos.Point(1.0, 2.0)) place.save() place = Place(pretty_name='Donut Sanctuary', place_type=place_type, address='101 Bubble Street', location=geos.Point(3.0, 4.0), url='http://www.example.org/bs') place.save() response = self.client.post(self.export_url, {'place_type': place_type.id}) assert response.status_code == 200 rows = csv.reader(StringIO(response.content)) count = 0 for row in rows: assert len(row) == 5 if row[0] == 'Donut Palace': assert row[1] == '100 Bubble Street' assert row[2] == '2.0' assert row[3] == '1.0' assert row[4] == '' elif row[0] == 'Donut Sanctuary': assert row[1] == '101 Bubble Street' assert row[2] == '4.0' assert row[3] == '3.0' assert row[4] == 'http://www.example.org/bs' else: assert 0, 'Unexpected Place!' count += 1 assert count == 2
except Exception, e: message = "Stopped on line %d: %s" % (rows.line_num, e) context['errors'].append(message) return self._show_import_csv_results(request, context) # wonderful, now do something... for pretty_name, address, point, place_url, synonyms in validated_rows: normalized_name = normalize(pretty_name) try: place = Place.objects.get(normalized_name=normalized_name, location__distance_lte=(point, D(m=1))) created = False except Place.DoesNotExist: place = Place(normalized_name=normalized_name) created = True try: place.pretty_name = pretty_name place.address = address place.location = point place.url = place_url place.place_type = place_type place.save() if created: message = 'Created new place %s' % (pretty_name) else: message = 'Updated place %s' % (pretty_name) context['actions_taken'].append(message)