Example #1
0
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