#!/usr/bin/env python3 # -*- coding:utf-8 -*- import streamlit as st from n4a_analytics_lib.constants import DESCRIPTION from n4a_analytics_lib.st_components import (check_login, init_session_statistics, init_session_iaa, display_data) def n4a_analytics_dashboard() -> None: """Main function to manage dashboard app frontend ------------------------------------------------- * General architecture: * * metrics_utils.py (collection of statistics calculation) * ↓ * project.py (features extraction from XMI) → analytics.py * ↑ (project analyzer: computation/visualisation) * ↑ ↓ * st_components.py (manage data input/output and pipelines with streamlit snippets) * ↑ ↓ * app.py (manage frontend) * --------------------------------------------------- """ # Set window application st.set_page_config(layout="wide") # Sidebar: metadata, inputs etc. sidebar = st.sidebar # Cols: display results col1, col2 = st.columns(2) # Set general description sidebar.markdown(DESCRIPTION) # Level to analyze option = sidebar.selectbox('Which statistics level?', ('Inter-Annotator Agreement results', 'Global project statistics')) # IAA results view if option == "Inter-Annotator Agreement results": annotations = sidebar.file_uploader( "Upload IAA annotations (.zip format only): ", type='zip' ) baseline_text = sidebar.file_uploader( "Upload baseline text (.txt format only): ", type='txt' ) if baseline_text is not None and annotations is not None: init_session_iaa(data=annotations, baseline=baseline_text, col=col2) # Global statistics if option == "Global project statistics": # User input controllers mode = sidebar.radio("Choose mode to retrieve curated data: ", ( "Local directory", "INCEpTION API Host remote" )) data = None if mode == "Local directory": project = sidebar.file_uploader( "Folder that contains curated annotations in XMI 1.1 (.zip format only): ", type="zip" ) data = project if mode == "INCEpTION API Host remote": username = sidebar.text_input("Username: ") password = sidebar.text_input("Password: ", type='password') data = (username, password) # Validate inputs btn_process = sidebar.button('Process', key='process') # Access data with local ressources if btn_process and mode == "Local directory": if data is not None: # create a new session init_session_statistics(remote=False, local=True, data=data) # Access data with remote ressources if btn_process and mode == "INCEpTION API Host remote": if data is not None: if check_login(username=data[0], password=data[1]): # create a new session init_session_statistics(remote=True, local=False, data=data) else: st.error("Username or Password is empty, please check and retry.") # Change data values and visualize new plot if "gs_obj" in st.session_state: if st.session_state["gs_local"] or st.session_state["gs_remote"]: display_data(col1) if __name__ == "__main__": n4a_analytics_dashboard()