def test_read_from_definition_uri(self): uri = "./file.txt" expected = {"some": "value"} reader = SwaggerReader(definition_uri=uri) reader._download_swagger = Mock() reader._download_swagger.return_value = expected actual = reader.read() self.assertEquals(actual, expected) reader._download_swagger.assert_called_with(uri)
def extract_swagger_route( stack_path: str, logical_id: str, body: Dict, uri: Union[str, Dict], binary_media: Optional[List], collector: ApiCollector, cwd: Optional[str] = None, event_type: str = Route.API, ) -> None: """ Parse the Swagger documents and adds it to the ApiCollector. Parameters ---------- stack_path : str Path of the stack the resource is located logical_id : str Logical ID of the resource body : dict The body of the RestApi uri : str or dict The url to location of the RestApi binary_media : list The link to the binary media collector : samcli.lib.providers.api_collector.ApiCollector Instance of the Route collector that where we will save the route information cwd : str Optional working directory with respect to which we will resolve relative path to Swagger file event_type : str The event type, 'Api' or 'HttpApi', see samcli/local/apigw/local_apigw_service.py:35 """ reader = SwaggerReader(definition_body=body, definition_uri=uri, working_dir=cwd) swagger = reader.read() parser = SwaggerParser(stack_path, swagger) routes = parser.get_routes(event_type) LOG.debug("Found '%s' APIs in resource '%s'", len(routes), logical_id) collector.add_routes(logical_id, routes) collector.add_binary_media_types( logical_id, parser.get_binary_media_types()) # Binary media from swagger collector.add_binary_media_types( logical_id, binary_media) # Binary media specified on resource in template
def test_must_read_first_from_definition_body(self): body = {"this is": "swagger"} uri = "./file.txt" expected = {"some": "value"} reader = SwaggerReader(definition_body=body, definition_uri=uri) reader._download_swagger = Mock() reader._read_from_definition_body = Mock() reader._read_from_definition_body.return_value = expected actual = reader.read() self.assertEquals(actual, expected) reader._read_from_definition_body.assert_called_with() reader._download_swagger.assert_not_called()
def extract_swagger_route(self, logical_id, body, uri, binary_media, collector, cwd=None, event_type=Route.API): """ Parse the Swagger documents and adds it to the ApiCollector. Parameters ---------- logical_id : str Logical ID of the resource body : dict The body of the RestApi uri : str or dict The url to location of the RestApi binary_media: list The link to the binary media collector: samcli.commands.local.lib.route_collector.RouteCollector Instance of the Route collector that where we will save the route information cwd : str Optional working directory with respect to which we will resolve relative path to Swagger file """ reader = SwaggerReader(definition_body=body, definition_uri=uri, working_dir=cwd) swagger = reader.read() parser = SwaggerParser(swagger) routes = parser.get_routes(event_type) LOG.debug("Found '%s' APIs in resource '%s'", len(routes), logical_id) collector.add_routes(logical_id, routes) collector.add_binary_media_types( logical_id, parser.get_binary_media_types()) # Binary media from swagger collector.add_binary_media_types( logical_id, binary_media) # Binary media specified on resource in template
def test_must_use_definition_uri_if_body_does_not_exist(self): body = {"this is": "swagger"} uri = "./file.txt" expected = {"some": "value"} reader = SwaggerReader(definition_body=body, definition_uri=uri) reader._download_swagger = Mock() reader._download_swagger.return_value = expected # Set the output of reading the definition body to be None reader._read_from_definition_body = Mock() reader._read_from_definition_body.return_value = None actual = reader.read() self.assertEquals(actual, expected) reader._read_from_definition_body.assert_called_with() reader._download_swagger.assert_called_with(uri)
def _auth_definition_body_and_uri(definition_body, definition_uri): """ Parameters ---------- definition_body: dict inline definition body defined in the template definition_uri: string Either an s3 url or a local path to a definition uri Returns ------- bool Is security defined on the swagger or not? """ reader = SwaggerReader(definition_body=definition_body, definition_uri=definition_uri) swagger = reader.read() _auths = [] if not swagger: swagger = {} # NOTE(sriram-mv): Authorization and Authentication is indicated by the `security` scheme. # https://swagger.io/docs/specification/authentication/ for _, verb in swagger.get("paths", {}).items(): for _property in verb.values(): # If there are instrinsics in play, they may not be resolved yet. if isinstance(_property, dict): _auths.append(bool(_property.get("security", False))) _auths.append(bool(swagger.get("security", False))) if swagger: LOG.debug("Auth checks done on swagger are not exhaustive!") # This is not an exhaustive check, but to check if there is some form of security setup. return any(_auths)