Changed crystal template, picked latest flask one
This commit is contained in:
63
template/python3-flask/Dockerfile
Normal file
63
template/python3-flask/Dockerfile
Normal file
@ -0,0 +1,63 @@
|
||||
ARG PYTHON_VERSION=3.11
|
||||
FROM --platform=${TARGETPLATFORM:-linux/amd64} ghcr.io/openfaas/of-watchdog:0.9.10 as watchdog
|
||||
FROM --platform=${TARGETPLATFORM:-linux/amd64} python:${PYTHON_VERSION}-alpine as build
|
||||
|
||||
COPY --from=watchdog /fwatchdog /usr/bin/fwatchdog
|
||||
RUN chmod +x /usr/bin/fwatchdog
|
||||
|
||||
ARG ADDITIONAL_PACKAGE
|
||||
# Alternatively use ADD https:// (which will not be cached by Docker builder)
|
||||
|
||||
RUN apk --no-cache add openssl-dev ${ADDITIONAL_PACKAGE}
|
||||
|
||||
# Add non root user
|
||||
RUN addgroup -S app && adduser app -S -G app
|
||||
RUN chown app /home/app
|
||||
|
||||
USER app
|
||||
|
||||
ENV PATH=$PATH:/home/app/.local/bin
|
||||
|
||||
WORKDIR /home/app/
|
||||
|
||||
COPY --chown=app:app index.py .
|
||||
COPY --chown=app:app requirements.txt .
|
||||
|
||||
USER root
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
# Build the function directory and install any user-specified components
|
||||
USER app
|
||||
|
||||
RUN mkdir -p function
|
||||
RUN touch ./function/__init__.py
|
||||
WORKDIR /home/app/function/
|
||||
COPY --chown=app:app function/requirements.txt .
|
||||
RUN pip install --no-cache-dir --user -r requirements.txt
|
||||
|
||||
#install function code
|
||||
USER root
|
||||
|
||||
COPY --chown=app:app function/ .
|
||||
|
||||
|
||||
FROM build as test
|
||||
ARG TEST_COMMAND=tox
|
||||
ARG TEST_ENABLED=true
|
||||
RUN [ "$TEST_ENABLED" = "false" ] && echo "skipping tests" || eval "$TEST_COMMAND"
|
||||
|
||||
FROM build as ship
|
||||
WORKDIR /home/app/
|
||||
|
||||
#configure WSGI server and healthcheck
|
||||
USER app
|
||||
|
||||
ENV fprocess="python index.py"
|
||||
|
||||
ENV cgi_headers="true"
|
||||
ENV mode="http"
|
||||
ENV upstream_url="http://127.0.0.1:5000"
|
||||
|
||||
HEALTHCHECK --interval=5s CMD [ -e /tmp/.lock ] || exit 1
|
||||
|
||||
CMD ["fwatchdog"]
|
0
template/python3-flask/function/__init__.py
Normal file
0
template/python3-flask/function/__init__.py
Normal file
7
template/python3-flask/function/handler.py
Normal file
7
template/python3-flask/function/handler.py
Normal file
@ -0,0 +1,7 @@
|
||||
def handle(req):
|
||||
"""handle a request to the function
|
||||
Args:
|
||||
req (str): request body
|
||||
"""
|
||||
|
||||
return req
|
10
template/python3-flask/function/handler_test.py
Normal file
10
template/python3-flask/function/handler_test.py
Normal file
@ -0,0 +1,10 @@
|
||||
from .handler import handle
|
||||
|
||||
# Test your handler here
|
||||
|
||||
# To disable testing, you can set the build_arg `TEST_ENABLED=false` on the CLI or in your stack.yml
|
||||
# https://docs.openfaas.com/reference/yaml/#function-build-args-build-args
|
||||
|
||||
def test_handle():
|
||||
# assert handle("input") == "input"
|
||||
pass
|
0
template/python3-flask/function/requirements.txt
Normal file
0
template/python3-flask/function/requirements.txt
Normal file
41
template/python3-flask/function/tox.ini
Normal file
41
template/python3-flask/function/tox.ini
Normal file
@ -0,0 +1,41 @@
|
||||
# If you would like to disable
|
||||
# automated testing during faas-cli build,
|
||||
|
||||
# Replace the content of this file with
|
||||
# [tox]
|
||||
# skipsdist = true
|
||||
|
||||
# You can also edit, remove, or add additional test steps
|
||||
# by editing, removing, or adding new testenv sections
|
||||
|
||||
|
||||
# find out more about tox: https://tox.readthedocs.io/en/latest/
|
||||
[tox]
|
||||
envlist = lint,test
|
||||
skipsdist = true
|
||||
|
||||
[testenv:test]
|
||||
deps =
|
||||
flask
|
||||
pytest
|
||||
-rrequirements.txt
|
||||
commands =
|
||||
# run unit tests with pytest
|
||||
# https://docs.pytest.org/en/stable/
|
||||
# configure by adding a pytest.ini to your handler
|
||||
pytest
|
||||
|
||||
[testenv:lint]
|
||||
deps =
|
||||
flake8
|
||||
commands =
|
||||
flake8 .
|
||||
|
||||
[flake8]
|
||||
count = true
|
||||
max-line-length = 127
|
||||
max-complexity = 10
|
||||
statistics = true
|
||||
# stop the build if there are Python syntax errors or undefined names
|
||||
select = E9,F63,F7,F82
|
||||
show-source = true
|
41
template/python3-flask/index.py
Normal file
41
template/python3-flask/index.py
Normal file
@ -0,0 +1,41 @@
|
||||
# Copyright (c) Alex Ellis 2017. All rights reserved.
|
||||
# Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
|
||||
from flask import Flask, request
|
||||
from function import handler
|
||||
from waitress import serve
|
||||
import os
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
# distutils.util.strtobool() can throw an exception
|
||||
def is_true(val):
|
||||
return len(val) > 0 and val.lower() == "true" or val == "1"
|
||||
|
||||
@app.before_request
|
||||
def fix_transfer_encoding():
|
||||
"""
|
||||
Sets the "wsgi.input_terminated" environment flag, thus enabling
|
||||
Werkzeug to pass chunked requests as streams. The gunicorn server
|
||||
should set this, but it's not yet been implemented.
|
||||
"""
|
||||
|
||||
transfer_encoding = request.headers.get("Transfer-Encoding", None)
|
||||
if transfer_encoding == u"chunked":
|
||||
request.environ["wsgi.input_terminated"] = True
|
||||
|
||||
@app.route("/", defaults={"path": ""}, methods=["POST", "GET"])
|
||||
@app.route("/<path:path>", methods=["POST", "GET"])
|
||||
def main_route(path):
|
||||
raw_body = os.getenv("RAW_BODY", "false")
|
||||
|
||||
as_text = True
|
||||
|
||||
if is_true(raw_body):
|
||||
as_text = False
|
||||
|
||||
ret = handler.handle(request.get_data(as_text=as_text))
|
||||
return ret
|
||||
|
||||
if __name__ == '__main__':
|
||||
serve(app, host='0.0.0.0', port=5000)
|
3
template/python3-flask/requirements.txt
Normal file
3
template/python3-flask/requirements.txt
Normal file
@ -0,0 +1,3 @@
|
||||
flask
|
||||
waitress
|
||||
tox==3.*
|
2
template/python3-flask/template.yml
Normal file
2
template/python3-flask/template.yml
Normal file
@ -0,0 +1,2 @@
|
||||
language: python3-flask
|
||||
fprocess: python index.py
|
Reference in New Issue
Block a user