from marshmallow import fields, INCLUDE from marshmallow.schema import Schema from platypush.schemas import StrippedString class SlackMessageBlockSchema(Schema): class Meta: unknown = INCLUDE type = fields.String(required=True, metadata=dict(description='Message block type')) block_id = fields.String(required=True, metadata=dict(description='Block ID')) class SlackMessageIconSchema(Schema): image_36 = fields.URL() image_48 = fields.URL() image_72 = fields.URL() class SlackMessageSchema(Schema): text = StrippedString(required=True, metadata=dict(description='Message text')) user = fields.String(required=True, metadata=dict(description='User ID of the sender')) channel = fields.String(metadata=dict(description='Channel ID associated with the message')) team = fields.String(metadata=dict(description='Team ID associated with the message')) timestamp = fields.DateTime(metadata=dict(description='Date and time of the event')) icons = fields.Nested(SlackMessageIconSchema) blocks = fields.Nested(SlackMessageBlockSchema, many=True) previous_message = fields.Nested( 'SlackMessageSchema', metadata=dict( description='For received replies, it includes the parent message in the reply chain. ' 'For edited messages, it contains the previous version.' ) )