Skip to content

Commit a281881

Browse files
authored
Merge pull request #137 from AllDotPy/feat.middguard.tpl
feat: fletx.cli: Add midddlewares and guard generation templates
2 parents b3b146f + 1a78455 commit a281881

3 files changed

Lines changed: 81 additions & 3 deletions

File tree

fletx/cli/commands/generate.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def add_arguments(self, parser: CommandParser) -> None:
2020
"""Add arguments specific to the component command."""
2121
parser.add_argument(
2222
"type",
23-
choices=["controller", "service", "model", "component", "page"],
23+
choices=["controller", "service", "model", "component", "page", "middleware", "guard"],
2424
help="Type of component to generate"
2525
)
2626
parser.add_argument(
@@ -139,7 +139,9 @@ def _get_default_template(self, component_type: str) -> str:
139139
"service": "service",
140140
"model": "model",
141141
"component": "component",
142-
"page": "page"
142+
"page": "page",
143+
"middleware": "middleware",
144+
"guard": "guard"
143145
}
144146

145147
return template_mapping.get(component_type, "component")
@@ -153,7 +155,9 @@ def _get_default_output_dir(self, component_type: str) -> str:
153155
"service": "app/services",
154156
"model": "app/models",
155157
"component": "app/components",
156-
"page": "app/pages"
158+
"page": "app/pages",
159+
"middleware": "app/middlewares",
160+
"guard": "app/guards"
157161
}
158162

159163
return dir_mapping.get(component_type, "app/components")
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
"""
2+
{{ name | pascal_case }} Guard.
3+
This is automatically generated by FletX CLI.
4+
Customize this guard as needed.
5+
"""
6+
7+
from typing import Optional
8+
9+
from fletx.navigation import RouteGuard, RouteInfo # type: ignore
10+
from fletx.utils import get_logger # type: ignore
11+
12+
13+
class {{ name | pascal_case }}Guard(RouteGuard):
14+
"""{{ name | pascal_case }} Guard."""
15+
16+
def __init__(self):
17+
self._logger = get_logger('FletX.ConfirmNavigationGuard')
18+
19+
async def can_activate(self, route_info: RouteInfo) -> bool:
20+
"""Called before entering the route."""
21+
22+
return True
23+
24+
async def can_deactivate(self, current_route: RouteInfo) -> bool:
25+
"""Called before leaving the route."""
26+
27+
return True
28+
29+
async def redirect_to(self, route_info: RouteInfo) -> Optional[str]:
30+
"""Redirect to another route if needed."""
31+
32+
return None
33+
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
"""
2+
{{ name | pascal_case }} Middleware.
3+
This is automatically generated by FletX CLI.
4+
Customize this middleware as needed.
5+
"""
6+
7+
from typing import Optional
8+
9+
from fletx.navigation import RouteMiddleware, RouteInfo, NavigationIntent # type: ignore
10+
from fletx.utils import get_logger # type: ignore
11+
12+
13+
class {{ name | pascal_case }}Middleware(RouteMiddleware):
14+
"""{{ name | pascal_case }} Middleware."""
15+
16+
def __init__(self):
17+
self.logger = get_logger('FletX.{{ name | pascal_case }}Middleware')
18+
19+
async def before_navigation(
20+
self,
21+
from_route: RouteInfo,
22+
to_route: RouteInfo
23+
) -> Optional[NavigationIntent]:
24+
"""Called before navigation."""
25+
26+
pass
27+
28+
async def after_navigation(self, route_info: RouteInfo) -> None:
29+
"""Called after navigation."""
30+
31+
pass
32+
33+
async def on_navigation_error(
34+
self,
35+
error: Exception,
36+
route_info: RouteInfo
37+
) -> None:
38+
"""Execute when navigation fails."""
39+
self.logger.error(f"Navigation error: {error}")
40+
pass
41+

0 commit comments

Comments
 (0)