[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[vidalia-svn] r3767: Tweak the geoip.py script a bit to handle incomplete GeoIP r (vidalia/trunk/contrib)
Author: edmanm
Date: 2009-05-13 14:54:28 -0400 (Wed, 13 May 2009)
New Revision: 3767
Modified:
vidalia/trunk/contrib/geoip.py
Log:
Tweak the geoip.py script a bit to handle incomplete GeoIP records better.
Modified: vidalia/trunk/contrib/geoip.py
===================================================================
--- vidalia/trunk/contrib/geoip.py 2009-05-09 02:17:47 UTC (rev 3766)
+++ vidalia/trunk/contrib/geoip.py 2009-05-13 18:54:28 UTC (rev 3767)
@@ -17,10 +17,21 @@
import os
def escape_output(f):
- f.replace("\\", "\\\\")
- f.replace("\"", "\\\"")
- return ("\"%s\"" % f)
+ if ' ' in f:
+ f.replace("\\", "\\\\")
+ f.replace("\"", "\\\"")
+ return ("\"%s\"" % f)
+ return f
+def is_valid_geoip_record(r):
+ if r == None:
+ return False
+ if not r.has_key('latitude') or r['latitude'] == None:
+ return False
+ if not r.has_key('longitude') or r['longitude'] == None:
+ return False
+ return True
+
# Get the form fields
def handler(req):
form = util.FieldStorage(req)
@@ -49,15 +60,20 @@
if format == "long":
for ip in iplist:
r = gi.record_by_addr(ip)
- if r != None:
+ if is_valid_geoip_record(r):
fields = []
fields.append("IP=%s" % ip)
fields.append("LAT=%f" % r['latitude'])
fields.append("LON=%f" % r['longitude'])
- fields.append("CITY=%s" % escape_output(r['city']))
- fields.append("REGION=%s" % escape_output(r['region_name']))
- fields.append("COUNTRY=%s" % escape_output(r['country_name']))
- fields.append("CC=%s" % r['country_code'])
+
+ if r.has_key('city') and r['city'] != None:
+ fields.append("CITY=%s" % escape_output(r['city']))
+ if r.has_key('region_name') and r['region_name'] != None:
+ fields.append("REGION=%s" % escape_output(r['region_name']))
+ if r.has_key('country_name') and r['country_name'] != None:
+ fields.append("COUNTRY=%s" % escape_output(r['country_name']))
+ if r.has_key('country_code') and r['country_code'] != None:
+ fields.append("CC=%s" % escape_output(r['country_code']))
r = gi.range_by_ip(ip)
if len(r) == 2:
@@ -65,15 +81,25 @@
fields.append("TO=%s" % r[1])
response = " ".join(fields)
- req.write(response)
+ req.write(response + "\n")
elif format == "short":
for ip in iplist:
r = gi.record_by_addr(ip)
- if r != None:
- response = "%s,%s,%s,%s,%f,%f" % (ip, r['city'].replace(",", " "), r['region'],
- r['country_code'],r['latitude'],r['longitude'])
- req.write(response)
+ if is_valid_geoip_record(r):
+ city = region = cc = ""
+ if r.has_key('city') and r['city'] != None:
+ city = r['city'].replace(",", " ")
+ if r.has_key('region') and r['region'] != None:
+ region = r['region']
+ if r.has_key('country_code') and r['country_code'] != None:
+ cc = r['country_code']
+
+ response = "%s,%s,%s,%s,%f,%f" % (ip, city, region, cc,
+ r['latitude'],r['longitude'])
+ req.write(response + "\n")
+ else:
+ req.write(ip + ",UNKNOWN" + "\n")
return apache.OK