Spaces:
Sleeping
Sleeping
| # a minimal snippet for validating the upload sequence, for testing purposes (with AppTest) | |
| from typing import List | |
| import streamlit as st | |
| # to run streamlit from this subdir, we need the the src dir on the path | |
| # NOTE: pytest doesn't need this to run the tests, but to develop the test | |
| # harness is hard without running streamlit | |
| import sys | |
| from os import path | |
| # src (parent from here) | |
| src_dir = path.dirname( path.dirname( path.abspath(__file__) ) ) | |
| sys.path.append(src_dir) | |
| # we aim to validate: | |
| # - user uploads multple files via FileUploader (with key=file_uploader_data) | |
| # - they get buffered into session state | |
| # - some properties are extracted from the files, and are displayed in a visual | |
| # element so we can validate them with apptest. | |
| from input.input_handling import ( | |
| spoof_metadata, is_valid_email, | |
| get_image_datetime, get_image_latlon, | |
| init_input_data_session_states | |
| ) | |
| def buffer_uploaded_files(): | |
| st.write("buffering files! ") | |
| uploaded_files:List = st.session_state.file_uploader_data | |
| for ix, file in enumerate(uploaded_files): | |
| image_datetime_raw = get_image_datetime(file) | |
| latitude0, longitude0 = get_image_latlon(file) | |
| #st.write(f"- file {ix}: {file.name}") | |
| #st.write(f" - datetime: {image_datetime_raw}") | |
| #st.write(f" - lat/lon: {latitude0}, {longitude0}") | |
| s = f"index: {ix}, name: {file.name}, datetime: {image_datetime_raw}, lat: {latitude0}, lon:{longitude0}" | |
| st.text_area(f"{file.name}", value=s, key=f"metadata_{ix}") | |
| print(s) | |
| init_input_data_session_states() | |
| with st.sidebar: | |
| author_email = st.text_input("Author Email", spoof_metadata.get('author_email', ""), | |
| key="input_author_email") | |
| if author_email and not is_valid_email(author_email): | |
| st.error("Please enter a valid email address.") | |
| st.file_uploader( | |
| "Upload one or more images", type=["png", 'jpg', 'jpeg', 'webp'], | |
| accept_multiple_files=True, | |
| key="file_uploader_data", | |
| on_change=buffer_uploaded_files | |
| ) | |
| # this is the callback that would be triggered by the FileUploader | |
| # - unfortunately, we get into a mess now | |
| # - in real app, this runs twice and breaks (because of the duplicate keys) | |
| # - in the test, if we don't run manually, we don't get the frontend elements to validate | |
| # - if we remove the on_change, both run ok. but it deviates from the true app. | |
| # - possible ways forward? | |
| # - could we patch the on_change, or substitute the buffer_uploaded_files? | |
| if (1 and "file_uploader_data" in st.session_state and | |
| len(st.session_state.file_uploader_data) ): | |
| print(f"buffering files: {len(st.session_state.file_uploader_data)}") | |
| buffer_uploaded_files() |