Polymorphic Python
Important: These docs are for the outdated Jets 5 versions and below. For the latest Jets docs: docs.rubyonjets.com
Important: Since Jets v5, Polymorphic support is no longer supported with Controllers. It is supported in other types of classes like Jobs though. The reason it is no longer supported in Controllers is because only one Lambda Function is used for Jets Controllers in Jets v5. The docs below will be updated in time.
Polymorphic support for python works like so for the controller code:
app/controllers/posts_controller.rb
:
class PostsController < ApplicationController
python :python_example
end
You add your corresponding python code in the posts_controller/python
folder:
app/controllers/posts_controller/python/python_example.py
:
from pprint import pprint
import json
import platform
def lambda_handler(event, context):
message = 'PostsController#python_example hi from python %s' % platform.python_version()
return response({'message': message}, 200)
def response(message, status_code):
return {
'statusCode': str(status_code),
'body': json.dumps(message),
'headers': {
'Content-Type': 'application/json'
},
}
Notice, how with the python code, you must handle returning the proper lambda proxy structure to API Gateway.
Lambda console
On the function show page:
Default Handler Name
The default python handler name is lambda_handler
. The default can be changed with the handler
method. Example:
app/controllers/posts_controller.rb
:
class PostsController < ApplicationController
handler :handle
python :python_example
end
The python code would then look something like this:
def handle(event, context):
...
end
You can also set the handler for the entire class. Example:
class PostsController < ApplicationController
class_handler :handle
# ...
end