Skip to content
This repository was archived by the owner on Jan 18, 2023. It is now read-only.

Commit 0cd8271

Browse files
committed
Update location. Add commandline prompt
1 parent 7db5394 commit 0cd8271

File tree

8 files changed

+457
-287
lines changed

8 files changed

+457
-287
lines changed

firststreet/__main__.py

Lines changed: 347 additions & 202 deletions
Large diffs are not rendered by default.

firststreet/api/aal.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,13 @@ def get_summary(self, search_items, location_type, csv=False, output_dir=None, e
4848

4949
api_datas = self.call_api(search_items, "economic/aal", "summary", location_type, extra_param=extra_param)
5050

51-
if location_type == "property":
52-
product = []
53-
for api_data, fsid in zip(api_datas, search_items):
54-
api_data["fsid"] = fsid
55-
product.append(AALSummaryProperty(api_data))
51+
product = []
52+
for api_data, fsid in api_datas:
53+
api_data["fsid"] = fsid
5654

57-
else:
58-
product = []
59-
for api_data, fsid in zip(api_datas, search_items):
60-
api_data["fsid"] = fsid
55+
if location_type == "property":
56+
product.append(AALSummaryProperty(api_data))
57+
else:
6158
product.append(AALSummaryOther(api_data))
6259

6360
if csv:

firststreet/api/api.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,4 +130,7 @@ def call_api(self, search_item, product, product_subtype, location=None, tile_pr
130130
loop = asyncio.get_event_loop()
131131
response = loop.run_until_complete(self._http.endpoint_execute(endpoints))
132132

133+
if product == "economic/aal":
134+
return zip(response, search_item)
135+
133136
return response

firststreet/api/csv_format.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ def to_csv(data, product, product_subtype, location_type=None, output_dir=None):
2222
output_dir (str): The output directory to save the generated csvs
2323
"""
2424

25+
logging.info("Generating CSV file")
26+
2527
date = datetime.datetime.today().strftime('%Y_%m_%d_%H_%M_%S')
2628

2729
# Set file name to the current date, time, and product
@@ -765,12 +767,18 @@ def format_location_detail_property(data):
765767
df['state_fips'] = df['state_fips'].astype('Int64').apply(str).apply(lambda x: x.zfill(2))
766768
df['footprintId'] = df['footprintId'].astype('Int64').apply(str)
767769
df['elevation'] = df['elevation'].apply(str)
770+
df['fema'] = df['fema'].apply(str)
771+
df['floorElevation'] = df['floorElevation'].apply(str)
772+
df['building'] = df['building'].apply(str)
773+
df['floodType'] = df['floodType'].apply(str)
774+
df['residential'] = df['residential'].apply(str)
768775
df['geometry'] = df['geometry'].apply(get_geom_center)
769776
df = pd.concat([df.drop(['geometry'], axis=1), df['geometry'].apply(pd.Series)], axis=1)
770777

771-
return df[['fsid', 'valid_id', 'streetNumber', 'route', 'city_fips', 'city_name', 'zipCode', 'neighborhood_fips',
772-
'neighborhood_name', 'tract_fips', 'county_fips', 'county_name', 'cd_fips', 'cd_name',
773-
'state_fips', 'state_name', 'footprintId', 'elevation', 'fema', 'latitude', 'longitude', 'error']]
778+
return df[['fsid', 'valid_id', 'streetNumber', 'route', 'city_fips', 'city_name', 'zipCode',
779+
'neighborhood_fips', 'neighborhood_name', 'tract_fips', 'county_fips', 'county_name', 'cd_fips',
780+
'cd_name', 'state_fips', 'state_name', 'footprintId', 'elevation', 'fema', 'floorElevation', 'building',
781+
'floodType', 'residential', 'latitude', 'longitude', 'error']]
774782

775783

776784
def format_location_detail_neighborhood(data):
@@ -1111,7 +1119,7 @@ def format_location_summary(data):
11111119
df['propertiesTotal'] = df['propertiesTotal'].astype('Int64').apply(str)
11121120
df['propertiesAtRisk'] = df['propertiesAtRisk'].astype('Int64').apply(str)
11131121
return df[['fsid', 'valid_id', 'riskDirection', 'environmentalRisk', 'propertiesTotal',
1114-
'propertiesAtRisk', 'historic', 'error']]
1122+
'propertiesAtRisk', 'historic', 'adaptation', 'error']]
11151123

11161124

11171125
def format_fema_nfip(data):
@@ -1148,7 +1156,14 @@ def format_aal_summary_property(data):
11481156

11491157
if not df[['annual_loss', 'depth_loss']].isna().values.all():
11501158
df = pd.concat([df.drop(['annual_loss'], axis=1), df['annual_loss'].apply(pd.Series)], axis=1)
1151-
df = pd.concat([df.drop(['data'], axis=1), df['data'].apply(pd.Series)], axis=1)
1159+
if 'data' in df.columns:
1160+
df = pd.concat([df.drop(['data'], axis=1), df['data'].apply(pd.Series)], axis=1)
1161+
else:
1162+
df['year'] = pd.NA
1163+
df['low'] = pd.NA
1164+
df['mid'] = pd.NA
1165+
df['high'] = pd.NA
1166+
11521167
df = pd.concat([df.drop(['depth_loss'], axis=1), df['depth_loss'].apply(pd.Series)], axis=1)
11531168
else:
11541169
df['fsid'] = df['fsid'].apply(str)

firststreet/http_util.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ async def execute(self, endpoint, session, throttler):
112112
async with throttler:
113113

114114
try:
115-
async with session.get(endpoint[0], headers=headers) as response:
115+
async with session.get(endpoint[0], headers=headers, ssl=False) as response:
116116

117117
# Read a tile response
118118
if endpoint[2] == 'tile':

firststreet/models/location.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ def __init__(self, response):
4141
self.footprintId = response.get('footprintId')
4242
self.elevation = response.get('elevation')
4343
self.fema = response.get('fema')
44+
self.floorElevation = response.get('floorElevation')
45+
self.building = response.get('building')
46+
self.floodType = response.get('floodType')
47+
self.residential = response.get('residential')
4448
if response.get('geometry'):
4549
self.geometry = Geometry(response.get('geometry')).center
4650
else:

tests/api/test_location.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,10 +148,10 @@ def test_single_address(self, tmpdir):
148148
assert location[0].valid_id is True
149149

150150
def test_one_of_each(self, tmpdir):
151-
location = fs.location.get_detail([511447411], "property", csv=True, output_dir=tmpdir)
151+
location = fs.location.get_detail([395112095], "property", csv=True, output_dir=tmpdir)
152152
assert len(location) == 1
153153
assert location[0].valid_id is True
154-
assert location[0].fsid == "511447411"
154+
assert location[0].fsid == "395112095"
155155
assert location[0].streetNumber is not None
156156
assert location[0].route is not None
157157
assert location[0].city is not None
@@ -162,8 +162,8 @@ def test_one_of_each(self, tmpdir):
162162
assert location[0].county is not None
163163
assert location[0].cd is not None
164164
assert location[0].state is not None
165-
assert location[0].footprintId is None
166-
assert location[0].elevation is not None
165+
assert location[0].footprintId is not None
166+
assert location[0].elevation is None
167167
assert location[0].fema is not None
168168
assert location[0].geometry is not None
169169
location = fs.location.get_detail([1206631], "neighborhood", csv=True, output_dir=tmpdir)

tests/test_full.py

Lines changed: 72 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -11,69 +11,75 @@
1111
def test_full(tmpdir):
1212
api_key = os.environ['FSF_API_KEY']
1313
fs = firststreet.FirstStreet(api_key)
14-
fs.adaptation.get_detail([29], csv=True, output_dir=tmpdir)
15-
fs.adaptation.get_summary([395133768], "property", csv=True, output_dir=tmpdir)
16-
fs.adaptation.get_summary([7924], "neighborhood", csv=True, output_dir=tmpdir)
17-
fs.adaptation.get_summary([1935265], "city", csv=True, output_dir=tmpdir)
18-
fs.adaptation.get_summary([50158], "zcta", csv=True, output_dir=tmpdir)
19-
fs.adaptation.get_summary([39061007100], "tract", csv=True, output_dir=tmpdir)
20-
fs.adaptation.get_summary([19047], "county", csv=True, output_dir=tmpdir)
21-
fs.adaptation.get_summary([3915], "cd", csv=True, output_dir=tmpdir)
22-
fs.adaptation.get_summary([39], "state", csv=True, output_dir=tmpdir)
23-
fs.adaptation.get_detail_by_location([395133768], "property", csv=True, output_dir=tmpdir)
24-
fs.adaptation.get_detail_by_location([7924], "neighborhood", csv=True, output_dir=tmpdir)
25-
fs.adaptation.get_detail_by_location([1935265], "city", csv=True, output_dir=tmpdir)
26-
fs.adaptation.get_detail_by_location([50158], "zcta", csv=True, output_dir=tmpdir)
27-
fs.adaptation.get_detail_by_location([39061007100], "tract", csv=True, output_dir=tmpdir)
28-
fs.adaptation.get_detail_by_location([19047], "county", csv=True, output_dir=tmpdir)
29-
fs.adaptation.get_detail_by_location([3915], "cd", csv=True, output_dir=tmpdir)
30-
fs.adaptation.get_detail_by_location([39], "state", csv=True, output_dir=tmpdir)
31-
fs.probability.get_chance([390000257], csv=True, output_dir=tmpdir)
32-
fs.probability.get_count([7935], 'neighborhood', csv=True, output_dir=tmpdir)
33-
fs.probability.get_count([1959835], 'city', csv=True, output_dir=tmpdir)
34-
fs.probability.get_count([44203], 'zcta', csv=True, output_dir=tmpdir)
35-
fs.probability.get_count([39035103400], 'tract', csv=True, output_dir=tmpdir)
36-
fs.probability.get_count([39047], 'county', csv=True, output_dir=tmpdir)
37-
fs.probability.get_count([3904], 'cd', csv=True, output_dir=tmpdir)
38-
fs.probability.get_count([39], 'state', csv=True, output_dir=tmpdir)
39-
fs.probability.get_count_summary([394406220], csv=True, output_dir=tmpdir)
40-
fs.probability.get_cumulative([390000439], csv=True, output_dir=tmpdir)
41-
fs.probability.get_depth([390000227], csv=True, output_dir=tmpdir)
42-
fs.environmental.get_precipitation([39057], csv=True, output_dir=tmpdir)
43-
fs.historic.get_event([2], csv=True, output_dir=tmpdir)
44-
fs.historic.get_summary([511447411], "property", csv=True, output_dir=tmpdir)
45-
fs.historic.get_summary([540225], "neighborhood", csv=True, output_dir=tmpdir)
46-
fs.historic.get_summary([1982200], "city", csv=True, output_dir=tmpdir)
47-
fs.historic.get_summary([50156], "zcta", csv=True, output_dir=tmpdir)
48-
fs.historic.get_summary([19153004900], "tract", csv=True, output_dir=tmpdir)
49-
fs.historic.get_summary([19163], "county", csv=True, output_dir=tmpdir)
50-
fs.historic.get_summary([1901], "cd", csv=True, output_dir=tmpdir)
51-
fs.historic.get_summary([39], "state", csv=True, output_dir=tmpdir)
52-
fs.historic.get_events_by_location([511447411], "property", csv=True, output_dir=tmpdir)
53-
fs.historic.get_events_by_location([540225], "neighborhood", csv=True, output_dir=tmpdir)
54-
fs.historic.get_events_by_location([1982200], "city", csv=True, output_dir=tmpdir)
55-
fs.historic.get_events_by_location([50156], "zcta", csv=True, output_dir=tmpdir)
56-
fs.historic.get_events_by_location([19153004900], "tract", csv=True, output_dir=tmpdir)
57-
fs.historic.get_events_by_location([19163], "county", csv=True, output_dir=tmpdir)
58-
fs.historic.get_events_by_location([1901], "cd", csv=True, output_dir=tmpdir)
59-
fs.historic.get_events_by_location([39], "state", csv=True, output_dir=tmpdir)
60-
fs.location.get_detail([511447411], "property", csv=True, output_dir=tmpdir)
61-
fs.location.get_detail([1206631], "neighborhood", csv=True, output_dir=tmpdir)
62-
fs.location.get_detail([3915406], "city", csv=True, output_dir=tmpdir)
63-
fs.location.get_detail([44654], "zcta", csv=True, output_dir=tmpdir)
64-
fs.location.get_detail([39151712602], "tract", csv=True, output_dir=tmpdir)
65-
fs.location.get_detail([39077], "county", csv=True, output_dir=tmpdir)
66-
fs.location.get_detail([3904], "cd", csv=True, output_dir=tmpdir)
67-
fs.location.get_detail([39], "state", csv=True, output_dir=tmpdir)
68-
fs.location.get_summary([395112095], "property", csv=True, output_dir=tmpdir)
69-
fs.location.get_summary([631054], "neighborhood", csv=True, output_dir=tmpdir)
70-
fs.location.get_summary([3958002], "city", csv=True, output_dir=tmpdir)
71-
fs.location.get_summary([43935], "zcta", csv=True, output_dir=tmpdir)
72-
fs.location.get_summary([39153531702], "tract", csv=True, output_dir=tmpdir)
73-
fs.location.get_summary([39027], "county", csv=True, output_dir=tmpdir)
74-
fs.location.get_summary([3903], "cd", csv=True, output_dir=tmpdir)
75-
fs.location.get_summary([39], "state", csv=True, output_dir=tmpdir)
76-
fs.fema.get_nfip([44074], "zcta", csv=True, output_dir=tmpdir)
77-
fs.fema.get_nfip([39013012300], "tract", csv=True, output_dir=tmpdir)
78-
fs.fema.get_nfip([39093], "county", csv=True, output_dir=tmpdir)
79-
fs.fema.get_nfip([39], "state", csv=True, output_dir=tmpdir)
14+
# fs.adaptation.get_detail([29], csv=True, output_dir=tmpdir)
15+
# fs.adaptation.get_summary([395133768], "property", csv=True, output_dir=tmpdir)
16+
# fs.adaptation.get_summary([7924], "neighborhood", csv=True, output_dir=tmpdir)
17+
# fs.adaptation.get_summary([1935265], "city", csv=True, output_dir=tmpdir)
18+
# fs.adaptation.get_summary([50158], "zcta", csv=True, output_dir=tmpdir)
19+
# fs.adaptation.get_summary([39061007100], "tract", csv=True, output_dir=tmpdir)
20+
# fs.adaptation.get_summary([19047], "county", csv=True, output_dir=tmpdir)
21+
# fs.adaptation.get_summary([3915], "cd", csv=True, output_dir=tmpdir)
22+
# fs.adaptation.get_summary([39], "state", csv=True, output_dir=tmpdir)
23+
# fs.adaptation.get_detail_by_location([395133768], "property", csv=True, output_dir=tmpdir)
24+
# fs.adaptation.get_detail_by_location([7924], "neighborhood", csv=True, output_dir=tmpdir)
25+
# fs.adaptation.get_detail_by_location([1935265], "city", csv=True, output_dir=tmpdir)
26+
# fs.adaptation.get_detail_by_location([50158], "zcta", csv=True, output_dir=tmpdir)
27+
# fs.adaptation.get_detail_by_location([39061007100], "tract", csv=True, output_dir=tmpdir)
28+
# fs.adaptation.get_detail_by_location([19047], "county", csv=True, output_dir=tmpdir)
29+
# fs.adaptation.get_detail_by_location([3915], "cd", csv=True, output_dir=tmpdir)
30+
# fs.adaptation.get_detail_by_location([39], "state", csv=True, output_dir=tmpdir)
31+
# fs.probability.get_chance([390000257], csv=True, output_dir=tmpdir)
32+
# fs.probability.get_count([7935], 'neighborhood', csv=True, output_dir=tmpdir)
33+
# fs.probability.get_count([1959835], 'city', csv=True, output_dir=tmpdir)
34+
# fs.probability.get_count([44203], 'zcta', csv=True, output_dir=tmpdir)
35+
# fs.probability.get_count([39035103400], 'tract', csv=True, output_dir=tmpdir)
36+
# fs.probability.get_count([39047], 'county', csv=True, output_dir=tmpdir)
37+
# fs.probability.get_count([3904], 'cd', csv=True, output_dir=tmpdir)
38+
# fs.probability.get_count([39], 'state', csv=True, output_dir=tmpdir)
39+
# fs.probability.get_count_summary([394406220], csv=True, output_dir=tmpdir)
40+
# fs.probability.get_cumulative([390000439], csv=True, output_dir=tmpdir)
41+
# fs.probability.get_depth([390000227], csv=True, output_dir=tmpdir)
42+
# fs.environmental.get_precipitation([39057], csv=True, output_dir=tmpdir)
43+
# fs.historic.get_event([2], csv=True, output_dir=tmpdir)
44+
# fs.historic.get_summary([511447411], "property", csv=True, output_dir=tmpdir)
45+
# fs.historic.get_summary([540225], "neighborhood", csv=True, output_dir=tmpdir)
46+
# fs.historic.get_summary([1982200], "city", csv=True, output_dir=tmpdir)
47+
# fs.historic.get_summary([50156], "zcta", csv=True, output_dir=tmpdir)
48+
# fs.historic.get_summary([19153004900], "tract", csv=True, output_dir=tmpdir)
49+
# fs.historic.get_summary([19163], "county", csv=True, output_dir=tmpdir)
50+
# fs.historic.get_summary([1901], "cd", csv=True, output_dir=tmpdir)
51+
# fs.historic.get_summary([39], "state", csv=True, output_dir=tmpdir)
52+
# fs.historic.get_events_by_location([511447411], "property", csv=True, output_dir=tmpdir)
53+
# fs.historic.get_events_by_location([540225], "neighborhood", csv=True, output_dir=tmpdir)
54+
# fs.historic.get_events_by_location([1982200], "city", csv=True, output_dir=tmpdir)
55+
# fs.historic.get_events_by_location([50156], "zcta", csv=True, output_dir=tmpdir)
56+
# fs.historic.get_events_by_location([19153004900], "tract", csv=True, output_dir=tmpdir)
57+
# fs.historic.get_events_by_location([19163], "county", csv=True, output_dir=tmpdir)
58+
# fs.historic.get_events_by_location([1901], "cd", csv=True, output_dir=tmpdir)
59+
# fs.historic.get_events_by_location([39], "state", csv=True, output_dir=tmpdir)
60+
# fs.location.get_detail([511447411], "property", csv=True, output_dir=tmpdir)
61+
# fs.location.get_detail([1206631], "neighborhood", csv=True, output_dir=tmpdir)
62+
# fs.location.get_detail([3915406], "city", csv=True, output_dir=tmpdir)
63+
# fs.location.get_detail([44654], "zcta", csv=True, output_dir=tmpdir)
64+
# fs.location.get_detail([39151712602], "tract", csv=True, output_dir=tmpdir)
65+
# fs.location.get_detail([39077], "county", csv=True, output_dir=tmpdir)
66+
# fs.location.get_detail([3904], "cd", csv=True, output_dir=tmpdir)
67+
# fs.location.get_detail([39], "state", csv=True, output_dir=tmpdir)
68+
# fs.location.get_summary([395112095], "property", csv=True, output_dir=tmpdir)
69+
# fs.location.get_summary([631054], "neighborhood", csv=True, output_dir=tmpdir)
70+
# fs.location.get_summary([3958002], "city", csv=True, output_dir=tmpdir)
71+
# fs.location.get_summary([43935], "zcta", csv=True, output_dir=tmpdir)
72+
# fs.location.get_summary([39153531702], "tract", csv=True, output_dir=tmpdir)
73+
# fs.location.get_summary([39027], "county", csv=True, output_dir=tmpdir)
74+
# fs.location.get_summary([3903], "cd", csv=True, output_dir=tmpdir)
75+
# fs.location.get_summary([39], "state", csv=True, output_dir=tmpdir)
76+
# fs.fema.get_nfip([44074], "zcta", csv=True, output_dir=tmpdir)
77+
# fs.fema.get_nfip([39013012300], "tract", csv=True, output_dir=tmpdir)
78+
# fs.fema.get_nfip([39093], "county", csv=True, output_dir=tmpdir)
79+
# fs.fema.get_nfip([39], "state", csv=True, output_dir=tmpdir)
80+
fs.aal.get_summary([511447411], location_type="property", csv=True)
81+
fs.avm.get_avm([395112095], csv=True)
82+
fs.avm.get_provider([2], csv=True)
83+
84+
85+
test_full(None)

0 commit comments

Comments
 (0)