Add for file iterator check access to file
- Rename function fileiter to file_iterator; Fix: - BrokenPipeError for thread; - Log strings;
This commit is contained in:
parent
eabd85f68b
commit
346f01c9d9
3 changed files with 33 additions and 34 deletions
|
@ -23,13 +23,15 @@ import os
|
|||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
def fileiter(filename):
|
||||
log.debug("Calc file %s size" % filename)
|
||||
def file_iterator(filename):
|
||||
log.debug("Try access to file \"%s\"", filename)
|
||||
if not os.path.isfile(filename):
|
||||
raise FileNotFoundError("File \"%s\" not found", filename)
|
||||
|
||||
log.debug("Get size of file \"%s\"", filename)
|
||||
yield os.path.getsize(filename)
|
||||
|
||||
log.debug("Open file %s to byte-read" % filename)
|
||||
|
||||
log.debug("Open file \"%s\" to byte-read", filename)
|
||||
with open(filename, "rb") as f:
|
||||
while True:
|
||||
file_data = f.read(1024)
|
||||
|
|
|
@ -22,7 +22,7 @@ import logging
|
|||
import config
|
||||
|
||||
from .common import MAX_REQUEST_LINE_SIZE, HandlerType, HTTPMethod
|
||||
from .file_read import fileiter
|
||||
from .file_read import file_iterator
|
||||
from .response import Response
|
||||
|
||||
|
||||
|
@ -44,29 +44,23 @@ class HTTPHandler:
|
|||
|
||||
self.data = b""
|
||||
|
||||
self.__handle_connection()
|
||||
try:
|
||||
self.__handle_connection()
|
||||
except BrokenPipeError:
|
||||
log.info("Conenction pipe broken, close thread")
|
||||
|
||||
def __write_data(self, data_iter):
|
||||
for chunk in data_iter:
|
||||
try:
|
||||
self.write_fd.write(chunk)
|
||||
self.write_fd.flush()
|
||||
except BrokenPipeError:
|
||||
pass
|
||||
def __write_data(self, response):
|
||||
for chunk in response:
|
||||
self.write_fd.write(chunk)
|
||||
self.write_fd.flush()
|
||||
|
||||
def __read_data(self, size=MAX_REQUEST_LINE_SIZE+1):
|
||||
try:
|
||||
return self.read_fd.readline(size)
|
||||
except BrokenPipeError:
|
||||
pass
|
||||
return self.read_fd.readline(size)
|
||||
|
||||
def __close(self):
|
||||
try:
|
||||
self.write_fd.close()
|
||||
self.read_fd.close()
|
||||
self.conn.close()
|
||||
except BrokenPipeError:
|
||||
pass
|
||||
self.write_fd.close()
|
||||
self.read_fd.close()
|
||||
self.conn.close()
|
||||
|
||||
def __handle_connection(self):
|
||||
"""
|
||||
|
@ -211,14 +205,14 @@ class HTTPHandler:
|
|||
self.__close()
|
||||
return
|
||||
|
||||
log.debug("Want to receive {} bytes from client".format(bytes_to_receive))
|
||||
log.debug("Want to receive %s bytes from client", bytes_to_receive)
|
||||
self.data = self.read_fd.read(bytes_to_receive)
|
||||
|
||||
log.debug("Request method: %s" % self.http_method)
|
||||
log.debug("Requested address: %s" % self.http_address)
|
||||
log.debug("Request headers: %s" % self.http_headers)
|
||||
log.debug("Request in GET after ?: %s" % self.http_get_request)
|
||||
log.debug("Data: %s" % self.data)
|
||||
log.debug("Request method: %s", self.http_method)
|
||||
log.debug("Requested address: %s", self.http_address)
|
||||
log.debug("Request headers: %s", self.http_headers)
|
||||
log.debug("Request in GET after ?: %s", self.http_get_request)
|
||||
log.debug("Data: %s", self.data)
|
||||
|
||||
self.__send_form_data()
|
||||
|
||||
|
@ -234,8 +228,8 @@ class HTTPHandler:
|
|||
found = True
|
||||
|
||||
if path.handler_type == HandlerType.STATIC_FILE:
|
||||
log.debug("Address associated with static file on path {}".format(path.link))
|
||||
r = Response(data=fileiter(path.link))
|
||||
log.debug("Address associated with static file on path %s", path.link)
|
||||
r = Response(data=file_iterator(path.link))
|
||||
self.__write_data(r)
|
||||
|
||||
elif path.handler_type == HandlerType.FUNCTION:
|
||||
|
|
|
@ -16,15 +16,18 @@ def init_server_socket(server_handler):
|
|||
|
||||
try:
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as main_server_socket:
|
||||
log.debug("Set socket option REUSEADDR to True")
|
||||
main_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
|
||||
log.debug("Attempt to bind socket to 0.0.0.0:{}".format(config.SETUP["server"]["port"]))
|
||||
|
||||
log.info("Attempt to bind socket to 0.0.0.0:%d", config.SETUP["server"]["port"])
|
||||
main_server_socket.bind(("0.0.0.0", config.SETUP["server"]["port"]))
|
||||
log.debug("Make socket is listen")
|
||||
|
||||
log.debug("Make socket to listen")
|
||||
main_server_socket.listen()
|
||||
|
||||
while True:
|
||||
conn, addr = main_server_socket.accept()
|
||||
log.info("Accepted connection from %s", addr[0])
|
||||
log.info("Accept connection from %s", addr[0])
|
||||
|
||||
thr_serv_conn = threading.Thread(target=server_handler, args=(conn, addr,), daemon=True)
|
||||
thr_serv_conn.start()
|
||||
|
|
Loading…
Reference in a new issue