-
-
Notifications
You must be signed in to change notification settings - Fork 263
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
7 changed files
with
294 additions
and
156 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,57 +1,51 @@ | ||
import argparse | ||
|
||
|
||
class ArgumentParser(argparse.ArgumentParser): | ||
class Config: | ||
def __init__(self) -> None: | ||
self.parser = argparse.ArgumentParser( | ||
parser = argparse.ArgumentParser( | ||
description="Robyn, a fast async web framework with a rust runtime." | ||
) | ||
self.parser.add_argument( | ||
parser.add_argument( | ||
"--processes", | ||
type=int, | ||
default=1, | ||
required=False, | ||
help="Choose the number of processes. [Default: 1]", | ||
) | ||
self.parser.add_argument( | ||
parser.add_argument( | ||
"--workers", | ||
type=int, | ||
default=1, | ||
required=False, | ||
help="Choose the number of workers. [Default: 1]", | ||
) | ||
self.parser.add_argument( | ||
parser.add_argument( | ||
"--dev", | ||
dest="dev", | ||
action="store_true", | ||
default=False, | ||
help="Development mode. It restarts the server based on file changes.", | ||
) | ||
|
||
self.parser.add_argument( | ||
parser.add_argument( | ||
"--log-level", | ||
dest="log_level", | ||
default="INFO", | ||
default=None, | ||
help="Set the log level name", | ||
) | ||
|
||
self.args, unknown = self.parser.parse_known_args() | ||
|
||
@property | ||
def num_processes(self) -> int: | ||
return self.args.processes | ||
args, unknown = parser.parse_known_args() | ||
|
||
@property | ||
def workers(self) -> int: | ||
return self.args.workers | ||
self.processes = args.processes | ||
self.workers = args.workers | ||
self.dev = args.dev | ||
|
||
@property | ||
def log_level(self) -> str: | ||
return self.args.log_level | ||
|
||
@property | ||
def is_dev(self) -> bool: | ||
_is_dev = self.args.dev | ||
if _is_dev and (self.num_processes != 1 or self.workers != 1): | ||
if self.dev and (self.processes != 1 or self.workers != 1): | ||
raise Exception("--processes and --workers shouldn't be used with --dev") | ||
return _is_dev | ||
|
||
if self.dev and args.log_level is None: | ||
self.log_level = "DEBUG" | ||
elif args.log_level is None: | ||
self.log_level = "INFO" | ||
else: | ||
self.log_level = args.log_level |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,43 +1,70 @@ | ||
import subprocess | ||
import sys | ||
from typing import Dict, List | ||
|
||
from watchdog.events import FileSystemEventHandler | ||
from robyn.events import Events | ||
from robyn.processpool import run_processes | ||
|
||
from robyn.robyn import FunctionInfo | ||
from robyn.router import MiddlewareRoute, Route | ||
from robyn.types import Directory, Header | ||
from robyn.ws import WS | ||
|
||
|
||
class EventHandler(FileSystemEventHandler): | ||
def __init__(self, file_name) -> None: | ||
self.file_name = file_name | ||
def __init__( | ||
self, | ||
url: str, | ||
port: int, | ||
directories: List[Directory], | ||
request_headers: List[Header], | ||
routes: List[Route], | ||
middlewares: List[MiddlewareRoute], | ||
web_sockets: Dict[str, WS], | ||
event_handlers: Dict[Events, FunctionInfo], | ||
workers: int, | ||
processes: int, | ||
) -> None: | ||
self.url = url | ||
self.port = port | ||
self.directories = directories | ||
self.request_headers = request_headers | ||
self.routes = routes | ||
self.middlewares = middlewares | ||
self.web_sockets = web_sockets | ||
self.event_handlers = event_handlers | ||
self.n_workers = workers | ||
self.n_processes = processes | ||
self.processes = [] | ||
self.python_alias = ( | ||
"python3" if not sys.platform.startswith("win32") else "python" | ||
) | ||
self.shell = True if sys.platform.startswith("win32") else False | ||
|
||
def start_server_first_time(self) -> None: | ||
if self.processes: | ||
raise Exception("Something wrong with the server") | ||
self.processes.append( | ||
subprocess.Popen( | ||
[self.python_alias, self.file_name], | ||
shell=self.shell, | ||
start_new_session=False, | ||
) | ||
|
||
def start_server(self): | ||
processes = run_processes( | ||
self.url, | ||
self.port, | ||
self.directories, | ||
self.request_headers, | ||
self.routes, | ||
self.middlewares, | ||
self.web_sockets, | ||
self.event_handlers, | ||
self.n_workers, | ||
self.n_processes, | ||
True, | ||
) | ||
|
||
self.processes.extend(processes) | ||
|
||
def stop_server(self): | ||
for process in self.processes: | ||
process.kill() | ||
|
||
def on_any_event(self, event) -> None: | ||
""" | ||
This function is a callback that will start a new server on every even change | ||
:param event FSEvent: a data structure with info about the events | ||
""" | ||
|
||
if len(self.processes) > 0: | ||
for process in self.processes: | ||
process.terminate() | ||
self.processes.append( | ||
subprocess.Popen( | ||
[self.python_alias, self.file_name], | ||
shell=self.shell, | ||
start_new_session=False, | ||
) | ||
) | ||
for process in self.processes: | ||
process.kill() | ||
|
||
self.start_server() |
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.