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.
Files changed (51) hide show
  1. nexy_app-0.1.0/PKG-INFO +9 -0
  2. nexy_app-0.1.0/README.md +40 -0
  3. nexy_app-0.1.0/pyproject.toml +12 -0
  4. nexy_app-0.1.0/setup.cfg +4 -0
  5. nexy_app-0.1.0/src/Nexy_App.egg-info/PKG-INFO +9 -0
  6. nexy_app-0.1.0/src/Nexy_App.egg-info/SOURCES.txt +49 -0
  7. nexy_app-0.1.0/src/Nexy_App.egg-info/dependency_links.txt +1 -0
  8. nexy_app-0.1.0/src/Nexy_App.egg-info/requires.txt +4 -0
  9. nexy_app-0.1.0/src/Nexy_App.egg-info/top_level.txt +7 -0
  10. nexy_app-0.1.0/src/__init__.py +0 -0
  11. nexy_app-0.1.0/src/components/docs/__init__.py +0 -0
  12. nexy_app-0.1.0/src/locales/__init__.py +0 -0
  13. nexy_app-0.1.0/src/locales/components/__init__.py +0 -0
  14. nexy_app-0.1.0/src/locales/components/footer.py +14 -0
  15. nexy_app-0.1.0/src/locales/components/header.py +9 -0
  16. nexy_app-0.1.0/src/locales/routes/blog.py +7 -0
  17. nexy_app-0.1.0/src/locales/routes/community/layout.py +22 -0
  18. nexy_app-0.1.0/src/locales/routes/docs/layout.py +9 -0
  19. nexy_app-0.1.0/src/locales/routes/docs/sidebar/__init__.py +34 -0
  20. nexy_app-0.1.0/src/locales/routes/docs/sidebar/cli.py +12 -0
  21. nexy_app-0.1.0/src/locales/routes/docs/sidebar/components.py +13 -0
  22. nexy_app-0.1.0/src/locales/routes/docs/sidebar/config.py +13 -0
  23. nexy_app-0.1.0/src/locales/routes/docs/sidebar/databases.py +12 -0
  24. nexy_app-0.1.0/src/locales/routes/docs/sidebar/decorators.py +14 -0
  25. nexy_app-0.1.0/src/locales/routes/docs/sidebar/fastapi.py +18 -0
  26. nexy_app-0.1.0/src/locales/routes/docs/sidebar/fbr_router.py +26 -0
  27. nexy_app-0.1.0/src/locales/routes/docs/sidebar/getting_started.py +10 -0
  28. nexy_app-0.1.0/src/locales/routes/docs/sidebar/guides.py +21 -0
  29. nexy_app-0.1.0/src/locales/routes/docs/sidebar/hooks.py +14 -0
  30. nexy_app-0.1.0/src/locales/routes/docs/sidebar/migrate.py +11 -0
  31. nexy_app-0.1.0/src/locales/routes/docs/sidebar/modular_router.py +22 -0
  32. nexy_app-0.1.0/src/locales/routes/docs/sidebar/router_toggle.py +8 -0
  33. nexy_app-0.1.0/src/locales/routes/docs/sidebar/security.py +11 -0
  34. nexy_app-0.1.0/src/locales/routes/docs/sidebar/views.py +13 -0
  35. nexy_app-0.1.0/src/locales/routes/learn.py +7 -0
  36. nexy_app-0.1.0/src/locales/routes/showcase.py +12 -0
  37. nexy_app-0.1.0/src/locales/routes/team.py +7 -0
  38. nexy_app-0.1.0/src/locales/shared.py +6 -0
  39. nexy_app-0.1.0/src/mocks/__init__.py +0 -0
  40. nexy_app-0.1.0/src/mocks/docs/__init__.py +0 -0
  41. nexy_app-0.1.0/src/mocks/docs/sidebar.py +236 -0
  42. nexy_app-0.1.0/src/routes/__init__.py +0 -0
  43. nexy_app-0.1.0/src/routes/community/__init__.py +0 -0
  44. nexy_app-0.1.0/src/routes/docs/__init__.py +0 -0
  45. nexy_app-0.1.0/src/routes/docs/components/__init__.py +0 -0
  46. nexy_app-0.1.0/src/routes/learn/__init__.py +1 -0
  47. nexy_app-0.1.0/src/routes/showcase/__init__.py +0 -0
  48. nexy_app-0.1.0/src/routes/team/__init__.py +1 -0
  49. nexy_app-0.1.0/src/server.py +4 -0
  50. nexy_app-0.1.0/src/utils/__init__.py +10 -0
  51. nexy_app-0.1.0/src/utils/docs.py +60 -0
@@ -0,0 +1,9 @@
1
+ Metadata-Version: 2.4
2
+ Name: Nexy-App
3
+ Version: 0.1.0
4
+ Summary: A Nexy Web App
5
+ Requires-Python: >=3.12
6
+ Requires-Dist: markdown>=3.10.2
7
+ Requires-Dist: nexy>=2.1.0
8
+ Requires-Dist: pygments>=2.20.0
9
+ Requires-Dist: pymdown-extensions>=10.21.2
@@ -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`
@@ -0,0 +1,12 @@
1
+ [project]
2
+ name = "Nexy-App"
3
+ version = "0.1.0"
4
+ description = "A Nexy Web App"
5
+ dependencies = [
6
+ "markdown>=3.10.2",
7
+ "nexy>=2.1.0",
8
+ "pygments>=2.20.0",
9
+ "pymdown-extensions>=10.21.2",
10
+ ]
11
+ requires-python = ">=3.12"
12
+
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,9 @@
1
+ Metadata-Version: 2.4
2
+ Name: Nexy-App
3
+ Version: 0.1.0
4
+ Summary: A Nexy Web App
5
+ Requires-Python: >=3.12
6
+ Requires-Dist: markdown>=3.10.2
7
+ Requires-Dist: nexy>=2.1.0
8
+ Requires-Dist: pygments>=2.20.0
9
+ Requires-Dist: pymdown-extensions>=10.21.2
@@ -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,4 @@
1
+ markdown>=3.10.2
2
+ nexy>=2.1.0
3
+ pygments>=2.20.0
4
+ pymdown-extensions>=10.21.2
@@ -0,0 +1,7 @@
1
+ __init__
2
+ components
3
+ locales
4
+ mocks
5
+ routes
6
+ server
7
+ utils
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,9 @@
1
+ from nexy.i18n import i18n
2
+
3
+ @i18n()
4
+ class HeaderI18n:
5
+ docs = "Docs"
6
+ showcase = "Showcases"
7
+ blog = "Blog"
8
+ community = "Communauté"
9
+ learn = "Apprendre"
@@ -0,0 +1,7 @@
1
+ from nexy.i18n import i18n
2
+
3
+
4
+ @i18n()
5
+ class Blog:
6
+ title = "Blog"
7
+ description = "Retrouvez les dernières actualités, tutoriels et conseils autour de Nexy."
@@ -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,9 @@
1
+ from nexy.i18n import i18n
2
+
3
+
4
+ @i18n()
5
+ class DocsLayoutI18n:
6
+ breadcrumb_home = "Accueil"
7
+ prev_page = "Page précédente"
8
+ next_page = "Page suivante"
9
+ on_this_page = "Sur cette page"
@@ -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 CliI18n:
5
+ title = "CLI"
6
+ introduction = "Introduction"
7
+ dev = "dev"
8
+ start = "start"
9
+ build = "build"
10
+ new = "new"
11
+ init = "init"
12
+ migrate_cmd = "migrate"
@@ -0,0 +1,13 @@
1
+ from nexy.i18n import i18n
2
+
3
+ @i18n()
4
+ class ComponentsI18n:
5
+ title = "Composants"
6
+ audio = "Audio"
7
+ video = "Video"
8
+ form = "Formulaire"
9
+ image = "Image"
10
+ link = "Lien"
11
+ script = "Script"
12
+ vite = "Vite"
13
+ badge_soon = "bientôt"
@@ -0,0 +1,13 @@
1
+ from nexy.i18n import i18n
2
+
3
+ @i18n()
4
+ class ConfigI18n:
5
+ title = "Configuration"
6
+ introduction = "Introduction"
7
+ nexy = "Nexy"
8
+ vite = "Vite"
9
+ cors = "CORS"
10
+ aliases = "Alias"
11
+ session = "Session"
12
+ i18n = "i18n"
13
+ toc = "TOC"
@@ -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,11 @@
1
+ from nexy.i18n import i18n
2
+
3
+ @i18n()
4
+ class MigrateI18n:
5
+ title = "Migrer vers Nexy"
6
+ introduction = "Introduction"
7
+ fastapi = "FastAPI"
8
+ django = "Django"
9
+ nestjs = "NestJS"
10
+ flask = "Flask"
11
+ nextjs = "Next.js"
@@ -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,8 @@
1
+ from nexy.i18n import i18n
2
+
3
+ @i18n()
4
+ class RouterToggleI18n:
5
+ fbr_label = "FBR"
6
+ fbr_desc = "File based routing"
7
+ modular_label = "Modulaire"
8
+ modular_desc = "Routage modulaire"
@@ -0,0 +1,11 @@
1
+ from nexy.i18n import i18n
2
+
3
+ @i18n()
4
+ class SecurityI18n:
5
+ title = "Sécurité"
6
+ introduction = "Introduction"
7
+ authentication = "Authentification"
8
+ authorization = "Autorisation"
9
+ encryption = "Cryptage & Hachage"
10
+ jwt = "JWT"
11
+ uid = "UID"
@@ -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,7 @@
1
+ from nexy.i18n import i18n
2
+
3
+
4
+ @i18n()
5
+ class Learn:
6
+ title = "Apprendre"
7
+ description = "Maîtrisez Nexy grâce à nos guides interactifs et notre documentation complète."
@@ -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"
@@ -0,0 +1,7 @@
1
+ from nexy.i18n import i18n
2
+
3
+
4
+ @i18n()
5
+ class Team:
6
+ title = "Équipe"
7
+ description = "Découvrez les personnes passionnées qui construisent Nexy."
@@ -0,0 +1,6 @@
1
+ from nexy.i18n import i18n
2
+
3
+ @i18n()
4
+ class BreadcrumbI18n:
5
+ home = "Home"
6
+ docs = "Blog"
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,4 @@
1
+ from fastapi import FastAPI
2
+ from nexy.routers.app import _server
3
+
4
+ app = _server
@@ -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"}