Spaces:
Sleeping
Sleeping
#!/usr/bin/env python | |
# coding: utf-8 | |
import pandas as pd | |
import base64 | |
import uuid | |
import io | |
import pickle | |
import string | |
import simplejson as json | |
import regex as re | |
import streamlit as st | |
chars = string.digits + string.ascii_uppercase + string.ascii_lowercase + '_$' | |
selected_sheet = None | |
def compress(g): | |
bs = [int(g[i:i + 2], 16) for i in range(0, len(g), 2)] | |
def b64(v, l=4): | |
return ''.join([chars[(v // (64 ** i)) % 64] for i in range(l)][::-1]) | |
return ''.join([b64(bs[0], 2)] + [b64((bs[i] << 16) + (bs[i + 1] << 8) + bs[i + 2]) for i in range(1, 16, 3)]) | |
def download_button(object_to_download, download_filename, button_text, pickle_it=False): | |
""" | |
Generates a link to download the given object_to_download. | |
Params: | |
------ | |
object_to_download: The object to be downloaded. | |
download_filename (str): filename and extension of file. e.g. mydata.csv, | |
some_txt_output.txt download_link_text (str): Text to display for download | |
link. | |
button_text (str): Text to display on download button (e.g. 'click here to download file') | |
pickle_it (bool): If True, pickle file. | |
Returns: | |
------- | |
(str): the anchor tag to download object_to_download | |
Examples: | |
-------- | |
download_link(your_df, 'YOUR_DF.csv', 'Click to download data!') | |
download_link(your_str, 'YOUR_STRING.txt', 'Click to download text!') | |
""" | |
if pickle_it: | |
try: | |
object_to_download = pickle.dumps(object_to_download) | |
except pickle.PicklingError as e: | |
st.write(e) | |
return None | |
else: | |
if isinstance(object_to_download, bytes): | |
pass | |
elif isinstance(object_to_download, pd.DataFrame): | |
#object_to_download = object_to_download.to_csv(index=False) | |
towrite = io.BytesIO() | |
object_to_download = object_to_download.to_excel( | |
towrite, | |
encoding='utf-8', | |
index=False, | |
header=True, | |
na_rep='' | |
) | |
towrite.seek(0) | |
# Try JSON encode for everything else | |
else: | |
object_to_download = json.dumps(object_to_download) | |
try: | |
# some strings <-> bytes conversions necessary here | |
b64 = base64.b64encode(object_to_download.encode()).decode() | |
except AttributeError as e: | |
b64 = base64.b64encode(towrite.read()).decode() | |
button_uuid = str(uuid.uuid4()).replace('-', '') | |
button_id = re.sub('\d+', '', button_uuid) | |
custom_css = f""" | |
<style> | |
#{button_id} {{ | |
display: inline-flex; | |
align-items: center; | |
justify-content: center; | |
background-color: rgb(255, 255, 255); | |
color: rgb(38, 39, 48); | |
padding: .25rem .75rem; | |
position: relative; | |
text-decoration: none; | |
border-radius: 4px; | |
border-width: 1px; | |
border-style: solid; | |
border-color: rgb(230, 234, 241); | |
border-image: initial; | |
}} | |
#{button_id}:hover {{ | |
border-color: rgb(246, 51, 102); | |
color: rgb(246, 51, 102); | |
}} | |
#{button_id}:active {{ | |
box-shadow: none; | |
background-color: rgb(246, 51, 102); | |
color: white; | |
}} | |
</style> """ | |
dl_link = custom_css + f'<a download="{download_filename}" id="{button_id}" href="data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,{b64}">{button_text}</a><br></br>' | |
return dl_link | |
cobie_file_button = st.text_input("Dropbox link to COBie file", key="cobie_file_button") | |
# In[ ]: | |
if cobie_file_button: | |
cobie_file_path = st.session_state.cobie_file_button | |
if '=0' in cobie_file_path: | |
cobie_file_path = cobie_file_path.replace('=0', '=1') | |
cobie_file = pd.ExcelFile(cobie_file_path) | |
tabs = pd.ExcelFile("path").sheet_names | |
selected_sheet = st.selectbox( | |
'Select sheet for changing revit ids to COBie ids', | |
tabs, | |
) | |
if selected_sheet: | |
df = cobie_file.parse(selected_sheet) | |
st.write(df) | |
# st.markdown(download_button(df, 'COBieIDs.xlsx', 'Download COBieIDs.xlsx'), unsafe_allow_html=True) | |