示例#1
0
文件: etbot.py 项目: coreyshum/etbot
def manageActive():
    changesMade= False
    
    client= Client(keys.api_key, keys.user_auth_token)

    # for each card in "Project Backlog" board:
    #   if card is labeled "Active" (green):
    #     record its original list & pos
    #     mark the description with its origin project list name (if not "General")
    #     move it to "This Week" list in "Active" board

    # for each card in "Active" board:
    #   if card is in "Finished" or "Overview" list:
    #     remove label "Active" (green)
    #   else:
    #     if card is not labeled "Active" (green):
    #       move it back to its original list & pos (in "Project Backlog" board)
    #       remove project mark in description

    # for each card in "Finished" list that has been archived:
    #   move such cards to lists in the "Closed" board that correspond to their
    #   origin project list in "Project Backlog" board, creating if needed,
    #   then un-archive the card in its new position

    # ----------------------------------------------------------------------------

    # for each card in "Project Backlog" board:
    backlogBoard= Board(client, keys.boardIds['backlog'])
    backlogCards= backlogBoard.getCardsJson(backlogBoard.base_uri)

    for card in backlogCards:

        # if card is labeled "Active" (green):
        labels= [i['color'] for i in card['labels']]
        if 'green' in labels:

            cardHandle= Card(client, card['id'])

            originDB[str(card['id'])]= (card['idList'], card['pos'])

            # mark its description with the project list name
            projectName= List(client, card['idList']).getListInformation()['name']
            desc= markProjectInDesc(card['desc'], projectName)
            cardHandle.setDesc(desc)
            
            # move it to "This Week" list in "Active" board
            cardHandle.moveTo(keys.boardIds['active'], keys.listIds['this week'])

            # reset labels
            for l in labels:
                cardHandle.addLabel(l)

            changesMade= True

    

    # for each card in "Active" board:
    activeBoard= Board(client, keys.boardIds['active'])
    activeCards= activeBoard.getCardsJson(activeBoard.base_uri)

    for card in activeCards:

        labels= [i['color'] for i in card['labels']]

        # if card is in "Finished" list:
        if ((card['idList'] == keys.listIds['finished'])
            or (card['idList'] == keys.listIds['overview'])):

            # remove "Active" (green) labels
            cardHandle= Card(client, card['id'])
            if 'green' in labels:
                cardHandle.removeLabel('green')
            changesMade= True
                
        else:
         # if card is not labeled "Active" (green):
            if 'green' not in labels:

                cardHandle= Card(client, card['id'])

                ## if card was moved here from the backlog:
                #actions= cardHandle.getActions('moveCardToBoard')['actions']
                #if ((len(actions) > 0) and
                #    (actions[0]['data']['boardSource']['id'] == keys.boardIds['backlog'])):
                # if card has an origin project entry
                if (str(card['id']) in originDB):

                    # remove project list name from its description
                    desc= markProjectInDesc(card['desc'], None)
                    cardHandle.setDesc(desc)

                    # move it back to its original list & pos (in "Project Backlog" board)
                    origin= originDB[str(card['id'])]
                    cardHandle.moveTo(keys.boardIds['backlog'], origin[0], origin[1])
                    # reset labels
                    for l in labels:
                        cardHandle.addLabel(l)

                else:
                    # card was created here or manually moved here;
                    # mark active (green) and add a generic project origin entry
                    cardHandle.addLabel('green')
                    originDB[str(card['id'])]= (keys.listIds['general'], 'top')
                    
                changesMade= True
                    


    # for each card in Active / Finished that has been archived
    activeFinishedCards= List(client, keys.listIds['finished'])
    activeFinishedCardsInfo= activeFinishedCards.fetchJson(activeFinishedCards.base_uri+'/cards',
                                                           query_params={'filter':'closed'})

    closedBoard= Board(client, keys.boardIds['closed'])

    for card in activeFinishedCardsInfo:
        cardHandle= Card(client, card['id'])
        changesMade= True

        # find origin destination
        try:
            originListId, pos= originDB[str(card['id'])]
            destListName= List(client, originListId).getListInformation()['name']

            destListId= None
            
            # get id in closed board for list with that name, or else make one
            for l in closedBoard.getListsJson(closedBoard.base_uri):
                if l['name'] == destListName:
                    #print '[%s] [%s] %s' %(l['name'], destListName, l['name'] == destListName)
                    destListId= (l['id'], 'top')

            if not destListId: 
                newList= closedBoard.addList({'name': destListName, 'pos': 'bottom'})
                #print 'CREATED:', newList.name, newList.id
                destListId= (newList.id, 'top')
            
        except (ResourceUnavailable, KeyError):
            # fallback dest
            destListId= (keys.listIds['closed general'], 'top')
            destListName= 'General'

        # remove project list name from its description
        desc= markProjectInDesc(card['desc'], None)
        cardHandle.setDesc(desc)

        #print card['name'], 'to:', destListName, destListId[0]

        try:
            # move card to destination list on closed board and un-archive
            cardHandle.moveTo(keys.boardIds['closed'], destListId[0], destListId[1])
            cardHandle.setClosed('false')
        except ResourceUnavailable:
            # sometimes new lists aren't ready quite yet.  Let's try next time
            pass



    originDB.sync()

    return changesMade
示例#2
0
class TrelloTests( unittest.TestCase ):

    def setUp( self ):
        self.client = Client( api_key, user_auth_token )
        self.org = Organisation( self.client, organisation )
        self.board = Board( self.client, board_id )
        self.list = List( self.client, list_id )
        self.card = Card( self.client, card_id )
        self.checklist = Checklist( self.client, checklist_id )
        self.member = Member( self.client, member_id )


    def tearDown( self ):
        pass


    def test_org_01_getBoardInfo( self ):
        result = self.org.getOrganisationInformation()
        self.assertIsNotNone( result, 'JSON was empty' )


    def test_org_02_getBoards( self ):
        for board in self.org.getBoards():
            self.assertIsNotNone( board.id, msg = "ID has not been provided" )
            self.assertIsNotNone( board.name, msg = "Name has not been provided" )


    def test_org_03_getMembers( self ):
        for member in self.org.getMembers():
            self.assertIsNotNone( member.id, msg = "ID has not been provided" )
            self.assertIsNotNone( member.name, msg = "Name has not been provided" )


    def test_org_04_updateOrganisation( self ):
        description = str( uuid.uuid1() )
        new_organisation = self.org.updateOrganisation( { 'desc': description } )
        new_description = new_organisation.getOrganisationInformation()['desc']

        self.assertEqual( description, new_description, msg = "Descriptions don't match. Update Organisation didn't work!" )


    def test_boa_01_getBoardInformation( self ):
        result = self.board.getBoardInformation()
        self.assertIsNotNone( result, 'JSON was empty' )


    def test_boa_02_getLists( self ):
        for lis in self.board.getLists():
            self.assertIsNotNone( lis.id, msg = "ID has not been provided" )
            self.assertIsNotNone( lis.name, msg = "Name has not been provided" )


    def test_boa_03_getCards( self ):
        for card in self.board.getCards():
            self.assertIsNotNone( card.id, msg = "ID has not been provided" )
            self.assertIsNotNone( card.name, msg = "Name has not been provided" )


    def test_boa_04_getCard( self ):
        card = self.board.getCard( card_id )
        self.assertIsNotNone( card.id, msg = "ID has not been provided" )
        self.assertIsNotNone( card.name, msg = "Name has not been provided" )


    def test_boa_05_getMembers( self ):
        for member in self.board.getMembers():
            self.assertIsNotNone( member.id, msg = "ID has not been provided" )
            self.assertIsNotNone( member.name, msg = "Name has not been provided" )


    def test_boa_06_getOrganisation( self ):
        organisation = self.board.getOrganisation()
        self.assertIsNotNone( organisation.id, msg = "ID has not been provided" )
        self.assertIsNotNone( organisation.name, msg = "Name has not been provided" )


    def test_boa_07_updateBoard( self ):
        description = str( uuid.uuid1() )
        new_board = self.board.updateBoard( { 'desc': description } )
        new_description = new_board.getBoardInformation()['desc']

        self.assertEqual( description, new_description, msg = "Descriptions don't match. Update Board didn't work!" )


    def test_boa_08_addList( self ):
        name = str( uuid.uuid1() )
        new_list = self.board.addList( { 'name': name } )
        new_list_name = new_list.name

        self.assertEqual( name, new_list_name, msg = "Names don't match. Add list didn't work!" )


    def test_lis_01_getListInformation( self ):
        result = self.list.getListInformation()
        self.assertIsNotNone( result, 'JSON was empty' )


    def test_lis_02_getBoard( self ):
        board = self.list.getBoard()
        self.assertIsNotNone( board.id, msg = "ID has not been provided" )
        self.assertIsNotNone( board.name, msg = "Name has not been provided" )


    def test_lis_03_getCards( self ):
        for card in self.list.getCards():
            self.assertIsNotNone( card.id, msg = "ID has not been provided" )
            self.assertIsNotNone( card.name, msg = "Name has not been provided" )


    def test_lis_04_updateList( self ):
        name = str( uuid.uuid1() )
        new_list = self.list.updateList( { 'name': name } )
        new_list_name = new_list.name

        self.assertEqual( name, new_list_name, msg = "Names don't match. Update list didn't work!" )


    def test_lis_05_addCard( self ):
        name = str( uuid.uuid1() )
        new_card = self.list.addCard( { 'name': name } )
        new_card_name = new_card.name

        self.assertEqual( name, new_card_name, msg = "Names don't match. Add card didn't work!" )


    def test_car_01_getCardInformation( self ):
        result = self.card.getCardInformation()
        self.assertIsNotNone( result, 'JSON was empty' )


    def test_car_02_getBoard( self ):
        board = self.card.getBoard()
        self.assertIsNotNone( board.id, msg = "ID has not been provided" )
        self.assertIsNotNone( board.name, msg = "Name has not been provided" )


    def test_car_03_getList( self ):
        lis = self.card.getList()
        self.assertIsNotNone( lis.id, msg = "ID has not been provided" )
        self.assertIsNotNone( lis.name, msg = "Name has not been provided" )


    def test_car_04_getChecklists( self ):
        for checklist in self.card.getChecklists():
            self.assertIsNotNone( checklist.id, msg = "ID has not been provided" )
            self.assertIsNotNone( checklist.name, msg = "Name has not been provided" )


    def test_car_05_getMembers( self ):
        for member in self.card.getMembers():
            self.assertIsNotNone( member.id, msg = "ID has not been provided" )
            self.assertIsNotNone( member.name, msg = "Name has not been provided" )


    def test_car_06_updateCard( self ):
        description = str( uuid.uuid1() )
        new_card = self.card.updateCard( { 'desc': description } )
        new_description = new_card.getCardInformation()['desc']

        self.assertEqual( description, new_description, msg = "Descriptions don't match. Update Card didn't work!" )


    def test_car_07_addComments( self ):
        comment = str( uuid.uuid1() )
        result = self.card.addComments( comment )
        new_comment = result['data']['text']

        self.assertEqual( comment, new_comment, msg = "Comments don't match. Add comment didn't work!" )


    def test_car_08_addAttachment( self ):
        f = open( 'test/test.txt', 'r' ).read()
        result = self.card.addAttachment( 'text.txt', f )
        self.assertIsNotNone( result, "Got nothing back, doesn't look like it worked!" )


    def test_car_09_addChecklists( self ):
        name = str( uuid.uuid1() )
        new_checklist = self.card.addChecklists( { 'name': name } )
        new_checklist_name = new_checklist.name

        self.assertEqual( name, new_checklist_name, "Names don't match. Add Checklist failed!" )


    def test_car_10_addLabels( self ):

        try:
            label_colour = 'green'
            result = self.card.addLabels( { 'value': label_colour } )

            found_label = False

            for label in result:
                if label['color'] == label_colour:
                    found_label = True

            self.assertTrue( found_label, "Label wasn't added!" )

        except ResourceUnavailable:
            # Label already added
            pass


    def test_car_11_addMember( self ):

        try:
            result = self.card.addMember( member_id )

            found_member = False

            for member in result:
                if member.id == member_id:
                    found_member = True

            self.assertTrue( found_member, "Member wasn't added to card!" )

        except ResourceUnavailable:
            # Member is already on the card
            pass


    def test_car_12_removeMember( self ):

        try:
            result = self.card.removeMember( member_id )

            self.assertIsNotNone( result, "JSON failure! Nothing was returned" )

            for member in result:
                self.assertNotEqual( member['id'], member_id, "Member was not removed!" )

        except ResourceUnavailable:
            # Member isn't attached to card
            pass


    def test_che_01_getChecklistInformation( self ):
        result = self.checklist.getChecklistInformation()
        self.assertIsNotNone( result, 'JSON was empty' )


    def test_che_02_getItems( self ):
        result = self.checklist.getItems()
        self.assertIsNotNone( result, 'JSON was empty' )


    def test_che_03_updateChecklist( self ):
        name = str( uuid.uuid1() )
        new_checklist = self.checklist.updateChecklist( name )
        new_name = new_checklist.name

        self.assertEqual( name, new_name, msg = "Names don't match. Update didn't work!" )


    def test_che_04_addItem( self ):
        name = str( uuid.uuid1() )
        result = self.checklist.addItem( {'name': name } )
        new_item_name = result[ len( result ) - 1 ]['name']

        self.assertEqual( name, new_item_name, "Names don't match! Add item failed" )


    def test_che_05_removeItem( self ):
        items = self.checklist.getItems()

        if len( items ) > 0:
            item_id = items[0]['id']

            result = self.checklist.removeItem( item_id )
            self.assertIsNotNone( result, "JSON was empty!" )


    def test_mem_01_getMemberInformation( self ):
        result = self.member.getMemberInformation()
        self.assertIsNotNone( result, 'JSON was empty' )


    def test_mem_02_getBoards( self ):
        for board in self.member.getBoards():
            self.assertIsNotNone( board.id, msg = "ID has not been provided" )
            self.assertIsNotNone( board.name, msg = "Name has not been provided" )


    def test_mem_03_getCards( self ):
        for cards in self.member.getCards():
            self.assertIsNotNone( cards.id, msg = "ID has not been provided" )
            self.assertIsNotNone( cards.name, msg = "Name has not been provided" )