Websocket connection established

This commit is contained in:
Raelon Masters
2020-08-08 10:12:06 -04:00
parent 5d97c066a9
commit f3d9d8160f
13 changed files with 205 additions and 72 deletions

View File

@@ -29,6 +29,7 @@ django-widget-tweaks = "*"
Pillow = "*" Pillow = "*"
Django = "*" Django = "*"
uWSGI = "*" uWSGI = "*"
pudb = "*"
[requires] [requires]
python_version = "3.8" python_version = "3.8"

View File

@@ -1,5 +1,4 @@
#!/usr/bin/env python #!/usr/bin/env python
import pathlib import pathlib
import sys import sys

View File

@@ -1,13 +0,0 @@
#!/usr/bin/env python
import pathlib
import sys
from src.backend.lib.storage import Storage
from src.backend.pyShelf_MakeCollections import MakeCollections
PRG_PATH = pathlib.Path.cwd()
LIB_PATH = pathlib.Path.joinpath(PRG_PATH, "src", "backend", "lib")
sys.path.insert(0, PRG_PATH)
print("\n")
MakeCollections(PRG_PATH)

30
pyShelf.py Normal file
View File

@@ -0,0 +1,30 @@
#!/usr/bin/env python3
import asyncio
import websockets
from pathlib import Path
from src.backend.lib.config import Config
root = Path.cwd()
config = Config(root)
async def echo(websocket, path):
async for message in websocket:
if message == "import":
print("message from Con1 >> {}".format(message))
tx = "ack->{}".format(message)
elif message == "Connection 2":
print("message from Con2 >> {}".format(message))
tx = "ack->{}".format(message)
elif message == "ping":
print("<<[{}]".format(message))
tx = pong(message)
await websocket.send(tx)
def pong(message):
return "pong"
start_server = websockets.serve(echo, "127.0.0.1", 1337)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

View File

@@ -1,3 +0,0 @@
#!/usr/bin/env python3
import websockets

0
src/backend/tests/__init__.py Executable file → Normal file
View File

View File

@@ -1,8 +1,8 @@
import json import json
import os import os
from ..lib.config import Config from .lib.config import Config
from ..lib.library import Catalogue from .lib.library import Catalogue
class Test_Config(Config): class Test_Config(Config):

View File

@@ -0,0 +1,6 @@
#!/usr/bin/env python3
from src.backend.lib.pyShelf import Server
def test_start():
server = await Server().start()
assert Server().start() is True

View File

@@ -32,7 +32,7 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# SECURITY WARNING: keep the secret key used in production secret! # SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = CONFIG.SECRET SECRET_KEY = CONFIG.SECRET
# SECURITY WARNING: don't run with debug turned on in production! # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = TEMPLATE_DEBUG = False DEBUG = TEMPLATE_DEBUG = True
if DEBUG is True: if DEBUG is True:
from pudb.remote import set_trace from pudb.remote import set_trace
ALLOWED_HOSTS = CONFIG.allowed_hosts ALLOWED_HOSTS = CONFIG.allowed_hosts

View File

@@ -0,0 +1,12 @@
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
[packages]
pytest = "*"
[requires]
python_version = "3.8"

99
src/interface/static/css/Pipfile.lock generated Normal file
View File

@@ -0,0 +1,99 @@
{
"_meta": {
"hash": {
"sha256": "976a2ca0f737f325f408ba96dbdd2082722d52709e42df5c38f7096e58a834da"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.8"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {
"attrs": {
"hashes": [
"sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c",
"sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==19.3.0"
},
"iniconfig": {
"hashes": [
"sha256:80cf40c597eb564e86346103f609d74efce0f6b4d4f30ec8ce9e2c26411ba437",
"sha256:e5f92f89355a67de0595932a6c6c02ab4afddc6fcdc0bfc5becd0d60884d3f69"
],
"version": "==1.0.1"
},
"more-itertools": {
"hashes": [
"sha256:68c70cc7167bdf5c7c9d8f6954a7837089c6a36bf565383919bb595efb8a17e5",
"sha256:b78134b2063dd214000685165d81c154522c3ee0a1c0d4d113c80361c234c5a2"
],
"markers": "python_version >= '3.5'",
"version": "==8.4.0"
},
"packaging": {
"hashes": [
"sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8",
"sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==20.4"
},
"pluggy": {
"hashes": [
"sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0",
"sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==0.13.1"
},
"py": {
"hashes": [
"sha256:366389d1db726cd2fcfc79732e75410e5fe4d31db13692115529d34069a043c2",
"sha256:9ca6883ce56b4e8da7e79ac18787889fa5206c79dcc67fb065376cd2fe03f342"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==1.9.0"
},
"pyparsing": {
"hashes": [
"sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1",
"sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"
],
"markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2'",
"version": "==2.4.7"
},
"pytest": {
"hashes": [
"sha256:85228d75db9f45e06e57ef9bf4429267f81ac7c0d742cc9ed63d09886a9fe6f4",
"sha256:8b6007800c53fdacd5a5c192203f4e531eb2a1540ad9c752e052ec0f7143dbad"
],
"index": "pypi",
"version": "==6.0.1"
},
"six": {
"hashes": [
"sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259",
"sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'",
"version": "==1.15.0"
},
"toml": {
"hashes": [
"sha256:926b612be1e5ce0634a2ca03470f95169cf16f939018233a670519cb4ac58b0f",
"sha256:bda89d5935c2eac546d648028b9901107a595863cb36bae0c73ac804a9b4ce88"
],
"version": "==0.10.1"
}
},
"develop": {}
}

View File

@@ -6,19 +6,24 @@ $(document).ready(function(){
}; };
}; };
/* Initialize ui variables */ /* Initialize ui variables */
var outstream = []; // put customlog messages here let outstream = []; // put customlog messages here
var win_height = window.innerHeight; // Get the displays height let win_height = window.innerHeight; // Get the displays height
var win_width = window.innerWidth; // Get the displays width let win_width = window.innerWidth; // Get the displays width
var scr_height = window.outerHeight; let scr_height = window.outerHeight;
var scr_width = window.outerWidth; let scr_width = window.outerWidth;
var hdr_height = $('.app_hdr').height(); // Get our header height let hdr_height = $('.app_hdr').height(); // Get our header height
var ftr_height = $('.app_footer').height(); // Get our footer height let ftr_height = $('.app_footer').height(); // Get our footer height
var nav_width = $('.nav_l').width(); // Get the width of our nav items let nav_width = $('.nav_l').width(); // Get the width of our nav items
var cmp_height = window.screen.availHeight; let cmp_height = window.screen.availHeight;
var max_height = win_height - (hdr_height + ftr_height) - (scr_height - win_height); // Set our available height let max_height = win_height - (hdr_height + ftr_height) - (scr_height - win_height); // Set our available height
var u_string = "Username"; const u_string = "Username";
var p_string = "Password"; const p_string = "Password";
var s_string = "search by Title, Author, Tags, or Collections"; const s_string = "search by Title, Author, Tags, or Collections";
const popover = $('#pop_over_0')
const navlink = $('.nav_link')
const inputbox = $('input_box')
const loginbtn = $('#btn_login')
const server = ('ws://127.0.0.1:1337')
customlog([cmp_height]); customlog([cmp_height]);
$(".search_submit").click(function(){ $(".search_submit").click(function(){
var query = $('.nav_search').val(); var query = $('.nav_search').val();
@@ -33,7 +38,7 @@ $(document).ready(function(){
$(this).removeAttr("disabled"); $(this).removeAttr("disabled");
} }
}); });
$('.nav_link').on('mouseover', function (e){ $(navlink).on('mouseover', function (e){
var popover_str = $(this).attr('alt'); var popover_str = $(this).attr('alt');
x = $(this).offset().left; x = $(this).offset().left;
y = $(this).offset().to; y = $(this).offset().to;
@@ -42,7 +47,7 @@ $(document).ready(function(){
$('.popover').css('top', y); $('.popover').css('top', y);
$('.popover').css('display','flex'); $('.popover').css('display','flex');
}); });
$('.nav_link').on('mouseout', function (e){ $(navlink).on('mouseout', function (e){
var popover_str = $(this).attr('alt'); var popover_str = $(this).attr('alt');
x = $(this).offset().left; x = $(this).offset().left;
y = $(this).offset().top; y = $(this).offset().top;
@@ -54,10 +59,10 @@ $(document).ready(function(){
$('#btn_collections').on('click', function (e){ $('#btn_collections').on('click', function (e){
$('.hidden.vert-nav.collections').toggle(); $('.hidden.vert-nav.collections').toggle();
}); });
$('.input_box').on('click', function(){ $(inputbox).on('click', function(){
$(this).attr("value",""); $(this).attr("value","");
}); });
$('.input_box').focusout(function(){ $(inputbox).focusout(function(){
if ($(this).hasClass('nav_search') && $(this).val() == "") { if ($(this).hasClass('nav_search') && $(this).val() == "") {
$(this).attr("value", s_string); $(this).attr("value", s_string);
} }
@@ -68,7 +73,7 @@ $(document).ready(function(){
$(this).attr("value", p_string); $(this).attr("value", p_string);
} }
}); });
$('#btn_login').on('click', function(){ $(loginbtn).on('click', function(){
$('#hdr_nav_login').toggle(); $('#hdr_nav_login').toggle();
}) })
$('.favorite_action').on('click', function(){ $('.favorite_action').on('click', function(){
@@ -88,11 +93,11 @@ $(document).ready(function(){
window.location.href="/flip_sort/"+$("#_order").val(); window.location.href="/flip_sort/"+$("#_order").val();
}); });
$('#search_string').html("<i> "+$('#_search').val().substr(0,15)+"</i>"); $('#search_string').html("<i> "+$('#_search').val().substr(0,15)+"</i>");
$('#pop_over_0').dialog({ autoOpen: false }); $(popover).dialog({ autoOpen: false });
$('#pop_over_0').on('click', 'div.collection', function(){ $(popover).on('click', 'div.collection', function(){
window.location.href = '/show_collection/'+$(this).attr('data'); window.location.href = '/show_collection/'+$(this).attr('data');
}); });
$('#btn_login').on('click', function() { $(loginbtn).on('click', function() {
var isopen = $('#pop_over_0').dialog("isOpen"); var isopen = $('#pop_over_0').dialog("isOpen");
if (isopen) { if (isopen) {
$('#pop_over_0').dialog("close"); $('#pop_over_0').dialog("close");
@@ -167,36 +172,8 @@ $(document).ready(function(){
}); });
$(document).on('click', '.logout-btn', function(){window.location.href = '/logout'}); $(document).on('click', '.logout-btn', function(){window.location.href = '/logout'});
$(document).on('click', '.import-btn', function(){ $(document).on('click', '.import-btn', function(){
$.ajax({ let socket = PyshelfSocket(server);
type: "GET", url: "/live", data: {hook: 'import_books'}, ping(socket);
success: function (response) {
// Set the dialog title
$('#pop_over_0').dialog({
title: "User Controls",
maxHeight: (win_height - 100),
minWidth: $("#horiz_nav_main").width(),
hide: {effect: "blind", duration: 1000},
show: {effect: "blind", duration: 1000},
position: {
my: "top", at: "bottom", of: $("#horiz_nav_main")
}
});
// clear and create a new container
$('#pop_over_0').html('<div id=usercp class="mx-auto">');
// Populate the container from response.data
$('#usercp').append('<div class="row" id="usercp-inner">');
$('#usercp-inner').append(response.data);
$('#usercp-inner').append('</div>');
$('#usercp').append('</div>');
// Close the container
$('#pop_over').append('</div>');
// Now open this dialog
$('#pop_over_0').dialog("open");
},
error: function (response) {
customlog(["Failure", response]);
}
});
}); });
$('#coll_button').on('click', function(){ $('#coll_button').on('click', function(){
var isopen = $('#pop_over_0').dialog("isOpen"); var isopen = $('#pop_over_0').dialog("isOpen");
@@ -279,6 +256,7 @@ $(document).ready(function(){
resize_search(); resize_search();
$(window).resize(resize_search(win_width)); $(window).resize(resize_search(win_width));
}); });
function resize_search(win_width){ function resize_search(win_width){
if (win_width <= 1025){ if (win_width <= 1025){
$('.search_string').attr('size', 20); $('.search_string').attr('size', 20);
@@ -290,3 +268,28 @@ function resize_search(win_width){
} }
} }
function PyshelfSocket(address) {
const connection = new WebSocket(address);
connection.onconnect = function(e){
ping(connection);
};
connection.onmessage = function(rcvd){
sock_rx(rcvd)
};
return connection;
}
function sock_rx(rcvd) {
if (rcvd.data == 'pong') { pong(rcvd.data) }
else { console.log("<<[rx] :"+rcvd.data) }
}
function sock_status(sock) {
let buffered = sock.connection.bufferedAmmount;
let ready = sock.connection.readyState;
return [buffered, ready];
}
function ping(sock) {
sock.send('ping')
}
function pong(rcvd) {
console.log("<<["+rcvd.data+"] "+rcvd.data)
}

View File

@@ -7,7 +7,6 @@ from base64 import b64decode, b64encode
from pathlib import Path from pathlib import Path
from backend.lib.config import Config from backend.lib.config import Config
from backend.lib.hooks import ACatalogue
from django.conf import settings from django.conf import settings
from django.contrib import auth from django.contrib import auth