Spaces:
Runtime error
Runtime error
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() |