hugging_eats / app.py
osanseviero's picture
osanseviero HF staff
Update app.py
3743c6b
raw
history blame contribute delete
No virus
2.57 kB
import googlemaps
import os
from huggingface_hub import Repository
import googlemaps
import gradio as gr
import csv
from datasets import load_dataset
from bokeh.io import show
from bokeh.plotting import gmap
from bokeh.models import GMapOptions, ColumnDataSource, HoverTool
from bokeh.embed import json_item
from datasets import load_dataset
MAPS_API = os.environ['MAPS_API']
OS_API_KEY = os.environ['OS_API_KEY']
HF_TOKEN = os.environ['HF_TOKEN']
google_maps_client = googlemaps.Client(key=MAPS_API)
DATASET_REPO_URL = "https://huggingface.co/datasets/osanseviero/hugging_eats"
DATA_FILENAME = "data.csv"
DATA_FILE = os.path.join("data", DATA_FILENAME)
repo = Repository(
local_dir="data", clone_from=DATASET_REPO_URL, use_auth_token=HF_TOKEN
)
def predict(place, hugging_secret):
if hugging_secret != OS_API_KEY:
return "INVALID SECRET - you cannot save places"
geocode_result = google_maps_client.geocode(place)
if geocode_result == None:
return "PLACE NOT FOUND"
print("Saving place")
lat = geocode_result[0]["geometry"]["location"]["lat"]
lng = geocode_result[0]["geometry"]["location"]["lng"]
repo.git_pull(rebase=True)
with open(DATA_FILE, "a") as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=["name", "lat", "lng"])
writer.writerow(
{"name": place, "lat": lat, "lng": lng}
)
print("Pushing place")
repo.push_to_hub()
return "PLACE SAVED!"
iface_submit = gr.Interface(
predict,
inputs=[
gr.inputs.Textbox(label="Address or place name"),
gr.inputs.Textbox(label="Hugging Secret"),
],
outputs="text"
)
def plot_map():
dataset = load_dataset('osanseviero/hugging_eats')
data = dataset["train"].to_pandas()
data = data.drop_duplicates()
gmap_options = GMapOptions(lat=data["lat"][0], lng=data["lng"][0],
map_type="satellite", zoom=12)
# the tools are defined below:
p = gmap(MAPS_API, gmap_options, title='Pays de Gex',
tools=['reset', 'wheel_zoom', 'pan', 'zoom_in'])
data_source = ColumnDataSource(data)
center = p.circle('lng', 'lat', size=10, alpha=0.5,
color='yellow', source=data_source)
TOOLTIPS = [
("name", "@name"),
]
p.add_tools(HoverTool(tooltips = TOOLTIPS))
return json_item(p)
iface_display = gr.Interface(
plot_map,
inputs=None,
outputs=gr.Plot(type="bokeh")
)
demo = gr.TabbedInterface([iface_display, iface_submit], ["Browse Places", "Submit Places (HF only)"]).launch()