200 démons triviaux
commit
1327e6dd94
|
|
@ -0,0 +1,11 @@
|
|||
Echauffement
|
||||
------------
|
||||
|
||||
Exercice stupide numéro {{word}}.
|
||||
|
||||
.. easypython:: ./exercice{{word}}
|
||||
:language: DémonPython
|
||||
:titre: Exercice Stupide {{word}}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
Echauffement
|
||||
------------
|
||||
|
||||
Exercice stupide numéro 0.
|
||||
|
||||
.. easypython:: ./exercice0
|
||||
:language: DémonPython
|
||||
:titre: Exercice Stupide 0
|
||||
|
||||
|
||||
|
||||
|
|
@ -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 tralala0 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)
|
||||
|
|
@ -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()
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
cbor
|
||||
flask
|
||||
waitress
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
from setuptools import setup, find_packages
|
||||
setup(
|
||||
name="ToujoursContent",
|
||||
version="0.1",
|
||||
packages=find_packages(),
|
||||
scripts=['daemon.py']
|
||||
)
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
with (import <nixpkgs> {});
|
||||
|
||||
(python3.withPackages (ps: [ps.flask ps.waitress ps.pip])).env
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
Echauffement
|
||||
------------
|
||||
|
||||
Exercice stupide numéro 1.
|
||||
|
||||
.. easypython:: ./exercice1
|
||||
:language: DémonPython
|
||||
:titre: Exercice Stupide 1
|
||||
|
||||
|
||||
|
||||
|
|
@ -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 tralala1 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)
|
||||
|
|
@ -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()
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
cbor
|
||||
flask
|
||||
waitress
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
from setuptools import setup, find_packages
|
||||
setup(
|
||||
name="ToujoursContent",
|
||||
version="0.1",
|
||||
packages=find_packages(),
|
||||
scripts=['daemon.py']
|
||||
)
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
with (import <nixpkgs> {});
|
||||
|
||||
(python3.withPackages (ps: [ps.flask ps.waitress ps.pip])).env
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
Echauffement
|
||||
------------
|
||||
|
||||
Exercice stupide numéro 10.
|
||||
|
||||
.. easypython:: ./exercice10
|
||||
:language: DémonPython
|
||||
:titre: Exercice Stupide 10
|
||||
|
||||
|
||||
|
||||
|
|
@ -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 tralala10 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)
|
||||
|
|
@ -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()
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
cbor
|
||||
flask
|
||||
waitress
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
from setuptools import setup, find_packages
|
||||
setup(
|
||||
name="ToujoursContent",
|
||||
version="0.1",
|
||||
packages=find_packages(),
|
||||
scripts=['daemon.py']
|
||||
)
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
with (import <nixpkgs> {});
|
||||
|
||||
(python3.withPackages (ps: [ps.flask ps.waitress ps.pip])).env
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
Echauffement
|
||||
------------
|
||||
|
||||
Exercice stupide numéro 100.
|
||||
|
||||
.. easypython:: ./exercice100
|
||||
:language: DémonPython
|
||||
:titre: Exercice Stupide 100
|
||||
|
||||
|
||||
|
||||
|
|
@ -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 tralala100 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)
|
||||
|
|
@ -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()
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
cbor
|
||||
flask
|
||||
waitress
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
from setuptools import setup, find_packages
|
||||
setup(
|
||||
name="ToujoursContent",
|
||||
version="0.1",
|
||||
packages=find_packages(),
|
||||
scripts=['daemon.py']
|
||||
)
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
with (import <nixpkgs> {});
|
||||
|
||||
(python3.withPackages (ps: [ps.flask ps.waitress ps.pip])).env
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
Echauffement
|
||||
------------
|
||||
|
||||
Exercice stupide numéro 101.
|
||||
|
||||
.. easypython:: ./exercice101
|
||||
:language: DémonPython
|
||||
:titre: Exercice Stupide 101
|
||||
|
||||
|
||||
|
||||
|
|
@ -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 tralala101 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)
|
||||
|
|
@ -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()
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
cbor
|
||||
flask
|
||||
waitress
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
from setuptools import setup, find_packages
|
||||
setup(
|
||||
name="ToujoursContent",
|
||||
version="0.1",
|
||||
packages=find_packages(),
|
||||
scripts=['daemon.py']
|
||||
)
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
with (import <nixpkgs> {});
|
||||
|
||||
(python3.withPackages (ps: [ps.flask ps.waitress ps.pip])).env
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
Echauffement
|
||||
------------
|
||||
|
||||
Exercice stupide numéro 102.
|
||||
|
||||
.. easypython:: ./exercice102
|
||||
:language: DémonPython
|
||||
:titre: Exercice Stupide 102
|
||||
|
||||
|
||||
|
||||
|
|
@ -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 tralala102 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)
|
||||
|
|
@ -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()
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
cbor
|
||||
flask
|
||||
waitress
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
from setuptools import setup, find_packages
|
||||
setup(
|
||||
name="ToujoursContent",
|
||||
version="0.1",
|
||||
packages=find_packages(),
|
||||
scripts=['daemon.py']
|
||||
)
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
with (import <nixpkgs> {});
|
||||
|
||||
(python3.withPackages (ps: [ps.flask ps.waitress ps.pip])).env
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
Echauffement
|
||||
------------
|
||||
|
||||
Exercice stupide numéro 103.
|
||||
|
||||
.. easypython:: ./exercice103
|
||||
:language: DémonPython
|
||||
:titre: Exercice Stupide 103
|
||||
|
||||
|
||||
|
||||
|
|
@ -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 tralala103 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)
|
||||
|
|
@ -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()
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
cbor
|
||||
flask
|
||||
waitress
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
from setuptools import setup, find_packages
|
||||
setup(
|
||||
name="ToujoursContent",
|
||||
version="0.1",
|
||||
packages=find_packages(),
|
||||
scripts=['daemon.py']
|
||||
)
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
with (import <nixpkgs> {});
|
||||
|
||||
(python3.withPackages (ps: [ps.flask ps.waitress ps.pip])).env
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
Echauffement
|
||||
------------
|
||||
|
||||
Exercice stupide numéro 104.
|
||||
|
||||
.. easypython:: ./exercice104
|
||||
:language: DémonPython
|
||||
:titre: Exercice Stupide 104
|
||||
|
||||
|
||||
|
||||
|
|
@ -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 tralala104 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)
|
||||
|
|
@ -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()
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
cbor
|
||||
flask
|
||||
waitress
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
from setuptools import setup, find_packages
|
||||
setup(
|
||||
name="ToujoursContent",
|
||||
version="0.1",
|
||||
packages=find_packages(),
|
||||
scripts=['daemon.py']
|
||||
)
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
with (import <nixpkgs> {});
|
||||
|
||||
(python3.withPackages (ps: [ps.flask ps.waitress ps.pip])).env
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
Echauffement
|
||||
------------
|
||||
|
||||
Exercice stupide numéro 105.
|
||||
|
||||
.. easypython:: ./exercice105
|
||||
:language: DémonPython
|
||||
:titre: Exercice Stupide 105
|
||||
|
||||
|
||||
|
||||
|
|
@ -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 tralala105 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)
|
||||
|
|
@ -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()
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
cbor
|
||||
flask
|
||||
waitress
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
from setuptools import setup, find_packages
|
||||
setup(
|
||||
name="ToujoursContent",
|
||||
version="0.1",
|
||||
packages=find_packages(),
|
||||
scripts=['daemon.py']
|
||||
)
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
with (import <nixpkgs> {});
|
||||
|
||||
(python3.withPackages (ps: [ps.flask ps.waitress ps.pip])).env
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
Echauffement
|
||||
------------
|
||||
|
||||
Exercice stupide numéro 106.
|
||||
|
||||
.. easypython:: ./exercice106
|
||||
:language: DémonPython
|
||||
:titre: Exercice Stupide 106
|
||||
|
||||
|
||||
|
||||
|
|
@ -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 tralala106 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)
|
||||
|
|
@ -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()
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
cbor
|
||||
flask
|
||||
waitress
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
from setuptools import setup, find_packages
|
||||
setup(
|
||||
name="ToujoursContent",
|
||||
version="0.1",
|
||||
packages=find_packages(),
|
||||
scripts=['daemon.py']
|
||||
)
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
with (import <nixpkgs> {});
|
||||
|
||||
(python3.withPackages (ps: [ps.flask ps.waitress ps.pip])).env
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
Echauffement
|
||||
------------
|
||||
|
||||
Exercice stupide numéro 107.
|
||||
|
||||
.. easypython:: ./exercice107
|
||||
:language: DémonPython
|
||||
:titre: Exercice Stupide 107
|
||||
|
||||
|
||||
|
||||
|
|
@ -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 tralala107 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)
|
||||
|
|
@ -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()
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
cbor
|
||||
flask
|
||||
waitress
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
from setuptools import setup, find_packages
|
||||
setup(
|
||||
name="ToujoursContent",
|
||||
version="0.1",
|
||||
packages=find_packages(),
|
||||
scripts=['daemon.py']
|
||||
)
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
with (import <nixpkgs> {});
|
||||
|
||||
(python3.withPackages (ps: [ps.flask ps.waitress ps.pip])).env
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
Echauffement
|
||||
------------
|
||||
|
||||
Exercice stupide numéro 108.
|
||||
|
||||
.. easypython:: ./exercice108
|
||||
:language: DémonPython
|
||||
:titre: Exercice Stupide 108
|
||||
|
||||
|
||||
|
||||
|
|
@ -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 tralala108 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)
|
||||
|
|
@ -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()
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
cbor
|
||||
flask
|
||||
waitress
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
from setuptools import setup, find_packages
|
||||
setup(
|
||||
name="ToujoursContent",
|
||||
version="0.1",
|
||||
packages=find_packages(),
|
||||
scripts=['daemon.py']
|
||||
)
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
with (import <nixpkgs> {});
|
||||
|
||||
(python3.withPackages (ps: [ps.flask ps.waitress ps.pip])).env
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
Echauffement
|
||||
------------
|
||||
|
||||
Exercice stupide numéro 109.
|
||||
|
||||
.. easypython:: ./exercice109
|
||||
:language: DémonPython
|
||||
:titre: Exercice Stupide 109
|
||||
|
||||
|
||||
|
||||
|
|
@ -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 tralala109 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)
|
||||
|
|
@ -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()
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
cbor
|
||||
flask
|
||||
waitress
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
from setuptools import setup, find_packages
|
||||
setup(
|
||||
name="ToujoursContent",
|
||||
version="0.1",
|
||||
packages=find_packages(),
|
||||
scripts=['daemon.py']
|
||||
)
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
with (import <nixpkgs> {});
|
||||
|
||||
(python3.withPackages (ps: [ps.flask ps.waitress ps.pip])).env
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
Echauffement
|
||||
------------
|
||||
|
||||
Exercice stupide numéro 11.
|
||||
|
||||
.. easypython:: ./exercice11
|
||||
:language: DémonPython
|
||||
:titre: Exercice Stupide 11
|
||||
|
||||
|
||||
|
||||
|
|
@ -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 tralala11 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)
|
||||
|
|
@ -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()
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
cbor
|
||||
flask
|
||||
waitress
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
from setuptools import setup, find_packages
|
||||
setup(
|
||||
name="ToujoursContent",
|
||||
version="0.1",
|
||||
packages=find_packages(),
|
||||
scripts=['daemon.py']
|
||||
)
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
with (import <nixpkgs> {});
|
||||
|
||||
(python3.withPackages (ps: [ps.flask ps.waitress ps.pip])).env
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
Echauffement
|
||||
------------
|
||||
|
||||
Exercice stupide numéro 110.
|
||||
|
||||
.. easypython:: ./exercice110
|
||||
:language: DémonPython
|
||||
:titre: Exercice Stupide 110
|
||||
|
||||
|
||||
|
||||
|
|
@ -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 tralala110 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)
|
||||
|
|
@ -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()
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
cbor
|
||||
flask
|
||||
waitress
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
from setuptools import setup, find_packages
|
||||
setup(
|
||||
name="ToujoursContent",
|
||||
version="0.1",
|
||||
packages=find_packages(),
|
||||
scripts=['daemon.py']
|
||||
)
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
with (import <nixpkgs> {});
|
||||
|
||||
(python3.withPackages (ps: [ps.flask ps.waitress ps.pip])).env
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
Echauffement
|
||||
------------
|
||||
|
||||
Exercice stupide numéro 111.
|
||||
|
||||
.. easypython:: ./exercice111
|
||||
:language: DémonPython
|
||||
:titre: Exercice Stupide 111
|
||||
|
||||
|
||||
|
||||
|
|
@ -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 tralala111 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)
|
||||
|
|
@ -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()
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
cbor
|
||||
flask
|
||||
waitress
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
from setuptools import setup, find_packages
|
||||
setup(
|
||||
name="ToujoursContent",
|
||||
version="0.1",
|
||||
packages=find_packages(),
|
||||
scripts=['daemon.py']
|
||||
)
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
with (import <nixpkgs> {});
|
||||
|
||||
(python3.withPackages (ps: [ps.flask ps.waitress ps.pip])).env
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
Echauffement
|
||||
------------
|
||||
|
||||
Exercice stupide numéro 112.
|
||||
|
||||
.. easypython:: ./exercice112
|
||||
:language: DémonPython
|
||||
:titre: Exercice Stupide 112
|
||||
|
||||
|
||||
|
||||
|
|
@ -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 tralala112 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)
|
||||
|
|
@ -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()
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue