diff options
| author | Gourav <gouravkandoria1500@gmail.com> | 2024-06-26 11:14:50 +0530 |
|---|---|---|
| committer | Andrew Clayton <a.clayton@nginx.com> | 2024-07-02 19:13:14 +0100 |
| commit | a9aa9e76db2766a681350c09947df848898531f6 (patch) | |
| tree | b95692f62e8bce738656740e6fb8fea20fe03b76 /src/nxt_conf_validation.c | |
| parent | d62a5e2c3749a927e1f5283c1ad2178d665cd399 (diff) | |
| download | unit-a9aa9e76db2766a681350c09947df848898531f6.tar.gz unit-a9aa9e76db2766a681350c09947df848898531f6.tar.bz2 | |
python: Support application factories
Adds support for the app factory pattern to the Python language module.
A factory is a callable that returns a WSGI or ASGI application object.
Unit does not support passing arguments to factories.
Setting the `factory` option to `true` instructs Unit to treat the
configured `callable` as a factory.
For example:
"my-app": {
"type": "python",
"path": "/srv/www/",
"module": "hello",
"callable": "create_app",
"factory": true
}
This is similar to other WSGI / ASGI servers. E.g.,
$ uvicorn --factory hello:create_app
$ gunicorn 'hello:create_app()'
The factory setting defaults to false.
Closes: https://github.com/nginx/unit/issues/1106
Link: <https://github.com/nginx/unit/pull/1336#issuecomment-2179381605>
[ Commit message - Dan / Minor code tweaks - Andrew ]
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
Diffstat (limited to 'src/nxt_conf_validation.c')
| -rw-r--r-- | src/nxt_conf_validation.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/nxt_conf_validation.c b/src/nxt_conf_validation.c index f91fc887..04091745 100644 --- a/src/nxt_conf_validation.c +++ b/src/nxt_conf_validation.c @@ -842,6 +842,11 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_python_members[] = { .validator = nxt_conf_vldt_targets_exclusive, .u.string = "callable", }, { + .name = nxt_string("factory"), + .type = NXT_CONF_VLDT_BOOLEAN, + .validator = nxt_conf_vldt_targets_exclusive, + .u.string = "factory", + }, { .name = nxt_string("prefix"), .type = NXT_CONF_VLDT_STRING, .validator = nxt_conf_vldt_targets_exclusive, @@ -866,6 +871,9 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_python_target_members[] = { .name = nxt_string("callable"), .type = NXT_CONF_VLDT_STRING, }, { + .name = nxt_string("factory"), + .type = NXT_CONF_VLDT_BOOLEAN, + }, { .name = nxt_string("prefix"), .type = NXT_CONF_VLDT_STRING, .validator = nxt_conf_vldt_python_prefix, @@ -884,6 +892,9 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_python_notargets_members[] = { .name = nxt_string("callable"), .type = NXT_CONF_VLDT_STRING, }, { + .name = nxt_string("factory"), + .type = NXT_CONF_VLDT_BOOLEAN, + }, { .name = nxt_string("prefix"), .type = NXT_CONF_VLDT_STRING, .validator = nxt_conf_vldt_python_prefix, |
