Source code for monday.types.workspace

# 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 workspace type definitions and structures.

This module contains dataclasses that represent Monday.com workspace objects,
including workspaces and their relationships to boards and users.
"""

from __future__ import annotations

from dataclasses import dataclass
from typing import TYPE_CHECKING, Any

if TYPE_CHECKING:
    from monday.types.board import Board
    from monday.types.user import User


[docs] @dataclass class Workspace: """ Represents a Monday.com workspace with its boards and members. This dataclass maps to the Monday.com API workspace object structure, containing fields like name, description, boards, owners, and subscribers. See Also: https://developer.monday.com/api-reference/reference/workspaces#fields """ boards: list[Board] | None = None """The workspace's boards""" created_at: str = '' """The workspace's creation date. Returned as ``YYYY-MM-DDTHH:MM:SS``""" description: str = '' """The workspace's description""" id: str = '' """The workspace's unique identifier""" kind: str = '' """The workspace's kind""" name: str = '' """The workspace's name""" owners: list[User] | None = None """The workspace's owners""" picture_url: str = '' """The workspace's picture URL""" settings_str: str = '' """The workspace's settings as a JSON string""" state: str = '' """The workspace's state""" subscribers: list[User] | None = None """The workspace's subscribers""" teams: list[User] | None = None """The workspace's teams""" updated_at: str = '' """The workspace'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.""" def _convert_list(items: list, converter_name: str = 'to_dict') -> list: """Convert list items using their converter method if available.""" return [ getattr(item, converter_name)() if hasattr(item, converter_name) else item for item in items ] data = { 'boards': _convert_list(self.boards) if self.boards else None, 'created_at': self.created_at, 'description': self.description, 'id': self.id, 'kind': self.kind, 'name': self.name, 'owners': _convert_list(self.owners) if self.owners else None, 'picture_url': self.picture_url, 'settings_str': self.settings_str, 'state': self.state, 'subscribers': _convert_list(self.subscribers) if self.subscribers else None, 'teams': _convert_list(self.teams) if self.teams else None, 'updated_at': self.updated_at, } return {k: v for k, v in data.items() if v}
[docs] @classmethod def from_dict(cls, data: dict[str, Any]) -> Workspace: """Create from dictionary.""" from monday.types.board import Board # noqa: PLC0415 from monday.types.user import User # noqa: PLC0415 return cls( boards=[ Board.from_dict(board) if hasattr(Board, 'from_dict') else board for board in data.get('boards', []) ] if data.get('boards') else None, created_at=str(data.get('created_at', '')), description=str(data.get('description', '')), id=str(data.get('id', '')), kind=str(data.get('kind', '')), name=str(data.get('name', '')), owners=[ User.from_dict(owner) if hasattr(User, 'from_dict') else owner for owner in data.get('owners', []) ] if data.get('owners') else None, picture_url=str(data.get('picture_url', '')), settings_str=str(data.get('settings_str', '')), state=str(data.get('state', '')), subscribers=[ User.from_dict(subscriber) if hasattr(User, 'from_dict') else subscriber for subscriber in data.get('subscribers', []) ] if data.get('subscribers') else None, teams=[ User.from_dict(team) if hasattr(User, 'from_dict') else team for team in data.get('teams', []) ] if data.get('teams') else None, updated_at=str(data.get('updated_at', '')), )