Spaces:
Running
on
Zero
Running
on
Zero
import gradio as gr | |
import psycopg2 | |
from dataclasses import dataclass, field | |
from typing import List, Optional | |
from mysite.interpreter.process import no_process_file,process_file | |
import os | |
#### | |
class Ride: | |
ride_id: Optional[int] = field(default=None) | |
rideable_type: str = '' | |
start_station_id: int = 0 | |
start_station_name: str = '' | |
end_station_id: int = 0 | |
end_station_name: str = '' | |
started_at: str = '' | |
ended_at: str = '' | |
member_casual: str = '' | |
def connect_to_db(): | |
conn = psycopg2.connect( | |
dbname="neondb", | |
user=os.getenv("postgre_user"), | |
password=os.getenv("postgre_pass"), | |
host=os.getenv("postgre_host"), | |
port=5432, | |
sslmode="require" | |
) | |
return conn | |
def create_ride(ride: Ride): | |
conn = connect_to_db() | |
cur = conn.cursor() | |
cur.execute("INSERT INTO rides (rideable_type, start_station_id, start_station_name, end_station_id, end_station_name, started_at, ended_at, member_casual) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING ride_id", | |
(ride.rideable_type, ride.start_station_id, ride.start_station_name, ride.end_station_id, ride.end_station_name, ride.started_at, ride.ended_at, ride.member_casual)) | |
ride_id = cur.fetchone()[0] | |
conn.commit() | |
cur.close() | |
conn.close() | |
return ride_id | |
def read_rides(): | |
conn = connect_to_db() | |
cur = conn.cursor() | |
cur.execute("SELECT * FROM rides ORDER BY ride_id desc") | |
rides = cur.fetchall() | |
conn.close() | |
return rides | |
def read_ride(ride_id: int): | |
conn = connect_to_db() | |
cur = conn.cursor() | |
cur.execute("SELECT * FROM rides WHERE ride_id = %s", (ride_id,)) | |
ride = cur.fetchone() | |
conn.close() | |
return ride | |
def update_ride(ride: Ride): | |
conn = connect_to_db() | |
cur = conn.cursor() | |
no_process_file(ride.start_station_name,ride.end_station_name) | |
cur.execute("UPDATE rides SET rideable_type = %s, start_station_id = %s, start_station_name = %s, end_station_id = %s, end_station_name = %s, started_at = %s, ended_at = %s, member_casual = %s WHERE ride_id = %s", | |
(ride.rideable_type, ride.start_station_id, ride.start_station_name, ride.end_station_id, ride.end_station_name, ride.started_at, ride.ended_at, ride.member_casual, ride.ride_id)) | |
conn.commit() | |
cur.close() | |
conn.close() | |
def delete_ride(ride_id: int): | |
conn = connect_to_db() | |
cur = conn.cursor() | |
cur.execute("DELETE FROM rides WHERE ride_id = %s", (ride_id,)) | |
conn.commit() | |
cur.close() | |
conn.close() | |
def test_set_lide(input="test",foldername="test"): | |
ride = Ride( | |
rideable_type="rideable_type", | |
start_station_name=input, | |
end_station_name=foldername, | |
) | |
create_ride(ride) | |
return [[r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8]] for r in read_rides()] | |
#def crud_interface(): | |
with gr.Blocks() as gradio_interface: | |
with gr.Row(): | |
rideable_type = gr.Textbox(label="Rideable Type") | |
start_station_id = gr.Number(label="Start Station ID") | |
start_station_name = gr.Textbox(label="Start Station Name") | |
end_station_id = gr.Number(label="End Station ID") | |
end_station_name = gr.Textbox(label="End Station Name") | |
started_at = gr.Textbox(label="Started At") | |
ended_at = gr.Textbox(label="Ended At") | |
member_casual = gr.Textbox(label="Member Casual") | |
ride_id = gr.Number(label="Ride ID (for update/delete)", value=-1, interactive=False) | |
create_button = gr.Button("Create Ride") | |
update_button = gr.Button("Update Ride") | |
delete_button = gr.Button("Delete Ride") | |
read_button = gr.Button("Read Rides") | |
output = gr.Dataframe(headers=["Ride ID", "Rideable Type", "Start Station ID", "Start Station Name", "End Station ID", "End Station Name", "Started At", "Ended At", "Member Casual"]) | |
def create_ride_click(rideable_type, start_station_id, start_station_name, end_station_id, end_station_name, started_at, ended_at, member_casual): | |
ride = Ride( | |
rideable_type=rideable_type, | |
start_station_id=start_station_id, | |
start_station_name=start_station_name, | |
end_station_id=end_station_id, | |
end_station_name=end_station_name, | |
started_at=started_at, | |
ended_at=ended_at, | |
member_casual=member_casual | |
) | |
create_ride(ride) | |
return [[r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8]] for r in read_rides()] | |
def update_ride_click(ride_id, rideable_type, start_station_id, start_station_name, end_station_id, end_station_name, started_at, ended_at, member_casual): | |
ride = Ride( | |
ride_id=int(ride_id), | |
rideable_type=rideable_type, | |
start_station_id=start_station_id, | |
start_station_name=start_station_name, | |
end_station_id=end_station_id, | |
end_station_name=end_station_name, | |
started_at=started_at, | |
ended_at=ended_at, | |
member_casual=member_casual | |
) | |
update_ride(ride) | |
return [[r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8]] for r in read_rides()] | |
def delete_ride_click(ride_id): | |
delete_ride(int(ride_id)) | |
return [[r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8]] for r in read_rides()] | |
def read_rides_click(): | |
return [[r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8]] for r in read_rides()] | |
def load_ride_details(evt: gr.SelectData): | |
row_index = evt.index[0] if isinstance(evt.index, list) else evt.index | |
rides = read_rides() | |
selected_row = rides[row_index] | |
ride_id = selected_row[0] | |
ride = read_ride(ride_id) | |
if ride: | |
return ride[1], ride[2], ride[3], ride[4], ride[5], ride[6], ride[7], ride[8], ride[0] | |
return "", 0, "", 0, "", "", "", "", -1 | |
create_button.click(fn=create_ride_click, | |
inputs=[rideable_type, start_station_id, start_station_name, end_station_id, end_station_name, started_at, ended_at, member_casual], | |
outputs=output) | |
update_button.click(fn=update_ride_click, | |
inputs=[ride_id, rideable_type, start_station_id, start_station_name, end_station_id, end_station_name, started_at, ended_at, member_casual], | |
outputs=output) | |
delete_button.click(fn=delete_ride_click, inputs=ride_id, outputs=output) | |
read_button.click(fn=read_rides_click, outputs=output) | |
output.select(fn=load_ride_details, inputs=None, outputs=[rideable_type, start_station_id, start_station_name, end_station_id, end_station_name, started_at, ended_at, member_casual, ride_id]) | |
#return interface | |
#d1 = crud_interface() | |
#d1.launch() | |