Source code for pycharmers.api.trello

"""A wrapper class for `Trello API <https://developer.atlassian.com/cloud/trello/>`_"""
#coding: utf-8
import json
import requests

from ..utils._path import DOTENV_PATH
from ..utils.environ_utils import name2envname, check_environ
from ..utils.json_utils import dumps_json
from ..utils.print_utils import tabulate
from ._base import PycharmersAPI

[docs]class Trello(PycharmersAPI): """A wrapper class for `Trello API <https://developer.atlassian.com/cloud/trello/>`_ Visit https://trello.com/app-key to get an API key and Token. (NOTE: You have to login before visiting) Args: api_key (str) : API-key. token (str) : Token. verbose (bool) : Whether to print logs or not. """ def __init__(self, apikey=None, token=None, verbose=True): super().__init__( api_name="Trello", verbose=verbose, apikey=apikey, token=token, ) self.setup_show_func()
[docs] def api_call(self, url, apikey=None, token=None): """Get information about the memberships users have to the board. Args: url (str) : URL to which the API sends the request. api_key (str) : API-key. token (str) : Token. """ check_environ( required_keynames=self.required_keynames, required_env_varnames=self.required_env_varnames, apikey=apikey, token=token, ) response = requests.get( url=url, headers = { "Accept": "application/json", }, params={ "key" : self.get_val("apikey", apikey=apikey), "token" : self.get_val("token", token=token), }, ) return json.loads(response.text)
[docs] @staticmethod def show_results(result, keynames=["name", "id"]): """Static Method for displaying result beautifullly. Args: result (list) : Result. keynames (list) : The keyname to extract and display the value from the ``result`` Examples: >>> from pycharmers.api import Trello >>> Trello.show_results(result=[ ... {"api": "slack", "foo": 1, "bar": ["get"]}, ... {"api": "github", "foo": 2, "bar": ["post"]} >>> ], keynames=["api", "b"]) +--------+------+ | api | b | +========+======+ | slack | None | +--------+------+ | github | None | +--------+------+ """ tabulate(tabular_data=[[e.get(c) for c in keynames] for e in result], headers=keynames)
[docs] def setup_show_func(self): """Set up the ``show_XXX`` funciton.""" method2showkeynames = { "memberships_of_a_board" : ["name", "id", "url"], "lists_on_a_board" : ["name", "id"], "cards_on_a_board" : ["name", "id", "idList"], "cards_in_a_list" : ["name", "id"], } for method_name, default_keynames in method2showkeynames.items(): def show_func(*args, keynames=default_keynames, method_name=method_name, **kwargs): get_func = getattr(self, f"get_{method_name}") self.show_results(result=get_func(*args, **kwargs), keynames=keynames) show_func.__doc__ = f"See :meth:`get_{method_name} <pycharmers.api.trello.get_{method_name}>` for the required arguments." setattr(self, f"show_{method_name}", show_func)
[docs] def get_memberships_of_a_board(self, username=None, apikey=None, token=None): """API wrapper for `Get Memberships of a Board <https://developer.atlassian.com/cloud/trello/rest/api-group-boards/#api-boards-id-memberships-get>`_""" return self.api_call(url=f"https://api.trello.com/1/members/{username}/boards", apikey=apikey, token=token)
[docs] def get_lists_on_a_board(self, board_id, apikey=None, token=None): """API wrapper for `Get Lists on a Board <https://developer.atlassian.com/cloud/trello/rest/api-group-boards/#api-boards-id-lists-get>`_""" return self.api_call(url=f"https://api.trello.com/1/boards/{board_id}/lists", apikey=apikey, token=token)
[docs] def get_cards_on_a_board(self, board_id, apikey=None, token=None): """API wrapper for `Get Cards on a Board <https://developer.atlassian.com/cloud/trello/rest/api-group-boards/#api-boards-id-cards-get>`_""" return self.api_call(url=f"https://api.trello.com/1/boards/{board_id}/cards", apikey=apikey, token=token)
[docs] def get_cards_in_a_list(self, board_id, apikey=None, token=None): """API wrapper for `Get Cards in a List <https://developer.atlassian.com/cloud/trello/rest/api-group-lists/#api-lists-id-cards-get>`_""" return self.api_call(url=f"https://api.trello.com/1/lists/{board_id}/cards", apikey=apikey, token=token)