Spaces:
Sleeping
Sleeping
File size: 3,309 Bytes
8772ab2 97187b7 8772ab2 889fd04 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | import streamlit as st
import pandas as pd
import json
from datetime import datetime
st.set_page_config(page_title="SharePoint File Explorer", layout="wide")
st.title("π SharePoint File Explorer")
# File uploader
uploaded_file = st.file_uploader("Upload a SharePoint JSON file", type="json")
if uploaded_file is not None:
try:
raw_data = json.load(uploaded_file)
if "value" not in raw_data:
st.error("The uploaded JSON does not contain a 'value' key.")
st.stop()
data = raw_data["value"]
df = pd.json_normalize(data)
# Check required columns
required_columns = ["{Name}", "{Link}", "{IsFolder}", "Modified", "{FilenameWithExtension}"]
missing_columns = [col for col in required_columns if col not in df.columns]
if missing_columns:
st.error(f"Missing expected columns in JSON: {missing_columns}")
st.stop()
# Rename columns for display
df_filtered = df[required_columns].copy()
df_filtered.columns = ["Name", "Link", "IsFolder", "Modified", "FilenameWithExtension"]
df_filtered["Modified"] = pd.to_datetime(df_filtered["Modified"])
# Classify file types
def classify_file_type(filename):
if not isinstance(filename, str):
return "Other"
ext = filename.lower().split('.')[-1]
if ext in ['doc', 'docx']:
return "Word"
elif ext in ['ppt', 'pptx']:
return "PowerPoint"
elif ext in ['xls', 'xlsx']:
return "Excel"
elif ext == 'pdf':
return "PDF"
else:
return "Other"
df_filtered["FileType"] = df_filtered["FilenameWithExtension"].apply(classify_file_type)
# Filters
with st.sidebar:
st.header("π Filters")
name_filter = st.text_input("Search by name")
type_filter = st.selectbox("Show:", ["All", "Files only", "Folders only"])
filetype_filter = st.multiselect("File type", options=sorted(df_filtered["FileType"].unique()))
date_range = st.date_input("Modified date range", [])
# Apply filters
if name_filter:
df_filtered = df_filtered[df_filtered["Name"].str.contains(name_filter, case=False, na=False)]
if type_filter == "Files only":
df_filtered = df_filtered[df_filtered["IsFolder"] == False]
elif type_filter == "Folders only":
df_filtered = df_filtered[df_filtered["IsFolder"] == True]
if filetype_filter:
df_filtered = df_filtered[df_filtered["FileType"].isin(filetype_filter)]
if isinstance(date_range, list) and len(date_range) == 2:
start_date, end_date = pd.to_datetime(date_range)
df_filtered = df_filtered[(df_filtered["Modified"] >= start_date) & (df_filtered["Modified"] <= end_date)]
# Display results
st.markdown(f"### π {len(df_filtered)} items found")
st.dataframe(df_filtered[["Name", "FileType", "IsFolder", "Modified", "Link"]].reset_index(drop=True))
except Exception as e:
st.error(f"Error processing file: {e}")
else:
st.info("Please upload a SharePoint JSON file to begin.")
|