Source code for monday.types.account

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

This module contains dataclasses that represent Monday.com account objects,
including accounts, plans, and account products with their settings.
"""

from __future__ import annotations

from dataclasses import dataclass
from typing import Any, Literal


[docs] @dataclass class Plan: """ Represents a Monday.com account plan with its limits and features. This dataclass maps to the Monday.com API plan object structure, containing fields like max users, period, tier, and version. See Also: https://developer.monday.com/api-reference/reference/plan#fields """ max_users: int = 0 """The maximum number of users allowed on the plan. This will be ``0`` for free and developer accounts""" period: str = '' """The plan's time period""" tier: str = '' """The plan's tier""" version: int = 0 """The plan's version"""
[docs] def to_dict(self) -> dict[str, Any]: """Convert to dictionary for API requests.""" result = {} if self.max_users: result['max_users'] = self.max_users if self.period: result['period'] = self.period if self.tier: result['tier'] = self.tier if self.version: result['version'] = self.version return result
[docs] @classmethod def from_dict(cls, data: dict[str, Any]) -> Plan: """Create from dictionary.""" return cls( max_users=int(data.get('max_users', 0)), period=str(data.get('period', '')), tier=str(data.get('tier', '')), version=int(data.get('version', 0)), )
[docs] @dataclass class AccountProduct: """ Represents a Monday.com account product with its configuration. This dataclass maps to the Monday.com API account product object structure, containing fields like kind, default workspace, and unique identifier. See Also: https://developer.monday.com/api-reference/reference/other-types#account-product """ id: str = '' """The unique identifier of the account product""" default_workspace_id: str = '' """The account product's default workspace ID""" kind: ( Literal[ 'core', 'crm', 'forms', 'marketing', 'projectManagement', 'project_management', 'service', 'software', 'whiteboard', ] | None ) = None """The account product"""
[docs] def to_dict(self) -> dict[str, Any]: """Convert to dictionary for API requests.""" result = {} if self.id: result['id'] = self.id if self.default_workspace_id: result['default_workspace_id'] = self.default_workspace_id if self.kind: result['kind'] = self.kind return result
[docs] @classmethod def from_dict(cls, data: dict[str, Any]) -> AccountProduct: """Create from dictionary.""" return cls( id=data.get('id', ''), default_workspace_id=str(data.get('default_workspace_id', '')), kind=data.get('kind'), )
[docs] @dataclass class Account: """ Represents a Monday.com account with its settings and plan information. This dataclass maps to the Monday.com API account object structure, containing fields like name, plan, products, and account settings. See Also: https://developer.monday.com/api-reference/reference/account#fields """ active_members_count: int = 0 """The number of active users in the account - includes active users across all products who are not guests or viewers""" country_code: str = '' """The account's two-letter country code in ISO3166 format. The result is based on the location of the first account admin""" first_day_of_the_week: Literal['monday', 'sunday'] | None = None """The first day of the week for the account""" id: str = '' """The account's unique identifier""" logo: str = '' """The account's logo""" name: str = '' """The account's name""" plan: Plan | None = None """The account's payment plan. Returns ``None`` for accounts with the multi-product infrastructure""" products: AccountProduct | None = None """The account's active products""" show_timeline_weekends: bool | None = None """Returns ``True`` if weekends appear in the timeline""" sign_up_product_kind: str = '' """The product the account first signed up to""" slug: str = '' """The account's slug""" tier: str = '' """The account's tier. For accounts with multiple products, this will return the highest tier across all products"""
[docs] def to_dict(self) -> dict[str, Any]: """Convert to dictionary for API requests.""" result = {} if self.active_members_count: result['active_members_count'] = self.active_members_count if self.country_code: result['country_code'] = self.country_code if self.first_day_of_the_week: result['first_day_of_the_week'] = self.first_day_of_the_week if self.id: result['id'] = self.id if self.logo: result['logo'] = self.logo if self.name: result['name'] = self.name if self.plan: result['plan'] = self.plan.to_dict() if self.products: result['products'] = self.products.to_dict() if self.show_timeline_weekends: result['show_timeline_weekends'] = self.show_timeline_weekends if self.sign_up_product_kind: result['sign_up_product_kind'] = self.sign_up_product_kind if self.slug: result['slug'] = self.slug if self.tier: result['tier'] = self.tier return result
[docs] @classmethod def from_dict(cls, data: dict[str, Any]) -> Account: """Create from dictionary.""" return cls( active_members_count=int(data.get('active_members_count', 0)), country_code=str(data.get('country_code', '')), first_day_of_the_week=data.get('first_day_of_the_week'), id=str(data.get('id', '')), logo=str(data.get('logo', '')), name=str(data.get('name', '')), plan=Plan.from_dict(data['plan']) if data.get('plan') else None, products=AccountProduct.from_dict(data['products']) if data.get('products') else None, show_timeline_weekends=data.get('show_timeline_weekends'), sign_up_product_kind=data.get('sign_up_product_kind', ''), slug=data.get('slug', ''), tier=data.get('tier', ''), )