cfgpp/Astria_Inventory
0
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 