Permalink
151 lines (124 sloc)
5.46 KB
import datetime | |
class Board: | |
def __init__(self, api, board_data): | |
self.api = api | |
self.data = board_data | |
self.id = board_data["_id"] | |
self.title = board_data["title"] | |
def get_cardslists(self, filter=''): | |
cardslists_data = self.api.api_call("/api/boards/{}/lists".format(self.id)) | |
return [Cardslist(self.api, self, cardslist_data) for cardslist_data in cardslists_data if filter in cardslist_data["title"]] | |
def get_swimlanes(self, filter=''): | |
swimlanes_data = self.api.api_call("/api/boards/{}/swimlanes".format(self.id)) | |
return [Swinlane(self.api, self, swimlane_data) for swimlane_data in swimlanes_data if filter in swimlane_data["title"]] | |
def pprint(self, indent=0): | |
pprint = "{}- {}".format(" "*indent, self.title) | |
for cardslist in self.get_cardslists(): | |
pprint += "\n{}".format(cardslist.pprint(indent + 1)) | |
return pprint | |
class Swinlane: | |
def __init__(self, api, board, swimlane_data): | |
self.api = api | |
self.board = board | |
self.data = swimlane_data | |
self.id = swimlane_data["_id"] | |
self.title = swimlane_data["title"] | |
def get_cards(self, filter=''): | |
cards_data = self.api.api_call("/api/boards/{}/lists/{}/cards".format(self.board.id, self.id)) | |
return [Card(self.api, self, card_data) for card_data in cards_data if filter in card_data] | |
def pprint(self, indent=0): | |
pprint = "{}- {}".format(" " * indent, self.title) | |
for cards in self.get_cards(): | |
pprint += "\n{}".format(cards.pprint(indent + 1)) | |
return pprint | |
class Cardslist: | |
def __init__(self, api, board, cardslist_data): | |
self.api = api | |
self.board = board | |
self.data = cardslist_data | |
self.id = cardslist_data["_id"] | |
self.title = cardslist_data["title"] | |
def get_cards(self, id=''): | |
cards_data = self.api.api_call("/api/boards/{}/lists/{}/cards".format(self.board.id, self.id)) | |
return [Card(self.api, self, card_data) for card_data in cards_data if id in card_data['_id']] | |
def pprint(self, indent=0): | |
pprint = "{}- {}".format(" " * indent, self.title) | |
for cards in self.get_cards(): | |
pprint += "\n{}".format(cards.pprint(indent + 1)) | |
return pprint | |
# default the swimlane to the first one in the list, if not specified | |
def add_card(self, card_title, card_description="", user_id="", swimlane=""): | |
if not swimlane: | |
swimlane = self.board.get_swimlanes()[0].id | |
else: | |
swimlanes = self.board.get_swimlanes( swimlane ) | |
if swimlanes: | |
swimlane = swimlanes[0] | |
else: | |
raise Exception("Swimlane '%s' couldn't be found!!" % swimlane) | |
if not user_id: | |
user_id = self.api.user_id | |
data={ | |
'title': card_title, | |
'description': card_description, | |
'authorId': user_id, | |
'swimlaneId': swimlane, | |
} | |
id = self.api.api_call("/api/boards/{}/lists/{}/cards".format(self.board.id, self.id), data) | |
# return the newly created card | |
return self.get_cards( id['_id'] ) | |
class Card: | |
def __init__(self, api, cardslist, card_data): | |
self.api = api | |
self.cardslist = cardslist | |
self.data = card_data | |
self.id = card_data["_id"] | |
self.title = card_data["title"] | |
def get_card_info(self): | |
info_data = self.api.api_call("/api/boards/{}/lists/{}/cards/{}".format( | |
self.cardslist.board.id, | |
self.cardslist.id, | |
self.id)) | |
return info_data | |
def get_checklists(self): | |
checklists_data = self.api.api_call("/api/boards/{}/cards/{}/checklists".format( | |
self.cardslist.board.id, | |
self.id)) | |
return [Checklist(self.api, self, checklist_data) for checklist_data in checklists_data] | |
def pprint(self, indent=0): | |
pprint = "{}- {}".format(" " * indent, self.title) | |
cardinfo = self.get_card_info() | |
if "dueAt" in cardinfo: | |
pdate = datetime.datetime.strptime(cardinfo["dueAt"], "%Y-%m-%dT%H:%M:%S.%fZ") | |
pprint += "\n{}- Due at: {}".format(" " * (indent+1), pdate) | |
for checklist in self.get_checklists(): | |
pprint += "\n{}".format(checklist.pprint(indent + 1)) | |
return pprint | |
class Checklist: | |
def __init__(self, api, card, checklist_data): | |
self.api = api | |
self.card = card | |
self.data = checklist_data | |
self.id = checklist_data["_id"] | |
self.title = checklist_data["title"] | |
def get_items(self): | |
items_data = self.api.api_call("/api/boards/{}/cards/{}/checklists/{}".format( | |
self.card.cardslist.board.id, | |
self.card.id, | |
self.id)) | |
return [ChecklistItem(self.api, self, item_data) for item_data in items_data["items"]] | |
def pprint(self, indent=0): | |
pprint = "{}- {}".format(" " * indent, self.title) | |
for item in self.get_items(): | |
pprint += "\n{}".format(item.pprint(indent + 1)) | |
return pprint | |
class ChecklistItem: | |
def __init__(self, api, checklist, item_data): | |
self.api = api | |
self.checklist = checklist | |
self.data = item_data | |
self.is_finished = item_data["isFinished"] | |
self.title = item_data["title"] | |
def pprint(self, indent=0): | |
pprint = "{}- [{}] {}".format(" " * indent, "X" if self.is_finished else " ", self.title) | |
return pprint |