|
32 | 32 | CAPACITY_UNITS, META_CLASS_NAME, REGION, HOST, EXISTS, NULL,
|
33 | 33 | DELETE_FILTER_OPERATOR_MAP, UPDATE_FILTER_OPERATOR_MAP, PUT_FILTER_OPERATOR_MAP,
|
34 | 34 | COUNT, ITEM_COUNT, KEY, UNPROCESSED_ITEMS, STREAM_VIEW_TYPE, STREAM_SPECIFICATION,
|
35 |
| - STREAM_ENABLED, EQ, NE) |
| 35 | + STREAM_ENABLED, EQ, NE, BINARY_SET, STRING_SET, NUMBER_SET) |
36 | 36 |
|
37 | 37 |
|
38 | 38 | log = logging.getLogger(__name__)
|
@@ -1057,9 +1057,17 @@ def _build_filters(cls,
|
1057 | 1057 | else:
|
1058 | 1058 | if not isinstance(value, list):
|
1059 | 1059 | value = [value]
|
1060 |
| - value = [ |
1061 |
| - {ATTR_TYPE_MAP[attribute_class.attr_type]: attribute_class.serialize(val)} for val in value |
1062 |
| - ] |
| 1060 | + attr_type = attribute_class.attr_type |
| 1061 | + if operator in ['contains', 'not_contains'] and attr_type in [BINARY_SET, STRING_SET, NUMBER_SET]: |
| 1062 | + # The 'CONTAINS' and 'NOT_CONTAINS' comparison operators do not support a set in ATTR_VALUE_LIST. |
| 1063 | + # If the `attribute_class` to serialize is a set, take the first element of type and value. |
| 1064 | + value = [ |
| 1065 | + {ATTR_TYPE_MAP[attr_type][0]: attribute_class.serialize(val)[0]} for val in value |
| 1066 | + ] |
| 1067 | + else: |
| 1068 | + value = [ |
| 1069 | + {ATTR_TYPE_MAP[attr_type]: attribute_class.serialize(val)} for val in value |
| 1070 | + ] |
1063 | 1071 | condition = {
|
1064 | 1072 | ATTR_VALUE_LIST: value
|
1065 | 1073 | }
|
|
0 commit comments