Spaces:
Sleeping
Sleeping
File size: 5,255 Bytes
5877740 22f3460 5877740 c299e41 5877740 c299e41 4f47930 c299e41 4f47930 c299e41 4f47930 c299e41 5877740 b96b0f6 5877740 4f47930 22f3460 5877740 c299e41 4f47930 5877740 |
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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
#!/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
tabs = 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='n/a',
)
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
st.markdown(
'''
# Convert Revit IDs to GUIDs
Provide any spreadsheet (using a dropbox link) that has a column of revit IDs.
Select the sheet witin the spreadsheet and the column with the IDs.
Only the selected sheet will be returned, you can cut and paste the sheet back into the origial spreadsheet.
'''
)
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 = cobie_file.sheet_names
selected_column = None
if tabs:
selected_sheet = st.selectbox(
'Select sheet for changing revit ids to COBie ids',
tabs,
)
df = cobie_file.parse(selected_sheet)
if type(df) == pd.DataFrame:
st.write(df)
columns = df.columns
selected_column = st.selectbox(
'Select column with revit ids',
columns,
)
if selected_column:
# df['COBieGUID'] = df[selected_column].apply(compress)
st.write(df)
# st.markdown(
# download_button(
# df,
# 'COBieGUIDs.xlsx',
# 'Download COBieGUIDs.xlsx',
# pickle_it=False,
# ),
# unsafe_allow_html=True,
# )
# st.markdown(download_button(df, 'COBieIDs.xlsx', 'Download COBieIDs.xlsx'), unsafe_allow_html=True)
|