in Gems/AWSCore/Code/Tools/ResourceMappingTool/utils/json_utils.py [0:0]
def validate_resources_according_to_json_schema(resources: List[ResourceMappingAttributes]) -> Dict[int, List[str]]:
invalid_resources: Dict[int, List[str]] = {}
success_status_unique_keys: Set[str] = set()
other_status_unique_keys: Set[str] = set()
other_status_duplicated_keys: Set[str] = set()
resource: ResourceMappingAttributes
for resource in resources:
if resource.status.value == ResourceMappingAttributesStatus.SUCCESS_STATUS_VALUE:
success_status_unique_keys.add(resource.key_name)
else:
if resource.key_name in other_status_unique_keys:
other_status_duplicated_keys.add(resource.key_name)
else:
other_status_unique_keys.add(resource.key_name)
row_count: int = 0
for resource in resources:
if not resource.is_valid():
_add_validation_error_message(
invalid_resources, row_count, error_messages.INVALID_FORMAT_EMPTY_ATTRIBUTE_ERROR_MESSAGE)
# if resource status is success, skip validation check
if (not resource.status.value == ResourceMappingAttributesStatus.SUCCESS_STATUS_VALUE) \
and (resource.key_name in success_status_unique_keys
or resource.key_name in other_status_duplicated_keys):
_add_validation_error_message(
invalid_resources, row_count,
error_messages.INVALID_FORMAT_DUPLICATED_KEY_ERROR_MESSAGE.format(resource.key_name))
if not re.match(_RESOURCE_MAPPING_SCHEMA_ACCOUNTID_PATTERN, resource.account_id):
_add_validation_error_message(
invalid_resources, row_count,
error_messages.INVALID_FORMAT_UNEXPECTED_VALUE_IN_TABLE_ERROR_MESSAGE.format(
resource.account_id,
RESOURCE_MAPPING_ACCOUNTID_JSON_KEY_NAME,
_RESOURCE_MAPPING_SCHEMA_ACCOUNTID_PATTERN))
if not re.match(_RESOURCE_MAPPING_SCHEMA_REGION_PATTERN, resource.region):
_add_validation_error_message(
invalid_resources, row_count,
error_messages.INVALID_FORMAT_UNEXPECTED_VALUE_IN_TABLE_ERROR_MESSAGE.format(
resource.region, _RESOURCE_MAPPING_REGION_JSON_KEY_NAME,
_RESOURCE_MAPPING_SCHEMA_REGION_PATTERN))
row_count += 1
return invalid_resources