mirror of
https://github.com/th3r00t/pyShelf.git
synced 2026-04-28 01:59:35 -04:00
Added HTTP server and response
This commit is contained in:
Binary file not shown.
@@ -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
59
lib/\
Normal 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
|
||||||
|
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
6
main.py
6
main.py
@@ -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
11
tests/test_bookserver.py
Normal 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())
|
||||||
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user