Files
pyShelf/src/backend/lib/pyShelf.py
2023-03-18 00:58:35 -04:00

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)