-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.py
90 lines (72 loc) · 3.3 KB
/
index.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
79
80
81
82
83
84
85
86
87
88
89
90
# _*_ coding: utf-8 _*_
"""
Application Layout
"""
import logging
import urllib.parse
import dash
import feffery_utils_components as fuc
from dash import Input, Output, State, dcc, html
from flask import session as flask_session
from app import app, server
from core.consts import FMT_EXECUTEJS_HREF, FMT_EXECUTEJS_TITLE
from core.utils.security import get_token_sub
from pages import palert, panalysis, pprojects, puser
from pages.dsign import pemail, plogin
from pages.paths import *
# application layout
app.layout = html.Div(children=[
html.Div(id="id-content"),
# define components
fuc.FefferyExecuteJs(id="id-executejs"),
dcc.Location(id="id-location", refresh=False),
], className="bg-main overflow-auto overflow-x-hidden")
@dash.callback([
Output("id-location", "pathname"),
Output("id-location", "search"),
Output("id-content", "children"),
Output("id-executejs", "jsString"),
], [
Input("id-location", "pathname"),
State("id-location", "search"),
State("id-location", "hash"),
], prevent_initial_call=False)
def _init_page(pathname, search, vhash):
# get user_id or None from 'token_access'
user_id = get_token_sub(flask_session.get("token_access", ""))
logging.warning("[%s] pathname: %s, search: %s", user_id, pathname, search)
# define variables: search_dict.get("xxx")[0]
search_dict = urllib.parse.parse_qs(search.lstrip("?").strip())
# define variables
kwargs = dict(vhash=vhash, user_id=user_id)
jsstr_login = FMT_EXECUTEJS_HREF.format(href=PATH_LOGIN)
jsstr_title = FMT_EXECUTEJS_TITLE.format(title=pathname.strip("/").upper())
# =============================================================================================
if pathname == PATH_LOGIN:
flask_session["token_access"] = ""
return pathname, search, plogin.layout(pathname, search_dict, **kwargs), jsstr_title
if pathname == PATH_SIGNUP or pathname == PATH_RESET:
flask_session["token_access"] = ""
return pathname, search, pemail.layout(pathname, search_dict, **kwargs), jsstr_title
# =============================================================================================
if pathname == PATH_ROOT:
if not user_id:
return pathname, search, dash.no_update, jsstr_login
return pathname, search, dash.no_update, FMT_EXECUTEJS_HREF.format(href=PATH_PROJECTS)
if pathname == PATH_USER:
if not user_id:
return pathname, search, dash.no_update, jsstr_login
return pathname, search, puser.layout(pathname, search_dict, **kwargs), jsstr_title
if pathname == PATH_PROJECTS:
if not user_id:
return pathname, search, dash.no_update, jsstr_login
return pathname, search, pprojects.layout(pathname, search_dict, **kwargs), jsstr_title
if pathname == PATH_ANALYSIS:
if not user_id:
return pathname, search, dash.no_update, jsstr_login
return pathname, search, panalysis.layout(pathname, search_dict, **kwargs), jsstr_title
# =============================================================================================
return pathname, search, palert.layout_404(pathname, search_dict, return_href=PATH_ROOT), jsstr_title
if __name__ == "__main__":
# app.run_server(port=8000, debug=True)
server.run(port=8000, debug=True)