Spaces:
Sleeping
Sleeping
Update src/streamlit_app.py
Browse files- src/streamlit_app.py +18 -36
src/streamlit_app.py
CHANGED
@@ -7,12 +7,10 @@ from datetime import datetime
|
|
7 |
|
8 |
# ====== Setup ======
|
9 |
USERS = {}
|
10 |
-
# Use /tmp directory for Hugging Face Spaces, which is writable
|
11 |
UPLOAD_FOLDER = "/tmp/uploads"
|
12 |
MEDIA_FOLDER = os.path.join(UPLOAD_FOLDER, "feedback_media")
|
13 |
FEEDBACK_FILE = os.path.join(UPLOAD_FOLDER, "feedback.csv")
|
14 |
|
15 |
-
# Create directories if they don't exist
|
16 |
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
|
17 |
os.makedirs(MEDIA_FOLDER, exist_ok=True)
|
18 |
|
@@ -28,13 +26,13 @@ STATES = {
|
|
28 |
"Andhra Pradesh": ["Visakhapatnam", "Vijayawada", "Guntur", "Tirupati", "Kurnool"],
|
29 |
}
|
30 |
|
31 |
-
# ====== Session State Initialization ======
|
32 |
for key, default in {
|
33 |
"logged_in": False,
|
34 |
"email": "",
|
35 |
"otp_sent_to": None,
|
36 |
"otp_verified": False,
|
37 |
"login_email": None,
|
|
|
38 |
}.items():
|
39 |
if key not in st.session_state:
|
40 |
st.session_state[key] = default
|
@@ -56,7 +54,7 @@ def verify_otp(entered_otp):
|
|
56 |
return False
|
57 |
|
58 |
def logout():
|
59 |
-
for key in ["logged_in", "email", "otp_sent_to", "otp_verified", "login_email"]:
|
60 |
st.session_state[key] = False if isinstance(st.session_state.get(key), bool) else None
|
61 |
|
62 |
def fetch_wikipedia_summary(title, lang="en"):
|
@@ -137,7 +135,6 @@ def main_app():
|
|
137 |
logout()
|
138 |
st.experimental_rerun()
|
139 |
|
140 |
-
# Feedback inputs on left sidebar
|
141 |
st.sidebar.markdown("---")
|
142 |
st.sidebar.subheader("π Give Feedback")
|
143 |
feedback_text = st.sidebar.text_area("Your thoughts about this place", height=100)
|
@@ -145,7 +142,6 @@ def main_app():
|
|
145 |
feedback_audio = st.sidebar.file_uploader("Upload audio", type=["mp3", "wav", "m4a"])
|
146 |
feedback_video = st.sidebar.file_uploader("Upload video", type=["mp4", "mov", "avi"])
|
147 |
|
148 |
-
# Preview uploaded feedback files
|
149 |
if feedback_image:
|
150 |
st.sidebar.image(feedback_image, caption="Your uploaded image", use_container_width=True)
|
151 |
if feedback_audio:
|
@@ -153,7 +149,6 @@ def main_app():
|
|
153 |
if feedback_video:
|
154 |
st.sidebar.video(feedback_video)
|
155 |
|
156 |
-
# Main content
|
157 |
st.title("π Gyana Vedika - Cultural Explorer")
|
158 |
|
159 |
state = st.selectbox("Select State", list(STATES.keys()))
|
@@ -161,35 +156,22 @@ def main_app():
|
|
161 |
st.subheader(f"Explore {district}, {state}")
|
162 |
|
163 |
uploaded_image = st.file_uploader("Upload a cultural/historical place image", type=["png", "jpg", "jpeg"])
|
164 |
-
place_to_search = None
|
165 |
if uploaded_image:
|
166 |
-
st.
|
167 |
-
|
|
|
|
|
|
|
|
|
|
|
168 |
keywords_map = {
|
169 |
-
|
170 |
-
"
|
171 |
-
"
|
172 |
-
"
|
173 |
-
"
|
174 |
-
"
|
175 |
-
"
|
176 |
-
"ramappa": "Ramappa Temple",
|
177 |
-
"bhadrakali": "Bhadra Kali Temple",
|
178 |
-
"kakatiya": "Kakatiya Kala Thoranam",
|
179 |
-
"pakhal": "Pakhal Lake",
|
180 |
-
"medak": "Medak Cathedral",
|
181 |
-
"nagarjuna": "Nagarjuna Sagar Dam",
|
182 |
-
# Other famous places (existing)
|
183 |
-
"taj": "Taj Mahal",
|
184 |
-
"gateway": "Gateway of India",
|
185 |
-
"qutub": "Qutub Minar",
|
186 |
-
"mysore": "Mysore Palace",
|
187 |
-
"hampi": "Hampi",
|
188 |
-
"konark": "Konark Sun Temple",
|
189 |
-
"varanasi": "Varanasi",
|
190 |
-
"madurai": "Meenakshi Temple",
|
191 |
-
"ajanta": "Ajanta Caves",
|
192 |
-
"ellora": "Ellora Caves",
|
193 |
}
|
194 |
for kw, place in keywords_map.items():
|
195 |
if kw in filename:
|
@@ -235,7 +217,6 @@ def main_app():
|
|
235 |
|
236 |
# ====== UI Styling ======
|
237 |
st.set_page_config(page_title="Gyana Vedika", layout="wide")
|
238 |
-
|
239 |
st.markdown("""
|
240 |
<style>
|
241 |
.stButton>button {
|
@@ -250,6 +231,7 @@ h1, h2, h3, h4, h5, h6 {
|
|
250 |
</style>
|
251 |
""", unsafe_allow_html=True)
|
252 |
|
|
|
253 |
if not st.session_state.logged_in:
|
254 |
page = st.sidebar.radio("Choose Option", ["Signup", "Login"])
|
255 |
if page == "Signup":
|
@@ -257,4 +239,4 @@ if not st.session_state.logged_in:
|
|
257 |
elif page == "Login":
|
258 |
login_page()
|
259 |
else:
|
260 |
-
main_app()
|
|
|
7 |
|
8 |
# ====== Setup ======
|
9 |
USERS = {}
|
|
|
10 |
UPLOAD_FOLDER = "/tmp/uploads"
|
11 |
MEDIA_FOLDER = os.path.join(UPLOAD_FOLDER, "feedback_media")
|
12 |
FEEDBACK_FILE = os.path.join(UPLOAD_FOLDER, "feedback.csv")
|
13 |
|
|
|
14 |
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
|
15 |
os.makedirs(MEDIA_FOLDER, exist_ok=True)
|
16 |
|
|
|
26 |
"Andhra Pradesh": ["Visakhapatnam", "Vijayawada", "Guntur", "Tirupati", "Kurnool"],
|
27 |
}
|
28 |
|
|
|
29 |
for key, default in {
|
30 |
"logged_in": False,
|
31 |
"email": "",
|
32 |
"otp_sent_to": None,
|
33 |
"otp_verified": False,
|
34 |
"login_email": None,
|
35 |
+
"place_image": None,
|
36 |
}.items():
|
37 |
if key not in st.session_state:
|
38 |
st.session_state[key] = default
|
|
|
54 |
return False
|
55 |
|
56 |
def logout():
|
57 |
+
for key in ["logged_in", "email", "otp_sent_to", "otp_verified", "login_email", "place_image"]:
|
58 |
st.session_state[key] = False if isinstance(st.session_state.get(key), bool) else None
|
59 |
|
60 |
def fetch_wikipedia_summary(title, lang="en"):
|
|
|
135 |
logout()
|
136 |
st.experimental_rerun()
|
137 |
|
|
|
138 |
st.sidebar.markdown("---")
|
139 |
st.sidebar.subheader("π Give Feedback")
|
140 |
feedback_text = st.sidebar.text_area("Your thoughts about this place", height=100)
|
|
|
142 |
feedback_audio = st.sidebar.file_uploader("Upload audio", type=["mp3", "wav", "m4a"])
|
143 |
feedback_video = st.sidebar.file_uploader("Upload video", type=["mp4", "mov", "avi"])
|
144 |
|
|
|
145 |
if feedback_image:
|
146 |
st.sidebar.image(feedback_image, caption="Your uploaded image", use_container_width=True)
|
147 |
if feedback_audio:
|
|
|
149 |
if feedback_video:
|
150 |
st.sidebar.video(feedback_video)
|
151 |
|
|
|
152 |
st.title("π Gyana Vedika - Cultural Explorer")
|
153 |
|
154 |
state = st.selectbox("Select State", list(STATES.keys()))
|
|
|
156 |
st.subheader(f"Explore {district}, {state}")
|
157 |
|
158 |
uploaded_image = st.file_uploader("Upload a cultural/historical place image", type=["png", "jpg", "jpeg"])
|
|
|
159 |
if uploaded_image:
|
160 |
+
st.session_state["place_image"] = uploaded_image
|
161 |
+
|
162 |
+
place_to_search = None
|
163 |
+
|
164 |
+
if st.session_state["place_image"]:
|
165 |
+
st.image(st.session_state["place_image"], caption="Uploaded Image", use_container_width=True)
|
166 |
+
filename = st.session_state["place_image"].name.lower()
|
167 |
keywords_map = {
|
168 |
+
"charminar": "Charminar", "golconda": "Golconda Fort", "qutubshahi": "Qutb Shahi Tombs",
|
169 |
+
"birla": "Birla Mandir", "salarjung": "Salar Jung Museum", "warangal": "Warangal Fort",
|
170 |
+
"ramappa": "Ramappa Temple", "bhadrakali": "Bhadra Kali Temple", "kakatiya": "Kakatiya Kala Thoranam",
|
171 |
+
"pakhal": "Pakhal Lake", "medak": "Medak Cathedral", "nagarjuna": "Nagarjuna Sagar Dam",
|
172 |
+
"taj": "Taj Mahal", "gateway": "Gateway of India", "qutub": "Qutub Minar", "mysore": "Mysore Palace",
|
173 |
+
"hampi": "Hampi", "konark": "Konark Sun Temple", "varanasi": "Varanasi", "madurai": "Meenakshi Temple",
|
174 |
+
"ajanta": "Ajanta Caves", "ellora": "Ellora Caves",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
175 |
}
|
176 |
for kw, place in keywords_map.items():
|
177 |
if kw in filename:
|
|
|
217 |
|
218 |
# ====== UI Styling ======
|
219 |
st.set_page_config(page_title="Gyana Vedika", layout="wide")
|
|
|
220 |
st.markdown("""
|
221 |
<style>
|
222 |
.stButton>button {
|
|
|
231 |
</style>
|
232 |
""", unsafe_allow_html=True)
|
233 |
|
234 |
+
# ====== Main Routing ======
|
235 |
if not st.session_state.logged_in:
|
236 |
page = st.sidebar.radio("Choose Option", ["Signup", "Login"])
|
237 |
if page == "Signup":
|
|
|
239 |
elif page == "Login":
|
240 |
login_page()
|
241 |
else:
|
242 |
+
main_app()
|