gravity / utils.py
ayushnoori's picture
Add validate
7e225aa
raw
history blame
4.87 kB
import streamlit as st
import pandas as pd
import project_config
import base64
@st.cache_data(show_spinner = 'Loading knowledge graph nodes...')
def load_kg():
# with st.spinner('Loading knowledge graph...'):
kg_nodes = pd.read_csv(project_config.DATA_DIR / 'kg_nodes.csv', dtype = {'node_index': int}, low_memory = False)
return kg_nodes
@st.cache_data(show_spinner = 'Loading knowledge graph edges...')
def load_kg_edges():
# with st.spinner('Loading knowledge graph...'):
kg_edges = pd.read_csv(project_config.DATA_DIR / 'kg_edges.csv', dtype = {'edge_index': int, 'x_index': int, 'y_index': int}, low_memory = False)
return kg_edges
def capitalize_after_slash(s):
# Split the string by slashes first
parts = s.split('/')
# Capitalize each part separately
capitalized_parts = [part.title() for part in parts]
# Rejoin the parts with slashes
capitalized_string = '/'.join(capitalized_parts).replace('_', ' ')
return capitalized_string
# From https://stackoverflow.com/questions/73251012/put-logo-and-title-above-on-top-of-page-navigation-in-sidebar-of-streamlit-multi
# See also https://arnaudmiribel.github.io/streamlit-extras/extras/app_logo/
@st.cache_data()
def get_base64_of_bin_file(png_file):
with open(png_file, "rb") as f:
data = f.read()
return base64.b64encode(data).decode()
def build_markup_for_logo(
png_file,
background_position="50% 10%",
margin_top="10%",
padding="20px",
image_width="80%",
image_height="",
):
binary_string = get_base64_of_bin_file(png_file)
return """
<style>
[data-testid="stSidebarNav"] {
background-image: url("data:image/png;base64,%s");
background-repeat: no-repeat;
background-position: %s;
margin-top: %s;
padding: %s;
background-size: %s %s;
}
</style>
""" % (
binary_string,
background_position,
margin_top,
padding,
image_width,
image_height,
)
def add_logo(png_file):
logo_markup = build_markup_for_logo(png_file)
st.markdown(
logo_markup,
unsafe_allow_html=True,
)
# @st.cache_resource()
# def generate_profile_pic():
# st.markdown("""
# <style>
# .circle-image {
# width: 100px;
# height: 100px;
# border-radius: 50%;
# overflow: hidden;
# display: flex;
# justify-content: center;
# align-items: center;
# border: 2px solid black;
# margin: 0 auto 10px auto;
# }
# .circle-image img {
# width: 100%;
# max-width: 100px;
# height: 100%;
# object-fit: cover;
# }
# .username {
# font-size: 20px;
# font-weight: bold;
# text-align: center;
# margin-top: 0px;
# }
# </style>
# """, unsafe_allow_html=True)
# # Show the user's profile picture
# st.sidebar.html(f'<div class="circle-image"><img src="{st.session_state.profile_pic}" /></div>')
# # Show the user's name
# st.sidebar.html(f'<div class="username">{st.session_state.name}</div>')
# return None
# # Load image using PIL
# from PIL import Image, ImageDraw, ImageOps
# from io import BytesIO
# import requests
# def PIL_profile_pic():
# # Load user profile picture
# profile_pic = st.session_state.profile_pic
# response = requests.get(profile_pic)
# img = Image.open(BytesIO(response.content))
# # Create a circular mask
# min_dimension = min(img.size)
# mask = Image.new('L', (min_dimension, min_dimension), 0)
# draw = ImageDraw.Draw(mask)
# draw.ellipse((0, 0, min_dimension, min_dimension), fill=255)
# # Crop the image to a square of the smallest dimension
# left = (img.width - min_dimension) // 2
# top = (img.height - min_dimension) // 2
# right = (img.width + min_dimension) // 2
# bottom = (img.height + min_dimension) // 2
# img_cropped = img.crop((left, top, right, bottom))
# # Apply the circular mask to the cropped image
# img_circular = ImageOps.fit(img_cropped, (min_dimension, min_dimension))
# img_circular.putalpha(mask)
# st.markdown(
# """
# <style>
# [data-testid=stSidebar] [data-testid=stImage]{
# text-align: center;
# display: block;
# margin-left: auto;
# margin-right: auto;
# width: 100%;
# }
# </style>
# """, unsafe_allow_html=True
# )
# # Display the image
# st.sidebar.image(img_circular, width=200)
# st.sidebar.subheader(f"{st.session_state.name}")
# Generate the user's profile picture
# generate_profile_pic()