Skip to content

Commit

Permalink
consolidate GET and POST methods
Browse files Browse the repository at this point in the history
  • Loading branch information
cdibble committed Dec 29, 2022
1 parent 2721d70 commit 0845b04
Showing 1 changed file with 165 additions and 181 deletions.
346 changes: 165 additions & 181 deletions src/ccfrp_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,218 +74,202 @@ def make_chloropleth_length(df: pd.DataFrame, geo: geojson, locations_column:str
###############
# Fish Length: Grid Cell
# ## MAPS
@app.route("/fish/length/map/gridcell", methods = ['GET'])
@app.route("/fish/length/map/gridcell", methods = ['GET', 'POST'])
def fish_length_map_get():
all_species=angler.species.Common_Name.unique()
TimeForm.fish_name = SelectField(u'Field name', choices = all_species, validators = [InputRequired()])
form = TimeForm()
default_start = angler.length.Date.min().date().isoformat()
default_end = (angler.length.Date.max() + timedelta(days=1)).date().isoformat()
return render_template(
'select_fish_gridcell.html',
form = form,
default_start = default_start,
default_end = default_end
)

@app.route("/fish/length/map/gridcell", methods = ['POST'])
def fish_length_map_post():
all_species=angler.species.Common_Name.unique()
TimeForm.fish_name = SelectField(u'Field name', choices = all_species, validators = [InputRequired()])
form = TimeForm()
map_df, geo = angler.fish_length_map_prep(
common_name=form.data.get('fish_name'),
start_time=form.data.get('start_date'),
end_time=form.data.get('end_date'),
id_column='Grid_Cell_ID'
)
fig = make_chloropleth_length(map_df, geo)
graphJSON = json.dumps([fig], cls=plotly.utils.PlotlyJSONEncoder)
return render_template(
'select_fish_gridcell.html',
form=form,
# table = df.sort_values('Date').to_html(),
# graphJSON = graphJSON,
plt_html=fig.to_html(),
default_start = form.data.get('start_date'),
default_end = form.data.get('end_date'),
if request.method == 'GET':
default_start = angler.length.Date.min().date().isoformat()
default_end = (angler.length.Date.max() + timedelta(days=1)).date().isoformat()
return render_template(
'select_fish_gridcell.html',
form = form,
default_start = default_start,
default_end = default_end
)
elif request.method == 'POST':
map_df, geo = angler.fish_length_map_prep(
common_name=form.data.get('fish_name'),
start_time=form.data.get('start_date'),
end_time=form.data.get('end_date'),
id_column='Grid_Cell_ID'
)
fig = make_chloropleth_length(map_df, geo)
# graphJSON = json.dumps([fig], cls=plotly.utils.PlotlyJSONEncoder)
return render_template(
'select_fish_gridcell.html',
form=form,
# table = df.sort_values('Date').to_html(),
# graphJSON = graphJSON,
plt_html=fig.to_html(),
default_start = form.data.get('start_date'),
default_end = form.data.get('end_date'),
)

# ## TABLES
@app.route("/fish/length/table/gridcell", methods = ['GET'])
@app.route("/fish/length/table/gridcell", methods = ['GET', 'POST'])
def fish_length_table_get():
all_species=angler.species.Common_Name.unique()
TimeForm.fish_name = SelectField(u'Field name', choices = all_species, validators = [InputRequired()])
form = TimeForm()
default_start = angler.length.Date.min().date().isoformat()
default_end = (angler.length.Date.max() + timedelta(days=1)).date().isoformat()
return render_template(
'select_fish_gridcell.html',
form = form,
default_start = default_start,
default_end = default_end
if request.method == 'GET':
default_start = angler.length.Date.min().date().isoformat()
default_end = (angler.length.Date.max() + timedelta(days=1)).date().isoformat()
return render_template(
'select_fish_gridcell.html',
form = form,
default_start = default_start,
default_end = default_end
)
elif request.method == 'POST':
df = angler.get_df(
type = 'length',
common_name=form.data.get('fish_name'),
start_time=form.data.get('start_date'),
end_time=form.data.get('end_date')
).drop(
columns = [
'Year',
'Month',
'Day',
'ID_Cell_per_Trip',
'LTM_project_short_code'
],
errors='ignore'
)

@app.route("/fish/length/table/gridcell", methods = ['POST'])
def fish_length_table_post():
all_species=angler.species.Common_Name.unique()
TimeForm.fish_name = SelectField(u'Field name', choices = all_species, validators = [InputRequired()])
form = TimeForm()
df = angler.get_df(
type = 'length',
common_name=form.data.get('fish_name'),
start_time=form.data.get('start_date'),
end_time=form.data.get('end_date')
).drop(
columns = [
'Year',
'Month',
'Day',
'ID_Cell_per_Trip',
'LTM_project_short_code'
],
errors='ignore'
)
df = pd.merge(
df,
angler.get_location_summary(df)
).drop(
columns = [
'lat_1_dd', 'lon_1_dd', 'lat_2_dd','lon_2_dd', 'lat_3_dd', 'lon_3_dd', 'lat_4_dd', 'lon_4_dd', 'lat_center_point_dd', 'lon_center_point_dd', 'species_definition', 'CA_MPA_name_short'
]
)
# fig = make_chloropleth_length(map_df, geo)
# graphJSON = json.dumps([fig], cls=plotly.utils.PlotlyJSONEncoder)
return render_template(
'select_fish_gridcell.html',
form=form,
table = df.to_html(),
# graphJSON = graphJSON,
# plt_html=fig.to_html(),
default_start = form.data.get('start_date'),
default_end = form.data.get('end_date'),
df = pd.merge(
df,
angler.get_location_summary(df)
).drop(
columns = [
'lat_1_dd', 'lon_1_dd', 'lat_2_dd','lon_2_dd', 'lat_3_dd', 'lon_3_dd', 'lat_4_dd', 'lon_4_dd', 'lat_center_point_dd', 'lon_center_point_dd', 'species_definition', 'CA_MPA_name_short'
]
)
# fig = make_chloropleth_length(map_df, geo)
# graphJSON = json.dumps([fig], cls=plotly.utils.PlotlyJSONEncoder)
return render_template(
'select_fish_gridcell.html',
form=form,
table = df.to_html(),
# graphJSON = graphJSON,
# plt_html=fig.to_html(),
default_start = form.data.get('start_date'),
default_end = form.data.get('end_date'),
)

#
# Fish Length: MPA Area
# ## MAPS
@app.route("/fish/length/map/area", methods = ['GET'])
@app.route("/fish/length/map/area", methods = ['GET', 'POST'])
def fish_length_map_area_get():
all_species=angler.species.Common_Name.unique()
TimeForm.fish_name = SelectField(u'Field name', choices = all_species, validators = [InputRequired()])
form = TimeForm()
default_start = angler.length.Date.min().date().isoformat()
default_end = (angler.length.Date.max() + timedelta(days=1)).date().isoformat()
return render_template(
'select_fish_area.html',
form = form,
default_start = default_start,
default_end = default_end
if request.method == 'GET':
default_start = angler.length.Date.min().date().isoformat()
default_end = (angler.length.Date.max() + timedelta(days=1)).date().isoformat()
return render_template(
'select_fish_area.html',
form = form,
default_start = default_start,
default_end = default_end
)
elif request.method == 'POST':
# Get a second version with Area_MPA_Status as a grouping
fishdf = angler.get_df(
'length',
common_name=form.data.get('fish_name'),
start_time=form.data.get('start_date'),
end_time=form.data.get('end_date')
)

@app.route("/fish/length/map/area", methods = ['POST'])
def fish_length_map_area_post():
all_species=angler.species.Common_Name.unique()
TimeForm.fish_name = SelectField(u'Field name', choices = all_species, validators = [InputRequired()])
form = TimeForm()
# Get a second version with Area_MPA_Status as a grouping
fishdf = angler.get_df(
'length',
common_name=form.data.get('fish_name'),
start_time=form.data.get('start_date'),
end_time=form.data.get('end_date')
)
fishdf['Area_MPA_Status'] = fishdf['Area'].str.cat(fishdf['MPA_Status'], sep = ' ')
area_df, area_geo = angler.fish_length_map_prep(
df = fishdf,
id_column='Area_MPA_Status',
grouping_vars=['Area_MPA_Status'],
feat_properties=['Area_MPA_Status']
)
# kwargs = {"grouping_vars":['Area_MPA_Status'],'feat_properties':['Area_MPA_Status']}
module_logger.debug('Area DF- the summarized data to be mapped')
module_logger.debug(area_df.head())
module_logger.debug('Area Geo- the geometries for the mapped data')
module_logger.debug(area_geo)
fig = make_chloropleth_length(area_df, area_geo, 'Area_MPA_Status')
graphJSON = json.dumps([fig], cls=plotly.utils.PlotlyJSONEncoder)
return render_template(
'select_fish_area.html',
form=form,
# table = df.sort_values('Date').to_html(),
# graphJSON = graphJSON,
plt_html=fig.to_html(),
default_start = form.data.get('start_date'),
default_end = form.data.get('end_date'),
fishdf['Area_MPA_Status'] = fishdf['Area'].str.cat(fishdf['MPA_Status'], sep = ' ')
area_df, area_geo = angler.fish_length_map_prep(
df = fishdf,
id_column='Area_MPA_Status',
grouping_vars=['Area_MPA_Status'],
feat_properties=['Area_MPA_Status']
)
# kwargs = {"grouping_vars":['Area_MPA_Status'],'feat_properties':['Area_MPA_Status']}
module_logger.debug('Area DF- the summarized data to be mapped')
module_logger.debug(area_df.head())
module_logger.debug('Area Geo- the geometries for the mapped data')
module_logger.debug(area_geo)
fig = make_chloropleth_length(area_df, area_geo, 'Area_MPA_Status')
# graphJSON = json.dumps([fig], cls=plotly.utils.PlotlyJSONEncoder)
return render_template(
'select_fish_area.html',
form=form,
# table = df.sort_values('Date').to_html(),
# graphJSON = graphJSON,
plt_html=fig.to_html(),
default_start = form.data.get('start_date'),
default_end = form.data.get('end_date'),
)

# ## TABLES
@app.route("/fish/length/table/area", methods = ['GET'])
@app.route("/fish/length/table/area", methods = ['GET', 'POST'])
def fish_length_table_area_get():
all_species=angler.species.Common_Name.unique()
TimeForm.fish_name = SelectField(u'Field name', choices = all_species, validators = [InputRequired()])
form = TimeForm()
default_start = angler.length.Date.min().date().isoformat()
default_end = (angler.length.Date.max() + timedelta(days=1)).date().isoformat()
return render_template(
'select_fish_area.html',
form = form,
default_start = default_start,
default_end = default_end
if request.method == 'GET':
default_start = angler.length.Date.min().date().isoformat()
default_end = (angler.length.Date.max() + timedelta(days=1)).date().isoformat()
return render_template(
'select_fish_area.html',
form = form,
default_start = default_start,
default_end = default_end
)
elif request.method == 'POST':
# Get filtered dataframe
df = angler.get_df(
type = 'length',
common_name=form.data.get('fish_name'),
start_time=form.data.get('start_date'),
end_time=form.data.get('end_date'),
join_locations=False,
join_species=False
).drop(
columns = [
'Year',
'Month',
'Day',
'ID_Cell_per_Trip',
'LTM_project_short_code'
],
errors='ignore'
)

@app.route("/fish/length/table/area", methods = ['POST'])
def fish_length_table_area_post():
all_species=angler.species.Common_Name.unique()
TimeForm.fish_name = SelectField(u'Field name', choices = all_species, validators = [InputRequired()])
form = TimeForm()
# Get filtered dataframe
df = angler.get_df(
type = 'length',
common_name=form.data.get('fish_name'),
start_time=form.data.get('start_date'),
end_time=form.data.get('end_date'),
join_locations=False,
join_species=False
).drop(
columns = [
'Year',
'Month',
'Day',
'ID_Cell_per_Trip',
'LTM_project_short_code'
],
errors='ignore'
)
# Aggregate
print('aggregating')
df = df.groupby(
[x for x in df.columns if x not in ['Date', 'Length_cm']],
dropna=False
).mean().reset_index()
# Add meta data
df = angler._join_location(df)
df = angler._join_species(df)
# summarize location data
df = pd.merge(
df,
angler.get_location_summary(df)
).drop(
columns = [
'lat_1_dd', 'lon_1_dd', 'lat_2_dd','lon_2_dd', 'lat_3_dd', 'lon_3_dd', 'lat_4_dd', 'lon_4_dd', 'lat_center_point_dd', 'lon_center_point_dd', 'species_definition', 'CA_MPA_name_short', 'LTM_project_short_code'
]
)
# fig = make_chloropleth_length(map_df, geo)
# graphJSON = json.dumps([fig], cls=plotly.utils.PlotlyJSONEncoder)
return render_template(
'select_fish_area.html',
form=form,
table = df.to_html(),
# graphJSON = graphJSON,
# plt_html=fig.to_html(),
default_start = form.data.get('start_date'),
default_end = form.data.get('end_date'),
# Aggregate
print('aggregating')
df = df.groupby(
[x for x in df.columns if x not in ['Date', 'Length_cm']],
dropna=False
).mean().reset_index()
# Add meta data
df = angler._join_location(df)
df = angler._join_species(df)
# summarize location data
df = pd.merge(
df,
angler.get_location_summary(df)
).drop(
columns = [
'lat_1_dd', 'lon_1_dd', 'lat_2_dd','lon_2_dd', 'lat_3_dd', 'lon_3_dd', 'lat_4_dd', 'lon_4_dd', 'lat_center_point_dd', 'lon_center_point_dd', 'species_definition', 'CA_MPA_name_short', 'LTM_project_short_code'
]
)
# fig = make_chloropleth_length(map_df, geo)
# graphJSON = json.dumps([fig], cls=plotly.utils.PlotlyJSONEncoder)
return render_template(
'select_fish_area.html',
form=form,
table = df.to_html(),
# graphJSON = graphJSON,
# plt_html=fig.to_html(),
default_start = form.data.get('start_date'),
default_end = form.data.get('end_date'),
)


if __name__ == '__main__':
Expand Down

0 comments on commit 0845b04

Please sign in to comment.