[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