.
This commit is contained in:
		| @@ -1,42 +1,44 @@ | ||||
| class Request: | ||||
|     __slots__ = ('protocol', 'url', 'headers', 'version', 'method', 'query_string', 'body', 'parsed_json', 'parsed_args') | ||||
|  | ||||
|     def __init__(self, protocol, url, headers, version, method): | ||||
|         self.protocol = protocol | ||||
|         self.url = url | ||||
|         self.headers = headers | ||||
|         self.version = version | ||||
|         self.method = method | ||||
|  | ||||
|         # Capture query string | ||||
|         query_string_position = self.url.find("?") | ||||
|         if query_string_position != -1: | ||||
|             self.query_string = self.url[query_string_position+1:] | ||||
|             self.url = self.url[:query_string_position] | ||||
|         else: | ||||
|             self.query_string = None | ||||
|  | ||||
|         # Init but do not inhale | ||||
|         self.body = None | ||||
|         self.parsed_json = None | ||||
|         self.parsed_args = None | ||||
|  | ||||
|     @property | ||||
|     def json(self): | ||||
|         if not self.parsed_json: | ||||
|             if not self.body: | ||||
|                 raise ValueError("No body to parse") | ||||
|             self.parsed_json = json_loads(self.body) | ||||
|  | ||||
|         return self.parsed_json  | ||||
|  | ||||
|     @property | ||||
|     def args(self): | ||||
|         if self.parsed_args is None: | ||||
|             if self.query_string: | ||||
|                 parsed_query_string = parse_qs(self.query_string).items() | ||||
|                 self.parsed_args = {k:[_v.decode('utf-8') for _v in v] if len(v)>1 else v[0].decode('utf-8') for k,v in parsed_query_string} | ||||
|             else: | ||||
|                 self.parsed_args = {} | ||||
|  | ||||
| from urllib.parse import parse_qs | ||||
|  | ||||
| class Request: | ||||
|     __slots__ = ('protocol', 'url', 'headers', 'version', 'method', 'query_string', 'body', 'parsed_json', 'parsed_args') | ||||
|  | ||||
|     def __init__(self, protocol, url, headers, version, method): | ||||
|         self.protocol = protocol | ||||
|         self.url = url | ||||
|         self.headers = headers | ||||
|         self.version = version | ||||
|         self.method = method | ||||
|  | ||||
|         # Capture query string | ||||
|         query_string_position = self.url.find("?") | ||||
|         if query_string_position != -1: | ||||
|             self.query_string = self.url[query_string_position+1:] | ||||
|             self.url = self.url[:query_string_position] | ||||
|         else: | ||||
|             self.query_string = None | ||||
|  | ||||
|         # Init but do not inhale | ||||
|         self.body = None | ||||
|         self.parsed_json = None | ||||
|         self.parsed_args = None | ||||
|  | ||||
|     @property | ||||
|     def json(self): | ||||
|         if not self.parsed_json: | ||||
|             if not self.body: | ||||
|                 raise ValueError("No body to parse") | ||||
|             self.parsed_json = json_loads(self.body) | ||||
|  | ||||
|         return self.parsed_json  | ||||
|  | ||||
|     @property | ||||
|     def args(self): | ||||
|         if self.parsed_args is None: | ||||
|             if self.query_string: | ||||
|                 parsed_query_string = parse_qs(self.query_string).items() | ||||
|                 self.parsed_args = {k:[_v.decode('utf-8') for _v in v] if len(v)>1 else v[0].decode('utf-8') for k,v in parsed_query_string} | ||||
|             else: | ||||
|                 self.parsed_args = {} | ||||
|  | ||||
|         return self.parsed_args  | ||||
| @@ -1,4 +1,7 @@ | ||||
| import ujson | ||||
| import httptools | ||||
| from ujson import loads as json_loads | ||||
| from urllib.parse import parse_qs | ||||
|  | ||||
| STATUS_CODES = { | ||||
|     200: 'OK', | ||||
| @@ -18,7 +21,7 @@ class HTTPResponse: | ||||
|     __slots__ = ('body', 'status', 'content_type') | ||||
|  | ||||
|     def __init__(self, body='', status=200, content_type='text/plain'): | ||||
|         self.content_type = 'text/plain' | ||||
|         self.content_type = content_type | ||||
|         self.body = body | ||||
|         self.status = status | ||||
|  | ||||
|   | ||||
| @@ -7,7 +7,6 @@ import httptools | ||||
| import logging | ||||
| from inspect import isawaitable | ||||
| from ujson import loads as json_loads | ||||
| from urllib.parse import parse_qs | ||||
| from traceback import format_exc | ||||
|  | ||||
| import httptools | ||||
| @@ -159,7 +158,6 @@ def abort(msg): | ||||
|     log.info(msg, file=sys.stderr) | ||||
|     sys.exit(1) | ||||
|  | ||||
|  | ||||
| def serve(sanic, host, port, debug=False): | ||||
|     # Create Event Loop | ||||
|     loop = async_loop.new_event_loop() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Channel Cat
					Channel Cat