-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathapp.py
78 lines (57 loc) · 2.33 KB
/
app.py
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
import logging
import sys
from pathlib import Path
import streamlit as st
from testgen import settings
from testgen.common.docker_service import check_basic_configuration
from testgen.ui import bootstrap
from testgen.ui.components import widgets as testgen
from testgen.ui.services import database_service as db
from testgen.ui.services import javascript_service, project_service, user_session_service
from testgen.ui.session import session
def render(log_level: int = logging.INFO):
st.set_page_config(
page_title="TestGen",
page_icon=get_image_path("assets/favicon.ico"),
layout="wide",
)
application = get_application(log_level=log_level)
application.logger.debug("Starting Streamlit re-run")
status_ok, message = check_basic_configuration()
if not status_ok:
st.markdown(f":red[{message}]")
return
set_locale()
session.dbschema = db.get_schema()
projects = project_service.get_projects()
if not session.project and len(projects) > 0:
project_service.set_current_project(projects[0]["code"])
if session.authentication_status is None and not session.logging_out:
user_session_service.load_user_session()
st.logo(
image=get_image_path("assets/dk_logo.svg"),
icon_image=get_image_path("assets/dk_icon.svg")
)
hide_sidebar = not session.authentication_status or session.logging_in
if not hide_sidebar:
with st.sidebar:
testgen.sidebar(
menu=application.menu.update_version(application.get_version()),
username=session.username,
current_page=session.current_page,
)
application.router.run(hide_sidebar)
@st.cache_resource(validate=lambda _: not settings.IS_DEBUG, show_spinner=False)
def get_application(log_level: int = logging.INFO):
return bootstrap.run(log_level=log_level)
def set_locale():
timezone = javascript_service.get_browser_locale_timezone()
if timezone is not None and timezone != 0:
st.session_state["browser_timezone"] = timezone
def get_image_path(path: str) -> str:
return str(Path(__file__).parent / path)
if __name__ == "__main__":
log_level = logging.INFO
if settings.IS_DEBUG_LOG_LEVEL or "--debug" in sys.argv:
log_level = logging.DEBUG
render(log_level=log_level)