mirror of
https://github.com/th3r00t/pyShelf.git
synced 2026-04-28 01:59:35 -04:00
88 lines
2.6 KiB
Python
Executable File
Vendored
88 lines
2.6 KiB
Python
Executable File
Vendored
#!/usr/bin/env python3
|
|
import asyncio
|
|
import os
|
|
import time
|
|
import websockets
|
|
|
|
from .config import Config
|
|
from .library import Catalogue
|
|
from .storage import Storage
|
|
|
|
|
|
class InitFiles:
|
|
"""First run file creation operations"""
|
|
|
|
def __init__(self, file_array):
|
|
for _pointer in file_array:
|
|
time.sleep(1)
|
|
if not os.path.isfile(_pointer):
|
|
self.CreateFile(_pointer)
|
|
time.sleep(1)
|
|
|
|
def CreateFile(self, _pointer):
|
|
"""
|
|
Checks if file exists and creates it if not
|
|
"""
|
|
if not os.path.isdir(os.path.split(_pointer)[0]):
|
|
os.mkdir(os.path.split(_pointer)[0])
|
|
f = open(_pointer, "w+")
|
|
f.close()
|
|
|
|
|
|
class Server:
|
|
"""
|
|
Main Server Container
|
|
:TODO: Document this
|
|
"""
|
|
|
|
def __init__(self, root):
|
|
self.root = root
|
|
self.host = ("127.0.0.1", 1337)
|
|
self.config = Config(self.root)
|
|
self.loop = None
|
|
self.serve = None
|
|
|
|
async def __aexit__(self, *args, **kwargs):
|
|
await self.serve.__aexit__(*args, **kwargs)
|
|
|
|
async def initialize_server(self):
|
|
self.config.logger.info("INITIALIZE")
|
|
self.serve = await websockets.serve(self.socketio, self.host[0], self.host[1])
|
|
await asyncio.sleep(0.1)
|
|
self.config.logger.info("Server Initialization Complete")
|
|
|
|
async def runImport(self):
|
|
InitFiles(self.config.file_array)
|
|
_storage = Storage(self.config)
|
|
_storage.check_ownership()
|
|
Catalogue(self.config).import_books()
|
|
_storage.make_collections()
|
|
|
|
async def socketio(self, websocket, path):
|
|
self.config.logger.info("Listener Starting")
|
|
async for message in websocket:
|
|
if message == "ping":
|
|
self.config.logger.info("<< Ping")
|
|
tx = self.pong()
|
|
elif message == "importBooks":
|
|
self.config.logger.info("Starting Import")
|
|
tx = "Starting Import . . ."
|
|
await websocket.send(tx)
|
|
await asyncio.sleep(0.01)
|
|
await self.runImport()
|
|
await asyncio.sleep(0.01)
|
|
tx = "complete"
|
|
else:
|
|
self.config.logger.info("Unhandled Message Rcvd :: {}".format(message))
|
|
await websocket.send(tx)
|
|
|
|
def pong(self):
|
|
self.config.logger.info(">> Pong")
|
|
return "pong"
|
|
|
|
async def start(self):
|
|
self.loop = asyncio.get_running_loop()
|
|
self.loop.set_debug(True)
|
|
await websockets.serve(self.socketio, self.host[0], self.host[1])
|
|
await asyncio.sleep(1)
|