mbuuck commited on
Commit
ea36e3b
2 Parent(s): 7a69235 265b33b

Fixed merge conflict, filtering for projects with geometries

Browse files
Files changed (2) hide show
  1. app.py +45 -13
  2. utils/js.py +8 -0
app.py CHANGED
@@ -14,6 +14,9 @@ import json
14
  import geojson
15
  from google.oauth2 import service_account
16
 
 
 
 
17
  # Logging
18
  logging.basicConfig(format="%(levelname)s:%(message)s", level=logging.INFO)
19
 
@@ -239,7 +242,7 @@ def create_dataframe(years, project_name):
239
  dfs.append(df)
240
  return pd.concat(dfs)
241
 
242
- def filter_map(project_name):
243
  prepared_statement = \
244
  con.execute("SELECT geometry FROM project WHERE name = ? LIMIT 1",
245
  [project_name]).fetchall()
@@ -307,9 +310,9 @@ def calculate_biodiversity_score(start_year, end_year, project_name):
307
  [start_year, end_year, project_name]).df()
308
  return scores
309
 
310
- def view_all():
311
- logging.info("view_all")
312
- return con.sql("SELECT * FROM bioindicator").df()
313
 
314
 
315
  with gr.Blocks() as demo:
@@ -319,21 +322,50 @@ with gr.Blocks() as demo:
319
  with gr.Column():
320
  m1 = gr.Plot()
321
  with gr.Row():
 
322
  start_year = gr.Number(value=2017, label="Start Year", precision=0)
323
  end_year = gr.Number(value=2022, label="End Year", precision=0)
324
- project_name = gr.Textbox(label='Project Name')
325
-
326
  with gr.Row():
 
327
  calc_btn = gr.Button(value="Calculate!")
328
- view_btn = gr.Button(value="View all")
329
- save_btn = gr.Button(value="Save")
330
  results_df = gr.Dataframe(
331
  headers=["Year", "Project Name", "Score"],
332
  datatype=["number", "str", "number"],
333
  label="Biodiversity scores by year",
334
  )
335
- demo.load(filter_map, inputs=[project_name], outputs=[m1])
336
- calc_btn.click(calculate_biodiversity_score, inputs=[start_year, end_year, project_name], outputs=[results_df])
337
- view_btn.click(view_all, outputs=[results_df])
338
- # save_btn.click(push_to_md)
339
- demo.launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  import geojson
15
  from google.oauth2 import service_account
16
 
17
+
18
+ from utils.js import get_window_url_params
19
+
20
  # Logging
21
  logging.basicConfig(format="%(levelname)s:%(message)s", level=logging.INFO)
22
 
 
242
  dfs.append(df)
243
  return pd.concat(dfs)
244
 
245
+ def show_project_map(project_name):
246
  prepared_statement = \
247
  con.execute("SELECT geometry FROM project WHERE name = ? LIMIT 1",
248
  [project_name]).fetchall()
 
310
  [start_year, end_year, project_name]).df()
311
  return scores
312
 
313
+ def motherduck_list_projects(author_id):
314
+ return \
315
+ con.execute("SELECT DISTINCT name FROM project WHERE authorId = ? AND geometry != 'null'", [author_id]).df()
316
 
317
 
318
  with gr.Blocks() as demo:
 
322
  with gr.Column():
323
  m1 = gr.Plot()
324
  with gr.Row():
325
+ project_name = gr.Dropdown([], label="Project", value="Select project")
326
  start_year = gr.Number(value=2017, label="Start Year", precision=0)
327
  end_year = gr.Number(value=2022, label="End Year", precision=0)
 
 
328
  with gr.Row():
329
+ view_btn = gr.Button(value="Show project map")
330
  calc_btn = gr.Button(value="Calculate!")
331
+ # save_btn = gr.Button(value="Save")
 
332
  results_df = gr.Dataframe(
333
  headers=["Year", "Project Name", "Score"],
334
  datatype=["number", "str", "number"],
335
  label="Biodiversity scores by year",
336
  )
337
+ calc_btn.click(
338
+ calculate_biodiversity_score,
339
+ inputs=[start_year, end_year, project_name],
340
+ outputs=results_df,
341
+ )
342
+ view_btn.click(
343
+ fn=show_project_map,
344
+ inputs=[project_name],
345
+ outputs=[m1],
346
+ )
347
+
348
+ def update_project_dropdown_list(url_params):
349
+ username = url_params.get("username", "default")
350
+ projects = motherduck_list_projects(author_id=username)
351
+ # to-do: filter projects based on user
352
+ return gr.Dropdown.update(choices=projects["name"].tolist())
353
+
354
+ # Get url params
355
+ url_params = gr.JSON({"username": "default"}, visible=False, label="URL Params")
356
+
357
+ # Gradio has a bug
358
+ # For dropdown to update by demo.load, dropdown value must be called downstream
359
+ b1 = gr.Button("Hidden button that fixes bug.", visible=False)
360
+ b1.click(lambda x: x, inputs=project_name, outputs=[])
361
+
362
+ # Update project dropdown list on page load
363
+ demo.load(
364
+ fn=update_project_dropdown_list,
365
+ inputs=[url_params],
366
+ outputs=[project_name],
367
+ _js=get_window_url_params,
368
+ queue=False,
369
+ )
370
+
371
+ demo.launch()
utils/js.py ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ get_window_url_params = """
2
+ function() {
3
+ const params = new URLSearchParams(window.location.search);
4
+ const url_params = Object.fromEntries(params);
5
+ console.log('url_params', url_params)
6
+ return url_params;
7
+ }
8
+ """