package/python-flask-expects-json: new package

This commit adds a new package called python-flask-expects-json, which
also to validate the JSON blurbs submitted to a Flask web
application. A runtime test is added as well, making sure that the
package minimally works with an example Flask application.

The files added by this commit are associated both to Nicolas Carrier
and myself in the DEVELOPERS file, as Nicolas is also interested in
this package.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
This commit is contained in:
Thomas Petazzoni
2021-09-19 14:45:16 +02:00
committed by Arnout Vandecappelle (Essensium/Mind)
parent 57260dab0c
commit e6ee07f41a
7 changed files with 91 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
from flask import Flask
from flask_expects_json import expects_json
app = Flask(__name__)
schema = {
'type': 'object',
'properties': {
'name': {'type': 'string'},
'email': {'type': 'string'},
},
'required': ['name', 'email']
}
@app.route('/', methods=['POST'])
@expects_json(schema)
def hello_world():
return 'Hello, World!'

View File

@@ -0,0 +1,38 @@
from tests.package.test_python import TestPythonPackageBase
import os
import time
class TestPythonPy3FlaskExpectsJson(TestPythonPackageBase):
__test__ = True
config = TestPythonPackageBase.config + \
"""
BR2_PACKAGE_LIBCURL=y
BR2_PACKAGE_LIBCURL_CURL=y
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON_FLASK=y
BR2_PACKAGE_PYTHON_FLASK_EXPECTS_JSON=y
"""
sample_scripts = ["tests/package/sample_python_flask_expects_json.py"]
timeout = 60
def try_json(self, payload, expects):
cmd = """curl -s -o /dev/null -w "%%{http_code}\\n" -X POST """
cmd += """-H "Content-Type: application/json" -d '%s' http://127.0.0.1:5000""" % payload
output, exit_code = self.emulator.run(cmd, timeout=self.timeout)
self.assertEqual(exit_code, 0)
self.assertEqual(output[-1], str(expects))
def test_run(self):
self.login()
self.check_sample_scripts_exist()
cmd = "FLASK_APP=%s %s -m flask run > /dev/null 2>&1 &" % (os.path.basename(self.sample_scripts[0]),
self.interpreter)
_, exit_code = self.emulator.run(cmd, timeout=self.timeout)
# Give enough time for the flask server to start up
time.sleep(15)
self.try_json("""{"email": "test", "name": "test"}""", 200)
self.try_json("""{"email": "test", "name": 2}""", 400)
self.try_json("""{"email": "test"}""", 400)