def export_buildings():
	i = 0
	blist = []
	bitems = buildings.items()
	log("processing %s buildings"%(len(bitems),), 1)
	for b_id, bdata in bitems:
		addr = bdata["address"]
		building = Building.query(Building.address == addr).get()
		owner = Owner.query(Owner.name == bdata["owner"]).get()
		byear = bdata["year"]
		btype = bdata["building_type"]
		if not building:
			log("Can't find building '%s' -- creating new entry"%(addr,), 2)
			building = Building(address=addr)
		if owner:
			building.owner = owner.key
		if byear:
			building.year = byear
		if btype:
			building.building_type = btype
		if b_id:
			building.building_id = b_id
		if not building.zipcode:
			zc = _zip(bdata["zipcode"], addr)
			if zc:
				building.zipcode = zc
		if not building.latitude or not building.longitude:
			building.latitude, building.longitude = address2latlng(building.address)
		blist.append(building)
		i += 1
		if not i % 100:
			log("processed %s buildings"%(i,), 2)
	log("saving buildings", 1)
	db.put_multi(blist)
def export_owners():
	i = 0
	olist = []
	oitems = owners.items()
	log("processing %s owners"%(len(oitems),), 1)
	for name, odata in oitems:
		if not name:
			log("no name for owner: %s"%(json.dumps(odata),), important=True)
		elif not Owner.query(Owner.name == name).get():
			log("Can't find owner '%s' -- creating new entry"%(name,), 2)
			owner = Owner(name=name)
			if odata["address"]:
				owner.address, zc = odata["address"].rsplit(" ", 1)
				zcode = _zip(zc, owner.address)
				if zcode:
					owner.zipcode = zcode
			else:
				log("no address for %s!"%(name,), important=True)
			olist.append(owner)
		i += 1
		if not i % 100:
			log("processed %s owners"%(i,), 2)
	log("saving %s owners"%(len(olist),), 1)
	db.put_multi(olist)