
Paket Hydralit adalah proyek pembungkus dan template untuk menggabungkan beberapa aplikasi lurus independen (atau agak tergantung) ke dalam aplikasi multi-halaman.
Saat ini proyek mengimplementasikan aplikasi host HydraApp dan setiap aplikasi anak hanya perlu menjadi kelas yang berasal dari kelas HydraheadApp dan menerapkan satu metode yang sederhana, run () untuk laba maksimum, atau Anda dapat menggunakan dekorator gaya flask pada fungsi Anda untuk menambahkannya secara langsung sebagai halaman streamlit terpisah.
Saat mengonversi aplikasi yang ada, Anda dapat secara efektif meletakkan semua kode yang ada di dalam metode run () dan membuat kelas pembungkus yang berasal dari HydraheadApp atau menempatkan dekorator di atas fungsi. Kemudian Anda membuat aplikasi induk sebagai instance dari HydraApp, tambahkan aplikasi anak Anda ke dalamnya (lihat contoh secure_app.py) dan dengan hanya beberapa baris kode semuanya secara ajaib akan bersatu.
Hydralit dapat dipasang dari PYPI:
pip install -U hydralit #when we import hydralit, we automatically get all of Streamlit
import hydralit as hy
app = hy . HydraApp ( title = 'Simple Multi-Page App' )
@ app . addapp ()
def my_home ():
hy . info ( 'Hello from app1' )
@ app . addapp ()
def app2 ():
hy . info ( 'Hello from app 2' )
#Run the whole lot, we get navbar, state management and app isolation, all with this tiny amount of work.
app . run ()Jumlah kecil kode ini membuat menu dan halaman yang dirender ketika fungsi target dipanggil dengan memilihnya dari menu.



<br
Karena model eksekusi streamlit, kemampuan untuk menggunakan tautan NAV internal dari aplikasi anak adalah satu-shot saat menggunakan NAVBAR. Ini berarti bahwa tautan internal akan mengarahkan kembali ke anak, namun jika permintaan rerun skrip dibuat di dalam aplikasi anak (mengubah nilai widget misalnya), NAV akan bangkit kembali ke aplikasi panggilan. Anda dapat menonaktifkan Navbar dan menu Nav Components Inteamlit akan muncul dan tautan internal akan berfungsi seperti yang diharapkan.
app = HydraApp ( title = 'Secure Hydralit Data Explorer' , favicon = "?" , hide_streamlit_markers = True , use_navbar = True , navbar_sticky = True )Hydralit Navbar sepenuhnya terintegrasi, sadar tema dan animasi (Anda dapat mematikannya jika Anda suka), cukup tambahkan aplikasi anak Anda dan pergi, navbar akan muncul secara otomatis.
Di luar kotak Anda mendapatkan loader/pemintal yang bagus saat menavigasi antara aplikasi/halaman. Anda juga dapat membuat aplikasi Loader Anda sendiri dan sepenuhnya menyesuaikan setiap bagian dari tampilannya dan ketika memuat, bahkan membuat efek yang berbeda tergantung pada aplikasi target. Lihat kode contoh Hydralit Secure untuk melihat apa yang mungkin.



Jika Anda memiliki beberapa fungsi dan ingin mereka berlari seperti halaman terpisah, Anda dapat dengan cepat pergi dengan dekorator gaya flask di atas fungsi Anda.
#when we import hydralit, we automatically get all of Streamlit
import hydralit as hy
app = hy . HydraApp ( title = 'Simple Multi-Page App' )
@ app . addapp ( is_home = True )
def my_home ():
hy . info ( 'Hello from Home!' )
@ app . addapp ()
def app2 ():
hy . info ( 'Hello from app 2' )
@ app . addapp ( title = 'The Best' , icon = "?" )
def app3 ():
hy . info ( 'Hello from app 3, A.K.A, The Best ?' )
#Run the whole lot, we get navbar, state management and app isolation, all with this tiny amount of work.
app . run ()Jumlah kecil kode ini membuat aplikasi multi-halaman khusus yang bagus seperti di bawah ini.

Anda dapat mencobanya dengan menjalankan dua aplikasi sampel dengan anak-anak mereka yang terletak di repositori hydralit-example.
hydralit_example > pip install -r requirements.txt
hydralit_example > streamlit run secure.appSampel kode ini berasal langsung dari Contoh Penjelajah Data yang StreamLit
import streamlit as st
import pandas as pd
import numpy as np
st . title ( 'Uber pickups in NYC' )
DATE_COLUMN = 'date/time'
DATA_URL = ( 'https://s3-us-west-2.amazonaws.com/'
'streamlit-demo-data/uber-raw-data-sep14.csv.gz' )
@ st . cache
def load_data ( nrows ):
data = pd . read_csv ( DATA_URL , nrows = nrows )
lowercase = lambda x : str ( x ). lower ()
data . rename ( lowercase , axis = 'columns' , inplace = True )
data [ DATE_COLUMN ] = pd . to_datetime ( data [ DATE_COLUMN ])
return data
data_load_state = st . text ( 'Loading data...' )
data = load_data ( 10000 )
data_load_state . text ( "Done! (using st.cache)" )
if st . checkbox ( 'Show raw data' ):
st . subheader ( 'Raw data' )
st . write ( data )
st . subheader ( 'Number of pickups by hour' )
hist_values = np . histogram ( data [ DATE_COLUMN ]. dt . hour , bins = 24 , range = ( 0 , 24 ))[ 0 ]
st . bar_chart ( hist_values )
# Some number in the range 0-23
hour_to_filter = st . slider ( 'hour' , 0 , 23 , 17 )
filtered_data = data [ data [ DATE_COLUMN ]. dt . hour == hour_to_filter ]
st . subheader ( 'Map of all pickups at %s:00' % hour_to_filter )
st . map ( filtered_data )Mari kita juga menggunakan aplikasi sederhana untuk digabungkan dengan demo di atas.
import streamlit as st
import numpy as np
import pandas as pd
from data . create_data import create_table
def app ():
st . title ( 'Small Application with a table and chart.' )
st . write ( "See `apps/simple.py` to know how to use it." )
st . markdown ( "### Plot" )
df = create_table ()
st . line_chart ( df )Anda dapat dengan mudah mengonversi aplikasi ini untuk digunakan dalam Hydralit dengan hanya membungkus masing -masing di kelas yang berasal dari HydraheadApp di dalam Hydralit dan menempatkan semua kode dalam metode run ().
Untuk aplikasi demo streamlit di atas, ini berarti semua yang diperlukan hanyalah sedikit modifikasi, kami membuat file sample_app.py dan menambahkan;
import streamlit as st
import pandas as pd
import numpy as np
#add an import to Hydralit
from hydralit import HydraHeadApp
#create a wrapper class
class MySampleApp ( HydraHeadApp ):
#wrap all your code in this method and you should be done
def run ( self ):
#-------------------existing untouched code------------------------------------------
st . title ( 'Uber pickups in NYC' )
DATE_COLUMN = 'date/time'
DATA_URL = ( 'https://s3-us-west-2.amazonaws.com/'
'streamlit-demo-data/uber-raw-data-sep14.csv.gz' )
@ st . cache
def load_data ( nrows ):
data = pd . read_csv ( DATA_URL , nrows = nrows )
lowercase = lambda x : str ( x ). lower ()
data . rename ( lowercase , axis = 'columns' , inplace = True )
data [ DATE_COLUMN ] = pd . to_datetime ( data [ DATE_COLUMN ])
return data
data_load_state = st . text ( 'Loading data...' )
data = load_data ( 10000 )
data_load_state . text ( "Done! (using st.cache)" )
if st . checkbox ( 'Show raw data' ):
st . subheader ( 'Raw data' )
st . write ( data )
st . subheader ( 'Number of pickups by hour' )
hist_values = np . histogram ( data [ DATE_COLUMN ]. dt . hour , bins = 24 , range = ( 0 , 24 ))[ 0 ]
st . bar_chart ( hist_values )
# Some number in the range 0-23
hour_to_filter = st . slider ( 'hour' , 0 , 23 , 17 )
filtered_data = data [ data [ DATE_COLUMN ]. dt . hour == hour_to_filter ]
st . subheader ( 'Map of all pickups at %s:00' % hour_to_filter )
st . map ( filtered_data )
#-------------------existing untouched code------------------------------------------Untuk aplikasi kecil lainnya, sekali lagi kita dapat mengonversi ini dengan sangat mudah dengan membungkus kelas yang berasal dari HydraheadApp dari Hydralit dan menempatkan semua kode dalam metode run (), kami membuat file small_app.py dan tambahkan;
import streamlit as st
import numpy as np
import pandas as pd
from data . create_data import create_table
#add an import to Hydralit
from hydralit import HydraHeadApp
#create a wrapper class
class MySmallApp ( HydraHeadApp ):
#wrap all your code in this method and you should be done
def run ( self ):
#-------------------existing untouched code------------------------------------------
st . title ( 'Small Application with a table and chart.' )
st . markdown ( "### Plot" )
df = create_table ()
st . line_chart ( df )Ini sekarang siap digunakan dalam aplikasi Hydralit. Kami hanya perlu membuat aplikasi host sederhana yang berasal dari kelas HydraApp di Hydralit, tambahkan anak -anak dan kami selesai! Kami membuat file host_app.py dan menambahkan;
from hydralit import HydraApp
import streamlit as st
from sample_app import MySampleApp
from small_app import MySmallApp
if __name__ == '__main__' :
#this is the host application, we add children to it and that's it!
app = HydraApp ( title = 'Sample Hydralit App' , favicon = "?" )
#add all your application classes here
app . add_app ( "Small App" , icon = "?" , app = MySmallApp ())
app . add_app ( "Sample App" , icon = "?" , app = MySampleApp ())
#run the whole lot
app . run ()Contoh super sederhana ini terbuat dari 3 file.
hydralit sample project
│ host_app.py
│ small_app.py
│ sample_app.py
hydralit sample project > pip install hydralit
hydralit sample project > streamlit run host.appKode untuk aplikasi host yang diamankan dengan aplikasi login ditunjukkan di bawah ini, seluruh contoh terletak di repositori hydralit-example.
from hydralit import HydraApp
import streamlit as st
import apps
if __name__ == '__main__' :
over_theme = { 'txc_inactive' : '#FFFFFF' }
#this is the host application, we add children to it and that's it!
app = HydraApp (
title = 'Secure Hydralit Data Explorer' ,
favicon = "?" ,
hide_streamlit_markers = False ,
#add a nice banner, this banner has been defined as 5 sections with spacing defined by the banner_spacing array below.
use_banner_images = [ "./resources/hydra.png" , None ,{ 'header' : "<h1 style='text-align:center;padding: 0px 0px;color:black;font-size:200%;'>Secure Hydralit Explorer</h1><br>" }, None , "./resources/lock.png" ],
banner_spacing = [ 5 , 30 , 60 , 30 , 5 ],
use_navbar = True ,
navbar_sticky = False ,
navbar_theme = over_theme
)
#Home button will be in the middle of the nav list now
app . add_app ( "Home" , icon = "?" , app = apps . HomeApp ( title = 'Home' ), is_home = True )
#add all your application classes here
app . add_app ( "Cheat Sheet" , icon = "" , app = apps . CheatApp ( title = "Cheat Sheet" ))
app . add_app ( "Sequency Denoising" , icon = "?" , app = apps . WalshApp ( title = "Sequency Denoising" ))
app . add_app ( "Sequency (Secure)" , icon = "?" , app = apps . WalshAppSecure ( title = "Sequency (Secure)" ))
app . add_app ( "Solar Mach" , icon = "?️" , app = apps . SolarMach ( title = "Solar Mach" ))
app . add_app ( "Spacy NLP" , icon = "⌨️" , app = apps . SpacyNLP ( title = "Spacy NLP" ))
app . add_app ( "Uber Pickups" , icon = "?" , app = apps . UberNYC ( title = "Uber Pickups" ))
app . add_app ( "Solar Mach" , icon = "?️" , app = apps . SolarMach ( title = "Solar Mach" ))
#we have added a sign-up app to demonstrate the ability to run an unsecure app
#only 1 unsecure app is allowed
app . add_app ( "Signup" , icon = "?️" , app = apps . SignUpApp ( title = 'Signup' ), is_unsecure = True )
#we want to have secure access for this HydraApp, so we provide a login application
#optional logout label, can be blank for something nicer!
app . add_app ( "Login" , apps . LoginApp ( title = 'Login' ), is_login = True )
#specify a custom loading app for a custom transition between apps, this includes a nice custom spinner
app . add_loader_app ( apps . MyLoadingApp ( delay = 5 ))
#app.add_loader_app(apps.QuickLoaderApp())
#we can inject a method to be called everytime a user logs out
@ app . logout_callback
def mylogout_cb ():
print ( 'I was called from Hydralit at logout!' )
#we can inject a method to be called everytime a user logs in
@ app . login_callback
def mylogin_cb ():
print ( 'I was called from Hydralit at login!' )
#if we want to auto login a guest but still have a secure app, we can assign a guest account and go straight in
app . enable_guest_access ()
#--------------------------------------------------------------------------------------------------------------------
#if the menu is looking shit, use some sections
#check user access level to determine what should be shown on the menu
user_access_level , username = app . check_access ()
# If the menu is cluttered, just rearrange it into sections!
# completely optional, but if you have too many entries, you can make it nicer by using accordian menus
if user_access_level > 1 :
complex_nav = {
'Home' : [ 'Home' ],
'Intro ?' : [ 'Cheat Sheet' , "Solar Mach" ],
'Hotstepper ' : [ "Sequency Denoising" , "Sequency (Secure)" ],
'Clustering' : [ "Uber Pickups" ],
'NLP' : [ "Spacy NLP" ],
}
elif user_access_level == 1 :
complex_nav = {
'Home' : [ 'Home' ],
'Intro ?' : [ 'Cheat Sheet' , "Solar Mach" ],
'Hotstepper ' : [ "Sequency Denoising" ],
'Clustering' : [ "Uber Pickups" ],
'NLP' : [ "Spacy NLP" ],
}
else :
complex_nav = {
'Home' : [ 'Home' ],
}
#and finally just the entire app and all the children.
app . run ( complex_nav )
#(DEBUG) print user movements and current login details used by Hydralit
#---------------------------------------------------------------------
user_access_level , username = app . check_access ()
prev_app , curr_app = app . get_nav_transition ()
print ( prev_app , '- >' , curr_app )
print ( int ( user_access_level ), '- >' , username )
#---------------------------------------------------------------------Anda dapat mencobanya dengan menjalankan dua aplikasi sampel dengan anak-anak mereka yang terletak di repositori hydralit-example.
hydralit_example > pip install -r requirements.txt
hydralit_example > streamlit run secure.app