| import streamlit as st
|
| from typing import Union, List
|
| from src.utils import logger
|
|
|
| logger = logger.get_logger()
|
|
|
| PAGE_TITLE = "PDF Extractor"
|
| PAGE_LAYOUT = "wide"
|
|
|
|
|
| def config_homepage(page_title=PAGE_TITLE):
|
| """
|
| Configures the Streamlit homepage with essential settings.
|
|
|
| This function sets up the page title, icon, layout, and sidebar state.
|
| It also defines custom menu items for better navigation.
|
|
|
| Args:
|
| page_title (str): The title displayed on the browser tab (default is PAGE_TITLE).
|
|
|
| Key Features:
|
| - Ensures `st.set_page_config()` is called only once to avoid errors.
|
| - Uses constants for improved maintainability and consistency.
|
| - Provides links for help, bug reporting, and an 'About' section.
|
|
|
| Example:
|
| >>> config_homepage("My Custom App")
|
| """
|
| if "page_config_set" not in st.session_state:
|
| st.set_page_config(
|
| page_title=page_title,
|
| layout=PAGE_LAYOUT,
|
| initial_sidebar_state="collapsed",
|
| )
|
|
|
|
|
| def upload_file(
|
| file_types: Union[str, List[str]] = "pdf",
|
| label: str = "📤 Upload a file",
|
| help_text: str = "Upload your file for processing.",
|
| allow_multiple: bool = True,
|
| ):
|
| """
|
| Streamlit file uploader widget with options.
|
|
|
| Args:
|
| file_types (str or list): Allowed file type(s), e.g., "pdf" or ["pdf", "docx"].
|
| label (str): Label displayed above the uploader.
|
| help_text (str): Tooltip help text.
|
| allow_multiple (bool): Allow multiple file uploads.
|
|
|
| Returns:
|
| Uploaded file(s): A single file object or a list of file objects.
|
| """
|
| if isinstance(file_types, str):
|
| file_types = [file_types]
|
|
|
| uploaded_files = st.file_uploader(
|
| label=label,
|
| type=file_types,
|
| help=help_text,
|
| accept_multiple_files=allow_multiple
|
| )
|
|
|
| if st.button("Submit"):
|
| st.session_state.pdf_file = uploaded_files
|
| return uploaded_files |