Implement Filter: Contains functionality for describe_params (#3189)
* Implement Filter: Contains functionality for describe_params This commit adds the Contains functionality. Tests were created to mimic behavior in AWS/boto3, including that filters with values in the form of `/name` will match parameters named `/name/match` but not parameters named `match/with/other-name`. In the test example, a Contains filter with the value `/tan` would match: `/tangent-3` and `tangram-4` but not `standby-5`. * Enforce parameter filter restrictions on get_parameters_by_path According to the boto3 documentation [1], `Name`, `Path`, and `Tier` are not allowed values for `Key` in a parameter filter for `get_parameters_by_path`. This commit enforces this by calling `_validate_parameter_filters` from the `get_parameters_by_path` method, and adding a check to `_validate_parameter_filters`. I added 3 test cases to `test_get_parameters_by_path` which check for the correct exception when calling with a parameter filter using any of these keys. * Code formatted to match style * Refactored logic
This commit is contained in:
parent
6adee0cbaf
commit
126f5a5155
2 changed files with 64 additions and 2 deletions
|
|
@ -965,6 +965,13 @@ class SimpleSystemManagerBackend(BaseBackend):
|
|||
"The following filter key is not valid: Label. Valid filter keys include: [Path, Name, Type, KeyId, Tier]."
|
||||
)
|
||||
|
||||
if by_path and key in ["Name", "Path", "Tier"]:
|
||||
raise InvalidFilterKey(
|
||||
"The following filter key is not valid: {key}. Valid filter keys include: [Type, KeyId].".format(
|
||||
key=key
|
||||
)
|
||||
)
|
||||
|
||||
if not values:
|
||||
raise InvalidFilterValue(
|
||||
"The following filter values are missing : null for filter key Name."
|
||||
|
|
@ -1024,7 +1031,10 @@ class SimpleSystemManagerBackend(BaseBackend):
|
|||
)
|
||||
)
|
||||
|
||||
if key != "Path" and option not in ["Equals", "BeginsWith"]:
|
||||
allowed_options = ["Equals", "BeginsWith"]
|
||||
if key == "Name":
|
||||
allowed_options += ["Contains"]
|
||||
if key != "Path" and option not in allowed_options:
|
||||
raise InvalidFilterOption(
|
||||
"The following filter option is not valid: {option}. Valid options include: [BeginsWith, Equals].".format(
|
||||
option=option
|
||||
|
|
@ -1084,6 +1094,9 @@ class SimpleSystemManagerBackend(BaseBackend):
|
|||
max_results=10,
|
||||
):
|
||||
"""Implement the get-parameters-by-path-API in the backend."""
|
||||
|
||||
self._validate_parameter_filters(filters, by_path=True)
|
||||
|
||||
result = []
|
||||
# path could be with or without a trailing /. we handle this
|
||||
# difference here.
|
||||
|
|
@ -1134,7 +1147,8 @@ class SimpleSystemManagerBackend(BaseBackend):
|
|||
what = parameter.keyid
|
||||
elif key == "Name":
|
||||
what = "/" + parameter.name.lstrip("/")
|
||||
values = ["/" + value.lstrip("/") for value in values]
|
||||
if option != "Contains":
|
||||
values = ["/" + value.lstrip("/") for value in values]
|
||||
elif key == "Path":
|
||||
what = "/" + parameter.name.lstrip("/")
|
||||
values = ["/" + value.strip("/") for value in values]
|
||||
|
|
@ -1147,6 +1161,8 @@ class SimpleSystemManagerBackend(BaseBackend):
|
|||
what.startswith(value) for value in values
|
||||
):
|
||||
return False
|
||||
elif option == "Contains" and not any(value in what for value in values):
|
||||
return False
|
||||
elif option == "Equals" and not any(what == value for value in values):
|
||||
return False
|
||||
elif option == "OneLevel":
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue