Découpe par concern de l'ancien app/routers/dashboard.py (2 735 lignes, 63 routes) en package `app/routers/dashboard/` : - 8 modules de routes : local_workspace 559 L (15 r.), pages_html 485 (6), account_settings 439 (16), workspace 321 (9), pages_api 240 (6), workspaces 131 (6), public 78 (1), account_api 77 (4) - _common.py (774 L) : les 15 helpers top-level INTERCALÉS dans l'ancien fichier + état (logger, _VERSION, WORKSPACE_COOKIE) - __init__.py : ordre d'enregistrement identique à l'origine, re-export complet (7 importateurs inchangés : main, board ×3, my_tasks, web_clipper, wiki, sites `_dash._render_blocks_public`, tests) + __all__ Preuve contractuelle : docs/openapi-v2.json régénéré = IDENTIQUE byte-à-byte (509 chemins, ordre préservé). Pièges rattrapés : - segment décorateur sans sa fonction → assert `def in seg` + récupération git (corps perdus en silence à la 1ʳᵉ exécution) - collision `settings` (section vs from app.config import settings → hasattr du fromlist) → renommée account_settings - WORKSPACE_COOKIE utilisé sans import dans workspaces.py (F821) - script __all__ mangeant la fin du fichier → __init__ réécrit Reste A28 : collections.py 2 622 L, board.py 2 101 L (lot 3). suite **1091/1091** · ruff OK · OpenAPI 509 identique · docs à jour
78 lines
1.7 KiB
Python
78 lines
1.7 KiB
Python
"""FlowDeck — Dashboard (pages HTML + API de l'app).
|
|
|
|
Découpe A28 : l'ancien `dashboard.py` (2 735 lignes, 63 routes) est
|
|
devenu ce package — un module par concern, helpers dans `_common`,
|
|
re-export de tout ce que les 7 importateurs existants utilisent
|
|
(main, board, my_tasks, web_clipper, wiki, sites, tests).
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
|
|
from fastapi import APIRouter
|
|
|
|
from . import ( # ordre = ordre d'enregistrement d'origine (openapi identique)
|
|
account_api,
|
|
account_settings,
|
|
local_workspace,
|
|
pages_api,
|
|
pages_html,
|
|
public,
|
|
workspace,
|
|
workspaces,
|
|
)
|
|
from ._common import ( # noqa: F401 — re-export des helpers
|
|
_VERSION,
|
|
WORKSPACE_COOKIE,
|
|
_build_breadcrumb,
|
|
_build_tree_children,
|
|
_file_page_disk_path,
|
|
_format_size,
|
|
_get_active_workspace,
|
|
_get_app_version,
|
|
_get_user_id,
|
|
_get_user_or_redirect,
|
|
_local_workspaces_for_user,
|
|
_nav_breadcrumb,
|
|
_render_blocks_public,
|
|
_require_page_view,
|
|
_require_user_id,
|
|
_sanitize_id,
|
|
_sidebar_data,
|
|
)
|
|
|
|
logger = logging.getLogger(__name__)
|
|
router = APIRouter()
|
|
for _mod in (
|
|
pages_html,
|
|
account_api,
|
|
workspace,
|
|
local_workspace,
|
|
workspaces,
|
|
account_settings,
|
|
public,
|
|
pages_api,
|
|
):
|
|
router.include_router(_mod.router)
|
|
|
|
__all__ = [
|
|
"router",
|
|
"WORKSPACE_COOKIE",
|
|
"_VERSION",
|
|
"_build_breadcrumb",
|
|
"_build_tree_children",
|
|
"_file_page_disk_path",
|
|
"_format_size",
|
|
"_get_active_workspace",
|
|
"_get_app_version",
|
|
"_get_user_id",
|
|
"_get_user_or_redirect",
|
|
"_local_workspaces_for_user",
|
|
"_nav_breadcrumb",
|
|
"_render_blocks_public",
|
|
"_require_page_view",
|
|
"_require_user_id",
|
|
"_sanitize_id",
|
|
"_sidebar_data",
|
|
]
|