Skip to main content

Cliente Python para integraciones con la API GraphQL de Monday.com

Project description

cartagon-monday-client

Cliente Python para integraciones con la API GraphQL de Monday.com.
Incluye manejo de reintentos (HTTP 5xx, 403, 401/404 transitorios, ComplexityException), paginación con items_pagenext_items_page, y utilidades de alto nivel para crear, actualizar y consultar ítems.

Requisitos: Python 3.10+


Instalación

pip install cartagon-monday-client

Importación:

from monday_client import MondayClient

Inicio rápido

from monday_client import MondayClient

token = "TU_API_TOKEN"
client = MondayClient(api_key=token)

# 1) Probar conexión
print(client.test_connection())  # True si la API responde y el token es válido

# 2) Listar tableros
boards = client.get_boards(limit=5, page=1)
for b in boards:
    print(f"{b['id']}: {b['name']}")

# 3) Obtener ítems de un tablero (paginación automática con cursor)
items = client.get_all_items(board_id=123456789, limit=100)
print("Total ítems:", len(items))

# 4) Crear un ítem con columnas en bruto
nuevo = client.create_item(
    board_id=123456789,
    item_name="Tarea de ejemplo",
    columns=[
        {"id": "status", "type": "status", "value": "Working on it"},
        {"id": "date", "type": "date", "value": {"date": "2025-09-25"}}
    ]
)
print("Ítem creado:", nuevo)

# 5) Crear un subítem
sub = client.create_subitem(
    parent_item_id=987654321,
    subitem_name="Subtarea",
    columns=[{"id": "text", "type": "text", "value": "Detalle"}]
)
print("Subítem:", sub)

# 6) Actualizar columna simple
upd1 = client.update_simple_column_value(
    item_id=987654321,
    board_id=123456789,
    column_id="text_column",
    value="Texto actualizado"
)
print("Update simple:", upd1)

# 7) Actualizar múltiples columnas
upd2 = client.update_multiple_column_values(
    item_id=987654321,
    board_id=123456789,
    columns=[
        {"id": "status", "type": "status", "value": "Done"},
        {"id": "priority", "type": "dropdown", "value": ["High"]}
    ]
)
print("Update múltiple:", upd2)

# 8) Filtrar ítems por valor de columna
results = client.get_items_by_column_value(
    board_id=123456789,
    column_id="status",
    value="Done",
    operator="any_of",
    limit=50
)
print("Resultados filtrados:", len(results))

# 9) Obtener un ítem por ID
item = client.get_item(item_id=987654321, columns_ids=["status", "text_column"])
print(item)

API de MondayClient

execute_query(query: str, *, return_key: str | None = None, log_query_preview: bool = False) -> dict

Ejecuta una query/mutación GraphQL y devuelve data (o data[return_key]).


test_connection() -> bool

Consulta me y devuelve True si la API responde con un usuario válido.


get_boards(limit: int = 10, page: int = 1, fields: list[str] | str | None = None) -> list[dict]

Devuelve tableros con paginación simple.

  • fields por defecto: ["id","name","workspace_id","state","board_kind"].

get_all_items(board_id: int, limit: int = 50, *, fields: list[str] | str | None = None, columns_ids: list[str] | None = None) -> list[dict]

Devuelve todos los ítems de un tablero, paginando con cursor.

  • Si fields es None, usa id, name y column_values { ALL_COLUMNS_FRAGMENT }.
  • Si columns_ids se pasa, aplica filtro ids:[...] en column_values.

create_item(board_id: int, item_name: str, *, group_id: str | None = None, columns: list[dict] | dict | None = None, fail_on_duplicate: bool = True, create_labels_if_missing: bool = True, return_fields: list[str] | str | None = None) -> dict

Crea un ítem.

  • Acepta columns en bruto y los normaliza con create_column_values.
  • return_fields: por defecto "id".

create_subitem(parent_item_id: int, subitem_name: str, *, columns: list[dict] | dict | None = None, fail_on_duplicate: bool = True, create_labels_if_missing: bool = True, return_fields: list[str] | str | None = None) -> dict

Crea un subítem bajo un ítem padre.

  • Acepta columns en bruto o dict ya renderizado.
  • return_fields: por defecto "id".

update_simple_column_value(item_id: int, board_id: int, column_id: str, value: str, *, return_fields: list[str] | str | None = None) -> dict

Actualiza una columna simple.

  • value es obligatorio; usa "" para limpiar.
  • Si la columna espera JSON, pásalo serializado como string (ej: '{"date":"2025-09-25"}').

update_multiple_column_values(item_id: int, board_id: int, columns: list[dict] | dict, *, fail_on_duplicate: bool = True, create_labels_if_missing: bool = True, return_fields: list[str] | str | None = None) -> dict

Actualiza varias columnas en un único llamado.

  • Normaliza columns con create_column_values.
  • Internamente hace doble json.dumps para column_values.

get_items_by_column_value(board_id: int, column_id: str, value: str, fields: list[str] | None = None, operator: str = "any_of", limit: int = 200) -> list[dict]

Filtra ítems por valor en una columna, con query_params.rules.

  • Pagina con cursor hasta agotar resultados.
  • Soporta operadores: any_of, not_any_of, is_empty, contains_text, greater_than, between, etc.

get_item(item_id: int, columns_ids: list[str] | None = None) -> dict

Obtiene un ítem por ID.

  • Limita columnas si pasas columns_ids.

Otras utilidades

  • board_columns(board_id: int): devuelve columnas de un board.
  • item_columns(item_id: int): columnas de un ítem.
  • subitems_columns(board_id: int): columnas de subitems de un board.
  • delete_item(item_id: int): elimina un ítem.
  • create_item_update(item_id: str, body: str, mention_user: list[dict] = []): crea un update en un ítem.
  • create_column_values(columns: list[dict], fail_on_duplicate: bool = True) -> dict: helper para normalizar column_values.

Manejo de errores

  • Errores retriables: HTTP 5xx, 403, 401/404 transitorios, ComplexityException.
  • Errores no retriables: otros GraphQL (ej. InvalidBoardIdException).
  • Si se agotan reintentos → MondayAPIError("Max retries reached").

Licencia

MIT — ver archivo LICENSE.


Enlaces

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cartagon_monday_client-1.0.0.tar.gz (23.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cartagon_monday_client-1.0.0-py3-none-any.whl (23.5 kB view details)

Uploaded Python 3

File details

Details for the file cartagon_monday_client-1.0.0.tar.gz.

File metadata

  • Download URL: cartagon_monday_client-1.0.0.tar.gz
  • Upload date:
  • Size: 23.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for cartagon_monday_client-1.0.0.tar.gz
Algorithm Hash digest
SHA256 ad636d7236bb0bd500dae14e36aef1ec9eace5f5ee9d983fddfc6edb2ca69b73
MD5 1049fa8346ed851c58e008bc71dfd6c6
BLAKE2b-256 fa6ce6316899ff48bf5a0f70044b235d7ef2647ed51ec1b56245ce352241d346

See more details on using hashes here.

File details

Details for the file cartagon_monday_client-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for cartagon_monday_client-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5b45c842e4efba90f83dcd69dc21fd6be5d516db559beb69723a7313ab1b3a14
MD5 90893113d20da7fb83d3ca2c9fdd6a88
BLAKE2b-256 0a5ed2de4205511b8461e81405ececc3b932cbe463d446bf39dd4565e67ed302

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page