Hadith_viewer / app.py
halimbahae's picture
Create app.py
94b0868 verified
raw
history blame
2.28 kB
import streamlit as st
import pandas as pd
import requests
from io import StringIO
# Define the base URL for the raw GitHub content
base_url = "https://raw.githubusercontent.com/halimbahae/Hadith/main"
# Define folder names and their corresponding book names
folders = {
"Maliks_Muwataa": "Maliks Muwataa",
"Musnad_Ahmad_Ibn-Hanbal": "Musnad Ahmad Ibn Hanbal",
"Sahih_Al-Bukhari": "Sahih Al-Bukhari",
"Sahih_Muslim": "Sahih Muslim",
"Sunan_Abu-Dawud": "Sunan Abu Dawud",
"Sunan_Al-Darimi": "Sunan Al-Darimi",
"Sunan_Al-Nasai": "Sunan Al-Nasai",
"Sunan_Al-Tirmidhi": "Sunan Al-Tirmidhi",
"Sunan_Ibn-Maja": "Sunan Ibn Maja"
}
# Define function to read CSV file from GitHub
def read_csv_from_github(file_path):
response = requests.get(f"{base_url}/{file_path}")
if response.status_code == 200:
return pd.read_csv(StringIO(response.text))
else:
return None
# Define function to filter and paginate data
def filter_and_paginate_data(data, rows_per_page):
start_idx = (st.session_state.page_number - 1) * rows_per_page
end_idx = start_idx + rows_per_page
return data.iloc[start_idx:end_idx]
# Main Streamlit app
def main():
st.sidebar.title("Books")
selected_folder = st.sidebar.selectbox("Select a Book", list(folders.values()))
folder_name = [k for k, v in folders.items() if v == selected_folder][0]
files = os.listdir(folder_name)
selected_file = st.sidebar.selectbox("Select a File", files)
file_path = os.path.join(folder_name, selected_file)
if st.button("View File"):
csv_df = read_csv_from_github(file_path)
if csv_df is not None:
st.dataframe(csv_df)
else:
st.error("Error loading CSV file")
if st.session_state.get("page_number") is None:
st.session_state.page_number = 1
rows_per_page = st.sidebar.number_input("Rows per Page", min_value=1, value=10)
st.session_state.page_number = st.sidebar.number_input("Page Number", min_value=1, value=st.session_state.page_number)
if st.button("Apply Filters"):
if csv_df is not None:
filtered_data = filter_and_paginate_data(csv_df, rows_per_page)
st.write(filtered_data)
if __name__ == "__main__":
main()