22import time
33import traceback
44from http .server import SimpleHTTPRequestHandler , ThreadingHTTPServer
5+ from pathlib import Path
56
67import watchfiles
78from rich .console import Console
89
9- from render_engine_cli .utils import get_site
10-
11- console = Console ()
10+ from render_engine_cli .utils import get_site , remove_output_folder
1211
1312
1413def spawn_server (server_address : tuple [str , int ], directory : str ) -> ThreadingHTTPServer :
@@ -59,6 +58,7 @@ def __init__(
5958 dirs_to_watch : str | None = None ,
6059 patterns : list [str ] | None = None ,
6160 ignore_patterns : list [str ] | None = None ,
61+ clean : bool = False ,
6262 * args ,
6363 ** kwargs ,
6464 ) -> None :
@@ -70,29 +70,33 @@ def __init__(
7070 self .dirs_to_watch = dirs_to_watch
7171 self .patterns = patterns
7272 self .ignore_patterns = ignore_patterns
73+ self .clean = clean
74+ self .console = Console ()
7375
7476 def start_server (self ) -> None :
7577 if not getattr (self , "server" , False ):
76- console .print (
78+ self . console .print (
7779 f"[bold green]Spawning server on http://{ self .server_address [0 ]} :{ self .server_address [1 ]} [/bold green]"
7880 )
7981 self .server = spawn_server (self .server_address , self .output_path )
8082 self ._thread = threading .Thread (target = self .server .serve_forever )
8183 self ._thread .start ()
8284
8385 def stop_server (self ) -> None :
84- console .print ("[bold red]Stopping server[/bold red]" )
86+ self . console .print ("[bold red]Stopping server[/bold red]" )
8587 self .server .shutdown ()
8688 self ._thread .join ()
8789
8890 def rebuild (self ) -> None :
89- console .print ("[bold purple]Reloading and Rebuilding site...[/bold purple]" )
91+ self . console .print ("[bold purple]Reloading and Rebuilding site...[/bold purple]" )
9092 site = get_site (self .import_path , self .site , reload = True )
93+ if self .clean :
94+ remove_output_folder (Path (site .output_path ), console = self .console )
9195 try :
9296 site .render ()
9397 except Exception :
94- console .print ("[bold red]Failed to render site[/bold red]" )
95- console .print (traceback .format_exc ())
98+ self . console .print ("[bold red]Failed to render site[/bold red]" )
99+ self . console .print (traceback .format_exc ())
96100 pass
97101
98102 def stop_watcher (self ) -> bool :
@@ -122,7 +126,7 @@ def watch(self) -> None:
122126 If a KeyboardInterrupt is raised, it stops the observer and server.
123127 """
124128
125- console .print (f"[yellow]Serving { self .output_path } [/yellow]" )
129+ self . console .print (f"[yellow]Serving { self .output_path } [/yellow]" )
126130 while not self .stop_watcher ():
127131 try :
128132 if self .dirs_to_watch :
@@ -144,5 +148,5 @@ def __exit__(self, exc_type, exc_value, traceback) -> None:
144148 """Stopping Context manager for the class"""
145149
146150 self .stop_server ()
147- console .print ("[bold red]FIN![/bold red]" )
151+ self . console .print ("[bold red]FIN![/bold red]" )
148152 return None
0 commit comments