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]
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, )