def validate_properties(self):
for name, property_type in self.property_types.items():<EOL><INDENT>value = getattr(self, name)<EOL>if property_type.supports_intrinsics and self._is_intrinsic_function(value):<EOL><INDENT>continue<EOL><DEDENT>if value is None:<EOL><INDENT>if property_type.required:<EOL><INDENT>raise InvalidResourceException(<EOL>self.logical_id,<EOL>"<STR_LIT>".format(property_name=name))<EOL><DEDENT><DEDENT>elif not property_type.validate(value, should_raise=False):<EOL><INDENT>raise InvalidResourceException(<EOL>self.logical_id,<EOL>"<STR_LIT>".format(property_name=name))<EOL><DEDENT><DEDENT>
Validates that the required properties for this Resource have been populated, and that all properties have
        valid values.

        :returns: True if all properties are valid
        :rtype: bool
        :raises TypeError: if any properties are invalid