diff --git a/config.py b/config.py
index 01ae613..f5c146f 100755
--- a/config.py
+++ b/config.py
@@ -2,6 +2,7 @@ class Config:
"""Main System Configuration"""
def __init__(self):
self.book_path = "books/"
+ self.TITLE = "pyShelf E-Book Server"
self.book_shelf = "data/shelf.json"
self.catalogue_db = "data/catalogue.db"
self.file_array = [
diff --git a/lib/display.py b/lib/display.py
new file mode 100644
index 0000000..5c37a4a
--- /dev/null
+++ b/lib/display.py
@@ -0,0 +1,102 @@
+#!/usr/bin/python
+import cgi
+import sys
+
+sys.path.insert(0, '../')
+from config import Config
+
+
+class Frontend():
+ """Dynamic frontend display functions"""
+
+ def __init__(self, dimensions=[0, 0]):
+ """
+ :param dimensions: array containing screen size [x, y]
+ """
+ self.dimensions = dimensions
+ self.TITLE = Config().TITLE
+
+ def html_Headers(self):
+ """
+ HTML headers
+ :returns _head: HTML render of page headers
+ """
+ _head = """
+
+
+
+
+
+
+
+ %s
+
+ """ % self.TITLE
+ return _head
+
+ def app_Headers(self):
+ """
+ App specific headers
+ :returns _head: HTML render of application specific headers
+ """
+ _head = """
+
+
+
+ """
+ return _head
+
+ def app_body(self, nav, shelf):
+ """
+ Main interface body, and navigation
+ :param nav: nav[] system navigation list
+ :param shelf: shelf[0{path:"",title:"",cover:"",author:""}]
+ :returns _body: HTML render of page body
+ """
+ _body = """
+
+ """ %(nav, shelf)
+ return _body
+
+ def app_footer(self):
+ """
+ Main interface footer; Closes HTML
+ :returns _footer: HTML render of page footer
+ """
+ _footer = """
+
+
+
+
+ """
+ return _footer
+
+ def compile(self, nav, shelf):
+ """
+ Compiles user interface
+ :returns _ui: Compiled HTML for page layout
+ """
+ _head = self.html_Headers() + self.app_Headers()
+ _body = self.app_body(nav, shelf)
+ _foot = self.app_footer()
+ try:
+ _ui = _head + _body + _foot
+ return _ui
+ except Exception as e:
+ return e
diff --git a/lib/pyShelf.py b/lib/pyShelf.py
index 7052955..3a09991 100755
--- a/lib/pyShelf.py
+++ b/lib/pyShelf.py
@@ -65,11 +65,15 @@ class RequestHandler(BaseHTTPRequestHandler):
try: serve_file.close()
except Exception: pass
+
class BookDisplay:
"""All functions related to displaying book information in the HTML UI"""
def __init__(self):
- """Initialize class variables"""
+ """
+ Initialize class variables
+ :return: None
+ """
self.books_per_page = None
self.current_page = 0
self.thumbnail_size = [200, 300]
@@ -77,22 +81,39 @@ class BookDisplay:
self.total_pages = None
def nextPage(self):
- """Goto next book page"""
+ """
+ Goto next book page
+ :return: new current_page
+ """
self.current_page += 1
return self.current_page
def previousPage(self):
+ """
+ Goto previous book page
+ :return: new current_page
+ """
self.current_page -= 1
return self.current_page
def booksPerPage(self, screen_size):
+ """
+ Set books per page
+
+ :param screen_size: Array containing x,y pixel sizes
+ :return: self.books_per_page
+ """
x = (self.thumbnail_size[0] * self.thumbnail_scale) + 10
y = (self.thumbnail_size[1] * self.thumbnail_scale) + 10
self.books_per_page = int(screen_size[0]//x) * int(screen_size[1]//y)
+ return self.books_per_page
class BookServer:
- """HTTP Frontend"""
+ """
+ HTTP server functions required to display e-books
+ """
+
def __init__(self):
# TODO Get server Ip Address
self.server_address = ('', 8000)
@@ -107,17 +128,8 @@ class BookServer:
else:
self.close_prompt()
- def run(self, test=0):
+ def run(self):
"""Start HTTP Server"""
- self.httpd = HTTPServer(self.server_address, self.handler)
- if test != 0:
- try:
- self.httpd.serve_forever()
- self.httpd.handle_request()
- self.close()
- return True
- except Exception:
- return False
try:
print("Server running @ http://127.0.0.1:8000")
self.httpd.serve_forever()
diff --git a/main.py b/main.py
index 1e0acfb..c8f3f6f 100755
--- a/main.py
+++ b/main.py
@@ -5,12 +5,14 @@ from config import Config
from lib.library import Catalogue
from lib.pyShelf import InitFiles
from lib.pyShelf import BookServer
-
+from lib.pyShelf import BookDisplay
+from lib.display import Frontend
# sys.path.insert(1, 'lib/')
config = Config() # Get configuration settings
InitFiles(config.file_array) # Initialize file system
Catalogue = Catalogue() # Open the Catalogue
+UI = Frontend()
Server = BookServer()
# new_books = Catalogue.new_files()
Catalogue.import_books() # Filter Your books
diff --git a/static/css/.#main.css b/static/css/.#main.css
deleted file mode 120000
index 2efe4f5..0000000
--- a/static/css/.#main.css
+++ /dev/null
@@ -1 +0,0 @@
-raelon@golumnsec.2706:1573068976
\ No newline at end of file
diff --git a/tests/.#test_bookserver.py b/tests/.#test_bookserver.py
deleted file mode 120000
index 2efe4f5..0000000
--- a/tests/.#test_bookserver.py
+++ /dev/null
@@ -1 +0,0 @@
-raelon@golumnsec.2706:1573068976
\ No newline at end of file
diff --git a/tests/.#test_library.py b/tests/.#test_library.py
deleted file mode 120000
index 2efe4f5..0000000
--- a/tests/.#test_library.py
+++ /dev/null
@@ -1 +0,0 @@
-raelon@golumnsec.2706:1573068976
\ No newline at end of file
diff --git a/tests/test_bookserver.py b/tests/test_bookserver.py
index 5534af7..72400fc 100644
--- a/tests/test_bookserver.py
+++ b/tests/test_bookserver.py
@@ -2,16 +2,21 @@ import sys
import unittest
from lib.pyShelf import BookDisplay, BookServer
-
+from lib.display import Frontend
sys.path.insert(0, '../lib')
sys.path.insert(1, '../')
class BookServerTest(unittest.TestCase):
- def test_bookserver(self):
- server = BookServer()
- self.assertTrue(server.run())
+ def __init__(self):
+ self.dimensions = [900, 450]
def test_booksPerPage(self):
- x, y = 900, 450
+ x, y = self.dimensions[0], self.dimensions[1]
self.assertGreater(BookDisplay().booksPerPage([x,y]), 0)
+
+ def test_Frontend(self):
+ x, y = self.dimensions[0], self.dimensions[1]
+ ui = Frontend([x, y]).compile("TestCase", "Test Shelf")
+ print(ui)
+ self.assertNotEqual(ui, False)