import streamlit as st from pytezos import pytezos import pandas as pd pytezos = pytezos.using(shell = 'https://rpc.tzkt.io/ghostnet', key='edsk3MrRkoidY2SjEgufvi44orvyjxgZoy4LhaJNTNcddWykW6SssL') contract = pytezos.contract('KT1KvCVKiZhkPG8s9CCoxW3r135phk2HhZUV') def welcome(): return "Welcome To Decentralised Medical Records" def addUser(): name = st.text_input("Enter Full Name of the Patient") email = st.text_input("Enter Email of the Patient") number = st.number_input("Enter the Contact Number", step=1, min_value=1) age = st.number_input("Enter Age", step=1, min_value=18) gender = st.radio("Enter Gender", ('Male', 'Female')) #Hid = st.text_input("Enter your Unique Hospital Id") #hospital=st.text_input("Enter the Hospital details") if st.button("Register Patient"): a = pytezos.using(shell = 'https://rpc.tzkt.io/ghostnet', key='edsk3MrRkoidY2SjEgufvi44orvyjxgZoy4LhaJNTNcddWykW6SssL') contract = a.contract('KT1KvCVKiZhkPG8s9CCoxW3r135phk2HhZUV') contract.addUser(email = email, name = name, age = age, gender = gender, number = number).with_amount(0).as_transaction().fill().sign().inject() def ViewPatientRecord(): Hid = st.text_input("Enter Unique Hospital Id of Patient") if st.button("View Records"): usds = pytezos.using(shell = 'https://rpc.tzkt.io/ghostnet').contract('KT1KvCVKiZhkPG8s9CCoxW3r135phk2HhZUV') #print (usds.storage())#debug #print(list(usds.storage().keys())[0]) #if email is in storage... print record if Hid in list(usds.storage().keys()): st.text(usds.storage()) #print(usds.storage()) #st.text(list(usds.storage().keys())[0]) #st.text(list(usds.storage().values())) else: st.text('Not Found') #st.text(usds.storage[email]['Record']()) ####################WIDGETS START ################################## def filters_widgets(df, columns=None, allow_single_value_widgets=False): # Parse the df and get filter widgets based for provided columns if not columns: #if columns not provided, use all columns to create widgets columns=df.columns.tolist() if allow_single_value_widgets: threshold=0 else: threshold=1 widget_dict = {} filter_widgets = st.container() filter_widgets.warning( "After selecting filters press the 'Apply Filters' button at the bottom.") if not allow_single_value_widgets: filter_widgets.markdown("Only showing columns that contain more than 1 unique value.") with filter_widgets.form(key="data_filters"): not_showing = [] for y in df[columns]: if str(y) in st.session_state: #update value from session state if exists selected_opts = st.session_state[str(y)] else: #if doesnt exist use all values as defaults selected_opts = df[y].unique().tolist() if len(df[y].unique().tolist()) > threshold: #checks if above threshold widget_dict[y] = st.multiselect( label=str(y), options=df[y].unique().tolist(), default=selected_opts, key=str(y), ) else:#if doesnt pass threshold not_showing.append(y) if not_showing:#if the list is not empty, show this warning st.warning( f"Not showing filters for {' '.join(not_showing)} since they only contain one unique value." ) submit_button = st.form_submit_button("Apply Filters") #reset button to return all unselected values back reset_button = filter_widgets.button( "Reset All Filters", key="reset_buttons", on_click=reset_filter_widgets_to_default, args=(df, columns), ) filter_widgets.warning( "Dont forget to apply filters by pressing 'Apply Filters' at the bottom." ) def reset_filter_widgets_to_default(df, columns): for y in df[columns]: if str(y) in st.session_state: del st.session_state[y] ####################WIDGETS END################################## def main(): st.set_page_config(page_title="Decentralised Health Vaccine Records") st.title("Blockchain Based Medical Records") st.markdown( """

Vaccine Data


""", unsafe_allow_html=True, ) st.markdown( """

This project greatly decreases any chances of misuse or the manipulation of the medical Records

""", unsafe_allow_html=True, ) st.sidebar.title("Choose your entry point") st.sidebar.markdown("Select the entry point accordingly:") algo = st.sidebar.selectbox( "Select the Option", options=[ "Register Patient", "View Patient Data" ] ) if algo == "Register Patient": addUser() if algo == "View Patient Data": ViewPatientRecord() st.write ('\n') st.write ('\n') st.write ('\n') #ledger start #get ledger data st.subheader("Blockchain Ledger") st.write("Click to explore Blockchain ledger [link](https://ghostnet.tzkt.io/KT1KvCVKiZhkPG8s9CCoxW3r135phk2HhZUV/operations/)") ledger_data = pytezos.using(shell = 'https://rpc.tzkt.io/ghostnet').contract('KT1KvCVKiZhkPG8s9CCoxW3r135phk2HhZUV').storage() #.values() for x in ledger_data: ledger = ledger_data.values() try: df = pd.DataFrame(ledger, index=[0]) #filters_widgets(df) except: df = pd.DataFrame(ledger)#, index=[0]) #filters_widgets(df) # Display the dataframe as a table st.write(df) if __name__ == "__main__": main() #streamlit-start import subprocess import uvicorn #subprocess.run("uvicorn api.main:app --host 0.0.0.0 --port 7860", shell=True) subprocess.run("uvicorn api.main:app --host https://segestic-healthblock.hf.space --port 7860", shell=True) ############end table/ledger #if __name__ == "__main__": #main() #comments #ledger = {'age': 18, 'gender': 'Female', 'hospital': '', 'name': 'tesuser1', 'number': 41414, 'v1': False, 'v1Date': 0, 'v2': False, 'v2Date': 0} # data = [ # {"Name": "Alice", "Age": 25, "City": "New York"}, # {"Name": "Bob", "Age": 30, "City": "Paris"}, # {"Name": "Charlie", "Age": 35, "City": "London"} # ]