from trello import TrelloClient
from pathlib import Path
from polical import configuration
import os
import yaml
import logging
[docs]def get_trello_client(user_dict: dict) -> TrelloClient:
"""This function gets a Trello Client Object to connect to Trello.
Args:
user_dict (dict): File path for the config file to be loaded
Returns:
client (TrelloClient): Client object that has access to Trello.
"""
client = TrelloClient(
api_key=user_dict["api_key"],
api_secret=user_dict["api_secret"],
token=user_dict["oauth_token"],
token_secret=user_dict["oauth_token_secret"],
)
return client
[docs]def get_uncompleted_cards() -> list:
"""This function gets a all uncompleted cards from a board.
Returns:
uncompleted_cards (List): List of strings from all uncompleted cards
"""
user = configuration.load_config_file("trelloCredentials.yaml")
client = get_trello_client(user)
all_boards = client.list_boards()
# last_board = all_boards[-1]
uncompleted_cards = []
for last_board in all_boards:
if last_board.name == "TareasPoli":
for list_from_board in last_board.list_lists():
for card in list_from_board.list_cards():
if card.due is not None and not card.is_due_complete:
uncompleted_cards.append(
card.name + " | " + list_from_board.name + "\n"
)
return uncompleted_cards
[docs]def get_cards_urls() -> list:
"""This function gets a all uncompleted cards from a board.
Returns:
uncompleted_cards (List): List of strings from all uncompleted cards
"""
user = configuration.load_config_file("trelloCredentials.yaml")
client = get_trello_client(user)
all_boards = client.list_boards()
last_board = all_boards[-1]
uncompleted_cards = []
last_list_from_board = last_board.list_lists()[-1]
for card in last_list_from_board.list_cards():
uncompleted_cards.append(
card.name + " | " + last_list_from_board.name + " | " + card.url + "\n"
)
return uncompleted_cards
[docs]def get_todo_tasks() -> list:
"""This function gets a all tasks that exits on todo.txt.
Returns:
tasks_list (List): List of strings from all tasks that exits on todo.txt
"""
with open(configuration.get_file_location("todo.txt"), "r") as todo:
tasks_list = todo.readlines()
return tasks_list
[docs]def write_todo_tasks(tasks_list: list):
"""This function writes all tasks from a list.
Args:
tasks_list (list): List containing tasks to be added to the todo.txt file
"""
with open(configuration.get_file_location("todo.txt"), "w") as todo:
todo.writelines(tasks_list)
[docs]def update_new_taks():
"""This function collects all new tasks from trello and concatenates to existing todo.txt file"""
current_tasks = []
current_tasks = get_todo_tasks()
uncompleted_tasks = []
uncompleted_tasks = get_uncompleted_cards()
for task in current_tasks:
if task in uncompleted_tasks:
uncompleted_tasks.remove(task)
if uncompleted_tasks:
current_tasks += uncompleted_tasks
write_todo_tasks(current_tasks)
else:
print("No existen nuevas tareas para aƱadir a todo.txt")
[docs]def get_done_tasks() -> list:
"""This function gets a all tasks that exits on todo.txt.
Returns:
tasks_list (List): List of strings from all tasks that exits on todo.txt
"""
with open(configuration.get_file_location("done.txt"), "r") as done:
readed_lines = done.readlines()
done_list = []
for done_item in readed_lines:
done_list.append(done_item.split(" ", 2))
return done_list
[docs]def update_done_taks():
"""This functions gets new done tasks and updates to the cards on trello"""
done_tasks_to_trello = []
for done in get_done_tasks():
splitted = done[2].split("|")
if len(splitted) == 2:
splitted[0] = splitted[0].rstrip()
splitted[1] = splitted[1].strip().replace("\n", "")
done_tasks_to_trello.append(splitted)
user = configuration.load_config_file("trelloCredentials.yaml")
client = get_trello_client(user)
all_boards = client.list_boards()
# last_board = all_boards[-1] # Error cuando se cree un nuevo board
for last_board in all_boards:
if last_board.name == "TareasPoli":
for done_task in done_tasks_to_trello:
for list_from_board in last_board.list_lists():
if list_from_board.name == done_task[1]:
for card in list_from_board.list_cards():
if card.name == done_task[0] and not card.is_due_complete:
card.set_due_complete()
print("Updated", card.name, "to DONE")
def generate_todo_txt():
print("Actualizando trello desde done.txt...")
update_done_taks()
print("Generando nuevas tareas para todo.txt...")
update_new_taks()