Skip to content

Instantly share code, notes, and snippets.

@Krewn
Last active November 11, 2022 20:39
Show Gist options
  • Save Krewn/4734dac4e0941a988f6a66375a6b4f8c to your computer and use it in GitHub Desktop.
Save Krewn/4734dac4e0941a988f6a66375a6b4f8c to your computer and use it in GitHub Desktop.
A basic pyramid webserver for submitting querys to methods.
import os
from urllib import parse
from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
from pyramid.view import view_config
class boilerPlate:
def __init__(self):
self.functionNames = ["myFunc","yourFunc"]
def homePage(self):
def homePage(request):
return Response(content_type="text/html",body="""
<script>
let direct = function(){
let i;
let x = document.getElementById("fields");
let host = x.elements[0].value;
let method = x.elements[1].value;
let args = {};
for (i=2;i<x.elements.length;i+=2){
console.log(x.elements[i])
args[x.elements[i].value]=x.elements[i+1].value;
}
//window.location.href = "http://"+host+"/"+method+"?" + new URLSearchParams(args).toString();
window.open("http://"+host+"/"+method+"?" + new URLSearchParams(args).toString())
}
let newField = function() {
var field = document.createElement("li");
field.appendChild(document.createElement("input"));
field.appendChild(document.createElement("input"));
document.getElementById("fields").appendChild(field);
}
</script>
<form id = "fields" action=direct()>
<input>host</input>
<input>method</input>
</form>
<button onclick="newField()">New Field</button>
<button onclick="direct()">Request</button>
""")
return homePage
def funcFactory(self,name):
if name == "myFunc":
def myFunc(request):
query = dict(parse.parse_qsl(request.query_string))
defaults = {"aStr" : "This is a string", "anInt" : 43 ,"whatever" : None}
args = {**defaults,**query}
try:
def typeCheck(aStr : str, anInt: int, whatever):
pass
typeCheck(**args) # TODO: cast arguments from str
except Exception as e:
Response(content_type="text/html",body=str(e))
#
# Implemtentation here
#
return Response(content_type="text/html",body=str(args))
return myFunc
elif name == "yourFunc":
def yourFunc(request):
query = dict(parse.parse_qsl(request.query_string))
defaults = {"isDay" : False}
args = {**defaults,**query}
try:
def typeCheck(isDay : bool):
pass
typeCheck(**args) # TODO: cast arguments from str
except Exception as e:
Response(content_type="text/html",body=str(e))
return Response(content_type="text/html",body=str(args))
return yourFunc
return lambda r: Response(content_type="text/html",body="<h1>Unknown method</h1>")
def configFunc(self,name,config):
config.add_route(name, r'/'+name)
config.add_view(self.funcFactory(name), route_name=name)
def standUp(self,port):
with Configurator() as config:
config.add_route("homePage", r'/')
config.add_view(self.homePage(), route_name="homePage")
for funcName in self.functionNames:
self.configFunc(funcName,config)
config.scan('__main__')
app = config.make_wsgi_app()
server = make_server('0.0.0.0', port , app)
server.serve_forever()
if __name__ == '__main__':
boilerPlate().standUp(1237)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment