Exemplo n.º 1
0
def test_can_add_disconnect_to_dependencies(lambda_function):
    api = models.WebsocketAPI(
        resource_name='websocket_api',
        name='name',
        api_gateway_stage='api',
        routes=['$disconnect'],
        connect_function=None,
        message_function=None,
        disconnect_function=lambda_function,
    )
    assert api.dependencies() == [lambda_function]
Exemplo n.º 2
0
    def _create_websocket_api_model(
            self,
            config,  # type: Config
            deployment,  # type: models.DeploymentPackage
            stage_name,  # type: str
    ):
        # type: (...) -> models.WebsocketAPI
        connect_handler = None  # type: Optional[models.LambdaFunction]
        message_handler = None  # type: Optional[models.LambdaFunction]
        disconnect_handler = None  # type: Optional[models.LambdaFunction]

        routes = {
            h.route_key_handled: h.handler_string
            for h in config.chalice_app.websocket_handlers.values()
        }
        if '$connect' in routes:
            connect_handler = self._create_lambda_model(
                config=config,
                deployment=deployment,
                name='websocket_connect',
                handler_name=routes['$connect'],
                stage_name=stage_name)
            routes.pop('$connect')
        if '$disconnect' in routes:
            disconnect_handler = self._create_lambda_model(
                config=config,
                deployment=deployment,
                name='websocket_disconnect',
                handler_name=routes['$disconnect'],
                stage_name=stage_name)
            routes.pop('$disconnect')
        if routes:
            # If there are left over routes they are message handlers.
            handler_string = list(routes.values())[0]
            message_handler = self._create_lambda_model(
                config=config,
                deployment=deployment,
                name='websocket_message',
                handler_name=handler_string,
                stage_name=stage_name)

        return models.WebsocketAPI(
            name='%s-%s-websocket-api' % (config.app_name, stage_name),
            resource_name='websocket_api',
            connect_function=connect_handler,
            message_function=message_handler,
            disconnect_function=disconnect_handler,
            routes=[
                h.route_key_handled
                for h in config.chalice_app.websocket_handlers.values()
            ],
            api_gateway_stage=config.api_gateway_stage,
        )