Add a KE-chain Attachment Viewer (e.g. attachment viewer widget) to the customization.

        The widget will be saved to KE-chain.

        :param attachment_property: The Attachment Property to which the Viewer will be connected to.
        :type attachment_property: :class:`Property` or UUID
        :param custom_title: A custom title for the attachment viewer widget
            * False (default): Notebook name
            * String value: Custom title
            * None: No title
        :type custom_title: bool or basestring or None
        :param height: The height of the Notebook in pixels
        :type height: int or None
        :raises IllegalArgumentError: When unknown or illegal arguments are passed.

def add_attachment_viewer_widget(self, attachment_property, custom_title=False, height=None):
        """
        Add a KE-chain Attachment Viewer (e.g. attachment viewer widget) to the customization.

        The widget will be saved to KE-chain.

        :param attachment_property: The Attachment Property to which the Viewer will be connected to.
        :type attachment_property: :class:`Property` or UUID
        :param custom_title: A custom title for the attachment viewer widget
            * False (default): Notebook name
            * String value: Custom title
            * None: No title
        :type custom_title: bool or basestring or None
        :param height: The height of the Notebook in pixels
        :type height: int or None
        :raises IllegalArgumentError: When unknown or illegal arguments are passed.
        """
        # Check whether the attachment property is uuid type or class `Property`
        if isinstance(attachment_property, Property):
            attachment_property_id = attachment_property.id
        elif isinstance(attachment_property, text_type) and is_uuid(attachment_property):
            attachment_property_id = attachment_property
            attachment_property = self._client.property(id=attachment_property_id)
        else:
            raise IllegalArgumentError("When using the add_attachment_viewer_widget, attachment_property must be a "
                                       "Property or Property id. Type is: {}".format(type(attachment_property)))

        # Check whether the `Property` has type `Attachment`
        property_type = attachment_property.type
        if property_type != PropertyType.ATTACHMENT_VALUE:
            raise IllegalArgumentError("When using the add_attachment_viewer_widget, attachment_property must have "
                                       "type {}. Type found: {}".format(PropertyType.ATTACHMENT_VALUE, property_type))

        # Check also whether `Property` has category `Instance`
        property_category = attachment_property._json_data['category']
        if property_category != Category.INSTANCE:
            raise IllegalArgumentError("When using the add_attachment_viewer_widget, attachment_property must have "
                                       "category {}. Category found: {}".format(Category.INSTANCE, property_category))

        # Add custom title
        if custom_title is False:
            show_title_value = "Default"
            title = attachment_property.name
        elif custom_title is None:
            show_title_value = "No title"
            title = ''
        else:
            show_title_value = "Custom title"
            title = str(custom_title)

        # Declare attachment viewer widget config
        config = {
            'propertyId': attachment_property_id,
            'showTitleValue': show_title_value,
            'xtype': ComponentXType.PROPERTYATTACHMENTPREVIEWER,
            'title': title,
            'filter': {
                'activity_id': str(self.activity.id)
            },
            'height': height if height else 500
        }

        # Declare attachment viewer widget meta
        meta = {
            'propertyInstanceId': attachment_property_id,
            'activityId': str(self.activity.id),
            'customHeight': height if height else 500,
            'showTitleValue': show_title_value,
            'customTitle': title
        }

        self._add_widget(dict(config=config, meta=meta, name=WidgetNames.ATTACHMENTVIEWERWIDGET))