forked from platypush/platypush
Fabio Manganiello
c919cf0cd8
- Merged `trello` plugin and backend into a single plugin. - Removed legacy `Response` objects, replaced with data classes and schemas. - Fixed the Websocket connection flow to reflect the new authentication protocol. Closes: #307
530 lines
12 KiB
Python
530 lines
12 KiB
Python
from marshmallow import EXCLUDE, fields
|
|
from marshmallow.schema import Schema
|
|
|
|
|
|
class TrelloLabelSchema(Schema):
|
|
"""
|
|
Trello label schema.
|
|
"""
|
|
|
|
id = fields.String(
|
|
required=True,
|
|
metadata={
|
|
"description": "The label's unique identifier.",
|
|
"example": "5d62808da5d6a95a3a3e4f2f",
|
|
},
|
|
)
|
|
|
|
name = fields.String(
|
|
required=True,
|
|
metadata={
|
|
"description": "The label's name.",
|
|
"example": "My Label",
|
|
},
|
|
)
|
|
|
|
color = fields.String(
|
|
metadata={
|
|
"description": "The label's color.",
|
|
"example": "green",
|
|
},
|
|
)
|
|
|
|
|
|
class TrelloUserSchema(Schema):
|
|
"""
|
|
Trello user schema.
|
|
"""
|
|
|
|
id = fields.String(
|
|
required=True,
|
|
metadata={
|
|
"description": "The user's unique identifier.",
|
|
"example": "5d62808da5d6a95a3a3e4f2f",
|
|
},
|
|
)
|
|
|
|
username = fields.String(
|
|
required=True,
|
|
metadata={
|
|
"description": "The user's username.",
|
|
"example": "myusername",
|
|
},
|
|
)
|
|
|
|
fullname = fields.String(
|
|
metadata={
|
|
"description": "The user's full name.",
|
|
"example": "My Full Name",
|
|
},
|
|
)
|
|
|
|
initials = fields.String(
|
|
metadata={
|
|
"description": "The user's initials.",
|
|
"example": "MFN",
|
|
},
|
|
)
|
|
|
|
avatar_url = fields.Url(
|
|
metadata={
|
|
"description": "The user's avatar URL.",
|
|
"example": "https://trello-avatars.s3.amazonaws.com/5d62808da5d6a95a3a3e4f2f/50.png",
|
|
},
|
|
)
|
|
|
|
|
|
class TrelloMemberSchema(Schema):
|
|
"""
|
|
Trello member schema.
|
|
"""
|
|
|
|
id = fields.String(
|
|
required=True,
|
|
metadata={
|
|
"description": "The user's unique identifier.",
|
|
"example": "5d62808da5d6a95a3a3e4f2f",
|
|
},
|
|
)
|
|
|
|
username = fields.String(
|
|
required=True,
|
|
metadata={
|
|
"description": "The user's username.",
|
|
"example": "myusername",
|
|
},
|
|
)
|
|
|
|
fullname = fields.String(
|
|
metadata={
|
|
"description": "The user's full name.",
|
|
"example": "My Full Name",
|
|
},
|
|
)
|
|
|
|
initials = fields.String(
|
|
metadata={
|
|
"description": "The user's initials.",
|
|
"example": "MFN",
|
|
},
|
|
)
|
|
|
|
bio = fields.String(
|
|
metadata={
|
|
"description": "The user's bio.",
|
|
"example": "My bio.",
|
|
},
|
|
)
|
|
|
|
member_type = fields.String(
|
|
metadata={
|
|
"description": "The user's type.",
|
|
"example": "admin",
|
|
},
|
|
)
|
|
|
|
|
|
class TrelloCommentSchema(Schema):
|
|
"""
|
|
Trello comment schema.
|
|
"""
|
|
|
|
id = fields.String(
|
|
required=True,
|
|
metadata={
|
|
"description": "The comment's unique identifier.",
|
|
"example": "5d62808da5d6a95a3a3e4f2f",
|
|
},
|
|
)
|
|
|
|
text = fields.String(
|
|
required=True,
|
|
metadata={
|
|
"description": "The comment's text.",
|
|
"example": "My comment's text.",
|
|
},
|
|
)
|
|
|
|
type = fields.String(
|
|
required=True,
|
|
metadata={
|
|
"description": "The comment's type.",
|
|
"example": "commentCard",
|
|
},
|
|
)
|
|
|
|
creator = fields.Nested(TrelloUserSchema)
|
|
date = fields.DateTime(
|
|
metadata={
|
|
"description": "The comment's date.",
|
|
"example": "2019-08-25T15:32:13.000Z",
|
|
},
|
|
)
|
|
|
|
|
|
class TrelloListSchema(Schema):
|
|
"""
|
|
Trello list schema.
|
|
"""
|
|
|
|
class Meta: # pylint: disable=too-few-public-methods
|
|
"""
|
|
Meta class.
|
|
"""
|
|
|
|
unknown = EXCLUDE
|
|
|
|
id = fields.String(
|
|
required=True,
|
|
metadata={
|
|
"description": "The list's unique identifier.",
|
|
"example": "5d62808da5d6a95a3a3e4f2f",
|
|
},
|
|
)
|
|
|
|
name = fields.String(
|
|
required=True,
|
|
metadata={
|
|
"description": "The list's name.",
|
|
"example": "My List",
|
|
},
|
|
)
|
|
|
|
closed = fields.Boolean(
|
|
missing=False,
|
|
metadata={
|
|
"description": "Whether the list is closed.",
|
|
"example": False,
|
|
},
|
|
)
|
|
|
|
subscribed = fields.Boolean(
|
|
missing=False,
|
|
metadata={
|
|
"description": "Whether the list is subscribed.",
|
|
"example": False,
|
|
},
|
|
)
|
|
|
|
|
|
class TrelloBoardSchema(Schema):
|
|
"""
|
|
Trello board schema.
|
|
"""
|
|
|
|
class Meta: # pylint: disable=too-few-public-methods
|
|
"""
|
|
Meta class.
|
|
"""
|
|
|
|
unknown = EXCLUDE
|
|
|
|
id = fields.String(
|
|
required=True,
|
|
metadata={
|
|
"description": "The board's unique identifier.",
|
|
"example": "5d62808da5d6a95a3a3e4f2f",
|
|
},
|
|
)
|
|
|
|
name = fields.String(
|
|
required=True,
|
|
metadata={
|
|
"description": "The board's name.",
|
|
"example": "My Board",
|
|
},
|
|
)
|
|
|
|
url = fields.Url(
|
|
required=True,
|
|
metadata={
|
|
"description": "The board's URL.",
|
|
"example": "https://trello.com/b/5d62808da5d6a95a3a3e4f2f/my-board",
|
|
},
|
|
)
|
|
|
|
closed = fields.Boolean(
|
|
missing=False,
|
|
metadata={
|
|
"description": "Whether the board is closed.",
|
|
"example": False,
|
|
},
|
|
)
|
|
|
|
lists = fields.Nested(
|
|
TrelloListSchema,
|
|
many=True,
|
|
metadata={
|
|
"description": "The board's lists.",
|
|
},
|
|
)
|
|
|
|
date_last_activity = fields.DateTime(
|
|
metadata={
|
|
"description": "The board's last activity date.",
|
|
"example": "2019-08-25T15:52:45.000Z",
|
|
},
|
|
)
|
|
|
|
|
|
class TrelloPreviewSchema(Schema):
|
|
"""
|
|
Trello attachment preview schema.
|
|
"""
|
|
|
|
id = fields.String(
|
|
required=True,
|
|
metadata={
|
|
"description": "The preview's unique identifier.",
|
|
"example": "5d62808da5d6a95a3a3e4f2f",
|
|
},
|
|
)
|
|
|
|
url = fields.Url(
|
|
required=True,
|
|
metadata={
|
|
"description": "The preview's URL.",
|
|
"example": "https://trello.com/c/5d62808da5d6a95a3a3e4f2f/my-attachment-txt.jpg",
|
|
},
|
|
)
|
|
|
|
scaled = fields.Boolean(
|
|
metadata={
|
|
"description": "Whether the preview is scaled.",
|
|
"example": True,
|
|
},
|
|
)
|
|
|
|
size = fields.Integer(
|
|
metadata={
|
|
"description": "The preview's size, in bytes.",
|
|
"example": 10000,
|
|
},
|
|
)
|
|
|
|
width = fields.Integer(
|
|
metadata={
|
|
"description": "The preview's width, in pixels.",
|
|
"example": 100,
|
|
},
|
|
)
|
|
|
|
height = fields.Integer(
|
|
metadata={
|
|
"description": "The preview's height, in pixels.",
|
|
"example": 100,
|
|
},
|
|
)
|
|
|
|
|
|
class TrelloChecklistItemSchema(Schema):
|
|
"""
|
|
Trello checklist item schema.
|
|
"""
|
|
|
|
id = fields.String(
|
|
required=True,
|
|
metadata={
|
|
"description": "The checklist item's unique identifier.",
|
|
"example": "5d62808da5d6a95a3a3e4f2f",
|
|
},
|
|
)
|
|
|
|
name = fields.String(
|
|
required=True,
|
|
metadata={
|
|
"description": "The checklist item's name.",
|
|
"example": "My Checklist Item",
|
|
},
|
|
)
|
|
|
|
checked = fields.Boolean(
|
|
metadata={
|
|
"description": "Whether the checklist item is checked.",
|
|
"example": True,
|
|
},
|
|
)
|
|
|
|
|
|
class TrelloChecklistSchema(Schema):
|
|
"""
|
|
Trello checklist schema.
|
|
"""
|
|
|
|
id = fields.String(
|
|
required=True,
|
|
metadata={
|
|
"description": "The checklist's unique identifier.",
|
|
"example": "5d62808da5d6a95a3a3e4f2f",
|
|
},
|
|
)
|
|
|
|
name = fields.String(
|
|
metadata={
|
|
"description": "The checklist's name.",
|
|
"example": "My Checklist",
|
|
},
|
|
)
|
|
|
|
items = fields.Nested(TrelloChecklistItemSchema, many=True)
|
|
|
|
|
|
class TrelloAttachmentSchema(Schema):
|
|
"""
|
|
Trello attachment schema.
|
|
"""
|
|
|
|
id = fields.String(
|
|
required=True,
|
|
metadata={
|
|
"description": "The attachment's unique identifier.",
|
|
"example": "5d62808da5d6a95a3a3e4f2f",
|
|
},
|
|
)
|
|
|
|
name = fields.String(
|
|
required=True,
|
|
metadata={
|
|
"description": "The attachment's name.",
|
|
"example": "My Attachment.txt",
|
|
},
|
|
)
|
|
|
|
url = fields.Url(
|
|
required=True,
|
|
metadata={
|
|
"description": "The attachment's URL.",
|
|
"example": "https://trello.com/c/5d62808da5d6a95a3a3e4f2f/my-attachment.txt",
|
|
},
|
|
)
|
|
|
|
size = fields.Integer(
|
|
metadata={
|
|
"description": "The attachment's size, in bytes.",
|
|
"example": 1024,
|
|
},
|
|
)
|
|
|
|
date = fields.DateTime(
|
|
metadata={
|
|
"description": "The attachment's date.",
|
|
"example": "2019-08-25T15:32:13.000Z",
|
|
},
|
|
)
|
|
|
|
edge_color = fields.String(
|
|
metadata={
|
|
"description": "The attachment's edge color.",
|
|
"example": "#000000",
|
|
},
|
|
)
|
|
|
|
member_id = fields.String(
|
|
metadata={
|
|
"description": "The ID of the member who created the attachment.",
|
|
"example": "5d62808da5d6a95a3a3e4f2f",
|
|
},
|
|
)
|
|
|
|
is_upload = fields.Boolean(
|
|
metadata={
|
|
"description": "Whether the attachment is an upload.",
|
|
"example": True,
|
|
},
|
|
)
|
|
|
|
mime_type = fields.String(
|
|
metadata={
|
|
"description": "The attachment's MIME type.",
|
|
"example": "text/plain",
|
|
},
|
|
)
|
|
|
|
previews = fields.Nested(TrelloPreviewSchema, many=True)
|
|
|
|
|
|
class TrelloCardSchema(Schema):
|
|
"""
|
|
Trello card schema.
|
|
"""
|
|
|
|
class Meta: # pylint: disable=too-few-public-methods
|
|
"""
|
|
Meta class.
|
|
"""
|
|
|
|
unknown = EXCLUDE
|
|
|
|
id = fields.String(
|
|
required=True,
|
|
metadata={
|
|
"description": "The card's unique identifier.",
|
|
"example": "5d62808da5d6a95a3a3e4f2f",
|
|
},
|
|
)
|
|
|
|
name = fields.String(
|
|
required=True,
|
|
metadata={
|
|
"description": "The card's name.",
|
|
"example": "My Card",
|
|
},
|
|
)
|
|
|
|
description = fields.String(
|
|
metadata={
|
|
"description": "The card's description.",
|
|
"example": "My card's description.",
|
|
},
|
|
)
|
|
|
|
url = fields.Url(
|
|
required=True,
|
|
metadata={
|
|
"description": "The card's URL.",
|
|
"example": "https://trello.com/c/5d62808da5d6a95a3a3e4f2f/my-card",
|
|
},
|
|
)
|
|
|
|
due_date = fields.DateTime(
|
|
metadata={
|
|
"description": "The card's due date.",
|
|
"example": "2019-08-25T15:52:45.000Z",
|
|
},
|
|
)
|
|
|
|
latest_card_move_date = fields.DateTime(
|
|
metadata={
|
|
"description": "The card's latest move date.",
|
|
"example": "2019-08-25T15:52:45.000Z",
|
|
},
|
|
)
|
|
|
|
date_last_activity = fields.DateTime(
|
|
metadata={
|
|
"description": "The card's last activity date.",
|
|
"example": "2019-08-25T15:52:45.000Z",
|
|
},
|
|
)
|
|
|
|
closed = fields.Boolean(
|
|
missing=False,
|
|
metadata={
|
|
"description": "Whether the card is closed.",
|
|
"example": False,
|
|
},
|
|
)
|
|
|
|
is_due_complete = fields.Boolean(
|
|
metadata={
|
|
"description": "Whether the card is due complete.",
|
|
"example": False,
|
|
},
|
|
)
|
|
|
|
board = fields.Nested(TrelloBoardSchema)
|
|
list = fields.Nested(TrelloListSchema)
|
|
comments = fields.Nested(TrelloCommentSchema, many=True)
|
|
labels = fields.Nested(TrelloLabelSchema, many=True)
|
|
attachments = fields.Nested(TrelloAttachmentSchema, many=True)
|
|
checklists = fields.Nested(TrelloChecklistSchema, many=True)
|