[Buildroot] [PATCH 3/4] package/python-flask-expects-json: new package

Arnout Vandecappelle arnout at mind.be
Thu Sep 23 20:09:47 UTC 2021



On 19/09/2021 14:45, Thomas Petazzoni wrote:
> 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 at bootlin.com>

[snip]
> diff --git a/package/python-flask-expects-json/python-flask-expects-json.hash b/package/python-flask-expects-json/python-flask-expects-json.hash
> new file mode 100644
> index 0000000000..d71ddd0592
> --- /dev/null
> +++ b/package/python-flask-expects-json/python-flask-expects-json.hash
> @@ -0,0 +1,5 @@
> +# md5, sha256 from https://pypi.org/pypi/flask-expects-json/json
> +md5	c1fb8ede58db312d7923212dc97b8ab4  flask-expects-json-1.5.0.tar.gz
> +sha256	0087dc3d089f1ac75a1fc0f259f4dbd02bbb9c356e92e1a080f2309e2f75d053  flask-expects-json-1.5.0.tar.gz
> +# Locally computed sha256 checksums
> +sha256	06154a99fdc664107294a0a5e7e68f776078d075408dd32bbeaa7340fdd39e73  LICENSE.txt

  It's not enforced by check-package (yet), but we're converging on two spaces 
separation in the hash file. So I changed that.

  It's also "wrong" in the python-smmap2 and gitdb2 hash files, but there it was 
already the case so I didn't fix it.

  Regards,
  Arnout

> diff --git a/package/python-flask-expects-json/python-flask-expects-json.mk b/package/python-flask-expects-json/python-flask-expects-json.mk
> new file mode 100644
> index 0000000000..487f15d4e5
> --- /dev/null
> +++ b/package/python-flask-expects-json/python-flask-expects-json.mk
> @@ -0,0 +1,14 @@
> +################################################################################
> +#
> +# python-flask-expects-json
> +#
> +################################################################################
> +
> +PYTHON_FLASK_EXPECTS_JSON_VERSION = 1.5.0
> +PYTHON_FLASK_EXPECTS_JSON_SOURCE = flask-expects-json-$(PYTHON_FLASK_EXPECTS_JSON_VERSION).tar.gz
> +PYTHON_FLASK_EXPECTS_JSON_SITE = https://files.pythonhosted.org/packages/4c/4a/9d9d050af700fb3feebd1f8466e73d65ce8b4709f27773e07100b0993451
> +PYTHON_FLASK_EXPECTS_JSON_SETUP_TYPE = setuptools
> +PYTHON_FLASK_EXPECTS_JSON_LICENSE = MIT
> +PYTHON_FLASK_EXPECTS_JSON_LICENSE_FILES = LICENSE.txt
> +
> +$(eval $(python-package))
> diff --git a/support/testing/tests/package/sample_python_flask_expects_json.py b/support/testing/tests/package/sample_python_flask_expects_json.py
> new file mode 100644
> index 0000000000..d45026dd49
> --- /dev/null
> +++ b/support/testing/tests/package/sample_python_flask_expects_json.py
> @@ -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']
> +}
> +
> +
> + at app.route('/', methods=['POST'])
> + at expects_json(schema)
> +def hello_world():
> +    return 'Hello, World!'
> diff --git a/support/testing/tests/package/test_python_flask_expects_json.py b/support/testing/tests/package/test_python_flask_expects_json.py
> new file mode 100644
> index 0000000000..b7326f5d9e
> --- /dev/null
> +++ b/support/testing/tests/package/test_python_flask_expects_json.py
> @@ -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)
> 


More information about the buildroot mailing list