Spaces:
Runtime error
Runtime error
"""FilePicker for streamlit. | |
Still doesn't seem to be a good solution for a way to select files to process from the server Streamlit is running on. | |
Here's a pretty functional solution. | |
Usage: | |
``` | |
import streamlit as st | |
from filepicker import st_file_selector | |
tif_file = st_file_selector(st, key = 'tif', label = 'Choose tif file') | |
``` | |
""" | |
import os | |
import streamlit as st | |
def update_dir(key): | |
choice = st.session_state[key] | |
if os.path.isdir(os.path.join(st.session_state[key+'curr_dir'], choice)): | |
st.session_state[key+'curr_dir'] = os.path.normpath(os.path.join(st.session_state[key+'curr_dir'], choice)) | |
files = sorted(os.listdir(st.session_state[key+'curr_dir'])) | |
if "images" in files: | |
files.remove("images") | |
st.session_state[key+'files'] = files | |
def st_file_selector(st_placeholder, path='.', label='Select a file/folder', key = 'selected'): | |
if key+'curr_dir' not in st.session_state: | |
base_path = '.' if path is None or path == '' else path | |
base_path = base_path if os.path.isdir(base_path) else os.path.dirname(base_path) | |
base_path = '.' if base_path is None or base_path == '' else base_path | |
files = sorted(os.listdir(base_path)) | |
files.insert(0, 'Choose a file...') | |
if "images" in files: | |
files.remove("images") | |
st.session_state[key+'files'] = files | |
st.session_state[key+'curr_dir'] = base_path | |
else: | |
base_path = st.session_state[key+'curr_dir'] | |
selected_file = st_placeholder.selectbox(label=label, | |
options=st.session_state[key+'files'], | |
key=key, | |
on_change = lambda: update_dir(key)) | |
if selected_file == "Choose a file...": | |
return None | |
return selected_file |