kopia lustrzana https://github.com/cirospaciari/socketify.py
Converts Option classes from normal classes into python `dataclasses` (#50)
* Make Options dataclasses * Remove duplicate setting key_file_name * Code cleanupspull/75/head
rodzic
a81917ac8e
commit
6f90d2dde6
|
@ -17,6 +17,8 @@ from .native import ffi, lib
|
||||||
from .loop import Loop
|
from .loop import Loop
|
||||||
from .status_codes import status_codes
|
from .status_codes import status_codes
|
||||||
from .helpers import static_route
|
from .helpers import static_route
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from types import NoneType
|
||||||
|
|
||||||
mimetypes.init()
|
mimetypes.init()
|
||||||
|
|
||||||
|
@ -967,7 +969,7 @@ class WebSocketFactory:
|
||||||
def get(self, app, ws):
|
def get(self, app, ws):
|
||||||
if len(self.factory_queue) == 0:
|
if len(self.factory_queue) == 0:
|
||||||
response = WebSocket(ws, app.SSL, app.loop)
|
response = WebSocket(ws, app.SSL, app.loop)
|
||||||
return (response, False)
|
return response, False
|
||||||
|
|
||||||
instances = self.factory_queue.pop()
|
instances = self.factory_queue.pop()
|
||||||
(websocket, _) = instances
|
(websocket, _) = instances
|
||||||
|
@ -997,7 +999,7 @@ class RequestResponseFactory:
|
||||||
if len(self.factory_queue) == 0:
|
if len(self.factory_queue) == 0:
|
||||||
response = AppResponse(res, app.loop, app.SSL, app._template)
|
response = AppResponse(res, app.loop, app.SSL, app._template)
|
||||||
request = AppRequest(req)
|
request = AppRequest(req)
|
||||||
return (response, request, False)
|
return response, request, False
|
||||||
|
|
||||||
instances = self.factory_queue.pop()
|
instances = self.factory_queue.pop()
|
||||||
(response, request, _) = instances
|
(response, request, _) = instances
|
||||||
|
@ -1465,7 +1467,7 @@ class AppResponse:
|
||||||
def try_end(self, message, total_size, end_connection=False):
|
def try_end(self, message, total_size, end_connection=False):
|
||||||
try:
|
try:
|
||||||
if self.aborted:
|
if self.aborted:
|
||||||
return (False, True)
|
return False, True
|
||||||
if self._write_jar is not None:
|
if self._write_jar is not None:
|
||||||
self.write_header("Set-Cookie", self._write_jar.output(header=""))
|
self.write_header("Set-Cookie", self._write_jar.output(header=""))
|
||||||
self._write_jar = None
|
self._write_jar = None
|
||||||
|
@ -1474,7 +1476,7 @@ class AppResponse:
|
||||||
elif isinstance(message, bytes):
|
elif isinstance(message, bytes):
|
||||||
data = message
|
data = message
|
||||||
else:
|
else:
|
||||||
return (False, True)
|
return False, True
|
||||||
result = lib.uws_res_try_end(
|
result = lib.uws_res_try_end(
|
||||||
self.SSL,
|
self.SSL,
|
||||||
self.res,
|
self.res,
|
||||||
|
@ -1483,9 +1485,9 @@ class AppResponse:
|
||||||
ffi.cast("uintmax_t", total_size),
|
ffi.cast("uintmax_t", total_size),
|
||||||
1 if end_connection else 0,
|
1 if end_connection else 0,
|
||||||
)
|
)
|
||||||
return (bool(result.ok), bool(result.has_responded))
|
return bool(result.ok), bool(result.has_responded)
|
||||||
except:
|
except:
|
||||||
return (False, True)
|
return False, True
|
||||||
|
|
||||||
def cork_end(self, message, end_connection=False):
|
def cork_end(self, message, end_connection=False):
|
||||||
self.cork(lambda res: res.end(message, end_connection))
|
self.cork(lambda res: res.end(message, end_connection))
|
||||||
|
@ -1757,11 +1759,6 @@ class App:
|
||||||
if options.key_file_name is None
|
if options.key_file_name is None
|
||||||
else ffi.new("char[]", options.key_file_name.encode("utf-8"))
|
else ffi.new("char[]", options.key_file_name.encode("utf-8"))
|
||||||
)
|
)
|
||||||
socket_options.key_file_name = (
|
|
||||||
ffi.NULL
|
|
||||||
if options.key_file_name is None
|
|
||||||
else ffi.new("char[]", options.key_file_name.encode("utf-8"))
|
|
||||||
)
|
|
||||||
socket_options.cert_file_name = (
|
socket_options.cert_file_name = (
|
||||||
ffi.NULL
|
ffi.NULL
|
||||||
if options.cert_file_name is None
|
if options.cert_file_name is None
|
||||||
|
@ -2259,7 +2256,7 @@ class App:
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
if hasattr(self, "socket"):
|
if hasattr(self, "socket"):
|
||||||
if not self.socket == ffi.NULL:
|
if self.socket != ffi.NULL:
|
||||||
lib.us_listen_socket_close(self.SSL, self.socket)
|
lib.us_listen_socket_close(self.SSL, self.socket)
|
||||||
self.loop.stop()
|
self.loop.stop()
|
||||||
return self
|
return self
|
||||||
|
@ -2302,49 +2299,43 @@ class App:
|
||||||
lib.uws_app_destroy(self.SSL, self.app)
|
lib.uws_app_destroy(self.SSL, self.app)
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
class AppListenOptions:
|
class AppListenOptions:
|
||||||
def __init__(self, port=0, host=None, options=0):
|
port: int = 0
|
||||||
if not isinstance(port, int):
|
host: str = None
|
||||||
|
options: int = 0
|
||||||
|
|
||||||
|
def __post_init__(self):
|
||||||
|
if not isinstance(self.port, int):
|
||||||
raise RuntimeError("port must be an int")
|
raise RuntimeError("port must be an int")
|
||||||
if host is not None and not isinstance(host, str):
|
if not isinstance(self.host, (NoneType, str)):
|
||||||
raise RuntimeError("host must be an String or None")
|
raise RuntimeError("host must be a str if specified")
|
||||||
if not isinstance(options, int):
|
if not isinstance(self.options, int):
|
||||||
raise RuntimeError("options must be an int")
|
raise RuntimeError("options must be an int")
|
||||||
self.port = port
|
|
||||||
self.host = host
|
|
||||||
self.options = options
|
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
class AppOptions:
|
class AppOptions:
|
||||||
def __init__(
|
key_file_name: str = None,
|
||||||
self,
|
cert_file_name: str = None,
|
||||||
key_file_name=None,
|
passphrase: str = None,
|
||||||
cert_file_name=None,
|
dh_params_file_name: str = None,
|
||||||
passphrase=None,
|
ca_file_name: str = None,
|
||||||
dh_params_file_name=None,
|
ssl_ciphers: str = None,
|
||||||
ca_file_name=None,
|
ssl_prefer_low_memory_usage: int = 0
|
||||||
ssl_ciphers=None,
|
|
||||||
ssl_prefer_low_memory_usage=0
|
|
||||||
):
|
|
||||||
if key_file_name is not None and not isinstance(key_file_name, str):
|
|
||||||
raise RuntimeError("key_file_name must be an String or None")
|
|
||||||
if cert_file_name is not None and not isinstance(cert_file_name, str):
|
|
||||||
raise RuntimeError("cert_file_name must be an String or None")
|
|
||||||
if passphrase is not None and not isinstance(passphrase, str):
|
|
||||||
raise RuntimeError("passphrase must be an String or None")
|
|
||||||
if dh_params_file_name is not None and not isinstance(dh_params_file_name, str):
|
|
||||||
raise RuntimeError("dh_params_file_name must be an String or None")
|
|
||||||
if ca_file_name is not None and not isinstance(ca_file_name, str):
|
|
||||||
raise RuntimeError("ca_file_name must be an String or None")
|
|
||||||
if ssl_ciphers is not None and not isinstance(ssl_ciphers, str):
|
|
||||||
raise RuntimeError("ssl_ciphers must be an String or None")
|
|
||||||
if not isinstance(ssl_prefer_low_memory_usage, int):
|
|
||||||
raise RuntimeError("ssl_prefer_low_memory_usage must be an int")
|
|
||||||
|
|
||||||
self.key_file_name = key_file_name
|
def __post_init__(self):
|
||||||
self.cert_file_name = cert_file_name
|
if not isinstance(self.key_file_name, (NoneType, str)):
|
||||||
self.passphrase = passphrase
|
raise RuntimeError("key_file_name must be a str if specified")
|
||||||
self.dh_params_file_name = dh_params_file_name
|
if not isinstance(self.cert_file_name, (NoneType, str)):
|
||||||
self.ca_file_name = ca_file_name
|
raise RuntimeError("cert_file_name must be a str if specified")
|
||||||
self.ssl_ciphers = ssl_ciphers
|
if not isinstance(self.passphrase, (NoneType, str)):
|
||||||
self.ssl_prefer_low_memory_usage = ssl_prefer_low_memory_usage
|
raise RuntimeError("passphrase must be a str if specified")
|
||||||
|
if not isinstance(self.dh_params_file_name, (NoneType, str)):
|
||||||
|
raise RuntimeError("dh_params_file_name must be a str if specified")
|
||||||
|
if not isinstance(self.ca_file_name, (NoneType, str)):
|
||||||
|
raise RuntimeError("ca_file_name must be a str if specified")
|
||||||
|
if not isinstance(self.ssl_ciphers, (NoneType, str)):
|
||||||
|
raise RuntimeError("ssl_ciphers must be a str if specified")
|
||||||
|
if not isinstance(self.ssl_prefer_low_memory_usage, int):
|
||||||
|
raise RuntimeError("ssl_prefer_low_memory_usage must be an int")
|
||||||
|
|
Ładowanie…
Reference in New Issue