mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
Adding Python hot fn sample
This commit is contained in:
9
examples/tutorial/hotfunctions/http/python/Dockerfile
Normal file
9
examples/tutorial/hotfunctions/http/python/Dockerfile
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
FROM jjanzic/docker-python3-opencv
|
||||||
|
|
||||||
|
RUN mkdir /code
|
||||||
|
ADD . /code/
|
||||||
|
WORKDIR /code
|
||||||
|
RUN pip3 install -r requirements.txt
|
||||||
|
|
||||||
|
WORKDIR /code/
|
||||||
|
ENTRYPOINT ["python3", "func.py"]
|
||||||
42
examples/tutorial/hotfunctions/http/python/func.py
Normal file
42
examples/tutorial/hotfunctions/http/python/func.py
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
import asyncio
|
||||||
|
import sys
|
||||||
|
import uvloop
|
||||||
|
|
||||||
|
from hotfn.http import request
|
||||||
|
from hotfn.http import response
|
||||||
|
|
||||||
|
|
||||||
|
class MyProtocol(asyncio.Protocol):
|
||||||
|
|
||||||
|
def connection_made(self, transport):
|
||||||
|
print('pipe opened', file=sys.stderr, flush=True)
|
||||||
|
super(MyProtocol, self).connection_made(transport=transport)
|
||||||
|
|
||||||
|
def data_received(self, data):
|
||||||
|
print('received: {!r}'.format(data), file=sys.stderr, flush=True)
|
||||||
|
data = data.decode()
|
||||||
|
req = request.RawRequest(data)
|
||||||
|
(method, url, dict_params,
|
||||||
|
headers, http_version, req_data) = req.parse_raw_request()
|
||||||
|
|
||||||
|
rs = response.RawResponse(
|
||||||
|
http_version, 200, "OK",
|
||||||
|
response_data=req_data)
|
||||||
|
print(rs.dump(), file=sys.stdout, flush=True)
|
||||||
|
super(MyProtocol, self).data_received(data)
|
||||||
|
|
||||||
|
def connection_lost(self, exc):
|
||||||
|
print('pipe closed', file=sys.stderr, flush=True)
|
||||||
|
super(MyProtocol, self).connection_lost(exc)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
with open("/dev/stdin", "rb", buffering=0) as stdin:
|
||||||
|
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
try:
|
||||||
|
stdin_pipe_reader = loop.connect_read_pipe(MyProtocol, stdin)
|
||||||
|
loop.run_until_complete(stdin_pipe_reader)
|
||||||
|
loop.run_forever()
|
||||||
|
finally:
|
||||||
|
loop.close()
|
||||||
7
examples/tutorial/hotfunctions/http/python/func.yaml
Normal file
7
examples/tutorial/hotfunctions/http/python/func.yaml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
name: fnproject/hotfn-py
|
||||||
|
version: 0.0.1
|
||||||
|
runtime: docker
|
||||||
|
type: sync
|
||||||
|
memory: 521
|
||||||
|
format: http
|
||||||
|
path: /hot-json
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
hotfn
|
||||||
|
uvloop
|
||||||
Reference in New Issue
Block a user