A failed lookup used to fail with an error message. That in turn,
disturbs treecutter. Now if Coordinates are not found a Coord element
is not generated. The None values in the Address are converted to ''
or filled by a successful geocode.
Functions c and s needs refining. Empty elements are kept or
destroyed with the clean_db function.
clean_db function can clean code to become invalid xml so
use carefully. clean_db and the s/c functions will have
to be put in a docbook/lxml module at some point.
**{const.XLINK+"href": self.osmlink()}))
return uri
**{const.XLINK+"href": self.osmlink()}))
return uri
+def c(s):
+ return s or ''
+
+def s(s,n):
+ return s or n
+
class Address(object):
"""Address object to contain everything known about an address"""
def __init__(self,street=None,postcode=None,city=None,country=None):
class Address(object):
"""Address object to contain everything known about an address"""
def __init__(self,street=None,postcode=None,city=None,country=None):
self.street = street
self.postcode = postcode
self.city = city
self.country = country
self.street = street
self.postcode = postcode
self.city = city
self.country = country
+ self.country_code = None
+ self.phone = None
+ self.name = None
self.coord = None
def geocode(self):
self.coord = None
def geocode(self):
t = etree.parse('/usr/share/xml/iso-codes/iso_3166.xml')
r = t.xpath('//iso_3166_entry[@name="'+self.country+'"]')
if len(r)==1:
t = etree.parse('/usr/share/xml/iso-codes/iso_3166.xml')
r = t.xpath('//iso_3166_entry[@name="'+self.country+'"]')
if len(r)==1:
- params['countrycodes'] = r[0].get("alpha_2_code")
+ self.country_code = r[0].get("alpha_2_code")
+ if self.country_code:
+ params['countrycodes'] = self.country_code
- if self.name and len(self.name)>0:
- addrlist.append(u''+self.name+', '+self.street+', '+self.city)
- addrlist.append(u''+self.street+', '+self.postcode+', '+self.city)
- addrlist.append(u''+self.street+', '+self.city)
+ addrlist.append(u''+c(self.name)+', '+c(self.street)+', '+c(self.city))
+ addrlist.append(u''+c(self.street)+', '+c(self.postcode)+', '+c(self.city))
+ addrlist.append(u''+c(self.street)+', '+c(self.city))
for addr in addrlist:
params['q'] = addr.encode('utf-8')
for addr in addrlist:
params['q'] = addr.encode('utf-8')
places = int(root.xpath('count(//place[@place_id])'))
if places == 1:
place = root.find("place")
places = int(root.xpath('count(//place[@place_id])'))
if places == 1:
place = root.find("place")
+ self.postcode = s(self.postcode,place.find("boundary").text)
+ self.city = s(self.city,place.find("city").text)
+ self.country = s(self.country,place.find("country").text)
+ self.country_code = s(self.country_code,place.find("country_code").text)
self.coord=Coord(place.get("lat"),place.get("lon"))
return
self.coord=Coord(place.get("lat"),place.get("lon"))
return
- sys.stderr.write(u'FAILURE: Did not find:\n')
- sys.stderr.write(addrlist[0].encode('utf-8'))
- sys.stderr.write(url)
def add_phone(self, phone):
self.phone = phone
def add_phone(self, phone):
self.phone = phone
def db_xml(self):
db = ElementMaker(namespace=const.DB_NS, nsmap=const.NSMAP)
def db_xml(self):
db = ElementMaker(namespace=const.DB_NS, nsmap=const.NSMAP)
- adr = db.address(db.street(self.street),
- db.postcode(self.postcode),
- db.city(self.city),
- db.country(self.country),
- db.phone(self.phone),
- self.coord.db_xml())
+ co = ''
+ if self.coord:
+ co = self.coord.db_xml()
+ adr = db.address(db.street(c(self.street)),
+ db.postcode(c(self.postcode)),
+ db.city(c(self.city)),
+ db.country(c(self.country)),
+ db.phone(c(self.phone)),
+ co)
# type=self.type,
return adr
# type=self.type,
return adr