CoolFace
Apppublic

cfgpp/Astria_Inventory

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
streamlit_app.py86 linesDownload Raw Back to src
1import streamlit as st2import pandas as pd3import json4from datetime import datetime5 6st.set_page_config(page_title="SharePoint File Explorer", layout="wide")7st.title("๐Ÿ“ SharePoint File Explorer")8 9# File uploader10uploaded_file = st.file_uploader("Upload a SharePoint JSON file", type="json")11 12if uploaded_file is not None:13    try:14        raw_data = json.load(uploaded_file)15        if "value" not in raw_data:16            st.error("The uploaded JSON does not contain a 'value' key.")17            st.stop()18 19        data = raw_data["value"]20        df = pd.json_normalize(data)21 22        # Check required columns23        required_columns = ["{Name}", "{Link}", "{IsFolder}", "Modified", "{FilenameWithExtension}"]24        missing_columns = [col for col in required_columns if col not in df.columns]25        if missing_columns:26            st.error(f"Missing expected columns in JSON: {missing_columns}")27            st.stop()28 29        # Rename columns for display30        df_filtered = df[required_columns].copy()31        df_filtered.columns = ["Name", "Link", "IsFolder", "Modified", "FilenameWithExtension"]32        df_filtered["Modified"] = pd.to_datetime(df_filtered["Modified"])33 34        # Classify file types35        def classify_file_type(filename):36            if not isinstance(filename, str):37                return "Other"38            ext = filename.lower().split('.')[-1]39            if ext in ['doc', 'docx']:40                return "Word"41            elif ext in ['ppt', 'pptx']:42                return "PowerPoint"43            elif ext in ['xls', 'xlsx']:44                return "Excel"45            elif ext == 'pdf':46                return "PDF"47            else:48                return "Other"49 50        df_filtered["FileType"] = df_filtered["FilenameWithExtension"].apply(classify_file_type)51 52        # Filters53        with st.sidebar:54            st.header("๐Ÿ” Filters")55            name_filter = st.text_input("Search by name")56            type_filter = st.selectbox("Show:", ["All", "Files only", "Folders only"])57            filetype_filter = st.multiselect("File type", options=sorted(df_filtered["FileType"].unique()))58            date_range = st.date_input("Modified date range", [])59 60        # Apply filters61        if name_filter:62            df_filtered = df_filtered[df_filtered["Name"].str.contains(name_filter, case=False, na=False)]63 64        if type_filter == "Files only":65            df_filtered = df_filtered[df_filtered["IsFolder"] == False]66        elif type_filter == "Folders only":67            df_filtered = df_filtered[df_filtered["IsFolder"] == True]68 69        if filetype_filter:70            df_filtered = df_filtered[df_filtered["FileType"].isin(filetype_filter)]71 72        if isinstance(date_range, list) and len(date_range) == 2:73            start_date, end_date = pd.to_datetime(date_range)74            df_filtered = df_filtered[(df_filtered["Modified"] >= start_date) & (df_filtered["Modified"] <= end_date)]75 76        # Display results77        st.markdown(f"### ๐Ÿ“„ {len(df_filtered)} items found")78        st.dataframe(df_filtered[["Name", "FileType", "IsFolder", "Modified", "Link"]].reset_index(drop=True))79 80    except Exception as e:81        st.error(f"Error processing file: {e}")82else:83    st.info("Please upload a SharePoint JSON file to begin.")84 85 86