Source code for monday.types.update

# This file is part of monday-client.
#
# Copyright (C) 2024 Leet Cyber Security <https://leetcybersecurity.com/>
#
# monday-client is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# monday-client is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with monday-client. If not, see <https://www.gnu.org/licenses/>.

"""
Monday.com API update type definitions and structures.

This module contains dataclasses that represent Monday.com update objects,
including updates (comments) and their relationships to items and users.
"""

from __future__ import annotations

from dataclasses import dataclass
from typing import TYPE_CHECKING, Any

if TYPE_CHECKING:
    from monday.types.asset import Asset
    from monday.types.user import User


[docs] @dataclass class Update: """ Represents a Monday.com update (comment) with its content and metadata. This dataclass maps to the Monday.com API update object structure, containing fields like body, creator, replies, and associated assets. See Also: https://developer.monday.com/api-reference/reference/updates#fields """ assets: list[Asset] | None = None """The update's assets/files""" body: str = '' """The update's body""" created_at: str = '' """The update's creation date. Returned as ``YYYY-MM-DDTHH:MM:SS``""" creator: User | None = None """The update's creator""" creator_id: str = '' """The update's creator unique identifier""" id: str = '' """The update's unique identifier""" item_id: str = '' """The update's item unique identifier""" parent_id: str = '' """The update's parent unique identifier""" replies: list[Update] | None = None """The update's replies""" text_body: str = '' """The update's text body""" updated_at: str = '' """The update's last update date. Returned as ``YYYY-MM-DDTHH:MM:SS``"""
[docs] def to_dict(self) -> dict[str, Any]: """Convert to dictionary for API requests.""" result = {} if self.assets: result['assets'] = [ asset.to_dict() if hasattr(asset, 'to_dict') else asset for asset in self.assets ] if self.body: result['body'] = self.body if self.created_at: result['created_at'] = self.created_at if self.creator: result['creator'] = self.creator.to_dict() if self.creator_id: result['creator_id'] = self.creator_id if self.id: result['id'] = self.id if self.item_id: result['item_id'] = self.item_id if self.parent_id: result['parent_id'] = self.parent_id if self.replies: result['replies'] = [ reply.to_dict() if hasattr(reply, 'to_dict') else reply for reply in self.replies ] if self.text_body: result['text_body'] = self.text_body if self.updated_at: result['updated_at'] = self.updated_at return result
[docs] @classmethod def from_dict(cls, data: dict[str, Any]) -> Update: """Create from dictionary.""" from monday.types.asset import Asset # noqa: PLC0415 from monday.types.user import User # noqa: PLC0415 return cls( assets=[ Asset.from_dict(asset) if hasattr(Asset, 'from_dict') else asset for asset in data.get('assets', []) ] if data.get('assets') else None, body=str(data.get('body', '')), created_at=str(data.get('created_at', '')), creator=User.from_dict(data['creator']) if data.get('creator') else None, creator_id=str(data.get('creator_id', '')), id=str(data.get('id', '')), item_id=str(data.get('item_id', '')), parent_id=str(data.get('parent_id', '')), replies=[ Update.from_dict(reply) if hasattr(Update, 'from_dict') else reply for reply in data.get('replies', []) ] if data.get('replies') else None, text_body=str(data.get('text_body', '')), updated_at=str(data.get('updated_at', '')), )