Nexy-App 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- nexy_app-0.1.0/PKG-INFO +9 -0
- nexy_app-0.1.0/README.md +40 -0
- nexy_app-0.1.0/pyproject.toml +12 -0
- nexy_app-0.1.0/setup.cfg +4 -0
- nexy_app-0.1.0/src/Nexy_App.egg-info/PKG-INFO +9 -0
- nexy_app-0.1.0/src/Nexy_App.egg-info/SOURCES.txt +49 -0
- nexy_app-0.1.0/src/Nexy_App.egg-info/dependency_links.txt +1 -0
- nexy_app-0.1.0/src/Nexy_App.egg-info/requires.txt +4 -0
- nexy_app-0.1.0/src/Nexy_App.egg-info/top_level.txt +7 -0
- nexy_app-0.1.0/src/__init__.py +0 -0
- nexy_app-0.1.0/src/components/docs/__init__.py +0 -0
- nexy_app-0.1.0/src/locales/__init__.py +0 -0
- nexy_app-0.1.0/src/locales/components/__init__.py +0 -0
- nexy_app-0.1.0/src/locales/components/footer.py +14 -0
- nexy_app-0.1.0/src/locales/components/header.py +9 -0
- nexy_app-0.1.0/src/locales/routes/blog.py +7 -0
- nexy_app-0.1.0/src/locales/routes/community/layout.py +22 -0
- nexy_app-0.1.0/src/locales/routes/docs/layout.py +9 -0
- nexy_app-0.1.0/src/locales/routes/docs/sidebar/__init__.py +34 -0
- nexy_app-0.1.0/src/locales/routes/docs/sidebar/cli.py +12 -0
- nexy_app-0.1.0/src/locales/routes/docs/sidebar/components.py +13 -0
- nexy_app-0.1.0/src/locales/routes/docs/sidebar/config.py +13 -0
- nexy_app-0.1.0/src/locales/routes/docs/sidebar/databases.py +12 -0
- nexy_app-0.1.0/src/locales/routes/docs/sidebar/decorators.py +14 -0
- nexy_app-0.1.0/src/locales/routes/docs/sidebar/fastapi.py +18 -0
- nexy_app-0.1.0/src/locales/routes/docs/sidebar/fbr_router.py +26 -0
- nexy_app-0.1.0/src/locales/routes/docs/sidebar/getting_started.py +10 -0
- nexy_app-0.1.0/src/locales/routes/docs/sidebar/guides.py +21 -0
- nexy_app-0.1.0/src/locales/routes/docs/sidebar/hooks.py +14 -0
- nexy_app-0.1.0/src/locales/routes/docs/sidebar/migrate.py +11 -0
- nexy_app-0.1.0/src/locales/routes/docs/sidebar/modular_router.py +22 -0
- nexy_app-0.1.0/src/locales/routes/docs/sidebar/router_toggle.py +8 -0
- nexy_app-0.1.0/src/locales/routes/docs/sidebar/security.py +11 -0
- nexy_app-0.1.0/src/locales/routes/docs/sidebar/views.py +13 -0
- nexy_app-0.1.0/src/locales/routes/learn.py +7 -0
- nexy_app-0.1.0/src/locales/routes/showcase.py +12 -0
- nexy_app-0.1.0/src/locales/routes/team.py +7 -0
- nexy_app-0.1.0/src/locales/shared.py +6 -0
- nexy_app-0.1.0/src/mocks/__init__.py +0 -0
- nexy_app-0.1.0/src/mocks/docs/__init__.py +0 -0
- nexy_app-0.1.0/src/mocks/docs/sidebar.py +236 -0
- nexy_app-0.1.0/src/routes/__init__.py +0 -0
- nexy_app-0.1.0/src/routes/community/__init__.py +0 -0
- nexy_app-0.1.0/src/routes/docs/__init__.py +0 -0
- nexy_app-0.1.0/src/routes/docs/components/__init__.py +0 -0
- nexy_app-0.1.0/src/routes/learn/__init__.py +1 -0
- nexy_app-0.1.0/src/routes/showcase/__init__.py +0 -0
- nexy_app-0.1.0/src/routes/team/__init__.py +1 -0
- nexy_app-0.1.0/src/server.py +4 -0
- nexy_app-0.1.0/src/utils/__init__.py +10 -0
- nexy_app-0.1.0/src/utils/docs.py +60 -0
nexy_app-0.1.0/PKG-INFO
ADDED
nexy_app-0.1.0/README.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Nexy Documentation
|
|
2
|
+
|
|
3
|
+
docs/src/routes/docs/
|
|
4
|
+
├── layout.nexy → Sidebar + TOC + breadcrumb
|
|
5
|
+
├── index.mdx → /docs — Introduction (FR)
|
|
6
|
+
├── create_a_projet.mdx → /docs/create_a_projet — Project creation (FR)
|
|
7
|
+
├── projet_structure.mdx → /docs/projet_structure — Project layout (FR)
|
|
8
|
+
├── build_and_deploy.mdx → /docs/build_and_deploy — Build & deploy (EN)
|
|
9
|
+
├── fbrouters/
|
|
10
|
+
│ ├── index.mdx → /docs/fbrouters — FBR overview (FR)
|
|
11
|
+
│ ├── pages.mdx → /docs/fbrouters/pages — Pages (FR)
|
|
12
|
+
│ ├── layouts.mdx → /docs/fbrouters/layouts — Layouts (FR)
|
|
13
|
+
│ ├── dependencies.mdx → /docs/fbrouters/dependencies — Dependencies (FR)
|
|
14
|
+
│ ├── middlewares.mdx → /docs/fbrouters/middlewares — Middlewares (FR)
|
|
15
|
+
│ ├── route_handlers.mdx → /docs/fbrouters/route_handlers — API handlers (FR)
|
|
16
|
+
│ ├── route_parameters.mdx → /docs/fbrouters/route_parameters — Dynamic routes (FR)
|
|
17
|
+
│ └── query_parameters.mdx → /docs/fbrouters/query_parameters — Query strings (FR)
|
|
18
|
+
├── components/
|
|
19
|
+
│ ├── index.mdx → /docs/components — Component system (EN)
|
|
20
|
+
│ ├── usage.mdx → /docs/components/usage — Creating components (EN)
|
|
21
|
+
│ ├── markup.mdx → /docs/components/markup — Template syntax (EN)
|
|
22
|
+
│ ├── python.mdx → /docs/components/python — Python frontmatter (EN)
|
|
23
|
+
│ ├── properties.mdx → /docs/components/properties — Props (EN)
|
|
24
|
+
│ ├── conditional.mdx → /docs/components/conditional — Conditions (EN)
|
|
25
|
+
│ └── modules.mdx → /docs/components/modules — Module system (EN)
|
|
26
|
+
├── frontend/
|
|
27
|
+
│ └── index.mdx → /docs/frontend/overview — SSR & Vite (EN)
|
|
28
|
+
├── Modular/
|
|
29
|
+
│ └── overview.mdx → /docs/modular/overview — DI & guards (EN)
|
|
30
|
+
├── nexy-file/
|
|
31
|
+
│ └── file-format.mdx → /docs/nexy-file/file-format — .nexy spec (EN)
|
|
32
|
+
└── reference/
|
|
33
|
+
├── cli.mdx → /docs/reference/cli — CLI flags (EN)
|
|
34
|
+
└── structure.mdx → /docs/reference/structure — Compilation (EN)
|
|
35
|
+
|
|
36
|
+
## Sources
|
|
37
|
+
- Sidebar: `src/mocks/docs/sidebar.py` — FBR, Components, Getting Started
|
|
38
|
+
- Nav manifest: `src/manifest.json` — Site-wide navigation metadata
|
|
39
|
+
- Layout: `src/routes/docs/layout.nexy` — Wraps every doc page
|
|
40
|
+
- Style: `src/globale.css` — Tailwind v4 + custom `.toc`, `.sidebar`, `.mdx-content`
|
nexy_app-0.1.0/setup.cfg
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
README.md
|
|
2
|
+
pyproject.toml
|
|
3
|
+
src/__init__.py
|
|
4
|
+
src/server.py
|
|
5
|
+
src/Nexy_App.egg-info/PKG-INFO
|
|
6
|
+
src/Nexy_App.egg-info/SOURCES.txt
|
|
7
|
+
src/Nexy_App.egg-info/dependency_links.txt
|
|
8
|
+
src/Nexy_App.egg-info/requires.txt
|
|
9
|
+
src/Nexy_App.egg-info/top_level.txt
|
|
10
|
+
src/components/docs/__init__.py
|
|
11
|
+
src/locales/__init__.py
|
|
12
|
+
src/locales/shared.py
|
|
13
|
+
src/locales/components/__init__.py
|
|
14
|
+
src/locales/components/footer.py
|
|
15
|
+
src/locales/components/header.py
|
|
16
|
+
src/locales/routes/blog.py
|
|
17
|
+
src/locales/routes/learn.py
|
|
18
|
+
src/locales/routes/showcase.py
|
|
19
|
+
src/locales/routes/team.py
|
|
20
|
+
src/locales/routes/community/layout.py
|
|
21
|
+
src/locales/routes/docs/layout.py
|
|
22
|
+
src/locales/routes/docs/sidebar/__init__.py
|
|
23
|
+
src/locales/routes/docs/sidebar/cli.py
|
|
24
|
+
src/locales/routes/docs/sidebar/components.py
|
|
25
|
+
src/locales/routes/docs/sidebar/config.py
|
|
26
|
+
src/locales/routes/docs/sidebar/databases.py
|
|
27
|
+
src/locales/routes/docs/sidebar/decorators.py
|
|
28
|
+
src/locales/routes/docs/sidebar/fastapi.py
|
|
29
|
+
src/locales/routes/docs/sidebar/fbr_router.py
|
|
30
|
+
src/locales/routes/docs/sidebar/getting_started.py
|
|
31
|
+
src/locales/routes/docs/sidebar/guides.py
|
|
32
|
+
src/locales/routes/docs/sidebar/hooks.py
|
|
33
|
+
src/locales/routes/docs/sidebar/migrate.py
|
|
34
|
+
src/locales/routes/docs/sidebar/modular_router.py
|
|
35
|
+
src/locales/routes/docs/sidebar/router_toggle.py
|
|
36
|
+
src/locales/routes/docs/sidebar/security.py
|
|
37
|
+
src/locales/routes/docs/sidebar/views.py
|
|
38
|
+
src/mocks/__init__.py
|
|
39
|
+
src/mocks/docs/__init__.py
|
|
40
|
+
src/mocks/docs/sidebar.py
|
|
41
|
+
src/routes/__init__.py
|
|
42
|
+
src/routes/community/__init__.py
|
|
43
|
+
src/routes/docs/__init__.py
|
|
44
|
+
src/routes/docs/components/__init__.py
|
|
45
|
+
src/routes/learn/__init__.py
|
|
46
|
+
src/routes/showcase/__init__.py
|
|
47
|
+
src/routes/team/__init__.py
|
|
48
|
+
src/utils/__init__.py
|
|
49
|
+
src/utils/docs.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from nexy.i18n import i18n
|
|
2
|
+
|
|
3
|
+
@i18n()
|
|
4
|
+
class FooterI18n:
|
|
5
|
+
resources = "Ressources"
|
|
6
|
+
community = "Communauté"
|
|
7
|
+
team = "Équipe"
|
|
8
|
+
governance = "Gouvernance"
|
|
9
|
+
contributors = "Contributeurs"
|
|
10
|
+
github = "GitHub"
|
|
11
|
+
description = "Construisez des expériences web modernes avec Nexy — le framework Python pour l'ère full-stack."
|
|
12
|
+
newsletter_title = "Abonnez-vous à notre newsletter"
|
|
13
|
+
newsletter_desc = "Restez informé des nouvelles versions, fonctionnalités, guides et études de cas."
|
|
14
|
+
copyright = "© 2026 Luilka, Tous droits réservés."
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from nexy.i18n import i18n
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
@i18n()
|
|
5
|
+
class HeroI18n:
|
|
6
|
+
title = "Communauté"
|
|
7
|
+
description = "Rejoignez la communauté Nexy et contribuez à l'avenir du framework."
|
|
8
|
+
|
|
9
|
+
@i18n()
|
|
10
|
+
class SidebarI18n:
|
|
11
|
+
get_started = "Pour commencer"
|
|
12
|
+
get_help = "Obtenir de l'aide"
|
|
13
|
+
support = "Support"
|
|
14
|
+
faq = "FAQ"
|
|
15
|
+
contribute = "Contribuer"
|
|
16
|
+
guide = "Guide du contributeur"
|
|
17
|
+
report_bug = "Signaler un bug"
|
|
18
|
+
feature_request = "Suggérer une fonctionnalité"
|
|
19
|
+
governance = "Gouvernance"
|
|
20
|
+
team = "Équipe"
|
|
21
|
+
roadmap = "Feuille de route"
|
|
22
|
+
manifesto = "Manifeste"
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
from src.locales.routes.docs.sidebar.getting_started import GettingStartedI18n
|
|
2
|
+
from src.locales.routes.docs.sidebar.views import ViewsI18n
|
|
3
|
+
from src.locales.routes.docs.sidebar.fbr_router import FbrRouterI18n
|
|
4
|
+
from src.locales.routes.docs.sidebar.modular_router import ModularRouterI18n
|
|
5
|
+
from src.locales.routes.docs.sidebar.decorators import DecoratorsI18n
|
|
6
|
+
from src.locales.routes.docs.sidebar.components import ComponentsI18n
|
|
7
|
+
from src.locales.routes.docs.sidebar.config import ConfigI18n
|
|
8
|
+
from src.locales.routes.docs.sidebar.cli import CliI18n
|
|
9
|
+
from src.locales.routes.docs.sidebar.hooks import HooksI18n
|
|
10
|
+
from src.locales.routes.docs.sidebar.security import SecurityI18n
|
|
11
|
+
from src.locales.routes.docs.sidebar.databases import DatabasesI18n
|
|
12
|
+
from src.locales.routes.docs.sidebar.guides import GuidesI18n
|
|
13
|
+
from src.locales.routes.docs.sidebar.migrate import MigrateI18n
|
|
14
|
+
from src.locales.routes.docs.sidebar.fastapi import FastapiI18n
|
|
15
|
+
from src.locales.routes.docs.sidebar.router_toggle import RouterToggleI18n
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class SidebarI18n:
|
|
19
|
+
def __init__(self):
|
|
20
|
+
self.getting_started = GettingStartedI18n()
|
|
21
|
+
self.views = ViewsI18n()
|
|
22
|
+
self.fbr_router = FbrRouterI18n()
|
|
23
|
+
self.modular_router = ModularRouterI18n()
|
|
24
|
+
self.decorators = DecoratorsI18n()
|
|
25
|
+
self.components = ComponentsI18n()
|
|
26
|
+
self.config = ConfigI18n()
|
|
27
|
+
self.cli = CliI18n()
|
|
28
|
+
self.hooks = HooksI18n()
|
|
29
|
+
self.security = SecurityI18n()
|
|
30
|
+
self.databases = DatabasesI18n()
|
|
31
|
+
self.guides = GuidesI18n()
|
|
32
|
+
self.migrate = MigrateI18n()
|
|
33
|
+
self.fastapi = FastapiI18n()
|
|
34
|
+
self.router_toggle = RouterToggleI18n()
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from nexy.i18n import i18n
|
|
2
|
+
|
|
3
|
+
@i18n()
|
|
4
|
+
class DatabasesI18n:
|
|
5
|
+
title = "Bases de données & ORMs"
|
|
6
|
+
introduction = "Introduction"
|
|
7
|
+
postgresql = "PostgreSQL"
|
|
8
|
+
mysql = "MySQL & MariaDB"
|
|
9
|
+
sqlite = "SQLite"
|
|
10
|
+
sqlmodel = "SQLModel"
|
|
11
|
+
sqlalchemy = "SQLAlchemy"
|
|
12
|
+
tortoise = "Tortoise-ORM"
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from nexy.i18n import i18n
|
|
2
|
+
|
|
3
|
+
@i18n()
|
|
4
|
+
class DecoratorsI18n:
|
|
5
|
+
title = "Décorateurs"
|
|
6
|
+
introduction = "Introduction"
|
|
7
|
+
action = "@Action"
|
|
8
|
+
useguard = "@UseGuard"
|
|
9
|
+
middleware = "@Middleware"
|
|
10
|
+
controller = "@Controller"
|
|
11
|
+
module = "@Module"
|
|
12
|
+
injectable = "@Injectable"
|
|
13
|
+
useroute = "@UseRoute"
|
|
14
|
+
useresponse = "@UseResponse"
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from nexy.i18n import i18n
|
|
2
|
+
|
|
3
|
+
@i18n()
|
|
4
|
+
class FastapiI18n:
|
|
5
|
+
title = "FastAPI dans Nexy"
|
|
6
|
+
introduction = "Introduction"
|
|
7
|
+
forms_files = "Formulaires & Fichiers"
|
|
8
|
+
testing = "Tests"
|
|
9
|
+
debugging = "Débogage"
|
|
10
|
+
lifespan = "Événements de cycle de vie"
|
|
11
|
+
env_settings = "Environnement & Configuration"
|
|
12
|
+
custom_docs = "Interface de documentation personnalisée"
|
|
13
|
+
graphql = "GraphQL"
|
|
14
|
+
wsgi = "WSGI (Flask, Django)"
|
|
15
|
+
proxy = "Derrière un proxy"
|
|
16
|
+
sub_apps = "Sous-applications"
|
|
17
|
+
openapi_webhooks = "Webhooks OpenAPI"
|
|
18
|
+
generate_clients = "Générer des clients"
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from nexy.i18n import i18n
|
|
2
|
+
|
|
3
|
+
@i18n()
|
|
4
|
+
class FbrRouterI18n:
|
|
5
|
+
title = "Routeur"
|
|
6
|
+
introduction = "Introduction"
|
|
7
|
+
pages = "Pages"
|
|
8
|
+
layouts = "Layouts"
|
|
9
|
+
rest_routes = "Routes REST"
|
|
10
|
+
request_body = "Corps de requête"
|
|
11
|
+
cookies_headers = "Cookies & En-têtes"
|
|
12
|
+
response_model = "Modèle de réponse"
|
|
13
|
+
background_tasks = "Tâches de fond"
|
|
14
|
+
async_ = "Async / Concurrence"
|
|
15
|
+
sse = "SSE"
|
|
16
|
+
websocket = "WebSocket"
|
|
17
|
+
redirects = "Redirections"
|
|
18
|
+
authorization = "Autorisation"
|
|
19
|
+
useguard = "@UseGuard"
|
|
20
|
+
middleware_decorator = "@Middleware"
|
|
21
|
+
error_handling = "Gestion des erreurs"
|
|
22
|
+
static_files = "Fichiers statiques"
|
|
23
|
+
dependencies = "Dépendances"
|
|
24
|
+
middlewares = "Middlewares"
|
|
25
|
+
dynamic_urls = "URLs dynamiques"
|
|
26
|
+
query_params = "Paramètres de requête"
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
from nexy.i18n import i18n
|
|
2
|
+
|
|
3
|
+
@i18n()
|
|
4
|
+
class GettingStartedI18n:
|
|
5
|
+
title = "Pour commencer"
|
|
6
|
+
introduction = "Introduction"
|
|
7
|
+
quick_start = "Démarrage rapide"
|
|
8
|
+
fbr_or_modular = "FBR ou Modulaire"
|
|
9
|
+
project_structure = "Structure du projet"
|
|
10
|
+
build_deploy = "Build & Déploiement"
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from nexy.i18n import i18n
|
|
2
|
+
|
|
3
|
+
@i18n()
|
|
4
|
+
class GuidesI18n:
|
|
5
|
+
title = "Guides"
|
|
6
|
+
introduction = "Introduction"
|
|
7
|
+
react = "React dans Nexy"
|
|
8
|
+
vue = "Vue dans Nexy"
|
|
9
|
+
svelte = "Svelte dans Nexy"
|
|
10
|
+
solid = "Solid dans Nexy"
|
|
11
|
+
preact = "Preact dans Nexy"
|
|
12
|
+
vite_ssr = "Vite & SSR"
|
|
13
|
+
jinja2 = "Jinja2"
|
|
14
|
+
data_loading = "Chargement de données"
|
|
15
|
+
error_handling = "Gestion des erreurs"
|
|
16
|
+
actions = "Actions"
|
|
17
|
+
auth = "Auth"
|
|
18
|
+
i18n = "i18n"
|
|
19
|
+
css_js = "CSS & JS"
|
|
20
|
+
realtime = "Temps réel"
|
|
21
|
+
deploy = "Déploiement"
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from nexy.i18n import i18n
|
|
2
|
+
|
|
3
|
+
@i18n()
|
|
4
|
+
class HooksI18n:
|
|
5
|
+
title = "Hooks"
|
|
6
|
+
introduction = "Introduction"
|
|
7
|
+
pathname = "usePathname"
|
|
8
|
+
searchparams = "useSearchParams"
|
|
9
|
+
router = "useRouter"
|
|
10
|
+
query = "useQuery"
|
|
11
|
+
session = "useSession"
|
|
12
|
+
cookies = "useCookies"
|
|
13
|
+
toc = "useToc"
|
|
14
|
+
views = "useViews"
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from nexy.i18n import i18n
|
|
2
|
+
|
|
3
|
+
@i18n()
|
|
4
|
+
class ModularRouterI18n:
|
|
5
|
+
title = "Routeur"
|
|
6
|
+
introduction = "Introduction"
|
|
7
|
+
controllers = "Contrôleurs"
|
|
8
|
+
providers_di = "Providers & DI"
|
|
9
|
+
modules = "Modules"
|
|
10
|
+
guards = "Guards"
|
|
11
|
+
middleware = "Middleware"
|
|
12
|
+
request_body = "Corps de requête"
|
|
13
|
+
cookies_headers = "Cookies & En-têtes"
|
|
14
|
+
response = "Réponse"
|
|
15
|
+
background_tasks = "Tâches de fond"
|
|
16
|
+
async_ = "Async / Concurrence"
|
|
17
|
+
sse = "SSE"
|
|
18
|
+
websocket = "WebSocket"
|
|
19
|
+
redirects = "Redirections"
|
|
20
|
+
authorization = "Autorisation"
|
|
21
|
+
error_handling = "Gestion des erreurs"
|
|
22
|
+
static_files = "Fichiers statiques"
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from nexy.i18n import i18n
|
|
2
|
+
|
|
3
|
+
@i18n()
|
|
4
|
+
class ViewsI18n:
|
|
5
|
+
title = "Vues"
|
|
6
|
+
introduction = "Introduction"
|
|
7
|
+
usage = "Utilisation"
|
|
8
|
+
markup = "Markup"
|
|
9
|
+
python = "Python"
|
|
10
|
+
properties = "Propriétés"
|
|
11
|
+
conditional = "Conditionnel"
|
|
12
|
+
modules = "Modules"
|
|
13
|
+
styles = "Styles"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from nexy.i18n import i18n
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
@i18n()
|
|
5
|
+
class Showcase:
|
|
6
|
+
title = "Projets"
|
|
7
|
+
description = "Découvrez des projets inspirants construits avec Nexy par la communauté."
|
|
8
|
+
filter_all = "Tous"
|
|
9
|
+
filter_marketing = "Marketing & Media"
|
|
10
|
+
filter_platform_engineering = "Platform & Engineering"
|
|
11
|
+
filter_ai = "AI"
|
|
12
|
+
filter_web_app = "Web App"
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
def build_sections(s, mode="fbr"):
|
|
2
|
+
getting_started = [
|
|
3
|
+
{"label": s.getting_started.introduction, "href": "/"},
|
|
4
|
+
{"label": s.getting_started.quick_start, "href": "/create_a_projet"},
|
|
5
|
+
{"label": s.getting_started.fbr_or_modular, "href": "/router-choice"},
|
|
6
|
+
{"label": s.getting_started.project_structure, "href": "/projet_structure"},
|
|
7
|
+
{"label": s.getting_started.build_deploy, "href": "/build_and_deploy"},
|
|
8
|
+
]
|
|
9
|
+
|
|
10
|
+
composable_views = [
|
|
11
|
+
{"label": s.views.introduction, "href": "/components"},
|
|
12
|
+
{"label": s.views.usage, "href": "/components/usage"},
|
|
13
|
+
{"label": s.views.markup, "href": "/components/markup"},
|
|
14
|
+
{"label": s.views.python, "href": "/components/python"},
|
|
15
|
+
{"label": s.views.properties, "href": "/components/properties"},
|
|
16
|
+
{"label": s.views.conditional, "href": "/components/conditional"},
|
|
17
|
+
{"label": s.views.modules, "href": "/components/modules"},
|
|
18
|
+
{"label": s.views.styles, "href": "/components/styles"},
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
fbr_router_items = [
|
|
22
|
+
{"label": s.fbr_router.introduction, "href": "/fbrouters"},
|
|
23
|
+
{"label": s.fbr_router.pages, "href": "/fbrouters/pages"},
|
|
24
|
+
{"label": s.fbr_router.layouts, "href": "/fbrouters/layouts"},
|
|
25
|
+
{"label": s.fbr_router.rest_routes, "href": "/fbrouters/route_handlers"},
|
|
26
|
+
{"label": s.fbr_router.request_body, "href": "/fbrouters/request-body"},
|
|
27
|
+
{"label": s.fbr_router.cookies_headers, "href": "/fbrouters/cookie-header"},
|
|
28
|
+
{"label": s.fbr_router.response_model, "href": "/fbrouters/response-model"},
|
|
29
|
+
{"label": s.fbr_router.background_tasks, "href": "/fbrouters/background-tasks"},
|
|
30
|
+
{"label": s.fbr_router.async_, "href": "/fbrouters/async"},
|
|
31
|
+
{"label": s.fbr_router.sse, "href": "/fbrouters/sse"},
|
|
32
|
+
{"label": s.fbr_router.websocket, "href": "/fbrouters/websocket"},
|
|
33
|
+
{"label": s.fbr_router.redirects, "href": "/fbrouters/redirects"},
|
|
34
|
+
{"label": s.fbr_router.authorization, "href": "/fbrouters/authorization"},
|
|
35
|
+
{"label": s.fbr_router.useguard, "href": "/fbrouters/useguard"},
|
|
36
|
+
{"label": s.fbr_router.middleware_decorator, "href": "/fbrouters/middleware"},
|
|
37
|
+
{"label": s.fbr_router.error_handling, "href": "/guides/error-handling"},
|
|
38
|
+
{"label": s.fbr_router.static_files, "href": "/guides/static-files"},
|
|
39
|
+
{"label": s.fbr_router.dependencies, "href": "/fbrouters/dependencies"},
|
|
40
|
+
{"label": s.fbr_router.middlewares, "href": "/fbrouters/middlewares"},
|
|
41
|
+
{"label": s.fbr_router.dynamic_urls, "href": "/fbrouters/route_parameters"},
|
|
42
|
+
{"label": s.fbr_router.query_params, "href": "/fbrouters/query_parameters"},
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
modular_router_items = [
|
|
46
|
+
{"label": s.modular_router.introduction, "href": "/modular/overview"},
|
|
47
|
+
{"label": s.modular_router.controllers, "href": "/modular/controllers"},
|
|
48
|
+
{"label": s.modular_router.providers_di, "href": "/modular/providers"},
|
|
49
|
+
{"label": s.modular_router.modules, "href": "/modular/modules"},
|
|
50
|
+
{"label": s.modular_router.guards, "href": "/modular/guards"},
|
|
51
|
+
{"label": s.modular_router.middleware, "href": "/modular/middleware"},
|
|
52
|
+
{"label": s.modular_router.request_body, "href": "/modular/request-body"},
|
|
53
|
+
{"label": s.modular_router.cookies_headers, "href": "/modular/cookie-header"},
|
|
54
|
+
{"label": s.modular_router.response, "href": "/modular/response-model"},
|
|
55
|
+
{"label": s.modular_router.background_tasks, "href": "/modular/background-tasks"},
|
|
56
|
+
{"label": s.modular_router.async_, "href": "/modular/async"},
|
|
57
|
+
{"label": s.modular_router.sse, "href": "/modular/sse"},
|
|
58
|
+
{"label": s.modular_router.websocket, "href": "/modular/websocket"},
|
|
59
|
+
{"label": s.modular_router.redirects, "href": "/modular/redirects"},
|
|
60
|
+
{"label": s.modular_router.authorization, "href": "/modular/authorization"},
|
|
61
|
+
{"label": s.modular_router.error_handling, "href": "/guides/error-handling"},
|
|
62
|
+
{"label": s.modular_router.static_files, "href": "/guides/static-files"},
|
|
63
|
+
]
|
|
64
|
+
|
|
65
|
+
fbr_decorators = [
|
|
66
|
+
{"label": s.decorators.introduction, "href": "/decorators"},
|
|
67
|
+
{"label": s.decorators.action, "href": "/decorators/action"},
|
|
68
|
+
{"label": s.decorators.useguard, "href": "/decorators/useguard"},
|
|
69
|
+
{"label": s.decorators.middleware, "href": "/decorators/middleware"},
|
|
70
|
+
]
|
|
71
|
+
|
|
72
|
+
modular_decorators = [
|
|
73
|
+
{"label": s.decorators.introduction, "href": "/decorators"},
|
|
74
|
+
{"label": s.decorators.action, "href": "/decorators/action"},
|
|
75
|
+
{"label": s.decorators.controller, "href": "/decorators/controller"},
|
|
76
|
+
{"label": s.decorators.module, "href": "/decorators/module"},
|
|
77
|
+
{"label": s.decorators.injectable, "href": "/decorators/injectable"},
|
|
78
|
+
{"label": s.decorators.useguard, "href": "/decorators/useguard"},
|
|
79
|
+
{"label": s.decorators.middleware, "href": "/decorators/middleware"},
|
|
80
|
+
{"label": s.decorators.useroute, "href": "/decorators/useroute"},
|
|
81
|
+
{"label": s.decorators.useresponse, "href": "/decorators/useresponse"},
|
|
82
|
+
]
|
|
83
|
+
|
|
84
|
+
components_items = [
|
|
85
|
+
{"label": s.components.audio, "href": "#", "badge": s.components.badge_soon},
|
|
86
|
+
{"label": s.components.video, "href": "#", "badge": s.components.badge_soon},
|
|
87
|
+
{"label": s.components.form, "href": "#", "badge": s.components.badge_soon},
|
|
88
|
+
{"label": s.components.image, "href": "#", "badge": s.components.badge_soon},
|
|
89
|
+
{"label": s.components.link, "href": "#", "badge": s.components.badge_soon},
|
|
90
|
+
{"label": s.components.script, "href": "#", "badge": s.components.badge_soon},
|
|
91
|
+
{"label": s.components.vite, "href": "/frontend/vite"},
|
|
92
|
+
]
|
|
93
|
+
|
|
94
|
+
config_items = [
|
|
95
|
+
{"label": s.config.introduction, "href": "/config"},
|
|
96
|
+
{"label": s.config.nexy, "href": "/config/nexy"},
|
|
97
|
+
{"label": s.config.vite, "href": "/config/vite"},
|
|
98
|
+
{"label": s.config.cors, "href": "/config/cors"},
|
|
99
|
+
{"label": s.config.aliases, "href": "/config/aliases"},
|
|
100
|
+
{"label": s.config.session, "href": "/config/session"},
|
|
101
|
+
{"label": s.config.i18n, "href": "/config/i18n"},
|
|
102
|
+
{"label": s.config.toc, "href": "/config/toc"},
|
|
103
|
+
]
|
|
104
|
+
|
|
105
|
+
cli_items = [
|
|
106
|
+
{"label": s.cli.introduction, "href": "/cli"},
|
|
107
|
+
{"label": s.cli.dev, "href": "/cli/dev"},
|
|
108
|
+
{"label": s.cli.start, "href": "/cli/start"},
|
|
109
|
+
{"label": s.cli.build, "href": "/cli/build"},
|
|
110
|
+
{"label": s.cli.new, "href": "/cli/new"},
|
|
111
|
+
{"label": s.cli.init, "href": "/cli/init"},
|
|
112
|
+
{"label": s.cli.migrate_cmd, "href": "/cli/migrate"},
|
|
113
|
+
]
|
|
114
|
+
|
|
115
|
+
hooks_items = [
|
|
116
|
+
{"label": s.hooks.introduction, "href": "/hooks"},
|
|
117
|
+
{"label": s.hooks.pathname, "href": "/hooks/usePathname"},
|
|
118
|
+
{"label": s.hooks.searchparams, "href": "/hooks/useSearchParams"},
|
|
119
|
+
{"label": s.hooks.router, "href": "/hooks/useRouter"},
|
|
120
|
+
{"label": s.hooks.query, "href": "/hooks/useQuery"},
|
|
121
|
+
{"label": s.hooks.session, "href": "/hooks/useSession"},
|
|
122
|
+
{"label": s.hooks.cookies, "href": "/hooks/useCookies"},
|
|
123
|
+
{"label": s.hooks.toc, "href": "/hooks/useToc"},
|
|
124
|
+
{"label": s.hooks.views, "href": "/hooks/useViews"},
|
|
125
|
+
]
|
|
126
|
+
|
|
127
|
+
security_items = [
|
|
128
|
+
{"label": s.security.introduction, "href": "/security"},
|
|
129
|
+
{"label": s.security.authentication, "href": "/security/authentication"},
|
|
130
|
+
{"label": s.security.authorization, "href": "/security/authorization"},
|
|
131
|
+
{"label": s.security.encryption, "href": "/security/encryption-hashing"},
|
|
132
|
+
{"label": s.security.jwt, "href": "/security/jwt"},
|
|
133
|
+
{"label": s.security.uid, "href": "/security/uid"},
|
|
134
|
+
]
|
|
135
|
+
|
|
136
|
+
databases_items = [
|
|
137
|
+
{"label": s.databases.introduction, "href": "/orm/database"},
|
|
138
|
+
{"label": s.databases.postgresql, "href": "/orm/postgresql"},
|
|
139
|
+
{"label": s.databases.mysql, "href": "/orm/mysql"},
|
|
140
|
+
{"label": s.databases.sqlite, "href": "/orm/sqlite"},
|
|
141
|
+
{"label": s.databases.sqlmodel, "href": "/orm/sqlmodel"},
|
|
142
|
+
{"label": s.databases.sqlalchemy, "href": "/orm/sqlalchemy"},
|
|
143
|
+
{"label": s.databases.tortoise, "href": "/orm/tortoise"},
|
|
144
|
+
]
|
|
145
|
+
|
|
146
|
+
guides_items = [
|
|
147
|
+
{"label": s.guides.introduction, "href": "/guides"},
|
|
148
|
+
{"label": s.guides.react, "href": "/frontend/react"},
|
|
149
|
+
{"label": s.guides.vue, "href": "/frontend/vue"},
|
|
150
|
+
{"label": s.guides.svelte, "href": "/frontend/svelte"},
|
|
151
|
+
{"label": s.guides.solid, "href": "/frontend/solid"},
|
|
152
|
+
{"label": s.guides.preact, "href": "/frontend/preact"},
|
|
153
|
+
{"label": s.guides.vite_ssr, "href": "/frontend/vite"},
|
|
154
|
+
{"label": s.guides.jinja2, "href": "/guides/jinja2"},
|
|
155
|
+
{"label": s.guides.data_loading, "href": "/guides/data-loading"},
|
|
156
|
+
{"label": s.guides.error_handling, "href": "/guides/error-handling"},
|
|
157
|
+
{"label": s.guides.actions, "href": "/guides/actions"},
|
|
158
|
+
{"label": s.guides.auth, "href": "/guides/auth"},
|
|
159
|
+
{"label": s.guides.i18n, "href": "/guides/i18n"},
|
|
160
|
+
{"label": s.guides.css_js, "href": "/guides/css-js"},
|
|
161
|
+
{"label": s.guides.realtime, "href": "/guides/websocket"},
|
|
162
|
+
{"label": s.guides.deploy, "href": "/guides/deploy"},
|
|
163
|
+
]
|
|
164
|
+
|
|
165
|
+
migrate_items = [
|
|
166
|
+
{"label": s.migrate.introduction, "href": "/migrate"},
|
|
167
|
+
{"label": s.migrate.fastapi, "href": "/migrate/fastapi"},
|
|
168
|
+
{"label": s.migrate.django, "href": "/migrate/django"},
|
|
169
|
+
{"label": s.migrate.nestjs, "href": "/migrate/nestjs"},
|
|
170
|
+
{"label": s.migrate.flask, "href": "/migrate/flask"},
|
|
171
|
+
{"label": s.migrate.nextjs, "href": "/migrate/nextjs"},
|
|
172
|
+
]
|
|
173
|
+
|
|
174
|
+
fastapi_items = [
|
|
175
|
+
{"label": s.fastapi.introduction, "href": "/fastapi"},
|
|
176
|
+
{"label": s.fastapi.forms_files, "href": "/fastapi/forms-files"},
|
|
177
|
+
{"label": s.fastapi.testing, "href": "/fastapi/testing"},
|
|
178
|
+
{"label": s.fastapi.debugging, "href": "/fastapi/debugging"},
|
|
179
|
+
{"label": s.fastapi.lifespan, "href": "/fastapi/lifespan-events"},
|
|
180
|
+
{"label": s.fastapi.env_settings, "href": "/fastapi/env-settings"},
|
|
181
|
+
{"label": s.fastapi.custom_docs, "href": "/fastapi/custom-docs"},
|
|
182
|
+
{"label": s.fastapi.graphql, "href": "/fastapi/graphql"},
|
|
183
|
+
{"label": s.fastapi.wsgi, "href": "/fastapi/wsgi"},
|
|
184
|
+
{"label": s.fastapi.proxy, "href": "/fastapi/proxy"},
|
|
185
|
+
{"label": s.fastapi.sub_apps, "href": "/fastapi/sub-apps"},
|
|
186
|
+
{"label": s.fastapi.openapi_webhooks, "href": "/fastapi/openapi-webhooks"},
|
|
187
|
+
{"label": s.fastapi.generate_clients, "href": "/fastapi/generate-clients"},
|
|
188
|
+
]
|
|
189
|
+
|
|
190
|
+
getting_started_section = {"title": s.getting_started.title, "href": "", "items": getting_started, "collapsible": False}
|
|
191
|
+
views_section = {"title": s.views.title, "href": "", "items": composable_views}
|
|
192
|
+
fbr_router_section = {"title": s.fbr_router.title, "href": "", "items": fbr_router_items}
|
|
193
|
+
modular_router_section = {"title": s.modular_router.title, "href": "", "items": modular_router_items}
|
|
194
|
+
fbr_decorators_section = {"title": s.decorators.title, "href": "", "items": fbr_decorators}
|
|
195
|
+
modular_decorators_section = {"title": s.decorators.title, "href": "", "items": modular_decorators}
|
|
196
|
+
components_section = {"title": s.components.title, "href": "", "items": components_items}
|
|
197
|
+
config_section = {"title": s.config.title, "href": "", "items": config_items}
|
|
198
|
+
cli_section = {"title": s.cli.title, "href": "", "items": cli_items}
|
|
199
|
+
hooks_section = {"title": s.hooks.title, "href": "", "items": hooks_items}
|
|
200
|
+
security_section = {"title": s.security.title, "href": "", "items": security_items}
|
|
201
|
+
databases_section = {"title": s.databases.title, "href": "", "items": databases_items}
|
|
202
|
+
guides_section = {"title": s.guides.title, "href": "", "items": guides_items}
|
|
203
|
+
migrate_section = {"title": s.migrate.title, "href": "", "items": migrate_items}
|
|
204
|
+
fastapi_section = {"title": s.fastapi.title, "href": "", "items": fastapi_items}
|
|
205
|
+
|
|
206
|
+
if mode == "fbr":
|
|
207
|
+
return [
|
|
208
|
+
getting_started_section,
|
|
209
|
+
fbr_router_section,
|
|
210
|
+
views_section,
|
|
211
|
+
components_section,
|
|
212
|
+
config_section,
|
|
213
|
+
cli_section,
|
|
214
|
+
hooks_section,
|
|
215
|
+
fbr_decorators_section,
|
|
216
|
+
security_section,
|
|
217
|
+
databases_section,
|
|
218
|
+
migrate_section,
|
|
219
|
+
guides_section,
|
|
220
|
+
fastapi_section,
|
|
221
|
+
]
|
|
222
|
+
return [
|
|
223
|
+
getting_started_section,
|
|
224
|
+
modular_router_section,
|
|
225
|
+
views_section,
|
|
226
|
+
components_section,
|
|
227
|
+
config_section,
|
|
228
|
+
cli_section,
|
|
229
|
+
hooks_section,
|
|
230
|
+
modular_decorators_section,
|
|
231
|
+
security_section,
|
|
232
|
+
databases_section,
|
|
233
|
+
migrate_section,
|
|
234
|
+
guides_section,
|
|
235
|
+
fastapi_section,
|
|
236
|
+
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
t = []
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
t = []
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import os
|
|
2
|
+
is_vercel = os.environ.get('VERCEL')
|
|
3
|
+
|
|
4
|
+
def resolve_url(src, srcset=None):
|
|
5
|
+
if is_vercel and src.startswith("/public/"):
|
|
6
|
+
# On nettoie le chemin : on remplace "/public/" par "/"
|
|
7
|
+
src = src.replace("/public/", "/")
|
|
8
|
+
srcset = srcset.replace("/public/", "/") if srcset else None
|
|
9
|
+
|
|
10
|
+
return src, srcset
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import re
|
|
3
|
+
import markdown
|
|
4
|
+
from nexy.core.config import Config
|
|
5
|
+
|
|
6
|
+
def find_doc_file(language, path_parts):
|
|
7
|
+
base_path = "_docs"
|
|
8
|
+
current_dir = os.path.join(base_path, language)
|
|
9
|
+
if not os.path.exists(current_dir):
|
|
10
|
+
return None
|
|
11
|
+
|
|
12
|
+
found_path = None
|
|
13
|
+
for part in path_parts:
|
|
14
|
+
if not part: continue
|
|
15
|
+
|
|
16
|
+
try:
|
|
17
|
+
items = os.listdir(current_dir)
|
|
18
|
+
except (FileNotFoundError, NotADirectoryError):
|
|
19
|
+
return None
|
|
20
|
+
|
|
21
|
+
match = None
|
|
22
|
+
for item in items:
|
|
23
|
+
clean_item = re.sub(r"^\d+\.\s*", "", item).lower().replace(" ", "-")
|
|
24
|
+
if clean_item == part or clean_item.split(".")[0] == part:
|
|
25
|
+
match = item
|
|
26
|
+
break
|
|
27
|
+
|
|
28
|
+
if not match:
|
|
29
|
+
return None
|
|
30
|
+
|
|
31
|
+
current_dir = os.path.join(current_dir, match)
|
|
32
|
+
if os.path.isfile(current_dir):
|
|
33
|
+
found_path = current_dir
|
|
34
|
+
break
|
|
35
|
+
|
|
36
|
+
return found_path
|
|
37
|
+
|
|
38
|
+
def get_doc_content(lang, slug):
|
|
39
|
+
if not slug:
|
|
40
|
+
return {"html": "<h1>Docs</h1>", "title": "Documentation"}
|
|
41
|
+
|
|
42
|
+
slug_parts = slug.strip("/").split("/")
|
|
43
|
+
|
|
44
|
+
file_path = find_doc_file(lang, slug_parts)
|
|
45
|
+
if not file_path and lang != "en":
|
|
46
|
+
file_path = find_doc_file("en", slug_parts)
|
|
47
|
+
|
|
48
|
+
if file_path and os.path.isfile(file_path):
|
|
49
|
+
with open(file_path, "r", encoding="utf-8") as f:
|
|
50
|
+
content = f.read()
|
|
51
|
+
|
|
52
|
+
title_match = re.search(r"^title\s*:\s*(.+)$", content, re.MULTILINE)
|
|
53
|
+
title = title_match.group(1).strip().strip("'").strip('"') if title_match else "Documentation"
|
|
54
|
+
|
|
55
|
+
clean_content = re.sub(r"^---.*?---", "", content, flags=re.DOTALL)
|
|
56
|
+
conf = Config()
|
|
57
|
+
html = markdown.markdown(clean_content, extensions=conf.MARKDOWN_EXTENSIONS + ["toc"])
|
|
58
|
+
return {"html": html, "title": title}
|
|
59
|
+
|
|
60
|
+
return {"html": "<h1>404 - Page Not Found</h1>", "title": "Not Found"}
|