From ede55dbc5f4cdf13caabba0601755689dbd119e2 Mon Sep 17 00:00:00 2001 From: Oleg Kron Date: Tue, 14 Feb 2023 15:43:12 +0000 Subject: [PATCH 1/2] Items resource fix typo Fixed typo in line 36 --- docs/README.rst | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/README.rst b/docs/README.rst index 2390b4d..474f9c2 100644 --- a/docs/README.rst +++ b/docs/README.rst @@ -31,7 +31,10 @@ Getting started monday.items.create_item(board_id='12345678', group_id='today', item_name='Do a thing') -**Available methods:** #### Items Resource (monday.items) - +**Available methods:** + +Items Resource (monday.items) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``create_item(board_id, group_id, item_name, column_values=None, create_labels_if_missing=False)`` - Create an item on a board in the given group with name item_name. From 3d1bd711d4361b8b8042b78d94e3cc158c896567 Mon Sep 17 00:00:00 2001 From: olegkron Date: Wed, 5 Apr 2023 12:25:46 +0100 Subject: [PATCH 2/2] Added mutate_multiple_items_query which allows to perform multiple operations in batches. --- monday/query_joins.py | 38 ++++++++++++++++++++++++++++++++++---- monday/resources/items.py | 8 ++++++-- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/monday/query_joins.py b/monday/query_joins.py index d075643..e121702 100644 --- a/monday/query_joins.py +++ b/monday/query_joins.py @@ -59,6 +59,37 @@ def mutate_subitem_query(parent_item_id, subitem_name, column_values, str(create_labels_if_missing).lower()) +def mutate_multiple_items_query(items_data): + mutation_parts = [] + for index, item_data in enumerate(items_data): + method = item_data.pop('method') + params = ', '.join([f"{key}: %s" for key in item_data.keys()]) + values = [ + monday_json_stringify(value) if not isinstance(value, (int, bool, str)) else + (str(value).lower() if isinstance(value, bool) else + f'"{value}"' if isinstance(value, str) else value) + for value in item_data.values() + ] + + mutation_part = f''' + item{index}: {method}({params}) {{ + id + name + column_values {{ + id + text + }} + }} + ''' % tuple(values) + + mutation_parts.append(mutation_part) + + query = '''mutation { + %s + }''' % ' '.join(mutation_parts) + return query + + def get_item_query(board_id, column_id, value): query = '''query { @@ -290,7 +321,6 @@ def get_tags_query(tags): # BOARD RESOURCE QUERIES def get_board_items_query(board_id: Union[str, int], limit: Optional[int] = None, page: Optional[int] = None) -> str: - raw_params = locals().items() item_params = gather_params(raw_params, exclusion_list=["board_id"]) joined_params = ', '.join(item_params) @@ -319,7 +349,8 @@ def get_board_items_query(board_id: Union[str, int], limit: Optional[int] = None return query -def get_boards_query(limit: int = None, page: int = None, ids: List[int] = None, board_kind: BoardKind = None, state: BoardState = None, order_by: BoardsOrderBy = None): +def get_boards_query(limit: int = None, page: int = None, ids: List[int] = None, board_kind: BoardKind = None, + state: BoardState = None, order_by: BoardsOrderBy = None): parameters = locals().items() query_params = [] for k, v in parameters: @@ -330,7 +361,6 @@ def get_boards_query(limit: int = None, page: int = None, ids: List[int] = None, query_params.append("%s: %s" % (k, value)) - query = '''query { boards (%s) { @@ -401,7 +431,7 @@ def get_columns_by_board_query(board_ids): }''' % board_ids -def create_board_by_workspace_query(board_name: str, board_kind: BoardKind, workspace_id = None) -> str: +def create_board_by_workspace_query(board_name: str, board_kind: BoardKind, workspace_id=None) -> str: workspace_query = f'workspace_id: {workspace_id}' if workspace_id else '' query = ''' mutation { diff --git a/monday/resources/items.py b/monday/resources/items.py index 73e365c..33456ff 100644 --- a/monday/resources/items.py +++ b/monday/resources/items.py @@ -1,7 +1,7 @@ from monday.resources.base import BaseResource from monday.query_joins import mutate_item_query, get_item_query, update_item_query, get_item_by_id_query, \ update_multiple_column_values_query, mutate_subitem_query, add_file_to_column_query, delete_item_query, \ - archive_item_query, move_item_to_group_query + archive_item_query, move_item_to_group_query, mutate_multiple_items_query class ItemResource(BaseResource): @@ -20,6 +20,10 @@ def create_subitem(self, parent_item_id, subitem_name, column_values=None, create_labels_if_missing) return self.client.execute(query) + def mutate_multiple_items(self, items_data): + query = mutate_multiple_items_query(items_data) + return self.client.execute(query) + def fetch_items_by_column_value(self, board_id, column_id, value): query = get_item_query(board_id, column_id, value) return self.client.execute(query) @@ -48,7 +52,7 @@ def move_item_to_group(self, item_id, group_id): def archive_item_by_id(self, item_id): query = archive_item_query(item_id) return self.client.execute(query) - + def delete_item_by_id(self, item_id): query = delete_item_query(item_id) return self.client.execute(query)