Spaces:
Sleeping
Sleeping
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() | |