|
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 |
|
|
|
@dataclass |
|
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()] |
|
|
|
|
|
|
|
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]) |
|
|
|
|
|
|
|
|
|
|
|
|