Skip to content

Commit

Permalink
Drop counselors with invalid zips when geocoding
Browse files Browse the repository at this point in the history
  • Loading branch information
wpears committed Jan 15, 2025
1 parent e2f151a commit 399b17f
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 10 deletions.
20 changes: 16 additions & 4 deletions cfgov/housing_counselor/geocoder.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,22 @@ def __init__(self, zipcodes):
self.zipcodes = zipcodes

def geocode(self, counselors):
return list(map(self.geocode_counselor, counselors))
return list(
map(
self.geocode_counselor,
filter(self.filter_zipcodes, counselors),
)
)

def filter_zipcodes(self, counselor):
counselor = dict(counselor)
zipcode = counselor["zipcd"][:5]

if zipcode not in self.zipcodes:
logger.warning(f"{zipcode} not in zipcodes")
return False

return True

def geocode_counselor(self, counselor):
counselor = dict(counselor)
Expand All @@ -42,9 +57,6 @@ def geocode_counselor(self, counselor):
zipcode = counselor["zipcd"][:5]
logger.warning("need to geocode counselor with zipcode %s", zipcode)

if zipcode not in self.zipcodes:
raise KeyError(f"{zipcode} not in zipcodes")

coordinates = self.zipcodes[zipcode]
counselor.update(zip(lat_lng_keys, coordinates))

Expand Down
24 changes: 18 additions & 6 deletions cfgov/housing_counselor/tests/management/test_geocoder.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,21 @@ def setUp(self):

def test_returns_list_of_counselors(self):
counselors = [
{"agc_ADDR_LATITUDE": 1, "agc_ADDR_LONGITUDE": -1},
{"agc_ADDR_LATITUDE": 2, "agc_ADDR_LONGITUDE": -2},
{"agc_ADDR_LATITUDE": 3, "agc_ADDR_LONGITUDE": -3},
{
"agc_ADDR_LATITUDE": 1,
"agc_ADDR_LONGITUDE": -1,
"zipcd": "20001",
},
{
"agc_ADDR_LATITUDE": 2,
"agc_ADDR_LONGITUDE": -2,
"zipcd": "20001",
},
{
"agc_ADDR_LATITUDE": 3,
"agc_ADDR_LONGITUDE": -3,
"zipcd": "20001",
},
]

geocoded = self.geocoder.geocode(counselors)
Expand Down Expand Up @@ -84,11 +96,11 @@ def test_uses_first_five_digits_of_zipcode(self):
self.assertEqual(geocoded[0]["agc_ADDR_LATITUDE"], 123.45)
self.assertEqual(geocoded[0]["agc_ADDR_LONGITUDE"], -78.9)

def test_raises_keyerror_if_zipcode_not_available(self):
def test_filters_out_bad_zips(self):
counselor = {"zipcd": "20002"}

with self.assertRaises(KeyError):
self.geocoder.geocode([counselor])
geocoded = self.geocoder.geocode([counselor])
self.assertEqual(len(geocoded), 0)


class TestBulkZipCodeGeocoder(TestCase):
Expand Down

0 comments on commit 399b17f

Please sign in to comment.