コード例 #1
0
    def action(self):
        logging.info('Starting Action')
        self.trello_overdue_cards_notify = 'RAN: ' + str(datetime.now())

        overdue_cards = self.get_or_check_cards(check_only=False)
        self.due_cards_len = len(overdue_cards)

        logging.info('getting client')
        client = get_client(self.default_user)
        logging.info('Client found')
        logging.info('client type: {}'.format(type(client)))
        notify_users = defaultdict(list)
        logging.info('starting loop of overdue_cards')
        for card in overdue_cards:
            if card.idMemberCreator is None or card.idMemberCreator is False:
                logging.info('getting card creator: {}'.format(card.idCard))
                # get card creator if not set in model
                creator = get_card_creator(card.idCard, client)
                logging.info('Creator is: {}'.format(creator))
                if creator is None:
                    continue
                card.idMemberCreator = creator
                card.save()
            notify_users[card.idMemberCreator].append(card.shortUrl)

        for user in notify_users:
            try:
                trello_user = TrelloUserInfo.get(trello_id=user)
                if trello_user.email == '':
                    to = self.default_user
                else:
                    to = trello_user.email
                send_email(to, '{id}  the following cards are '
                                              'overdue:\n{tlist}'.format(
                    id=trello_user.trello_fullname,
                    tlist='\n'.join(notify_users.get(user))
                ))
            except Exception as e:
                # if the user is not found, then let the last actor know
                logging.error(str(e))
                send_email(self.default_user, 'could not find user: {}'.format(user))

        # Assuming no issues, disable cards
        for card in overdue_cards:
            card.overdue_notice_sent = True
            card.save()

        logging.info('Script Finished...')
コード例 #2
0
def callback(request):
    logging.debug('webhook received!')
    logging.debug('what in the world')
    try:
        webhook = Webhook.get(model_id=request.GET['id'])
    except Exception as e:
        logging.info('ERROR: %s' % (str(e)))
    user = request.GET['user']
    client = get_client(user)
    logging.debug(client)
    comment_data = None
    card_json = None
    if request.BODY == '':
        # this is a test webhook for setup. return ok.
        return '200 OK'
    if 'card' in request.BODY['action']['data']:
        logging.debug('update or create card!')
        card_json = client.fetch_json('cards/%s?checklists=all&' % request.BODY['action']['data']['card']['id'])
        try:
            card, new = card_json_to_model(card_json, user)
            logging.debug(card.idMemberCreator)
            if card.idMemberCreator is None or card.idMemberCreator is False:
                card_creator = get_card_creator(card.idCard, client)
                card.idMemberCreator = card_creator
                card.save()
        except Exception as e:
            logging.debug(str(e))
        comment_data = client.fetch_json('cards/%s?actions=commentCard' % request.BODY['action']['data']['card']['id'])
        logging.debug(comment_data)
        board_admins = [admin.get('username') for admin in client.fetch_json('boards/%s/members/admins' % request.BODY['action']['data']['board']['id']) if admin.get('username')]
        logging.debug(board_admins)
        p = Process.objects.create()
        p.hook_data = request.BODY
        p.card_data = card_json
        p.comment_data = comment_data
        p.board_admins = board_admins
        p.handle_trello_webhook = True
        p.default_user = user
        p.save()
        logging.debug(p)
    return '200 OK'