Skip to content
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