Spaces:
Runtime error
Runtime error
File size: 3,175 Bytes
8086e8b 8027e90 00c3a04 497d980 00c3a04 8086e8b 68cc99d 00c3a04 8086e8b 00c3a04 8027e90 00c3a04 8086e8b 00c3a04 8027e90 00c3a04 8086e8b 00c3a04 8086e8b 00c3a04 8027e90 00c3a04 8027e90 00c3a04 8086e8b 00c3a04 8086e8b 00c3a04 8086e8b 00c3a04 8027e90 00c3a04 8027e90 00c3a04 497d980 8027e90 fff6ecc f27ce21 8086e8b 8027e90 |
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 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
import base64
from dash.dependencies import Input, Output
from dash import dcc, html
import dash_bootstrap_components as dbc
from app import app # Import du Dash app (ne pas écraser cette variable après)
from pages import page_list
from pages.Home import page as home_page
from asgiref.wsgi import WsgiToAsgi
from functools import lru_cache
from dotenv import load_dotenv
load_dotenv()
class DashAppUI:
STYLES = {
"content": {"margin-left": "2rem", "margin-right": "2rem", "padding": "2rem 1rem"},
"topbar": {"padding": "1rem 1rem"},
"app": {"backgroundColor": "#f8f9fa"},
}
def __init__(self, app, pages, home):
self.app = app
self.page_list = pages
self.home = home
self.setup_layout()
self.setup_callbacks()
@property
@lru_cache(maxsize=1)
def logo(self):
with open("assets/logo.png", "rb") as f:
return html.Img(
src=f"data:image/jpg;base64,{base64.b64encode(f.read()).decode()}",
height="40px",
)
def create_branding(self):
return dbc.Row(
[
dbc.Col(self.logo),
dbc.Col(dbc.NavbarBrand("MooreFRCollection", className="ms-2")),
],
align="center",
className="g-0",
)
def create_nav_links(self):
return [
dbc.NavLink(
page["meta"].name,
href=page["meta"].path,
id=f"navlink_{page['meta'].id_}",
active="exact",
)
for page in self.page_list
]
def create_navbar(self):
branding = html.A(
self.create_branding(),
href=self.home["meta"].path,
id=self.home["meta"].id_,
style={"textDecoration": "none"},
)
nav = dbc.Nav(
self.create_nav_links(),
navbar=True,
className="ml-auto",
style={"font-size": "18px"},
pills=True,
)
return dbc.Navbar(
[branding, nav],
color="#000080",
dark=True,
sticky="top",
style=self.STYLES["topbar"],
)
def setup_layout(self):
self.app.layout = html.Div(
[
dcc.Location(id="url"),
self.create_navbar(),
html.Div(id="page-content", style=self.STYLES["content"]),
],
style=self.STYLES["app"],
)
def setup_callbacks(self):
@self.app.callback(Output("page-content", "children"), [Input("url", "pathname")])
def display_page(pathname):
matched_page = next(
(page for page in self.page_list if pathname == page["meta"].path),
None,
)
return matched_page["layout"] if matched_page else self.home["layout"]
def run(self, debug, port):
self.app.run_server(debug=debug, use_reloader=False, port=port)
dash_app = DashAppUI(app, page_list, home_page)
server = WsgiToAsgi(app.server)
if __name__ == "__main__":
dash_app.run(debug=True, port=7860)
|