From 0642d3bd8d4c2419f6c7e68a9f932dad2dd6868c Mon Sep 17 00:00:00 2001 From: Arpit Rathi Date: Sat, 12 Oct 2019 18:48:08 +0530 Subject: [PATCH 1/5] Initial modules and services designed. --- Project/Trello/Models/Board.py | 39 +++++++++ Project/Trello/Models/Cards.py | 35 ++++++++ Project/Trello/Models/Library.py | 26 ++++++ Project/Trello/Models/Lists.py | 22 +++++ Project/Trello/Models/User.py | 17 ++++ Project/Trello/Models/__init__.py | 0 Project/Trello/Services/BoardService.py | 105 ++++++++++++++++++++++++ Project/Trello/Services/CardService.py | 57 +++++++++++++ Project/Trello/Services/ListService.py | 58 +++++++++++++ Project/Trello/TrelloManager.py | 18 ++++ Project/Trello/__init__.py | 25 ++++++ 11 files changed, 402 insertions(+) create mode 100644 Project/Trello/Models/Board.py create mode 100644 Project/Trello/Models/Cards.py create mode 100644 Project/Trello/Models/Library.py create mode 100644 Project/Trello/Models/Lists.py create mode 100644 Project/Trello/Models/User.py create mode 100644 Project/Trello/Models/__init__.py create mode 100644 Project/Trello/Services/BoardService.py create mode 100644 Project/Trello/Services/CardService.py create mode 100644 Project/Trello/Services/ListService.py create mode 100644 Project/Trello/TrelloManager.py create mode 100644 Project/Trello/__init__.py diff --git a/Project/Trello/Models/Board.py b/Project/Trello/Models/Board.py new file mode 100644 index 0000000..b90eb96 --- /dev/null +++ b/Project/Trello/Models/Board.py @@ -0,0 +1,39 @@ +from Library import IdGenerator +from Library import Access + + +class Board(object): + + def __init__(self, name="", url=""): + self.id = IdGenerator.generateUniqueId() + self.name = name + self.privacy = Access.PUBLIC + self.url = url + self.members = dict() + self.lists = dict() + + def setBoardName(self, name): + self.name = name + + def setAccessSpecifier(self, access): + self.privacy = access + + def getBoardName(self): + return self.name + + def addMemberInBoard(self, userId): + self.members[userId] = True + + def removeMemberFromBoard(self, userId): + if userId not in self.members: + print str(userId) + "not present in Board: " + str(self.id) + return + del self.members[userId] + + def addListInBoard(self, listId): + self.lists[listId] = True + + def removeListFromBoard(self, listId): + if listId not in self.lists: + print str(listId) + " not present in Board: " + str(self.id) + del self.lists[listId] diff --git a/Project/Trello/Models/Cards.py b/Project/Trello/Models/Cards.py new file mode 100644 index 0000000..bd1e557 --- /dev/null +++ b/Project/Trello/Models/Cards.py @@ -0,0 +1,35 @@ +from Trello.Models.Library import IdGenerator + + +class Cards(object): + def __init__(self, name="", listId=None): + self.id = IdGenerator.generateUniqueId() + self.name = name + self.description = None + self.userAssigned = None + self.listId = listId + + def setName(self, name): + self.name = name + + def getName(self): + return self.name + + def setDescription(self, description): + self.description = description + + def getDescription(self): + if self.description is not None: + return self.description + return None + + def assignUser(self, userId): + self.userAssigned = userId + + def removeUser(self): + self.userAssigned = None + + def getUserName(self): + if self.userAssigned is not None: + return self.userAssigned + return None \ No newline at end of file diff --git a/Project/Trello/Models/Library.py b/Project/Trello/Models/Library.py new file mode 100644 index 0000000..39ab08e --- /dev/null +++ b/Project/Trello/Models/Library.py @@ -0,0 +1,26 @@ +import string +import random + + +class IdGenerator(object): + generatedIds = dict() + + @staticmethod + def getStringId(): + randomString = ''.join([random.choice(string.ascii_letters + + string.digits) for _ in range(10)]) + return randomString + + @classmethod + def generateUniqueId(cls): + randomString = cls.getStringId() + while randomString in cls.generatedIds.keys(): + randomString = cls.getStringId() + return randomString + + +class Access(object): + PRIVATE = "PRIVATE" + PUBLIC = "PUBLIC" + + diff --git a/Project/Trello/Models/Lists.py b/Project/Trello/Models/Lists.py new file mode 100644 index 0000000..6ab34dc --- /dev/null +++ b/Project/Trello/Models/Lists.py @@ -0,0 +1,22 @@ +from Trello.Models.Library import IdGenerator + + +class Lists(object): + + def __init__(self, name="", boardId=""): + self.id = IdGenerator.generateUniqueId() + self.name = name + self.boardId = boardId + self.cards = dict() + + def setName(self, name): + self.name = name + + def addCard(self, cardId): + self.cards[cardId] = True + + def removeCard(self, cardId): + if cardId not in self.cards: + print str(cardId) + " not present in List: " + str(self.id) + return + del self.cards[cardId] diff --git a/Project/Trello/Models/User.py b/Project/Trello/Models/User.py new file mode 100644 index 0000000..87e50a5 --- /dev/null +++ b/Project/Trello/Models/User.py @@ -0,0 +1,17 @@ +from Trello.Models.Library import IdGenerator + + +class User(object): + def __init__(self, name="", email=""): + self.id = IdGenerator.generateUniqueId() + self.name = name + self.email = email + + def setName(self, name): + self.name = name + + def getName(self): + return self.name + + def setEmail(self, email): + self.email = email diff --git a/Project/Trello/Models/__init__.py b/Project/Trello/Models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Project/Trello/Services/BoardService.py b/Project/Trello/Services/BoardService.py new file mode 100644 index 0000000..e6b952f --- /dev/null +++ b/Project/Trello/Services/BoardService.py @@ -0,0 +1,105 @@ +from Trello.Models.Board import Board + + +class BoardService(object): + + def __init__(self): + self.boards = dict() + self.listService = None + self.cardService = None + + def setServices(self, listService, cardService): + self.listService = listService + self.cardService = cardService + + def validatePresent(self, boardId): + if boardId not in self.boards: + print "Board Id not present" + return False + return True + + def createBoard(self, name): + board = Board(name) + self.boards[board.id] = board + + def updateName(self, boardId, name): + if not self.validatePresent(boardId): + return + board = self.boards[boardId] + board.setBoardName(name) + + def updateAccess(self, boardId, access): + if not self.validatePresent(boardId): + return + board = self.boards[boardId] + board.setAccessSpecifier(access) + + def addMemberInBoard(self, boardId, userId): + if not self.validatePresent(boardId): + return + board = self.boards[boardId] + board.addMemberInBoard(userId) + + def removeMemberInBoard(self, boardId, userId): + if not self.validatePresent(boardId): + return + board = self.boards[boardId] + board.removeMemberFromBoard(userId) + + def addListInBoard(self, boardId, listId): + if not self.validatePresent(boardId): + return + board = self.boards[boardId] + board.addListInBoard(listId) + + def removeListFromBoard(self, boardId, listId): + if not self.validatePresent(boardId): + return + board = self.boards[boardId] + board.removeListFromBoard(listId) + + def deleteBoard(self, boardId): + if not self.validatePresent(boardId): + return + board = self.boards[boardId] + for memberId in board.members: + self.removeMemberInBoard(boardId, memberId) + for listId in board.lists: + # self.removeListFromBoard(boardId, listId) + self.listService.deleteList(listId) + del self.boards[boardId] + + def showBoardDetailItem(self, boardId): + if not self.validatePresent(boardId): + return + board = self.boards[boardId] + boardItemInfo = "" + boardItemInfo += "ID: ", board.id + boardItemInfo += ", Name: ", board.name + boardItemInfo += ", privacy: ", board.privacy + + listInfo = "" + isListPresent = False + for listId in board.lists: + isListPresent = True + if len(listInfo) > 0: + listInfo += ", " + listInfo += "{ ", self.listService.showListDetail(listId), " }" + if isListPresent: + boardItemInfo += "Lists: ", listInfo + # TODO List + isMembersPresent = False + membersInfo = "" + for members in board.members: + isMembersPresent = True + membersInfo += "{ Name: ", str(members), "}" + if isMembersPresent: + boardItemInfo += "{ members: " + membersInfo , "}" + return boardItemInfo + + def showBoardDetail(self): + boardInfo = "" + for boardId in self.boards: + boardInfo += "{ ",self.showBoardDetailItem(boardId), "}\n" + return boardInfo + diff --git a/Project/Trello/Services/CardService.py b/Project/Trello/Services/CardService.py new file mode 100644 index 0000000..80b8ae0 --- /dev/null +++ b/Project/Trello/Services/CardService.py @@ -0,0 +1,57 @@ +from Trello.Models.Cards import Cards + + +class CardService(object): + def __init__(self): + self.cards = dict() + self.listService = None + self.boardService = None + + def setServices(self, boardService, listService): + self.listService = listService + self.boardService = boardService + + def createCard(self, cardName, listId): + card = Cards(name=cardName, listId=listId) + self.cards[card.id] = card + self.listService.addCardToList(listId, card.id) + + def updateCardName(self, cardId, name): + card = self.cards[cardId] + card.setName(name) + + def updateDescription(self, cardId, description): + card = self.cards[cardId] + card.setDescription = description + + def assignUserToCard(self, userId, cardId): + card = self.cards[cardId] + card.assignUser(userId) + + def unAssignUserFromCard(self, cardId): + card = self.cards[cardId] + card.removeUser() + + def moveCardToAnotherList(self, cardId, newListId): + card = self.cards[cardId] + if card.listId==newListId: + print "Same list id" + return + self.listService.removeCardFromList(card.listId, cardId) + self.listService.addCardToList(newListId, cardId) + + def deleteCard(self, cardId): + card = self.card[cardId] + self.listService.removeCardFromList(card.listId, cardId) + del self.cards[cardId] + + def showCardDetail(self, cardId): + card = self.cards[cardId] + cardInfo = "" + cardInfo += "Id: ", cardId + cardInfo += " Name: ", card.getName() + if card.getDescription(): + cardInfo += " Description: ", card.getDescription() + if card.getUserName(): + cardInfo += " UserName: " + card.getUserName() + return cardInfo diff --git a/Project/Trello/Services/ListService.py b/Project/Trello/Services/ListService.py new file mode 100644 index 0000000..ff89b6b --- /dev/null +++ b/Project/Trello/Services/ListService.py @@ -0,0 +1,58 @@ +from Trello.Models.Lists import Lists + + +class ListService(object): + + def __init__(self, boardService): + self.lists = dict() + self.boardService = None + self.cardService = None + + def setServices(self, boardService, cardService): + self.boardService = boardService + self.cardService = cardService + + def createList(self, boardId, name): + listWorks = Lists(name, boardId) + self.lists[listWorks.id] = listWorks + self.boardService.addListInBoard(boardId, listWorks.id) + + def addCardToList(self, listId, cardId): + listWorks = self.lists[listId] + listWorks.addCard(cardId) + + def removeCardFromList(self, listId, cardId): + if listId not in self.lists: + print "ListId not present" + return + listWorks = self.lists[listId] + listWorks.removeCardFromList(cardId) + + def deleteList(self, listId): + if listId not in self.lists: + print "List Id not present" + return + listWorks = self.lists[listId] + for cardId in listWorks.cards: + self.cardService.deleteCard(cardId) + del self.lists[listId] + self.boardService.removeListFromBoard(listWorks.boardId, listId) + + def showListDetail(self, listId): + if listId not in self.lists: + return "" + listWorks = self.lists[listId] + listInfo = "" + listInfo += "ListID: ", listId + listInfo += " Name: ", listWorks.name + isCardsPresent = False + cardInfo = "" + for cardId in listWorks.cards: + isCardsPresent = True + if len(cardInfo) > 0: + cardInfo += "," + cardInfo += " {", self.cardService.showCardDetail(cardId), "}" + if isCardsPresent: + listInfo += ", Cards: ", cardInfo + return listInfo + diff --git a/Project/Trello/TrelloManager.py b/Project/Trello/TrelloManager.py new file mode 100644 index 0000000..1c0217e --- /dev/null +++ b/Project/Trello/TrelloManager.py @@ -0,0 +1,18 @@ +from Trello.Services.BoardService import BoardService + +from Trello.Services.ListService import ListService + +from Trello.Services.CardService import CardService + + +class TrelloManager(object): + def __init__(self): + boardService = BoardService() + listService = ListService() + cardService = CardService() + + # Initialize each of these objects in other service class. + boardService.setServices(listService, cardService) + listService.setServices(boardService, cardService) + cardService.setServices(boardService, listService) + diff --git a/Project/Trello/__init__.py b/Project/Trello/__init__.py new file mode 100644 index 0000000..f75425e --- /dev/null +++ b/Project/Trello/__init__.py @@ -0,0 +1,25 @@ +from Trello.TrelloManager import TrelloManager + + +class TrelloApplication(object): + def __init__(self): + try: + self.trelloManager = TrelloManager() + except Exception as e: + print "Exception raised: ", e.message() + + @classmethod + def run(cls): + while True: + try: + userInput = raw_input() + pass + except Exception as e: + print "Exception raised: ", e.message() + +def main(): + TrelloApplication.run() + + +if __name__ == '__main__': + main() \ No newline at end of file From 11be31092ca7c4b22da98188ca9cdc0f068a23de Mon Sep 17 00:00:00 2001 From: Arpit Rathi Date: Sat, 12 Oct 2019 18:55:34 +0530 Subject: [PATCH 2/5] Added init file in Services package. --- Project/Trello/Services/__init__.py | 0 Project/Trello/TrelloManager.py | 1 - 2 files changed, 1 deletion(-) create mode 100644 Project/Trello/Services/__init__.py diff --git a/Project/Trello/Services/__init__.py b/Project/Trello/Services/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Project/Trello/TrelloManager.py b/Project/Trello/TrelloManager.py index 1c0217e..14cff52 100644 --- a/Project/Trello/TrelloManager.py +++ b/Project/Trello/TrelloManager.py @@ -15,4 +15,3 @@ def __init__(self): boardService.setServices(listService, cardService) listService.setServices(boardService, cardService) cardService.setServices(boardService, listService) - From ff2542ec6d8412e1f6f6a41dbea5e7b3ad30c764 Mon Sep 17 00:00:00 2001 From: Arpit Rathi Date: Sat, 12 Oct 2019 19:29:39 +0530 Subject: [PATCH 3/5] Add input method for create delete board, list. --- Project/Trello/Services/BoardService.py | 17 +++++----- Project/Trello/Services/CardService.py | 7 ++-- Project/Trello/Services/ListService.py | 11 +++--- Project/Trello/TrelloManager.py | 12 +++---- Project/Trello/__init__.py | 45 +++++++++++++++++++++---- 5 files changed, 63 insertions(+), 29 deletions(-) diff --git a/Project/Trello/Services/BoardService.py b/Project/Trello/Services/BoardService.py index e6b952f..5ab2523 100644 --- a/Project/Trello/Services/BoardService.py +++ b/Project/Trello/Services/BoardService.py @@ -21,6 +21,7 @@ def validatePresent(self, boardId): def createBoard(self, name): board = Board(name) self.boards[board.id] = board + print "Created Board: ", board.id def updateName(self, boardId, name): if not self.validatePresent(boardId): @@ -74,17 +75,17 @@ def showBoardDetailItem(self, boardId): return board = self.boards[boardId] boardItemInfo = "" - boardItemInfo += "ID: ", board.id - boardItemInfo += ", Name: ", board.name - boardItemInfo += ", privacy: ", board.privacy + boardItemInfo += "ID: " + str( board.id ) + boardItemInfo += ", Name: " + str( board.name ) + boardItemInfo += ", privacy: " + str( board.privacy ) listInfo = "" isListPresent = False for listId in board.lists: isListPresent = True - if len(listInfo) > 0: + if len(listInfo)>0: listInfo += ", " - listInfo += "{ ", self.listService.showListDetail(listId), " }" + listInfo += "{ "+ self.listService.showListDetail(listId)+ " }" if isListPresent: boardItemInfo += "Lists: ", listInfo # TODO List @@ -92,14 +93,14 @@ def showBoardDetailItem(self, boardId): membersInfo = "" for members in board.members: isMembersPresent = True - membersInfo += "{ Name: ", str(members), "}" + membersInfo += "{ Name: "+ str(members)+ "}" if isMembersPresent: - boardItemInfo += "{ members: " + membersInfo , "}" + boardItemInfo += "{ members: " + membersInfo + "}" return boardItemInfo def showBoardDetail(self): boardInfo = "" for boardId in self.boards: - boardInfo += "{ ",self.showBoardDetailItem(boardId), "}\n" + boardInfo += "{ " + self.showBoardDetailItem(boardId)+ "}\n" return boardInfo diff --git a/Project/Trello/Services/CardService.py b/Project/Trello/Services/CardService.py index 80b8ae0..236f748 100644 --- a/Project/Trello/Services/CardService.py +++ b/Project/Trello/Services/CardService.py @@ -15,6 +15,7 @@ def createCard(self, cardName, listId): card = Cards(name=cardName, listId=listId) self.cards[card.id] = card self.listService.addCardToList(listId, card.id) + print "Created Card: ", card.id def updateCardName(self, cardId, name): card = self.cards[cardId] @@ -48,10 +49,10 @@ def deleteCard(self, cardId): def showCardDetail(self, cardId): card = self.cards[cardId] cardInfo = "" - cardInfo += "Id: ", cardId - cardInfo += " Name: ", card.getName() + cardInfo += "Id: "+ str(cardId) + cardInfo += " Name: "+ str(card.getName()) if card.getDescription(): - cardInfo += " Description: ", card.getDescription() + cardInfo += " Description: " + str(card.getDescription()) if card.getUserName(): cardInfo += " UserName: " + card.getUserName() return cardInfo diff --git a/Project/Trello/Services/ListService.py b/Project/Trello/Services/ListService.py index ff89b6b..bf57dfd 100644 --- a/Project/Trello/Services/ListService.py +++ b/Project/Trello/Services/ListService.py @@ -3,7 +3,7 @@ class ListService(object): - def __init__(self, boardService): + def __init__(self): self.lists = dict() self.boardService = None self.cardService = None @@ -16,6 +16,7 @@ def createList(self, boardId, name): listWorks = Lists(name, boardId) self.lists[listWorks.id] = listWorks self.boardService.addListInBoard(boardId, listWorks.id) + print "Created List: ", listWorks.id def addCardToList(self, listId, cardId): listWorks = self.lists[listId] @@ -43,16 +44,16 @@ def showListDetail(self, listId): return "" listWorks = self.lists[listId] listInfo = "" - listInfo += "ListID: ", listId - listInfo += " Name: ", listWorks.name + listInfo += "ListID: " + str(listId) + listInfo += " Name: "+ str(listWorks.name) isCardsPresent = False cardInfo = "" for cardId in listWorks.cards: isCardsPresent = True if len(cardInfo) > 0: cardInfo += "," - cardInfo += " {", self.cardService.showCardDetail(cardId), "}" + cardInfo += " {" + self.cardService.showCardDetail(cardId) + "}" if isCardsPresent: - listInfo += ", Cards: ", cardInfo + listInfo += ", Cards: " + cardInfo return listInfo diff --git a/Project/Trello/TrelloManager.py b/Project/Trello/TrelloManager.py index 14cff52..14a34fb 100644 --- a/Project/Trello/TrelloManager.py +++ b/Project/Trello/TrelloManager.py @@ -7,11 +7,11 @@ class TrelloManager(object): def __init__(self): - boardService = BoardService() - listService = ListService() - cardService = CardService() + self.boardService = BoardService() + self.listService = ListService() + self.cardService = CardService() # Initialize each of these objects in other service class. - boardService.setServices(listService, cardService) - listService.setServices(boardService, cardService) - cardService.setServices(boardService, listService) + self.boardService.setServices(self.listService, self.cardService) + self.listService.setServices(self.boardService, self.cardService) + self.cardService.setServices(self.boardService, self.listService) diff --git a/Project/Trello/__init__.py b/Project/Trello/__init__.py index f75425e..60ecbe9 100644 --- a/Project/Trello/__init__.py +++ b/Project/Trello/__init__.py @@ -2,20 +2,51 @@ class TrelloApplication(object): - def __init__(self): - try: - self.trelloManager = TrelloManager() - except Exception as e: - print "Exception raised: ", e.message() @classmethod def run(cls): + treloManager = TrelloManager() while True: try: userInput = raw_input() - pass + wordsSplit = userInput.split() + if wordsSplit[0] == "BOARD": + if wordsSplit[1] == "CREATE": + treloManager.boardService.createBoard(wordsSplit[2]) + elif wordsSplit[1] == "DELETE": + treloManager.boardService.deleteBoard(wordsSplit[2]) + elif wordsSplit[0] == "SHOW": + output = None + if len(wordsSplit) == 1: + output = treloManager.boardService.showBoardDetail() + elif wordsSplit[1] == "BOARD": + output = treloManager.boardService.showBoardDetailItem(wordsSplit[2]) + elif wordsSplit[1] == "LIST": + output = treloManager.listService.showListDetail(wordsSplit[2]) + elif wordsSplit[1] == "CARD": + output = treloManager.cardService.showCardDetail(wordsSplit[[2]]) + else: + print "No such option, try again" + if output is None: + "No Boards" + else: + print output + elif wordsSplit[0] == "LIST": + if wordsSplit[1] == "CREATE": + boardId = wordsSplit[2] + listName = ' '.join(wordsSplit[3:]) + treloManager.listService.createList(boardId, listName) + + elif wordsSplit[1] == "DELETE": + treloManager.listService.deleteList(wordsSplit[2]) + elif wordsSplit[0] == "CARD": + if wordsSplit[1] == "CREATE": + listId = wordsSplit[2] + treloManager.cardService.createCard(wordsSplit[3], listId) + elif wordsSplit[1] == "DELETE": + treloManager.cardService.deleteCard(wordsSplit[2]) except Exception as e: - print "Exception raised: ", e.message() + print "Exception raised: ", e.message def main(): TrelloApplication.run() From 239c3c6aa5623672573132f143643f9ac7593ce3 Mon Sep 17 00:00:00 2001 From: Arpit Rathi Date: Sat, 12 Oct 2019 23:47:18 +0530 Subject: [PATCH 4/5] Update card listid when moving. --- Project/Trello/Models/Board.py | 13 +++++++------ Project/Trello/Models/Cards.py | 6 +++--- Project/Trello/Models/Library.py | 13 ++++++++----- Project/Trello/Models/Lists.py | 6 +++--- Project/Trello/Services/BoardService.py | 14 +++++++++----- Project/Trello/Services/CardService.py | 1 + Project/Trello/__init__.py | 22 +++++++++++----------- 7 files changed, 42 insertions(+), 33 deletions(-) diff --git a/Project/Trello/Models/Board.py b/Project/Trello/Models/Board.py index b90eb96..0faa48a 100644 --- a/Project/Trello/Models/Board.py +++ b/Project/Trello/Models/Board.py @@ -9,8 +9,8 @@ def __init__(self, name="", url=""): self.name = name self.privacy = Access.PUBLIC self.url = url - self.members = dict() - self.lists = dict() + self.members = set() + self.lists = set() def setBoardName(self, name): self.name = name @@ -22,18 +22,19 @@ def getBoardName(self): return self.name def addMemberInBoard(self, userId): - self.members[userId] = True + self.members.add(userId) def removeMemberFromBoard(self, userId): if userId not in self.members: print str(userId) + "not present in Board: " + str(self.id) return - del self.members[userId] + self.members.remove(userId) def addListInBoard(self, listId): - self.lists[listId] = True + self.lists.add(listId) def removeListFromBoard(self, listId): if listId not in self.lists: print str(listId) + " not present in Board: " + str(self.id) - del self.lists[listId] + return + self.lists.remove(listId) diff --git a/Project/Trello/Models/Cards.py b/Project/Trello/Models/Cards.py index bd1e557..7c3d5aa 100644 --- a/Project/Trello/Models/Cards.py +++ b/Project/Trello/Models/Cards.py @@ -2,6 +2,8 @@ class Cards(object): + userAssigned = None # type: String + def __init__(self, name="", listId=None): self.id = IdGenerator.generateUniqueId() self.name = name @@ -30,6 +32,4 @@ def removeUser(self): self.userAssigned = None def getUserName(self): - if self.userAssigned is not None: - return self.userAssigned - return None \ No newline at end of file + return self.userAssigned \ No newline at end of file diff --git a/Project/Trello/Models/Library.py b/Project/Trello/Models/Library.py index 39ab08e..5ac1c5c 100644 --- a/Project/Trello/Models/Library.py +++ b/Project/Trello/Models/Library.py @@ -1,9 +1,11 @@ import string import random +import enum as enum + class IdGenerator(object): - generatedIds = dict() + generatedIds = set() @staticmethod def getStringId(): @@ -14,13 +16,14 @@ def getStringId(): @classmethod def generateUniqueId(cls): randomString = cls.getStringId() - while randomString in cls.generatedIds.keys(): + while randomString in cls.generatedIds: randomString = cls.getStringId() + cls.generatedIds.add(randomString) return randomString -class Access(object): - PRIVATE = "PRIVATE" - PUBLIC = "PUBLIC" +class Access(enum.Enum): + PRIVATE = 1 + PUBLIC = 2 diff --git a/Project/Trello/Models/Lists.py b/Project/Trello/Models/Lists.py index 6ab34dc..23b5b6e 100644 --- a/Project/Trello/Models/Lists.py +++ b/Project/Trello/Models/Lists.py @@ -7,16 +7,16 @@ def __init__(self, name="", boardId=""): self.id = IdGenerator.generateUniqueId() self.name = name self.boardId = boardId - self.cards = dict() + self.cards = set() def setName(self, name): self.name = name def addCard(self, cardId): - self.cards[cardId] = True + self.cards.add(cardId) def removeCard(self, cardId): if cardId not in self.cards: print str(cardId) + " not present in List: " + str(self.id) return - del self.cards[cardId] + self.cards.remove(cardId) diff --git a/Project/Trello/Services/BoardService.py b/Project/Trello/Services/BoardService.py index 5ab2523..d53c762 100644 --- a/Project/Trello/Services/BoardService.py +++ b/Project/Trello/Services/BoardService.py @@ -1,4 +1,5 @@ from Trello.Models.Board import Board +from Trello.Models.Library import Access class BoardService(object): @@ -33,15 +34,18 @@ def updateAccess(self, boardId, access): if not self.validatePresent(boardId): return board = self.boards[boardId] - board.setAccessSpecifier(access) + accessToPass = Access.PUBLIC + if access == "PRIVATE": + accessToPass = Access.PRIVATE + board.setAccessSpecifier(accessToPass) - def addMemberInBoard(self, boardId, userId): + def addMemberToBoard(self, boardId, userId): if not self.validatePresent(boardId): return board = self.boards[boardId] - board.addMemberInBoard(userId) + board.addMemberToBoard(userId) - def removeMemberInBoard(self, boardId, userId): + def removeMemberFromBoard(self, boardId, userId): if not self.validatePresent(boardId): return board = self.boards[boardId] @@ -64,7 +68,7 @@ def deleteBoard(self, boardId): return board = self.boards[boardId] for memberId in board.members: - self.removeMemberInBoard(boardId, memberId) + self.removeMemberFromBoard(boardId, memberId) for listId in board.lists: # self.removeListFromBoard(boardId, listId) self.listService.deleteList(listId) diff --git a/Project/Trello/Services/CardService.py b/Project/Trello/Services/CardService.py index 236f748..c4c8923 100644 --- a/Project/Trello/Services/CardService.py +++ b/Project/Trello/Services/CardService.py @@ -40,6 +40,7 @@ def moveCardToAnotherList(self, cardId, newListId): return self.listService.removeCardFromList(card.listId, cardId) self.listService.addCardToList(newListId, cardId) + card.listId = newListId def deleteCard(self, cardId): card = self.card[cardId] diff --git a/Project/Trello/__init__.py b/Project/Trello/__init__.py index 60ecbe9..9e63697 100644 --- a/Project/Trello/__init__.py +++ b/Project/Trello/__init__.py @@ -5,26 +5,26 @@ class TrelloApplication(object): @classmethod def run(cls): - treloManager = TrelloManager() + trelloManager = TrelloManager() while True: try: userInput = raw_input() wordsSplit = userInput.split() if wordsSplit[0] == "BOARD": if wordsSplit[1] == "CREATE": - treloManager.boardService.createBoard(wordsSplit[2]) + trelloManager.boardService.createBoard(wordsSplit[2]) elif wordsSplit[1] == "DELETE": - treloManager.boardService.deleteBoard(wordsSplit[2]) + trelloManager.boardService.deleteBoard(wordsSplit[2]) elif wordsSplit[0] == "SHOW": output = None if len(wordsSplit) == 1: - output = treloManager.boardService.showBoardDetail() + output = trelloManager.boardService.showBoardDetail() elif wordsSplit[1] == "BOARD": - output = treloManager.boardService.showBoardDetailItem(wordsSplit[2]) + output = trelloManager.boardService.showBoardDetailItem(wordsSplit[2]) elif wordsSplit[1] == "LIST": - output = treloManager.listService.showListDetail(wordsSplit[2]) + output = trelloManager.listService.showListDetail(wordsSplit[2]) elif wordsSplit[1] == "CARD": - output = treloManager.cardService.showCardDetail(wordsSplit[[2]]) + output = trelloManager.cardService.showCardDetail(wordsSplit[[2]]) else: print "No such option, try again" if output is None: @@ -35,16 +35,16 @@ def run(cls): if wordsSplit[1] == "CREATE": boardId = wordsSplit[2] listName = ' '.join(wordsSplit[3:]) - treloManager.listService.createList(boardId, listName) + trelloManager.listService.createList(boardId, listName) elif wordsSplit[1] == "DELETE": - treloManager.listService.deleteList(wordsSplit[2]) + trelloManager.listService.deleteList(wordsSplit[2]) elif wordsSplit[0] == "CARD": if wordsSplit[1] == "CREATE": listId = wordsSplit[2] - treloManager.cardService.createCard(wordsSplit[3], listId) + trelloManager.cardService.createCard(wordsSplit[3], listId) elif wordsSplit[1] == "DELETE": - treloManager.cardService.deleteCard(wordsSplit[2]) + trelloManager.cardService.deleteCard(wordsSplit[2]) except Exception as e: print "Exception raised: ", e.message From 73013ce14d81a37ef7952dbc22437dc2b11e055d Mon Sep 17 00:00:00 2001 From: Arpit Rathi Date: Sun, 13 Oct 2019 00:27:26 +0530 Subject: [PATCH 5/5] Update Input for BOARD and Card. --- Project/Trello/Models/Board.py | 4 ++-- Project/Trello/Models/Library.py | 8 +++----- Project/Trello/Services/BoardService.py | 9 +++------ Project/Trello/Services/ListService.py | 2 +- Project/Trello/__init__.py | 25 ++++++++++++++++++++++++- 5 files changed, 33 insertions(+), 15 deletions(-) diff --git a/Project/Trello/Models/Board.py b/Project/Trello/Models/Board.py index 0faa48a..76eea4d 100644 --- a/Project/Trello/Models/Board.py +++ b/Project/Trello/Models/Board.py @@ -21,7 +21,7 @@ def setAccessSpecifier(self, access): def getBoardName(self): return self.name - def addMemberInBoard(self, userId): + def addMemberToBoard(self, userId): self.members.add(userId) def removeMemberFromBoard(self, userId): @@ -30,7 +30,7 @@ def removeMemberFromBoard(self, userId): return self.members.remove(userId) - def addListInBoard(self, listId): + def addListToBoard(self, listId): self.lists.add(listId) def removeListFromBoard(self, listId): diff --git a/Project/Trello/Models/Library.py b/Project/Trello/Models/Library.py index 5ac1c5c..aaebd17 100644 --- a/Project/Trello/Models/Library.py +++ b/Project/Trello/Models/Library.py @@ -1,8 +1,6 @@ import string import random -import enum as enum - class IdGenerator(object): generatedIds = set() @@ -22,8 +20,8 @@ def generateUniqueId(cls): return randomString -class Access(enum.Enum): - PRIVATE = 1 - PUBLIC = 2 +class Access(object): + PRIVATE = "PRIVATE" + PUBLIC = "PUBLIC" diff --git a/Project/Trello/Services/BoardService.py b/Project/Trello/Services/BoardService.py index d53c762..5676783 100644 --- a/Project/Trello/Services/BoardService.py +++ b/Project/Trello/Services/BoardService.py @@ -34,10 +34,7 @@ def updateAccess(self, boardId, access): if not self.validatePresent(boardId): return board = self.boards[boardId] - accessToPass = Access.PUBLIC - if access == "PRIVATE": - accessToPass = Access.PRIVATE - board.setAccessSpecifier(accessToPass) + board.setAccessSpecifier(access) def addMemberToBoard(self, boardId, userId): if not self.validatePresent(boardId): @@ -55,7 +52,7 @@ def addListInBoard(self, boardId, listId): if not self.validatePresent(boardId): return board = self.boards[boardId] - board.addListInBoard(listId) + board.addListToBoard(listId) def removeListFromBoard(self, boardId, listId): if not self.validatePresent(boardId): @@ -106,5 +103,5 @@ def showBoardDetail(self): boardInfo = "" for boardId in self.boards: boardInfo += "{ " + self.showBoardDetailItem(boardId)+ "}\n" - return boardInfo + return boardInfo if len(boardInfo)>0 else None diff --git a/Project/Trello/Services/ListService.py b/Project/Trello/Services/ListService.py index bf57dfd..f07a72a 100644 --- a/Project/Trello/Services/ListService.py +++ b/Project/Trello/Services/ListService.py @@ -15,7 +15,7 @@ def setServices(self, boardService, cardService): def createList(self, boardId, name): listWorks = Lists(name, boardId) self.lists[listWorks.id] = listWorks - self.boardService.addListInBoard(boardId, listWorks.id) + self.boardService.addListToBoard(boardId, listWorks.id) print "Created List: ", listWorks.id def addCardToList(self, listId, cardId): diff --git a/Project/Trello/__init__.py b/Project/Trello/__init__.py index 9e63697..40f6ac6 100644 --- a/Project/Trello/__init__.py +++ b/Project/Trello/__init__.py @@ -15,6 +15,16 @@ def run(cls): trelloManager.boardService.createBoard(wordsSplit[2]) elif wordsSplit[1] == "DELETE": trelloManager.boardService.deleteBoard(wordsSplit[2]) + else: + boardId = wordsSplit[1] + if wordsSplit[2] == "name": + trelloManager.boardService.updateName(boardId, wordsSplit[3]) + elif wordsSplit[2] == "privacy": + trelloManager.boardService.updateAccess(boardId, wordsSplit[3]) + elif wordsSplit[2] == "ADD_MEMBER": + trelloManager.boardService.addMemberToBoard(boardId, wordsSplit[3]) + elif wordsSplit[2] == "REMOVE_MEMBER": + trelloManager.boardService.removeMemberFromBoard(boardId, wordsSplit[3]) elif wordsSplit[0] == "SHOW": output = None if len(wordsSplit) == 1: @@ -28,7 +38,7 @@ def run(cls): else: print "No such option, try again" if output is None: - "No Boards" + print "No Boards" else: print output elif wordsSplit[0] == "LIST": @@ -45,6 +55,19 @@ def run(cls): trelloManager.cardService.createCard(wordsSplit[3], listId) elif wordsSplit[1] == "DELETE": trelloManager.cardService.deleteCard(wordsSplit[2]) + else: + cardId = wordsSplit[1] + if wordsSplit[2] == "name": + name = wordsSplit[3] + trelloManager.cardService.updateCardName(cardId, name) + + elif wordsSplit[2] == "description": + trelloManager.cardService.updateDescription(cardId, wordsSplit[3]) + + elif wordsSplit[2] == "ASSIGN": + trelloManager.cardService.assignUserToCard(wordsSplit[3], cardId) + elif wordsSplit[2] =="UNASSIGN": + trelloManager.cardService.unAssignUserFromCard(cardId) except Exception as e: print "Exception raised: ", e.message