user-client #39

Merged
alex_orid merged 24 commits from user-client into v2.0 2021-05-13 04:02:50 +00:00
7 changed files with 316 additions and 106 deletions
Showing only changes of commit ecdc22ab1c - Show all commits

View File

@ -1,4 +1,4 @@
FROM python:3.7.10-alpine3.12
FROM python:3.10.0a7-alpine3.13
WORKDIR /Praxis

View File

@ -110,9 +110,18 @@ class Event_Log_Module():
def get_recent_logs(self, howFarBack):
newList = []
for x in range(howFarBack):
recentLog = [-x]
newList.append(recentLog)
try:
for x in range(howFarBack):
recentLog = self.Event_Log_List[-x]
newDic = {}
newDic['eventName'] = recentLog.eventName
newDic['eventTime'] = str(recentLog.eventTime)
newDic['eventType'] = str(recentLog.eventType)
newDic['eventSender'] = str(recentLog.eventSender)
newDic['eventData'] = str(recentLog.eventData)
newList.append(newDic)
except:
pass
return newList
def load_HistoricLogs(self):

View File

@ -1,9 +1,17 @@
import flask
from flask import request
from flask import Flask, request, after_this_request
import channel_rewards.channelRewards_loader as rewards_loader
from channel_rewards.channelRewards_base import AbstractChannelRewards
from json import loads
from urllib.parse import urlencode
import requests
import json
import base64
import os
import praxis_logging
praxis_logger_obj = praxis_logging.praxis_logger()
@ -59,6 +67,38 @@ def handle_reward(source, username, reward_name, reward_type, rewardPrompt, user
return flask.make_response("This is a magic test", 500)
#praxis_logger_obj.log("Doing a reward")
def handle_get_list():
tempDict = {}
returnedDict = {}
for cmd in loadedRewards[AbstractChannelRewards.ChannelRewardsType.channelPoints]:
tempCmd:AbstractChannelRewards = loadedRewards[AbstractChannelRewards.ChannelRewardsType.channelPoints][cmd]
tempDict['channelRewardName'] = tempCmd.ChannelRewardName
tempDict['isRewardEnabled'] = str(tempCmd.isChannelRewardEnabled).lower()
returnedDict[tempCmd.ChannelRewardName] = tempDict
tempDict = {}
for cmd in loadedRewards[AbstractChannelRewards.ChannelRewardsType.twitch_bits]:
tempCmd:AbstractChannelRewards = loadedRewards[AbstractChannelRewards.ChannelRewardsType.twitch_bits][cmd]
tempDict['channelRewardName'] = tempCmd.ChannelRewardName
tempDict['isRewardEnabled'] = str(tempCmd.isChannelRewardEnabled).lower()
returnedDict[tempCmd.ChannelRewardName] = tempDict
tempDict = {}
for cmd in loadedRewards[AbstractChannelRewards.ChannelRewardsType.twitch_subs]:
tempCmd:AbstractChannelRewards = loadedRewards[AbstractChannelRewards.ChannelRewardsType.twitch_subs][cmd]
tempDict['channelRewardName'] = tempCmd.ChannelRewardName
tempDict['isRewardEnabled'] = str(tempCmd.isChannelRewardEnabled).lower()
returnedDict[tempCmd.ChannelRewardName] = tempDict
tempDict = {}
payload = json.dumps(returnedDict)
praxis_logger_obj.log("dumped")
praxis_logger_obj.log(payload)
payload = base64.b64encode(str.encode(payload))
print("encoded")
praxis_logger_obj.log("encoded")
praxis_logger_obj.log(payload)
return flask.make_response("{\"message\":\"%s\"}" % payload.decode(), 200, {"Content-Type": "application/json"})
@api.route('/api/v1/reward', methods=['GET'])
def reward_check():
@ -107,6 +147,14 @@ def exec_reward():
request.args['user_input'],
request.args['bonus_data'])
@api.route('/api/v1/get_list/all', methods=['GET'])
def get_list():
@after_this_request
def add_header(response):
response.headers.add('Access-Control-Allow-Origin', '*')
return response
return handle_get_list()
if __name__ == '__main__':
init()

View File

@ -22,6 +22,9 @@ import timers_module
import random
import json
import base64
import event_logs.event_log_Module
import os
@ -44,8 +47,15 @@ def add_event(eventName, eventTime, eventType, eventSender, eventData):
return flask.make_response("{\"message\":\"%s\"}" % None, 200, {"Content-Type": "application/json"})
def get_events(eventCount=100):
logging_module.get_recent_logs(eventCount)
return flask.make_response('Event List', 200)
returnedData = logging_module.get_recent_logs(eventCount)
payload = json.dumps(returnedData)
payload = base64.b64encode(str.encode(payload))
return flask.make_response("{\"message\":\"%s\"}" % payload.decode(), 200, {"Content-Type": "application/json"})
def reRunEvent_handler(eventName, eventTime, eventType, eventSender, eventData):
return flask.make_response("{\"message\":\"%s\"}" % 'rerunning event....', 200, {"Content-Type": "application/json"})
@api.route('/')
@ -90,7 +100,40 @@ def get_event_log():
def add_header(response):
response.headers.add('Access-Control-Allow-Origin', '*')
return response
return get_events()
if 'request_name' not in request.args:
return flask.make_response('{\"text\":"Argument \'request_name\' not in request"}', 400)
if 'request_type' not in request.args:
return flask.make_response('{\"text\":"Argument \'request_type\' not in request"}', 400)
if 'request_data' not in request.args:
requestData = 50
else:
try:
requestData = request.args['request_data']
except:
requestData = 50
return get_events(requestData)
@api.route('/api/v1/event_log/reRunEvent')
def reRunEvent():
@after_this_request
def add_header(response):
response.headers.add('Access-Control-Allow-Origin', '*')
return response
if 'eventName' not in request.args:
return flask.make_response('{\"text\":"Argument \'eventName\' not in request"}', 400)
if 'eventTime' not in request.args:
sentTime = request.args('eventTime')
else:
sentTime = None
if 'eventType' not in request.args:
return flask.make_response('{\"text\":"Argument \'eventType\' not in request"}', 400)
if 'eventSender' not in request.args:
return flask.make_response('{\"text\":"Argument \'eventSender\' not in request"}', 400)
if 'eventData' not in request.args:
return flask.make_response('{\"text\":"Argument \'eventData\' not in request"}', 400)
return reRunEvent_handler(request.args['eventName'], sentTime, request.args['eventType'], request.args['eventSender'], request.args['eventData'])
# @api.route('/api/v1/event_log/chyron/get')
# def get_chyron():

View File

@ -68,7 +68,7 @@ def handle_request_get(requestName, requestType, requestData):
response = request_get_eventlist(params)
return flask.make_response("{\"message\": \"%s\"}" % response, 200, {"Content-Type": "application/json"})
else:
return flask.make_response("{\"message\": \"%s\"}" % "message123123", 200, {"Content-Type": "application/json"})
return flask.make_response("{\"message\": \"%s\"}" % "Invalid Request Name", 400, {"Content-Type": "application/json"})
def request_get_list(serviceName, servicePort):
try:
@ -80,13 +80,14 @@ def request_get_list(serviceName, servicePort):
data = loads(resp.text)
msg = data['message']
if msg is not None:
praxis_logger_obj.log(msg)
return msg
# todo send to logger and other relevent services
else:
# todo handle failed requests
return None
return flask.make_response("{\"message\": \"%s\"}" % "Minor Mess up on get list", 200, {"Content-Type": "application/json"})
except:
return None
return flask.make_response("{\"message\": \"%s\"}" % "Major Mess up on get list", 200, {"Content-Type": "application/json"})
def request_get_eventlist(params):
try:
@ -102,9 +103,33 @@ def request_get_eventlist(params):
# todo send to logger and other relevent services
else:
# todo handle failed requests
return None
return flask.make_response("{\"message\": \"%s\"}" % "Minor Mess up on get eventlist", 200, {"Content-Type": "application/json"})
except:
return None
return flask.make_response("{\"message\": \"%s\"}" % "Major Mess up on get eventlist", 200, {"Content-Type": "application/json"})
def request_reRunEvent(eventName, eventTime, eventType, eventSender, eventData):
try:
params = urlencode(
{'eventName': eventName,
'eventTime': eventTime,
'eventType': eventType,
'eventSender': eventSender,
'eventData': eventData})
url = "http://standalone_eventlog:42008/api/v1/event_log/reRunEvent?%s" % params
resp = requests.get(url)
if resp.status_code == 200:
print("Got the following message: %s" % resp.text)
data = loads(resp.text)
msg = data['message']
if msg is not None:
return msg
# todo send to logger and other relevent services
else:
# todo handle failed requests
return flask.make_response('Something Went a little bit Wrong rerunning an event', 400)
except:
return flask.make_response('Something Went Wrong rerunning an event', 400)
def handle_request_set(requestName, requestType, requestData):
if requestType == "update":
@ -145,9 +170,35 @@ def get_data():
@api.route('/api/v1/user_client/set', methods=['GET'])
def set_data():
@after_this_request
def add_header(response):
response.headers.add('Access-Control-Allow-Origin', '*')
return response
if 'request_type' not in request.args:
return flask.make_response('{\"text\":"Argument \'request_type\' not in request"}', 400)
@api.route('/api/v1/user_client/event_log/reRunEvent', methods=['GET'])
def EventLog_reRunEvent():
@after_this_request
def add_header(response):
response.headers.add('Access-Control-Allow-Origin', '*')
return response
if 'eventName' not in request.args:
return flask.make_response('{\"text\":"Argument \'eventName\' not in request"}', 400)
if 'eventTime' not in request.args:
sentTime = request.args('eventTime')
else:
sentTime = None
if 'eventType' not in request.args:
return flask.make_response('{\"text\":"Argument \'eventType\' not in request"}', 400)
if 'eventSender' not in request.args:
return flask.make_response('{\"text\":"Argument \'eventSender\' not in request"}', 400)
if 'eventData' not in request.args:
return flask.make_response('{\"text\":"Argument \'eventData\' not in request"}', 400)
#return flask.make_response("test", 200)
return request_reRunEvent(request.args['eventName'], sentTime, request.args['eventType'], request.args['eventSender'], request.args['eventData'])
if __name__ == "__main__":
init()

View File

@ -111,19 +111,14 @@
</div>
<div id="Rewards" style="padding-top: 20px;"></div><div class="rowsInMain center card">
<a class="btn-floating btn-large waves-effect waves-light blue right" style="margin-right: 10px;">
<div id="Rewards" style="padding-top: 20px;"><div class="rowsInMain center card">
<a onclick="updateRewardList()" class="btn-floating btn-large waves-effect waves-light blue right" style="margin-right: 10px;">
<i class="material-icons">refresh</i>
</a>
<h3>Rewards:</h3></div>
<div class="rowsInMain row card" style="margin-right: 20px;margin-left: 20px;margin-top: 30px;margin-bottom: 30px;">
<div class="switch" style="top: -20px;position: relative;padding-left: 10px;"><label>Enabled:<input type="checkbox"><span class="lever"></span></label></div>
<div class="col s4"><p>Reward Name:</p>
<div class="input-field inline" style="width: 80%;">
<input disabled id="reward_inline " type="text" value="Hydration" class="validate">
<label for="reward_inline">Reward</label>
</div>
</div>
<div id="RewardRowWrapper">
</div>
</div>
@ -171,68 +166,13 @@
<div id="EventHistory" style="padding-top: 20px;"></div><div class="rowsInMain center card">
<a class="btn-floating btn-large waves-effect waves-light blue right" style="margin-right: 10px;">
<a onclick="updateEventList()" class="btn-floating btn-large waves-effect waves-light blue right" style="margin-right: 10px;">
<i class="material-icons">refresh</i>
</a>
<h3>Event History:</h3></div>
<div class="EventHistoryWrapper">
<div class="rowsInMain row card">
<div class="col s3"><p>Event:</p></div>
<div class="col s3"><p>User:</p></div>
<div class="col s3"><p>Message:</p></div>
<a class="btn waves-effect waves-light green right col s1" style="position: absolute; right: 0; top: 0; width: 3em;">
<i class="material-icons">refresh</i>
</a>
</div>
<div class="rowsInMain row card">
<div class="col s3"><p>Event:</p></div>
<div class="col s3"><p>User:</p></div>
<div class="col s3"><p>Message:</p></div>
<a class="btn waves-effect waves-light green right col s1" style="position: absolute; right: 0; top: 0; width: 3em;">
<i class="material-icons">refresh</i>
</a>
</div>
<div class="rowsInMain row card">
<div class="col s3"><p>Event:</p></div>
<div class="col s3"><p>User:</p></div>
<div class="col s3"><p>Message:</p></div>
<a class="btn waves-effect waves-light green right col s1" style="position: absolute; right: 0; top: 0; width: 3em;">
<i class="material-icons">refresh</i>
</a>
</div>
<div class="rowsInMain row card">
<div class="col s3"><p>Event:</p></div>
<div class="col s3"><p>User:</p></div>
<div class="col s3"><p>Message:</p></div>
<a class="btn waves-effect waves-light green right col s1" style="position: absolute; right: 0; top: 0; width: 3em;">
<i class="material-icons">refresh</i>
</a>
</div>
<div class="rowsInMain row card">
<div class="col s3"><p>Event:</p></div>
<div class="col s3"><p>User:</p></div>
<div class="col s3"><p>Message:</p></div>
<a class="btn waves-effect waves-light green right col s1" style="position: absolute; right: 0; top: 0; width: 3em;">
<i class="material-icons">refresh</i>
</a>
</div>
<div class="rowsInMain row card">
<div class="col s3"><p>Event:</p></div>
<div class="col s3"><p>User:</p></div>
<div class="col s3"><p>Message:</p></div>
<a class="btn waves-effect waves-light green right col s1" style="position: absolute; right: 0; top: 0; width: 3em;">
<i class="material-icons">refresh</i>
</a>
</div>
<div class="rowsInMain row card">
<div class="col s3"><p>Event:</p></div>
<div class="col s3"><p>User:</p></div>
<div class="col s3"><p>Message:</p></div>
<a class="btn waves-effect waves-light green right col s1" style="position: absolute; right: 0; top: 0; width: 3em;">
<i class="material-icons">refresh</i>
</a>
</div>
<div id="EventHistoryWrapper" class="EventHistoryWrapper">
</div>
<div id="Services" style="padding-top: 20px;"></div><div class="rowsInMain center card hide"><h3>Services:</h3></div>

View File

@ -28,7 +28,7 @@ async function setValue(request_type, command, isEnabled) {
//console.log(targetURL)
let a = await fetch_GetList(targetURL);
//console.log("return: "+a);
updateCommandList();
}
fetch_GetList = (fetchURL) => response = fetch(fetchURL)
@ -56,8 +56,8 @@ GetList = async (listType) => {
}
}
async function GetListCommands() {
let returnedList = await GetList("Commands");
async function GetList_OBJ(ListName) {
let returnedList = await GetList(ListName);
let obj_main = JSON.parse(returnedList);
//console.log(returnedList);
//console.log(obj_main);
@ -67,31 +67,31 @@ async function GetListCommands() {
//var obj_temp = JSON.parse(obj_main.message['!lights']);
let data = atob(obj_main.message);
console.log(data);
console.log(ListName, data);
let notDictionary = JSON.parse(data);
//let notDictionary = true
return notDictionary
}
async function updateCommandList() {
$("#CommandRowWrapper").empty();
let returnedCommands = await GetListCommands();
for (x in returnedCommands){
let returnedCommands = await GetList_OBJ("Commands");
for (var x in returnedCommands){
//console.log(x)
var commandName = returnedCommands[x].command
var isCommandEnabled = ""
if (returnedCommands[x].isCommandEnabled == "true") {
isCommandEnabled = "checked"
}
var commandTemplate = ""+
var template = ""+
"<div class=\"rowsInMain row card\" style=\"margin-right: 20px;margin-left: 20px;margin-top: 30px;margin-bottom: 30px;\">" +
"<div class=\"col s12 switch\" style=\"top: -20px;position: relative;padding-left: 10px;\"><label>Enabled:<input "+ isCommandEnabled +" disabled type=\"checkbox\"><span class=\"lever\"></span></label></div>" +
"<div class=\"col s4\"><p>Command Name:</p>" +
"<div class=\"input-field inline\" style=\"width: 80%;\">" +
"<p style =\"color:grey;\">Command</p>" +
"<input disabled id=\"command_inline\" type=\"text\" value=\""+ commandName +"\" class=\"validate\">" +
"<input disabled id=\"\" type=\"text\" value=\""+ commandName +"\" class=\"validate\">" +
"</div></div></div></div>"
$("#CommandRowWrapper").append(commandTemplate);
$("#CommandRowWrapper").append(template);
}
//var commandName = "!testerino"
//var isCommandEnabled = "" // if == "checked" will start off with the isEnabled bool enabled
@ -102,23 +102,142 @@ updateCommandList();
async function GetListRewards() {
returnedList = await GetList("Rewards");
obj = JSON.parse(returnedList);
console.log(obj['message'])
return returnedList
async function updateRewardList() {
$("#RewardRowWrapper").empty();
console.log("about to tdo the things");
let returnedRewards = await GetList_OBJ("Rewards");
for (var x in returnedRewards){
//console.log(x)
let rewardName = returnedRewards[x].channelRewardName
var isRewardEnabled = ""
if (returnedRewards[x].isRewardEnabled == "true") {
isRewardEnabled = "checked"
}
let template = ""+
"<div class=\"rowsInMain row card\" style=\"margin-right: 20px;margin-left: 20px;margin-top: 30px;margin-bottom: 30px;\">" +
"<div class=\"col s12 switch\" style=\"top: -20px;position: relative;padding-left: 10px;\"><label>Enabled:<input "+ isRewardEnabled +" disabled type=\"checkbox\"><span class=\"lever\"></span></label></div>" +
"<div class=\"col s4\"><p>Reward Name:</p>" +
"<div class=\"input-field inline\" style=\"width: 80%;\">" +
"<p style =\"color:grey;\">Reward</p>" +
"<input disabled id=\"\" type=\"text\" value=\""+ rewardName +"\" class=\"validate\">" +
"</div></div></div></div>"
$("#RewardRowWrapper").append(template);
}
//var commandName = "!testerino"
//var isCommandEnabled = "" // if == "checked" will start off with the isEnabled bool enabled
}
updateRewardList();
fetch_reRunEvent = (fetchURL) => response = fetch(fetchURL)
.then((response) => {
return response.text();
})
RerunEvent_OBJ = async (eventToRun) => {
if (true) {
let exampleEvent = {
'eventName': "",
'eventTime': "",
'eventType': "",
'eventSender': "",
'eventData': ""
}
let params = "?eventName="+encodeURIComponent(eventToRun.eventName)+
"&"+"eventTime="+encodeURIComponent(eventToRun.eventTime)+
"&"+"eventType="+encodeURIComponent(eventToRun.eventType)+
"&"+"eventSender="+encodeURIComponent(eventToRun.eventSender)+
"&"+"eventData="+encodeURIComponent(eventToRun.eventData);
let targetURL = "http://127.0.0.1:42055/api/v1/user_client/event_log/reRunEvent"+params;
//console.log(targetURL)
let a = await fetch_reRunEvent(targetURL);
//console.log("return: "+a);
return a
}
else {
return None
}
}
async function GetListTimers() {
returnedList = await GetList("Timers");
obj = JSON.parse(returnedList);
console.log(obj['message'])
return returnedList
GetEventList = async () => {
if (true) {
let ListRequestOBJ = {
'request_name': "EventHistory",
'request_type': "list",
'request_data': "50"
}
let params = "?request_name="+encodeURIComponent(ListRequestOBJ.request_name)+"&"+"request_type="+encodeURIComponent(ListRequestOBJ.request_type);
let targetURL = "http://127.0.0.1:42055/api/v1/user_client/get"+params;
//console.log(targetURL)
let a = await fetch_GetList(targetURL);
//console.log("return: "+a);
return a
}
else {
return None
}
}
async function GetListTextSources() {
returnedList = await GetList("TextSources");
obj = JSON.parse(returnedList);
console.log(obj['message'])
return returnedList
async function GetEventList_OBJ() {
let returnedList = await GetEventList();
let obj_main = JSON.parse(returnedList);
//console.log(returnedList);
console.log(obj_main);
//console.log(typeof obj_main['message'])
//console.log(obj_main.message);
//var obj_temp = JSON.parse(obj_main.message['!lights']);
let data = atob(obj_main.message);
console.log("Event List OBJ: ", data);
let notDictionary = JSON.parse(data);
//let notDictionary = true
return notDictionary
}
async function updateEventList() {
$("#EventHistoryWrapper").empty();
let returnedEvents = await GetEventList_OBJ();
console.log(returnedEvents)
for (var x in returnedEvents){
console.log(x)
let eventName = returnedEvents[x].eventName
let eventTime = returnedEvents[x].eventTime
let eventType = returnedEvents[x].eventType
let eventSender = returnedEvents[x].eventSender
let eventData = returnedEvents[x].eventData
console.log(eventName)
console.log(eventTime)
console.log(eventType)
console.log(eventSender)
let template = ""+
"<div class=\"rowsInMain row card\">"+
"<div class=\"col s3\"><p>Event:"+ eventName +"</p></div>"+
"<div class=\"col s3\"><p>User:"+ eventSender +"</p></div>"+
"<div class=\"col s3\"><p>Message:"+ eventData +"</p></div>"+
"<a onclick=\"reRunEvent()\" class=\"btn waves-effect waves-light green right col s1\" style=\"position: absolute; right: 0; top: 0; width: 3em;\">"+
"<i class=\"material-icons\">refresh</i>"+
"</a></div>"
$("#EventHistoryWrapper").append(template);
}
}
async function reRunEvent(eventName, eventTime, eventType, eventSender, eventData) {
var newEvent = {
'eventName': eventName,
'eventTime': eventTime,
'eventType': eventType,
'eventSender': eventSender,
'eventData': eventData
}
let response = await RerunEvent_OBJ(newEvent);
console.log(response);
}