Классовая AWS лямбда в Python - PullRequest
0 голосов
/ 02 апреля 2019

Я создал в Python лямбда-функцию AWS на основе классов с именем requestHandler.py , как показано ниже

from action_dispatcher import ActionDispatcher

class RequestHandler(ActionDispatcher):


    @staticmethod
    def createTemplate(event, context):
        return "Hello world"

Мой action_dispatcher.py , как показано ниже.

import json

class ActionDispatcher(object):

    def __call__(self, event, context, *args, **kwargs):

        action = event.get('action')
        handler = getattr(self, action, None)

        if handler is None:
            return json.loads({'status': 'error', 'code': 404, 'message':"Action {0} not found.".format(action) })

        return handler(request, *args, **kwargs)

С помощью описанной выше установки и обработчика лямбды как requestHandler.RequestHandler , я получаю ошибку «RequestHandler () не принимает аргументов» в этом случае я создаю действие как createTemplate. поэтому я хочу вызвать этот метод из RequestHandler.

Ответы [ 3 ]

1 голос
/ 03 апреля 2019

Вы можете определить обработчик в Python, используя def handler(event, context):. Однако я нашел пакет, который позволяет вам вызывать обработчик как класс

Использование, как отмечено в их документации, выглядит следующим образом:

pip install aws-lambda-handler

import aws_lambda

class EchoHandler(aws_lambda.Handler):
    """Echo handler."""

    def perform(self, request, **k):
        """Echo perform method."""
        response = aws_lambda.Response()
        response.body = self.request.event
        return response

echo_handler = EchoHandler()

# `echo_handler` is now a callable function you can map your AWS Lambda function to
1 голос
/ 02 апреля 2019

Мне кажется, что вы пытаетесь вызвать свой класс вместо экземпляра класса.RequestHandler() вызовет метод __init__ для инициализации экземпляра класса.Поскольку вы не определили метод, он не принимает никаких аргументов.Для доступа к __call__ вам необходимо вызвать экземпляр вашего класса.

handler = RequestHandler()
result = handler(request, context, *args, **kwargs)
0 голосов
/ 03 апреля 2019

Решение моей проблемы было простым, как упомянуто jacinator, я должен попробовать с экземпляром класса.ранее для лямбда-обработчика я использовал pass class в качестве обработчика, теперь я передаю экземпляр класса в качестве обработчика.Добавлена ​​строка в requestHandler.py rhandler = RequestHandler() Так что раньше мой лямбда-обработчик был похож на requestHandler.RequestHandler, теперь он был изменен на requestHandler.rhandler.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...