bsafe.app / src /streamlit_app.py
GHarshasri's picture
Update src/streamlit_app.py
7433a0c verified
import streamlit as st
import pandas as pd
import os
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import geocoder
from twilio.rest import Client
# ----- Configuration -----
# Replace with your actual credentials or use Streamlit secrets
sender_email = "[email protected]"
receiver_email = "[email protected]"
sender_password = "your-password"
twilio_sid = "your-twilio-sid"
twilio_token = "your-twilio-token"
twilio_number = "your-twilio-number"
st.set_page_config(page_title="Emergency App", layout="centered")
# ----- Sidebar Navigation -----
st.sidebar.title("Navigation")
app_mode = st.sidebar.selectbox("Choose the app mode", ["User Info", "SOS Alert", "Ambulance Alert", "Send SMS"])
# ----- User Info -----
def user_info_form():
st.title("πŸ§‘ User Information Form")
name = st.text_input("Name")
user_id = st.text_input("User ID")
password = st.text_input("Password", type="password")
age = st.number_input("Age", min_value=0, max_value=120)
gender = st.radio("Gender", ["Male", "Female", "Other"])
phone = st.text_input("Phone Number")
email = st.text_input("Email")
blood_group = st.selectbox("Blood Group", ["A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-"])
allergies = st.text_area("Allergies")
medical_conditions = st.text_area("Medical Conditions")
if st.button("Submit"):
user_data = {
"Name": name,
"User ID": user_id,
"Password": password,
"Age": age,
"Gender": gender,
"Phone": phone,
"Email": email,
"Blood Group": blood_group,
"Allergies": allergies,
"Medical Conditions": medical_conditions
}
df = pd.DataFrame([user_data])
if os.path.exists("user_data.csv"):
df.to_csv("user_data.csv", mode='a', header=False, index=False)
else:
df.to_csv("user_data.csv", index=False)
st.success("βœ… User information saved successfully!")
# ----- SOS Email Alert -----
def send_sos_alert():
st.title("🚨 SOS Email Alert")
message = "Emergency! Please respond."
if st.button("Send SOS Email"):
try:
msg = MIMEMultipart()
msg['Subject'] = 'SOS Alert'
msg['From'] = sender_email
msg['To'] = receiver_email
msg.attach(MIMEText(message, 'plain'))
with smtplib.SMTP('smtp.gmail.com', 587) as server:
server.starttls()
server.login(sender_email, sender_password)
server.send_message(msg)
st.success("πŸ“§ SOS alert sent successfully via email!")
except Exception as e:
st.error(f"❌ Failed to send SOS alert: {e}")
# ----- Location Fetching -----
def get_location():
g = geocoder.ip('me')
return g.latlng if g.ok else None
# ----- Ambulance Alert -----
def send_alert_to_hospital(location):
message = f"Emergency! Send an ambulance to location: {location}"
st.success(f"πŸ₯ Alert sent to hospital: {message}")
return message
def auto_ambulance_alert():
st.title("πŸš‘ Ambulance Dispatch Alert")
if st.button("Send Ambulance Alert"):
location = get_location()
if location:
send_alert_to_hospital(location)
else:
st.error("❌ Could not determine location.")
# ----- SMS Alert via Twilio -----
def send_sms():
st.title("πŸ“² Send SMS Alert")
to_number = st.text_input("Enter emergency contact number (with country code):")
message_body = "Emergency! Please respond."
if st.button("Send SMS"):
try:
client = Client(twilio_sid, twilio_token)
message_body= client.messages.create(
body=message_body,
from_=twilio_number,
to=to_number
)
st.success("πŸ“© SMS sent successfully!")
except Exception as e:
st.error(f"❌ Failed to send SMS: {e}")
# ----- Main Logic -----
if app_mode == "User Info":
user_info_form()
elif app_mode == "SOS Alert":
send_sos_alert()
elif app_mode == "Ambulance Alert":
auto_ambulance_alert()
elif app_mode == "Send SMS":
send_sms()