def test_record_to_dict_sets_id_correctly(self): handle = 'SG_abcdefghijklmnopqrstuv' record_id = 'this is my record #1. my first record. and it is mine' rec = Feature(coordinates=(D('11.03'), D('10.03')), simplegeohandle=handle, properties={'record_id': record_id}) dic = rec.to_dict() self.failUnlessEqual(dic.get('id'), handle) self.failUnlessEqual( dic.get('properties', {}).get('record_id'), record_id) rec = Feature(coordinates=(D('11.03'), D('10.03')), simplegeohandle=handle, properties={'record_id': None}) dic = rec.to_dict() self.failUnlessEqual(dic.get('id'), handle) self.failUnlessEqual(dic.get('properties', {}).get('record_id'), None) rec = Feature(coordinates=(D('11.03'), D('10.03')), simplegeohandle=handle, properties={'record_id': None}) dic = rec.to_dict() self.failUnlessEqual(dic.get('id'), handle) self.failUnlessEqual(dic.get('properties', {}).get('record_id'), None) rec = Feature(coordinates=(D('11.03'), D('10.03')), simplegeohandle=None, properties={'record_id': None}) dic = rec.to_dict() self.failUnlessEqual(dic.get('id'), None) self.failUnlessEqual(dic.get('properties', {}).get('record_id'), None)
def test_search_by_my_ip_nonascii(self): rec1 = Feature((D('11.03'), D('10.04')), simplegeohandle='SG_abcdefghijkmlnopqrstuv', properties={ 'name': "Bob's House Of Monkeys", 'category': "monkey dealership" }) rec2 = Feature((D('11.03'), D('10.05')), simplegeohandle='SG_abcdefghijkmlnopqrstuv', properties={ 'name': "Monkey Food 'R' Us", 'category': "pet food store" }) mockhttp = mock.Mock() mockhttp.request.return_value = ({ 'status': '200', 'content-type': 'application/json', }, json.dumps({ 'type': "FeatureColllection", 'features': [rec1.to_dict(), rec2.to_dict()] })) self.client.places.http = mockhttp ipaddr = '192.0.32.10' self.failUnlessRaises( AssertionError, self.client.places.search_by_my_ip, ipaddr ) # Someone accidentally passed an ip addr to search_by_my_ip(). res = self.client.places.search_by_my_ip(query='monk❥y', category='animal') self.failUnless(isinstance(res, (list, tuple)), (repr(res), type(res))) self.failUnlessEqual(len(res), 2) self.failUnless(all(isinstance(f, Feature) for f in res)) self.assertEqual(mockhttp.method_calls[-1][0], 'request') urlused = mockhttp.method_calls[-1][1][0] urlused = urllib.unquote(urlused).decode('utf-8') self.assertEqual( urlused, u'http://api.simplegeo.com:80/%s/places/ip.json?q=monk❥y&category=animal' % (API_VERSION, )) self.assertEqual(mockhttp.method_calls[0][1][1], 'GET') res = self.client.places.search_by_my_ip(query='monk❥y', category='anim❥l') self.failUnless(isinstance(res, (list, tuple)), (repr(res), type(res))) self.failUnlessEqual(len(res), 2) self.failUnless(all(isinstance(f, Feature) for f in res)) self.assertEqual(mockhttp.method_calls[-1][0], 'request') urlused = mockhttp.method_calls[-1][1][0] urlused = urllib.unquote(urlused).decode('utf-8') self.assertEqual( urlused, u'http://api.simplegeo.com:80/%s/places/ip.json?q=monk❥y&category=anim❥l' % (API_VERSION, )) self.assertEqual(mockhttp.method_calls[0][1][1], 'GET')
def test_search_nonascii(self): rec1 = Feature((D('11.03'), D('10.04')), simplegeohandle='SG_abcdefghijkmlnopqrstuv', properties={ 'name': u"B❤b's House Of Monkeys", 'category': u"m❤nkey dealership" }) rec2 = Feature((D('11.03'), D('10.05')), simplegeohandle='SG_abcdefghijkmlnopqrstuv', properties={ 'name': u"M❤nkey Food 'R' Us", 'category': "pet food store" }) mockhttp = mock.Mock() mockhttp.request.return_value = ({ 'status': '200', 'content-type': 'application/json', }, json.dumps({ 'type': "FeatureColllection", 'features': [rec1.to_dict(), rec2.to_dict()] })) self.client.places.http = mockhttp self.failUnlessRaises(AssertionError, self.client.places.search, -91, 100) self.failUnlessRaises(AssertionError, self.client.places.search, -81, 361) lat = D('11.03') lon = D('10.04') res = self.client.places.search(lat, lon, query=u'm❤nkey', category='animal') self.failUnless(isinstance(res, (list, tuple)), (repr(res), type(res))) self.failUnlessEqual(len(res), 2) self.failUnless(all(isinstance(f, Feature) for f in res)) self.assertEqual(mockhttp.method_calls[0][0], 'request') urlused = mockhttp.method_calls[0][1][0] urlused = urllib.unquote(urlused).decode('utf-8') self.assertEqual( urlused, u'http://api.simplegeo.com:80/%s/places/%s,%s.json?q=m❤nkey&category=animal' % (API_VERSION, lat, lon)) self.assertEqual(mockhttp.method_calls[0][1][1], 'GET')
def test_search_by_ip(self): rec1 = Feature((D('11.03'), D('10.04')), simplegeohandle='SG_abcdefghijkmlnopqrstuv', properties={ 'name': "Bob's House Of Monkeys", 'category': "monkey dealership" }) rec2 = Feature((D('11.03'), D('10.05')), simplegeohandle='SG_abcdefghijkmlnopqrstuv', properties={ 'name': "Monkey Food 'R' Us", 'category': "pet food store" }) mockhttp = mock.Mock() mockhttp.request.return_value = ({ 'status': '200', 'content-type': 'application/json', }, json.dumps({ 'type': "FeatureColllection", 'features': [rec1.to_dict(), rec2.to_dict()] })) self.client.places.http = mockhttp self.failUnlessRaises(AssertionError, self.client.places.search_by_ip, 'this is not an IP address at all, silly') self.failUnlessRaises( AssertionError, self.client.places.search_by_ip, -81, 181) # Someone accidentally passed lat, lon to search_by_ip(). ipaddr = '192.0.32.10' res = self.client.places.search_by_ip(ipaddr, query='monkeys', category='animal') self.failUnless(isinstance(res, (list, tuple)), (repr(res), type(res))) self.failUnlessEqual(len(res), 2) self.failUnless(all(isinstance(f, Feature) for f in res)) self.assertEqual(mockhttp.method_calls[0][0], 'request') self.assertEqual( mockhttp.method_calls[0][1][0], 'http://api.simplegeo.com:80/%s/places/%s.json?q=monkeys&category=animal' % (API_VERSION, ipaddr)) self.assertEqual(mockhttp.method_calls[0][1][1], 'GET')
def test_record_constructor(self): self.failUnlessRaises(TypeError, Feature, D('11.0'), D('10.0'), properties={'record_id': 'my_id'}) # lat exceeds bound self.failUnlessRaises(TypeError, Feature, (D('91.0'), D('10.1')), properties={'record_id': 'my_id'}) # lon exceeds bound self.failUnlessRaises(TypeError, Feature, (D('10.1'), D('180.1')), properties={'record_id': 'my_id'}, strict_lon_validation=True) record = Feature(coordinates=(D('11.0'), D('10.0')), properties={'record_id': 'my_id'}) self.failUnlessEqual(record.properties.get('record_id'), 'my_id') self.failUnlessEqual(record.id, None) self.failUnlessEqual(record.geomtype, 'Point') self.failUnlessEqual(record.coordinates[0], D('11.0')) self.failUnlessEqual(record.coordinates[1], D('10.0')) record = Feature(coordinates=(D('11.0'), D('10.0')), simplegeohandle='SG_abcdefghijklmnopqrstuv') self.failUnlessEqual(record.properties.get('record_id'), None) self.failUnlessEqual(record.id, 'SG_abcdefghijklmnopqrstuv') record = Feature(coordinates=(D('11.0'), D('10.0')), properties={'record_id': 'my_id'}, simplegeohandle='SG_abcdefghijklmnopqrstuv') self.failUnlessEqual(record.properties.get('record_id'), 'my_id') self.failUnlessEqual(record.id, 'SG_abcdefghijklmnopqrstuv') record = Feature(coordinates=(D('11.0'), D('10.0'))) self.failUnlessEqual(record.properties.get('record_id'), None) self.failUnlessEqual(record.id, None) record = Feature((D('11.0'), D('10.0')), properties={'record_id': 'my_id'}) self.failUnlessEqual(record.properties.get('record_id'), 'my_id') record = Feature((11.0, 10.0), properties={'record_id': 'my_id'}) self.failUnlessEqual(record.geomtype, 'Point') self.failUnlessEqual(record.coordinates[0], 11.0) self.failUnlessEqual(record.coordinates[1], 10.0) self.failUnlessEqual(record.properties.get('record_id'), 'my_id') record = Feature([[(11.0, 179.9), (12, -179.9)]], geomtype='Polygon') self.failUnlessEqual(record.geomtype, 'Polygon') self.failUnlessEqual(len(record.coordinates[0]), 2) self.failUnlessEqual(record.coordinates[0][0], (11.0, 179.9)) jsondict = record.to_dict() self.failUnlessEqual(jsondict['geometry']['coordinates'][0][0], (179.9, 11.))
def test_no_terms_search_by_address(self): rec1 = Feature((D('11.03'), D('10.04')), simplegeohandle='SG_abcdefghijkmlnopqrstuv', properties={ 'name': "Bob's House Of Monkeys", 'category': "monkey dealership" }) rec2 = Feature((D('11.03'), D('10.05')), simplegeohandle='SG_abcdefghijkmlnopqrstuv', properties={ 'name': "Monkey Food 'R' Us", 'category': "pet food store" }) mockhttp = mock.Mock() mockhttp.request.return_value = ({ 'status': '200', 'content-type': 'application/json', }, json.dumps({ 'type': "FeatureColllection", 'features': [rec1.to_dict(), rec2.to_dict()] })) self.client.places.http = mockhttp lat = D('11.03') lon = D('10.04') self.failUnlessRaises( AssertionError, self.client.places.search_by_address, lat, lon) # Someone accidentally passed a lat,lon search_by_address(). addr = '41 Decatur St, San Francisco, CA' res = self.client.places.search_by_address(addr) self.failUnless(isinstance(res, (list, tuple)), (repr(res), type(res))) self.failUnlessEqual(len(res), 2) self.failUnless(all(isinstance(f, Feature) for f in res)) self.assertEqual(mockhttp.method_calls[0][0], 'request') self.assertEqual( mockhttp.method_calls[0][1][0], 'http://api.simplegeo.com:80/%s/places/address.json?address=%s' % (API_VERSION, urllib.quote_plus(addr))) self.assertEqual(mockhttp.method_calls[0][1][1], 'GET')
def test_record_to_dict_sets_id_correctly(self): handle = 'SG_abcdefghijklmnopqrstuv' record_id = 'this is my record #1. my first record. and it is mine' rec = Feature(coordinates=(D('11.03'), D('10.03')), simplegeohandle=handle, properties={'record_id': record_id}) dic = rec.to_dict() self.failUnlessEqual(dic.get('id'), handle) self.failUnlessEqual(dic.get('properties', {}).get('record_id'), record_id) rec = Feature(coordinates=(D('11.03'), D('10.03')), simplegeohandle=handle, properties={'record_id': None}) dic = rec.to_dict() self.failUnlessEqual(dic.get('id'), handle) self.failUnlessEqual(dic.get('properties', {}).get('record_id'), None) rec = Feature(coordinates=(D('11.03'), D('10.03')), simplegeohandle=handle, properties={'record_id': None}) dic = rec.to_dict() self.failUnlessEqual(dic.get('id'), handle) self.failUnlessEqual(dic.get('properties', {}).get('record_id'), None) rec = Feature(coordinates=(D('11.03'), D('10.03')), simplegeohandle=None, properties={'record_id': None}) dic = rec.to_dict() self.failUnlessEqual(dic.get('id'), None) self.failUnlessEqual(dic.get('properties', {}).get('record_id'), None)
def test_no_terms_search_by_address(self): rec1 = Feature((D('11.03'), D('10.04')), simplegeohandle='SG_abcdefghijkmlnopqrstuv', properties={'name': "Bob's House Of Monkeys", 'category': "monkey dealership"}) rec2 = Feature((D('11.03'), D('10.05')), simplegeohandle='SG_abcdefghijkmlnopqrstuv', properties={'name': "Monkey Food 'R' Us", 'category': "pet food store"}) mockhttp = mock.Mock() mockhttp.request.return_value = ({'status': '200', 'content-type': 'application/json', }, json.dumps({'type': "FeatureColllection", 'features': [rec1.to_dict(), rec2.to_dict()]})) self.client.places.http = mockhttp lat = D('11.03') lon = D('10.04') self.failUnlessRaises(AssertionError, self.client.places.search_by_address, lat, lon) # Someone accidentally passed a lat,lon search_by_address(). addr = '41 Decatur St, San Francisco, CA' res = self.client.places.search_by_address(addr) self.failUnless(isinstance(res, (list, tuple)), (repr(res), type(res))) self.failUnlessEqual(len(res), 2) self.failUnless(all(isinstance(f, Feature) for f in res)) self.assertEqual(mockhttp.method_calls[0][0], 'request') self.assertEqual(mockhttp.method_calls[0][1][0], 'http://api.simplegeo.com:80/%s/places/address.json?address=%s' % (API_VERSION, urllib.quote_plus(addr))) self.assertEqual(mockhttp.method_calls[0][1][1], 'GET')
def test_no_terms_search_by_ip(self): rec1 = Feature((D('11.03'), D('10.04')), simplegeohandle='SG_abcdefghijkmlnopqrstuv', properties={'name': "Bob's House Of Monkeys", 'category': "monkey dealership"}) rec2 = Feature((D('11.03'), D('10.05')), simplegeohandle='SG_abcdefghijkmlnopqrstuv', properties={'name': "Monkey Food 'R' Us", 'category': "pet food store"}) mockhttp = mock.Mock() mockhttp.request.return_value = ({'status': '200', 'content-type': 'application/json', }, json.dumps({'type': "FeatureColllection", 'features': [rec1.to_dict(), rec2.to_dict()]})) self.client.places.http = mockhttp ipaddr = '192.0.32.10' res = self.client.places.search_by_ip(ipaddr) self.failUnless(isinstance(res, (list, tuple)), (repr(res), type(res))) self.failUnlessEqual(len(res), 2) self.failUnless(all(isinstance(f, Feature) for f in res)) self.assertEqual(mockhttp.method_calls[0][0], 'request') self.assertEqual(mockhttp.method_calls[0][1][0], 'http://api.simplegeo.com:80/%s/places/%s.json' % (API_VERSION, ipaddr)) self.assertEqual(mockhttp.method_calls[0][1][1], 'GET')
def test_search_by_address_nonascii(self): rec1 = Feature((D('11.03'), D('10.04')), simplegeohandle='SG_abcdefghijkmlnopqrstuv', properties={'name': "Bob's House Of Monkeys", 'category': "monkey dealership"}) rec2 = Feature((D('11.03'), D('10.05')), simplegeohandle='SG_abcdefghijkmlnopqrstuv', properties={'name': "Monkey Food 'R' Us", 'category': "pet food store"}) mockhttp = mock.Mock() mockhttp.request.return_value = ({'status': '200', 'content-type': 'application/json', }, json.dumps({'type': "FeatureColllection", 'features': [rec1.to_dict(), rec2.to_dict()]})) self.client.places.http = mockhttp lat = D('11.03') lon = D('10.04') self.failUnlessRaises(AssertionError, self.client.places.search_by_address, lat, lon) # Someone accidentally passed a lat,lon to search_by_address(). addr = u'41 Decatur St, San Francisc❦, CA' res = self.client.places.search_by_address(addr, query='monkeys', category='animal') self.failUnless(isinstance(res, (list, tuple)), (repr(res), type(res))) self.failUnlessEqual(len(res), 2) self.failUnless(all(isinstance(f, Feature) for f in res)) self.assertEqual(mockhttp.method_calls[-1][0], 'request') urlused = mockhttp.method_calls[-1][1][0] cod = urllib.quote_plus(addr.encode('utf-8')) self.assertEqual(urlused, 'http://api.simplegeo.com:80/%s/places/address.json?q=monkeys&category=animal&address=%s' % (API_VERSION, cod,)) self.assertEqual(mockhttp.method_calls[0][1][1], 'GET') res = self.client.places.search_by_address(addr, query=u'monke❦s', category=u'ani❦al') self.failUnless(isinstance(res, (list, tuple)), (repr(res), type(res))) self.failUnlessEqual(len(res), 2) self.failUnless(all(isinstance(f, Feature) for f in res)) self.assertEqual(mockhttp.method_calls[-1][0], 'request') urlused = mockhttp.method_calls[-1][1][0] quargs = {'q': u'monke❦s', 'category': u'ani❦al', 'address': addr} equargs = dict( (k, v.encode('utf-8')) for k, v in quargs.iteritems() ) s2quargs = urllib.urlencode(equargs) self.assertEqual(urlused, 'http://api.simplegeo.com:80/%s/places/address.json?%s' % (API_VERSION, s2quargs)) self.assertEqual(mockhttp.method_calls[0][1][1], 'GET')
def test_search_by_my_ip_nonascii(self): rec1 = Feature((D('11.03'), D('10.04')), simplegeohandle='SG_abcdefghijkmlnopqrstuv', properties={'name': "Bob's House Of Monkeys", 'category': "monkey dealership"}) rec2 = Feature((D('11.03'), D('10.05')), simplegeohandle='SG_abcdefghijkmlnopqrstuv', properties={'name': "Monkey Food 'R' Us", 'category': "pet food store"}) mockhttp = mock.Mock() mockhttp.request.return_value = ({'status': '200', 'content-type': 'application/json', }, json.dumps({'type': "FeatureColllection", 'features': [rec1.to_dict(), rec2.to_dict()]})) self.client.places.http = mockhttp ipaddr = '192.0.32.10' self.failUnlessRaises(AssertionError, self.client.places.search_by_my_ip, ipaddr) # Someone accidentally passed an ip addr to search_by_my_ip(). res = self.client.places.search_by_my_ip(query='monk❥y', category='animal') self.failUnless(isinstance(res, (list, tuple)), (repr(res), type(res))) self.failUnlessEqual(len(res), 2) self.failUnless(all(isinstance(f, Feature) for f in res)) self.assertEqual(mockhttp.method_calls[-1][0], 'request') urlused = mockhttp.method_calls[-1][1][0] urlused = urllib.unquote(urlused).decode('utf-8') self.assertEqual(urlused, u'http://api.simplegeo.com:80/%s/places/ip.json?q=monk❥y&category=animal' % (API_VERSION,)) self.assertEqual(mockhttp.method_calls[0][1][1], 'GET') res = self.client.places.search_by_my_ip(query='monk❥y', category='anim❥l') self.failUnless(isinstance(res, (list, tuple)), (repr(res), type(res))) self.failUnlessEqual(len(res), 2) self.failUnless(all(isinstance(f, Feature) for f in res)) self.assertEqual(mockhttp.method_calls[-1][0], 'request') urlused = mockhttp.method_calls[-1][1][0] urlused = urllib.unquote(urlused).decode('utf-8') self.assertEqual(urlused, u'http://api.simplegeo.com:80/%s/places/ip.json?q=monk❥y&category=anim❥l' % (API_VERSION,)) self.assertEqual(mockhttp.method_calls[0][1][1], 'GET')
def test_search(self): rec1 = Feature((D('11.03'), D('10.04')), simplegeohandle='SG_abcdefghijkmlnopqrstuv', properties={'name': "Bob's House Of Monkeys", 'category': "monkey dealership"}) rec2 = Feature((D('11.03'), D('10.05')), simplegeohandle='SG_abcdefghijkmlnopqrstuv', properties={'name': "Monkey Food 'R' Us", 'category': "pet food store"}) mockhttp = mock.Mock() mockhttp.request.return_value = ({'status': '200', 'content-type': 'application/json', }, json.dumps({'type': "FeatureColllection", 'features': [rec1.to_dict(), rec2.to_dict()]})) self.client.places.http = mockhttp self.failUnlessRaises(AssertionError, self.client.places.search, -91, 100) self.failUnlessRaises(AssertionError, self.client.places.search, -81, 361) lat = D('11.03') lon = D('10.04') res = self.client.places.search(lat, lon, query='monkeys', category='animal') self.failUnless(isinstance(res, (list, tuple)), (repr(res), type(res))) self.failUnlessEqual(len(res), 2) self.failUnless(all(isinstance(f, Feature) for f in res)) self.assertEqual(mockhttp.method_calls[0][0], 'request') self.assertEqual(mockhttp.method_calls[0][1][0], 'http://api.simplegeo.com:80/%s/places/%s,%s.json?q=monkeys&category=animal' % (API_VERSION, lat, lon)) self.assertEqual(mockhttp.method_calls[0][1][1], 'GET')
def test_search_by_address_nonascii(self): rec1 = Feature((D('11.03'), D('10.04')), simplegeohandle='SG_abcdefghijkmlnopqrstuv', properties={ 'name': "Bob's House Of Monkeys", 'category': "monkey dealership" }) rec2 = Feature((D('11.03'), D('10.05')), simplegeohandle='SG_abcdefghijkmlnopqrstuv', properties={ 'name': "Monkey Food 'R' Us", 'category': "pet food store" }) mockhttp = mock.Mock() mockhttp.request.return_value = ({ 'status': '200', 'content-type': 'application/json', }, json.dumps({ 'type': "FeatureColllection", 'features': [rec1.to_dict(), rec2.to_dict()] })) self.client.places.http = mockhttp lat = D('11.03') lon = D('10.04') self.failUnlessRaises( AssertionError, self.client.places.search_by_address, lat, lon ) # Someone accidentally passed a lat,lon to search_by_address(). addr = u'41 Decatur St, San Francisc❦, CA' res = self.client.places.search_by_address(addr, query='monkeys', category='animal') self.failUnless(isinstance(res, (list, tuple)), (repr(res), type(res))) self.failUnlessEqual(len(res), 2) self.failUnless(all(isinstance(f, Feature) for f in res)) self.assertEqual(mockhttp.method_calls[-1][0], 'request') urlused = mockhttp.method_calls[-1][1][0] cod = urllib.quote_plus(addr.encode('utf-8')) self.assertEqual( urlused, 'http://api.simplegeo.com:80/%s/places/address.json?q=monkeys&category=animal&address=%s' % ( API_VERSION, cod, )) self.assertEqual(mockhttp.method_calls[0][1][1], 'GET') res = self.client.places.search_by_address(addr, query=u'monke❦s', category=u'ani❦al') self.failUnless(isinstance(res, (list, tuple)), (repr(res), type(res))) self.failUnlessEqual(len(res), 2) self.failUnless(all(isinstance(f, Feature) for f in res)) self.assertEqual(mockhttp.method_calls[-1][0], 'request') urlused = mockhttp.method_calls[-1][1][0] quargs = {'q': u'monke❦s', 'category': u'ani❦al', 'address': addr} equargs = dict((k, v.encode('utf-8')) for k, v in quargs.iteritems()) s2quargs = urllib.urlencode(equargs) self.assertEqual( urlused, 'http://api.simplegeo.com:80/%s/places/address.json?%s' % (API_VERSION, s2quargs)) self.assertEqual(mockhttp.method_calls[0][1][1], 'GET')