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
def _update_place(self, listing): place_name = listing.get('name') location = listing.get('location') address = listing.get('address1') if not location: if not address: log.info("Skipping listing %s with no location" % place_name) return log.info("Geocoding address for place %s (%s)" % (place_name, address)) try: result = SmartGeocoder().geocode(address) location = result['point'] except: log.info('skipping listing %s with unknown address %s' % (place_name, address)) return # try to find or create the 'place type' for this place type_slug = listing.get('business_type', {}).get('codename') try: place_type = PlaceType.objects.get(slug=type_slug) except PlaceType.DoesNotExist: type_name = listing.get('business_type', {}).get('name') log.info("Creating new place type %s (%s)" % (type_slug, type_name)) if type_name[0].lower() in ('a','e','i','o','u'): article = 'an' else: article = 'a' place_type = PlaceType(slug=type_slug, name=type_name, plural_name=type_name, indefinite_article=article) place_type.save() url = listing.get('absolute_url') url = self.BASE_LINK + url try: place = Place.objects.get(url=url) log.info("updating place %s" % listing.get('name')) except Place.DoesNotExist: log.info("creating place %s" % listing.get('name')) place = Place(url=url) place.place_type = place_type place.pretty_name = listing.get('name') place.location = location place.address = address place.save()
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}) assert response.status_code == 200 rows = csv.reader(StringIO(response.content)) count = 0 for row in rows: assert len(row) == 7 synonyms = set(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] == '' assert 'Donut Hole' in synonyms assert 'Donut Pally' in synonyms 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' assert 'Sancy D' in synonyms assert 'D Sanc' in synonyms else: assert 0, 'Unexpected Place!' count += 1 assert 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: self.assertEqual(len(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], '') 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') else: self.fail('Unexpected Place! %s' % row[0]) count += 1 self.assertEqual(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)