diff --git a/Pipfile b/Pipfile index 5723ecf..f408aae 100644 --- a/Pipfile +++ b/Pipfile @@ -8,6 +8,7 @@ streamlit = ">=1.31" altair = "*" pandas = "*" google-cloud-firestore = "*" +bcrypt = "*" streamlit-analytics2 = {editable = true, path = "."} [dev-packages] diff --git a/examples/pages/all-widgets.py b/examples/all-widgets.py similarity index 100% rename from examples/pages/all-widgets.py rename to examples/all-widgets.py diff --git a/examples/minimal.py b/examples/minimal.py index 60afd3f..22396f2 100644 --- a/examples/minimal.py +++ b/examples/minimal.py @@ -6,24 +6,26 @@ # Get the software versions python_version = platform.python_version() streamlit_version = st.__version__ -# streamlit_analytics_version = streamlit_analytics.__version__ +# streamlit_analytics2_version = streamlit_analytics.__version__ # Print the versions st.write(f"Python version: {python_version}") st.write(f"Streamlit version: {streamlit_version}") -# st.write(f"streamlit_analytics version: {streamlit_analytics_version}") +# st.write(f"streamlit_analytics2 version: {streamlit_analytics2_version}") st.markdown("---") -# with streamlit_analytics.track(): -streamlit_analytics.start_tracking() -st.text_input("Write your name") -st.selectbox("Select your favorite", ["cat", "dog", "flower"]) -st.button("Click me") +streamlit_analytics.start_tracking() +st.header("minimal.py loaded") +st.text_input("Write your name") +st.button("Click me") st.title("A [link]()") +counts = streamlit_analytics.get_counts() +st.write(counts) + streamlit_analytics.stop_tracking() diff --git a/examples/pages/sharing-demo.py b/examples/sharing-demo.py similarity index 100% rename from examples/pages/sharing-demo.py rename to examples/sharing-demo.py diff --git a/src/streamlit_analytics2/__init__.py b/src/streamlit_analytics2/__init__.py index 0c43e1b..a6fd919 100644 --- a/src/streamlit_analytics2/__init__.py +++ b/src/streamlit_analytics2/__init__.py @@ -1,4 +1,4 @@ from .analytics.tracker import get_counts, track, start_tracking, stop_tracking - +from .main import * __version__ = "0.6.0" \ No newline at end of file diff --git a/src/streamlit_analytics2/display/dashboard.py b/src/streamlit_analytics2/display/dashboard.py index 977e4ca..73076c7 100644 --- a/src/streamlit_analytics2/display/dashboard.py +++ b/src/streamlit_analytics2/display/dashboard.py @@ -6,142 +6,17 @@ def show_settings(app_config): - st.title("Settings") - st.write( - "Here you can configure the settings for streamlit-analytics." - ) - st.markdown( - """ - **Note:** Changes to the settings will be saved to `app_config.json` in the - current working directory. - """ - ) + st.header("settings()") + # Get the current settings + settings = app_config.get_settings() + st.write(settings) + - # Show password protection settings. - st.header("Password protection") - hashed_password = app_config.get_setting("hashed_password") - if hashed_password: - st.write("Password is set.") - if st.button("Remove password"): - app_config.update_setting("hashed_password", "") - else: - st.write("No password set.") - new_password = st.text_input("Set new password", type="password") - if new_password: - app_config.update_setting("hashed_password", hash_password(new_password)) def show_results(): from streamlit_analytics2.analytics.tracker import get_counts - """Show analytics results in streamlit, asking for password if given.""" + """Show analytics results in streamlit""" counts = get_counts() - # Show header. - st.title("Analytics Dashboard") - st.markdown( - """ - Psst! 👀 You found a secret section generated by - [streamlit-analytics](https://github.com/444B/streamlit-analytics2). - If you didn't mean to go here, remove `?analytics=on` from the URL. - """ - ) - - # Show traffic. - st.header("Traffic") - st.write(f"since {counts['start_time']}") - col1, col2, col3 = st.columns(3) - col1.metric( - "Pageviews", - counts["total_pageviews"], - help="Every time a user (re-)loads the site.", - ) - col2.metric( - "Script runs", - counts["total_script_runs"], - help="Every time Streamlit reruns upon changes or interactions.", - ) - col3.metric( - "Time spent", - format_seconds(counts["total_time_seconds"]), - help="Time from initial page load to last widget interaction, summed over all users.", - ) - st.write("") - - # Plot altair chart with pageviews and script runs. - try: - alt.themes.enable("streamlit") - except: - pass # probably old Streamlit version - df = pd.DataFrame(counts["per_day"]) - base = alt.Chart(df).encode( - x=alt.X("monthdate(days):O", axis=alt.Axis(title="", grid=True)) - ) - line1 = base.mark_line(point=True, stroke="#5276A7").encode( - alt.Y( - "pageviews:Q", - axis=alt.Axis( - titleColor="#5276A7", - tickColor="#5276A7", - labelColor="#5276A7", - format=".0f", - tickMinStep=1, - ), - scale=alt.Scale(domain=(0, df["pageviews"].max() + 1)), - ) - ) - line2 = base.mark_line(point=True, stroke="#57A44C").encode( - alt.Y( - "script_runs:Q", - axis=alt.Axis( - title="script runs", - titleColor="#57A44C", - tickColor="#57A44C", - labelColor="#57A44C", - format=".0f", - tickMinStep=1, - ), - ) - ) - layer = ( - alt.layer(line1, line2) - .resolve_scale(y="independent") - .configure_axis(titleFontSize=15, labelFontSize=12, titlePadding=10) - ) - st.altair_chart(layer, use_container_width=True) - - # Show widget interactions. - st.header("Widget interactions") - st.markdown( - """ - Find out how users interacted with your app! -
- Numbers indicate how often a button was clicked, how often a specific text - input was given, ... -
- Note: Numbers only increase if the state of the widget - changes, not every time streamlit runs the script. - """, - unsafe_allow_html=True, - ) - st.write(counts["widgets"]) - # Show button to reset analytics. - st.header("Danger zone") - with st.expander("Here be dragons 🐲🔥"): - st.write( - """ - Here you can reset all analytics results. - - **This will erase everything tracked so far. You will not be able to - retrieve it. This will also overwrite any results synced to Firestore.** - """ - ) - reset_prompt = st.selectbox( - "Continue?", - [ - "No idea what I'm doing here", - "I'm absolutely sure that I want to reset the results", - ], - ) - if reset_prompt == "I'm absolutely sure that I want to reset the results": - reset_clicked = st.button("Click here to reset") - if reset_clicked: - st.write("Done! Please refresh the page.") + st.header("show_results()") + st.write(counts) diff --git a/src/streamlit_analytics2/main.py b/src/streamlit_analytics2/main.py index 3127aa5..9195541 100644 --- a/src/streamlit_analytics2/main.py +++ b/src/streamlit_analytics2/main.py @@ -48,28 +48,31 @@ def analytics_navigation(): elif page == 'Settings': show_settings(app_config) -def main(): - # Check for the analytics=on query parameter before showing sidebar content - query_params = st.query_params - analytics_enabled = "analytics" in query_params and "on" in query_params["analytics"] +# def main(): +# Check for the analytics=on query parameter before showing sidebar content +query_params = st.query_params +analytics_enabled = "analytics" in query_params and "on" in query_params["analytics"] - if analytics_enabled: - # analytics_tracker.start_tracking() # Start tracking within context - password_hash = app_config.get_setting('hashed_password') +if analytics_enabled: + st.write("this thing works (kinda)") + # analytics_tracker.start_tracking() # Start tracking within context + password_hash = app_config.get_setting('hashed_password') - if not password_hash: - set_admin_password() - elif not st.session_state.get('authenticated', False): - login_field(password_hash) - reset_password_and_data() + if not password_hash: + set_admin_password() + elif not st.session_state.get('authenticated', False): + login_field(password_hash) + reset_password_and_data() - if st.session_state.get('authenticated', False): - analytics_navigation() + if st.session_state.get('authenticated', False): + analytics_navigation() - # analytics_tracker.stop_tracking() # Ensure tracking stops appropriately - else: - st.write("Welcome to the app! Append '?analytics=on' to the URL to access the analytics dashboard.") - st.button("Click me") + # analytics_tracker.stop_tracking() # Ensure tracking stops appropriately +else: + st.header("main.py loaded") + st.write("Welcome to the app! Append '?analytics=on' to the URL to access the analytics dashboard.") + st.button("Click me") + show_results() -if __name__ == "__main__": - main() +# if __name__ == "__main__": +# main()