Do0rMaMu's picture
Update app.py
d99c5f6 verified
import gradio as gr
import pandas as pd
import requests
import webbrowser
# Define the backend API URL (modify this to your backend's URL)
BACKEND_API_URL = "https://do0rmamu-truck-loading-poc.hf.space/submit_data/"
# Function to process the file and send data to the API
def process_file(file, truck_type, auto_suggest):
try:
# Debugging: Print when file is being processed
print(f"Processing file: {file.name}")
# Read the uploaded file into a Pandas DataFrame
if file.name.endswith('.csv'):
df = pd.read_csv(file.name)
elif file.name.endswith('.xls') or file.name.endswith('.xlsx'):
df = pd.read_excel(file.name)
else:
return "Unsupported file format. Please upload a CSV or Excel file."
print(f"File processed successfully, data:\n{df.head()}") # Print first few rows of the data
# Define a destination mapping
destination_mapping = {
"Destination A": 1,
"Destination B": 2,
"Destination C": 3,
"Destination D": 4,
"Destination E": 5
}
# Prepare consignments data from the DataFrame
consignments_data = []
grouped = df.groupby('ConsignmentNo')
for consignment_no, group in grouped:
consignment_boxes = [
{
'PieceLength': float(row['PieceLength']),
'PieceBreadth': float(row['PieceBreadth']),
'PieceHeight': float(row['PieceHeight']),
'Priority': int(row.get('Priority', 0)),
'Destination': row.get('Destination', "Unknown")
}
for _, row in group.iterrows()
]
consignments_data.append({
'ConsignmentNo': str(consignment_no), # Convert ConsignmentNo to string
'Priority': int(group['Priority'].max()), # Ensure Priority is int
'Destination': group['Destination'].iloc[0], # Taking the destination of the first box
'boxes': consignment_boxes
})
print(f"Consignment data prepared:\n{consignments_data}")
# Prepare the JSON payload to be sent
json_data = {
'truck_name': truck_type,
'autoSuggest': auto_suggest,
'consignments_data': consignments_data,
'destination_mapping': destination_mapping # Include destination mapping in payload
}
print(f"Sending the following data to backend:\n{json_data}")
# Send the data as JSON to the backend
response = requests.post(BACKEND_API_URL, json=json_data, allow_redirects=False)
print(f"Received response from backend, status code: {response.status_code}")
# Handle redirect (302 Found)
if response.status_code == 302:
redirect_url = response.headers.get('Location')
if redirect_url:
print(f"Redirecting to: {redirect_url}")
webbrowser.open(redirect_url)
return f"Redirecting to visualization: {redirect_url}"
elif response.status_code != 200:
return f"Failed to submit data. Status code: {response.status_code}\nError message: {response.text}"
return "Data submitted successfully."
except Exception as e:
print(f"Exception occurred: {str(e)}")
return f"An error occurred: {str(e)}"
# Gradio interface
def gradio_interface():
# Define available truck types
truck_types = [
"TATA ACE", "ASHOK LEYLAND DOST", "MAHINDRA BOLERO PICK UP",
"ASHOK LEYLAND BADA DOST", "TATA 407", "EICHER 14 FEET",
"EICHER 17 FEET", "EICHER 19 FEET", "TATA 22 FEET",
"TATA TRUCK (6 TYRE)", "TAURUS 16 T (10 TYRE)", "TAURUS 21 T (12 TYRE)",
"TAURUS 25 T (14 TYRE)", "CONTAINER 20 FT", "CONTAINER 32 FT SXL",
"CONTAINER 32 FT MXL", "CONTAINER 32 FT SXL / MXL HQ",
"20 FEET OPEN ALL SIDE (ODC)", "28-32 FEET OPEN-TRAILOR JCB ODC",
"32 FEET OPEN-TRAILOR ODC", "40 FEET OPEN-TRAILOR ODC", "SCV", "LCV",
"ICV", "MCV"
]
with gr.Blocks() as demo:
# Title
gr.Markdown("## Truck Loading Data Submission")
# File Upload Input
file_input = gr.File(label="Upload your consignments file (CSV or Excel)")
# Truck Type Dropdown
truck_type_input = gr.Dropdown(truck_types, label="Select Truck Type", value="TATA ACE")
# Auto-Suggest Checkbox
auto_suggest_input = gr.Checkbox(label="Auto-Suggest Truck", value=False)
# Submit Button
submit_button = gr.Button("Submit Data")
# Output Textbox
output_text = gr.Markdown()
# Define interaction
submit_button.click(process_file, [file_input, truck_type_input, auto_suggest_input], output_text)
return demo
# Run the Gradio interface
gradio_interface().launch()