openfaas / python-flask-template

HTTP and Flask-based OpenFaaS templates for Python 3
MIT License
85 stars 86 forks source link

Pass the path route argument to the handler #41

Open NicolaiSchmid opened 3 years ago

NicolaiSchmid commented 3 years ago

My actions before raising this issue

I'd like to suggest passing the path argument to the handler as a second argument, as it would prove quite valuable to my application I'm not really familiar with Flask however and I might be able to access the argument already via a property on the request object. If that's the case, please let me know!

Context

The function I'm developing returns a list of attributes for a username. I think the natural implementation would be to make a GET request to /username. It would be great if I could reuse it

LucasRoesler commented 3 years ago

The path should already be on the request object, request.path https://flask.palletsprojects.com/en/1.1.x/api/#incoming-request-data

For example:

➜  test-flask-tmpl-32 curl localhost:8080/here/i/am
/here/i/am

and my handler looks like

from flask import request

def handle(req):
    """handle a request to the function
    Args:
        req (str): request body
    """

    return request.path
NicolaiSchmid commented 3 years ago

Yes, but it isn't parsed.

LucasRoesler commented 3 years ago

What do you mean by parsed?

NicolaiSchmid commented 3 years ago

Well, if the route is /username, then the value of path (the function argument, not the property on request) will only be username and not /username

LucasRoesler commented 3 years ago

Perhaps you could share anymore concrete example of what you want to do? Even if we passed the path as a second value, it would just be the same value as request.path.

What additional parsing should it do? Perhaps there is an alternative template for your use case or you can simply fork the template to add your additions? You can specify a fork or a template pretty easily in the stack yaml https://docs.openfaas.com/reference/yaml/#templates

LucasRoesler commented 3 years ago

@NicolaiSchmid i think parsing the path is outside the scope of this template. The path is easily accessible, as shown above.

I would recommend possibly forking and adding the required parsing into a custom template