Last active
November 11, 2022 20:39
-
-
Save Krewn/4734dac4e0941a988f6a66375a6b4f8c to your computer and use it in GitHub Desktop.
A basic pyramid webserver for submitting querys to methods.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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