platypush/platypush/schemas/trello.py
Fabio Manganiello c919cf0cd8
[trello] (Almost) complete plugin rewrite.
- 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
2023-11-17 02:07:04 +01:00

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)