Added HTTP server and response

This commit is contained in:
Raelon Masters
2019-10-31 22:14:34 -04:00
parent eb59ac439a
commit ce93050b7f
8 changed files with 133 additions and 16 deletions

Binary file not shown.

View File

@@ -1,13 +1,11 @@
class Config: class Config:
"""Main System Configuration""" """Main System Configuration"""
def __init__(self): def __init__(self):
self.book_path = "books/" self.book_path = "/home/raelon/Books/"
self.book_shelf = "data/shelf.json" self.book_shelf = "data/shelf.json"
self.catalogue_db = "data/catalogue.db" self.catalogue_db = "data/catalogue.db"
self.file_array = [ self.file_array = [
"data/catalogue.json",
self.book_shelf, self.book_shelf,
self.catalogue_db, self.catalogue_db,
"conf/settings.json"
] ]
self.auto_scan = True self.auto_scan = True

File diff suppressed because one or more lines are too long

59
lib/\ Normal file
View File

@@ -0,0 +1,59 @@
#!/usr/bin/python
import os
import zipfile
from http.server import HTTPServer, BaseHTTPRequestHandler
from config import Config
from lib.library import Catalogue
from lib.storage import Storage
config = Config()
Storage = Storage()
class InitFiles:
"""First run file creation operations"""
def __init__(self, file_array):
print("Begining creation of file structure")
for _pointer in file_array:
if not os.path.isfile(_pointer):
self.CreateFile(_pointer)
def CreateFile(self, _pointer):
"""Create the file"""
if not os.path.isdir(os.path.split(_pointer)[0]):
os.mkdir(os.path.split(_pointer)[0])
f = open(_pointer, "w+")
f.close()
class BookServer:
"""HTTP Frontend"""
def __init__(self):
self.server_address = ('', 8000)
self.handler = 'BaseHTTPRequestHandler'
def close_prompt(self):
close = input("Close Server? y/n")
if close == 'y':
self.close()
return True
else:
self.close_prompt()
def run(self):
self.httpd = HTTPServer(self.server_address, self.handler)
try:
self.httpd.serve_forever()
self.httpd.handle_request()
if self.close_prompt() == True:
pass
except Exception:
self.close()
return False
def close(self):
try:
self.httpd.server_close()
return True
except Exception:
return False

View File

@@ -1,6 +1,7 @@
#!/usr/bin/python #!/usr/bin/python
import os import os
import zipfile import zipfile
from http.server import HTTPServer, BaseHTTPRequestHandler
from config import Config from config import Config
from lib.library import Catalogue from lib.library import Catalogue
from lib.storage import Storage from lib.storage import Storage
@@ -22,3 +23,49 @@ class InitFiles:
os.mkdir(os.path.split(_pointer)[0]) os.mkdir(os.path.split(_pointer)[0])
f = open(_pointer, "w+") f = open(_pointer, "w+")
f.close() f.close()
class RequestHandler(BaseHTTPRequestHandler):
"""Request Handler"""
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write(b'Welcome To pyShelf!')
class BookServer:
"""HTTP Frontend"""
def __init__(self):
self.server_address = ('', 8000)
self.handler = RequestHandler
def close_prompt(self):
"""Prompt to close server"""
close = input("Close Server? y/n")
if close == 'y':
self.close()
return True
else:
self.close_prompt()
def run(self):
"""Start HTTP Server"""
self.httpd = HTTPServer(self.server_address, self.handler)
try:
self.httpd.serve_forever()
self.httpd.handle_request()
if self.close_prompt() == True:
pass
except KeyboardInterrupt:
print(KeyboardInterrupt, " Closing Server")
self.close()
return False
def close(self):
"""Stop HTTP Server"""
try:
self.httpd.server_close()
return True
except Exception:
return False

View File

@@ -4,15 +4,17 @@ import sys
from config import Config from config import Config
from lib.library import Catalogue from lib.library import Catalogue
from lib.pyShelf import InitFiles from lib.pyShelf import InitFiles
from lib.pyShelf import BookServer
sys.path.insert(1, 'lib/') # sys.path.insert(1, 'lib/')
config = Config() # Get configuration settings config = Config() # Get configuration settings
InitFiles(config.file_array) # Initialize file system InitFiles(config.file_array) # Initialize file system
Catalogue = Catalogue() # Open the Catalogue Catalogue = Catalogue() # Open the Catalogue
Server = BookServer()
# new_books = Catalogue.new_files() # new_books = Catalogue.new_files()
Catalogue.import_books() # Filter Your books Catalogue.import_books() # Filter Your books
Server.run()
# TODO Figure out a system to get books page count # TODO Figure out a system to get books page count
# TODO Update Documentation # TODO Update Documentation
# TODO Requirements.txt # TODO Requirements.txt

11
tests/test_bookserver.py Normal file
View File

@@ -0,0 +1,11 @@
import unittest
import sys
sys.path.insert(0, '../lib')
sys.path.insert(1, '../')
from pyShelf import BookServer
class BookServerTest(unittest.TestCase):
def test_bookserver(self):
server = BookServer()
self.assertTrue(server.run())

View File

@@ -1,9 +1,9 @@
import unittest import unittest
import sys
# sys.path.insert(1, '../') # sys.path.insert(1, '../')
from lib.library import Catalogue from lib.library import Catalogue
Catalogue = Catalogue() Catalogue = Catalogue()
class LibraryTest(unittest.TestCase): class LibraryTest(unittest.TestCase):
def test_libray_catalogue(self): def test_libray_catalogue(self):