200 démons triviaux

This commit is contained in:
2021-09-21 17:01:29 +02:00
commit 1327e6dd94
1208 changed files with 30780 additions and 0 deletions

View File

@@ -0,0 +1,77 @@
#!/usr/bin/env python
from flask import Flask, request, jsonify
from waitress import serve
import os
def handle(event, context):
return {
"statusCode": 200,
"body": {
"_valide": True,
"_messages": ["T'es un·e champion·ne", "C'est exactement tralala89 que j'attendais"],
'feedbacks_html': "<div>\n<p>Exercice réussi!</p>\n<ul>\n<li>T'es un·e champion·ne</li>\n<li>C'est exactement 'b'coucou'' que j'attendais</li>\n</ul>\n</div>\n"
}
}
app = Flask(__name__)
class Event:
def __init__(self):
self.body = request.get_data()
self.headers = request.headers
self.method = request.method
self.query = request.args
self.path = request.path
class Context:
def __init__(self):
self.hostname = os.getenv('HOSTNAME', 'localhost')
def format_status_code(resp):
if 'statusCode' in resp:
return resp['statusCode']
return 200
def format_body(resp):
if 'body' not in resp:
return ""
elif type(resp['body']) == dict:
return jsonify(resp['body'])
else:
return str(resp['body'])
def format_headers(resp):
if 'headers' not in resp:
return []
elif type(resp['headers']) == dict:
headers = []
for key in resp['headers'].keys():
header_tuple = (key, resp['headers'][key])
headers.append(header_tuple)
return headers
return resp['headers']
def format_response(resp):
if resp == None:
return ('', 200)
statusCode = format_status_code(resp)
body = format_body(resp)
headers = format_headers(resp)
return (body, statusCode, headers)
@app.route('/', defaults={'path': ''}, methods=['GET', 'PUT', 'POST', 'PATCH', 'DELETE'])
@app.route('/<path:path>', methods=['GET', 'PUT', 'POST', 'PATCH', 'DELETE'])
def call_handler(path):
event = Event()
context = Context()
response_data = handle(event, context)
resp = format_response(response_data)
return resp
if __name__ == '__main__':
serve(app, port=8082)

View File

@@ -0,0 +1,52 @@
#!/usr/bin/env python3
"""
Un serveur pour répondre à une tentative étudiante
On est content quoi qu'on nous propose…
"""
import cbor
import sys
import json
import signal
from http.server import BaseHTTPRequestHandler
import socketserver
def résultat(code_etu):
return {
"_valide": True,
"_messages": ["T'es un·e champion·ne", "C'est exactement '" + str(code_etu) + "' que j'attendais"],
'feedbacks_html': "<div>\n<p>Exercice réussi!</p>\n<ul>\n<li>T'es un·e champion·ne</li>\n<li>C'est exactement 'b'coucou'' que j'attendais</li>\n</ul>\n</div>\n"
}
class Handler(BaseHTTPRequestHandler):
def do_POST(self):
mesg=b""
while True:
line = self.rfile.readline().strip()
chunk_length = int(line, 16)
if chunk_length != 0:
chunk = self.rfile.read(chunk_length)
mesg+=chunk
self.rfile.readline()
else:
break
self.send_response(200)
self.end_headers()
dict_code_etu = cbor.loads(mesg)
code_etu = dict_code_etu["code_etu"]
print("reçu: ", code_etu)
self.wfile.write(json.dumps(résultat(code_etu)).encode() + b'\n')
self.wfile.flush()
def sigterm_handler(_signo, _stack_frame):
exit(0)
if __name__ == "__main__":
signal.signal(signal.SIGTERM, sigterm_handler)
with socketserver.TCPServer(("", 8082), Handler ) as httpd:
httpd.serve_forever()

View File

@@ -0,0 +1,3 @@
cbor
flask
waitress

View File

@@ -0,0 +1,7 @@
from setuptools import setup, find_packages
setup(
name="ToujoursContent",
version="0.1",
packages=find_packages(),
scripts=['daemon.py']
)

View File

@@ -0,0 +1,3 @@
with (import <nixpkgs> {});
(python3.withPackages (ps: [ps.flask ps.waitress ps.pip])).env