add default for apiKeyRequired field on API Gateway methods
This commit is contained in:
parent
2599516d80
commit
8a51fbe1c9
@ -83,14 +83,14 @@ class MethodResponse(BaseModel, dict):
|
|||||||
|
|
||||||
|
|
||||||
class Method(BaseModel, dict):
|
class Method(BaseModel, dict):
|
||||||
def __init__(self, method_type, authorization_type):
|
def __init__(self, method_type, authorization_type, **kwargs):
|
||||||
super(Method, self).__init__()
|
super(Method, self).__init__()
|
||||||
self.update(
|
self.update(
|
||||||
dict(
|
dict(
|
||||||
httpMethod=method_type,
|
httpMethod=method_type,
|
||||||
authorizationType=authorization_type,
|
authorizationType=authorization_type,
|
||||||
authorizerId=None,
|
authorizerId=None,
|
||||||
apiKeyRequired=None,
|
apiKeyRequired=kwargs.get("api_key_required") or False,
|
||||||
requestParameters=None,
|
requestParameters=None,
|
||||||
requestModels=None,
|
requestModels=None,
|
||||||
methodIntegration=None,
|
methodIntegration=None,
|
||||||
@ -158,8 +158,12 @@ class Resource(BaseModel):
|
|||||||
)
|
)
|
||||||
return response.status_code, response.text
|
return response.status_code, response.text
|
||||||
|
|
||||||
def add_method(self, method_type, authorization_type):
|
def add_method(self, method_type, authorization_type, api_key_required):
|
||||||
method = Method(method_type=method_type, authorization_type=authorization_type)
|
method = Method(
|
||||||
|
method_type=method_type,
|
||||||
|
authorization_type=authorization_type,
|
||||||
|
api_key_required=api_key_required,
|
||||||
|
)
|
||||||
self.resource_methods[method_type] = method
|
self.resource_methods[method_type] = method
|
||||||
return method
|
return method
|
||||||
|
|
||||||
@ -594,9 +598,18 @@ class APIGatewayBackend(BaseBackend):
|
|||||||
resource = self.get_resource(function_id, resource_id)
|
resource = self.get_resource(function_id, resource_id)
|
||||||
return resource.get_method(method_type)
|
return resource.get_method(method_type)
|
||||||
|
|
||||||
def create_method(self, function_id, resource_id, method_type, authorization_type):
|
def create_method(
|
||||||
|
self,
|
||||||
|
function_id,
|
||||||
|
resource_id,
|
||||||
|
method_type,
|
||||||
|
authorization_type,
|
||||||
|
api_key_required=None,
|
||||||
|
):
|
||||||
resource = self.get_resource(function_id, resource_id)
|
resource = self.get_resource(function_id, resource_id)
|
||||||
method = resource.add_method(method_type, authorization_type)
|
method = resource.add_method(
|
||||||
|
method_type, authorization_type, api_key_required=api_key_required
|
||||||
|
)
|
||||||
return method
|
return method
|
||||||
|
|
||||||
def get_stage(self, function_id, stage_name):
|
def get_stage(self, function_id, stage_name):
|
||||||
|
@ -145,8 +145,13 @@ class APIGatewayResponse(BaseResponse):
|
|||||||
return 200, {}, json.dumps(method)
|
return 200, {}, json.dumps(method)
|
||||||
elif self.method == "PUT":
|
elif self.method == "PUT":
|
||||||
authorization_type = self._get_param("authorizationType")
|
authorization_type = self._get_param("authorizationType")
|
||||||
|
api_key_required = self._get_param("apiKeyRequired")
|
||||||
method = self.backend.create_method(
|
method = self.backend.create_method(
|
||||||
function_id, resource_id, method_type, authorization_type
|
function_id,
|
||||||
|
resource_id,
|
||||||
|
method_type,
|
||||||
|
authorization_type,
|
||||||
|
api_key_required,
|
||||||
)
|
)
|
||||||
return 200, {}, json.dumps(method)
|
return 200, {}, json.dumps(method)
|
||||||
|
|
||||||
|
@ -286,6 +286,41 @@ def test_create_method():
|
|||||||
{
|
{
|
||||||
"httpMethod": "GET",
|
"httpMethod": "GET",
|
||||||
"authorizationType": "none",
|
"authorizationType": "none",
|
||||||
|
"apiKeyRequired": False,
|
||||||
|
"ResponseMetadata": {"HTTPStatusCode": 200},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@mock_apigateway
|
||||||
|
def test_create_method_apikeyrequired():
|
||||||
|
client = boto3.client("apigateway", region_name="us-west-2")
|
||||||
|
response = client.create_rest_api(name="my_api", description="this is my api")
|
||||||
|
api_id = response["id"]
|
||||||
|
|
||||||
|
resources = client.get_resources(restApiId=api_id)
|
||||||
|
root_id = [resource for resource in resources["items"] if resource["path"] == "/"][
|
||||||
|
0
|
||||||
|
]["id"]
|
||||||
|
|
||||||
|
client.put_method(
|
||||||
|
restApiId=api_id,
|
||||||
|
resourceId=root_id,
|
||||||
|
httpMethod="GET",
|
||||||
|
authorizationType="none",
|
||||||
|
apiKeyRequired=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
response = client.get_method(restApiId=api_id, resourceId=root_id, httpMethod="GET")
|
||||||
|
|
||||||
|
# this is hard to match against, so remove it
|
||||||
|
response["ResponseMetadata"].pop("HTTPHeaders", None)
|
||||||
|
response["ResponseMetadata"].pop("RetryAttempts", None)
|
||||||
|
response.should.equal(
|
||||||
|
{
|
||||||
|
"httpMethod": "GET",
|
||||||
|
"authorizationType": "none",
|
||||||
|
"apiKeyRequired": True,
|
||||||
"ResponseMetadata": {"HTTPStatusCode": 200},
|
"ResponseMetadata": {"HTTPStatusCode": 200},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user