Skip to content

Commit 78b9dda

Browse files
committed
1 parent c93d8f9 commit 78b9dda

File tree

4 files changed

+41
-26
lines changed

4 files changed

+41
-26
lines changed

robyn/__init__.py

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from robyn import status_codes
1111
from robyn.argument_parser import Config
1212
from robyn.authentication import AuthenticationHandler
13+
from robyn.cli import start_dev_server
1314
from robyn.dependency_injection import DependencyMap
1415
from robyn.env_populator import load_vars
1516
from robyn.events import Events
@@ -56,8 +57,6 @@ def __init__(
5657
"SERVER IS RUNNING IN VERBOSE/DEBUG MODE. Set --log-level to WARN to run in production mode.",
5758
color=Colors.BLUE,
5859
)
59-
if self.config.dev:
60-
exit("Dev mode is not supported in the python wrapper. Please use the CLI. e.g. python3 -m robyn app.py --dev ")
6160

6261
self.router = Router()
6362
self.middleware_router = MiddlewareRouter()
@@ -225,21 +224,24 @@ def start(self, host: str = "127.0.0.1", port: int = 8080, _check_port: bool = T
225224

226225
mp.allow_connection_pickling()
227226

228-
run_processes(
229-
host,
230-
port,
231-
self.directories,
232-
self.request_headers,
233-
self.router.get_routes(),
234-
self.middleware_router.get_global_middlewares(),
235-
self.middleware_router.get_route_middlewares(),
236-
self.web_socket_router.get_routes(),
237-
self.event_handlers,
238-
self.config.workers,
239-
self.config.processes,
240-
self.response_headers,
241-
open_browser,
242-
)
227+
if self.config.dev:
228+
start_dev_server(self.config, self.config.file_path)
229+
else:
230+
run_processes(
231+
host,
232+
port,
233+
self.directories,
234+
self.request_headers,
235+
self.router.get_routes(),
236+
self.middleware_router.get_global_middlewares(),
237+
self.middleware_router.get_route_middlewares(),
238+
self.web_socket_router.get_routes(),
239+
self.event_handlers,
240+
self.config.workers,
241+
self.config.processes,
242+
self.response_headers,
243+
open_browser,
244+
)
243245

244246
def exception(self, exception_handler: Callable):
245247
self.exception_handler = exception_handler

robyn/argument_parser.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import argparse
2+
import sys
23

34

45
class Config:
@@ -87,6 +88,8 @@ def __init__(self) -> None:
8788
if arg.endswith(".py"):
8889
self.file_path = arg
8990
break
91+
else:
92+
self.file_path = sys.argv[0]
9093

9194
if self.dev and (self.processes != 1 or self.workers != 1):
9295
raise Exception("--processes and --workers shouldn't be used with --dev")

robyn/cli.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def start_dev_server(config: Config, file_path: Optional[str] = None):
8484
directory_path = absolute_file_path.parent
8585

8686
if config.dev and not os.environ.get("IS_RELOADER_RUNNING", False):
87-
setup_reloader(str(directory_path), str(absolute_file_path))
87+
setup_reloader(config, str(directory_path), str(absolute_file_path))
8888
return
8989

9090

robyn/reloader.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from watchdog.events import FileSystemEventHandler
1010
from watchdog.observers import Observer
1111

12+
from robyn import Config
1213
from robyn.logger import Colors, logger
1314

1415
dir_path = None
@@ -58,8 +59,8 @@ def clean_rust_binaries(rust_binaries: List[str]):
5859
os.remove(file)
5960

6061

61-
def setup_reloader(directory_path: str, file_path: str):
62-
event_handler = EventHandler(file_path, directory_path)
62+
def setup_reloader(config: Config, directory_path: str, file_path: str):
63+
event_handler = EventHandler(config, file_path, directory_path)
6364

6465
event_handler.reload()
6566

@@ -91,7 +92,8 @@ def terminating_signal_handler(_sig, _frame):
9192

9293

9394
class EventHandler(FileSystemEventHandler):
94-
def __init__(self, file_path: str, directory_path: str) -> None:
95+
def __init__(self, config: Config, file_path: str, directory_path: str) -> None:
96+
self.config = config
9597
self.file_path = file_path
9698
self.directory_path = directory_path
9799
self.process = None # Keep track of the subprocess
@@ -115,11 +117,19 @@ def reload(self):
115117
clean_rust_binaries(self.built_rust_binaries)
116118
self.built_rust_binaries = compile_rust_files(self.directory_path)
117119

118-
self.process = subprocess.Popen(
119-
[sys.executable, *arguments],
120-
env=new_env,
121-
start_new_session=False,
122-
)
120+
if self.config.dev and self.config.file_path is not None:
121+
subprocess.call(f'cd {"/".join(self.config.file_path.split("/")[-2:-1])}', shell=True)
122+
self.process = subprocess.Popen(
123+
[sys.executable, "-m", self.config.file_path.split("/")[-2], *arguments],
124+
env=new_env,
125+
start_new_session=False,
126+
)
127+
else:
128+
self.process = subprocess.Popen(
129+
[sys.executable, *arguments],
130+
env=new_env,
131+
start_new_session=False,
132+
)
123133

124134
self.last_reload = time.time()
125135

0 commit comments

Comments
 (0)