Пример #1
0
def monthlywork(event, context):
    try:
        logging.info('lambda_handler start')
        logging.info('Event: {}'.format(json.dumps(event)))

        # BackLogクラス生成
        backlog = BackLog(space_name, project_key, api_key)
        # DynamoDBクラス作成
        dynamodb = DynamoDB(dynamo_tbl)

        #----- Step1
        logging.info('[Step1]DynamoDBにカラムを追加する')

        index_record = dynamodb.get_item('No', 1)
        logging.info('index_record: {}'.format(index_record))
        if index_record is None:
            logging.info('index_recordが存在しないためカラムを登録します')
            index_record = dynamodb.put_item(column_fmt)
            logging.info('index_record: {}'.format(index_record))
            logging.info('カラム登録が完了したため処理を終了します')
            return
        else:
            logging.info('index_recordが存在したため処理をスキップします')

        #----- Step2
        logging.info('[Step2]DynamoDBの全データを抽出します')
        records = dynamodb.scan_all()

        #----- Step3
        logging.info('[Step3]各レコード情報を元にバックログに起票します')
        for record in records:
            logging.info('record: {}'.format(record))

            # 日付情報の取得
            start_date = schedule.get_day_of_nth_dow(
                int(record.get('start_day')),
                int(record.get('start_dow_nth')),
                str(record.get('start_dow_dow')),
            )
            logging.info('start_date: {}'.format(start_date))

            due_date = schedule.get_day_of_nth_dow(
                int(record.get('due_day')),
                int(record.get('due_dow_nth')),
                str(record.get('due_dow_dow')),
            )
            logging.info('due_date: {}'.format(due_date))

            # ----- Issuetype
            issuetype_name = record.get('issuetype_name')
            issuetype_id = backlog.get_issuetype_id(issuetype_name)
            logging.info('The {0} IssuetypeID: {1}.'.format(
                issuetype_name, issuetype_id))

            # ----- Assignee
            mailaddress = record.get('mailaddress')
            assignee_id = backlog.get_user_id(mailaddress)
            logging.info('The {0} AssigneeId: {1}'.format(
                mailaddress, assignee_id))

            # ----- Category(複数指定が可能なのでちょっと面倒)
            # 引っ張ってきたデータをカンマ区切りで配列に詰め、それぞれの要素に対して先頭末尾の空白を削除
            category_names = list(
                map(str.strip,
                    record.get('category_names').split(',')))

            # カテゴリIDリストの作成
            category_ids = []
            for category_name in category_names:
                category_id = backlog.get_category_id(category_name)
                logging.info('The {0} CategoryID: {1}.'.format(
                    category_name, category_id))
                #指定されたカテゴリが無ければ作成する
                if category_id is None:
                    logging.info(
                        'a new category create because The specified category do not define.'
                    )
                    res = backlog.create_category(category_name)
                    logging.info('create category result: {}'.format(res))
                    category_id = res.get('id')
                    logging.info('The {0} CategoryID: {1}.'.format(
                        category_name, category_id))
                category_ids.append(category_id)
            logging.info('category_ids: {}.'.format(category_ids))

            # ----- MileStone(複数指定が可能なのでちょっと面倒)
            # 引っ張ってきたデータをカンマ区切りで配列に詰め、それぞれの要素に対して先頭末尾の空白を削除
            milestone_names = list(
                map(str.strip,
                    record.get('milestone_names').split(',')))

            # マイルストンIDリストの作成
            milestone_ids = []
            for milestone_name in milestone_names:
                milestone_id = backlog.get_milestone_id(milestone_name)
                logging.info('The {0} milestoneID: {1}.'.format(
                    milestone_name, milestone_id))
                #指定されたマイルストンが無ければ作成する
                if milestone_id is None:
                    logging.info(
                        'a new milestone create because The specified milestone do not define.'
                    )
                    res = backlog.create_milestone(milestone_name)
                    logging.info('create milestone result: {}'.format(res))
                    milestone_id = res.get('id')
                    logging.info('The {0} milestoneID: {1}.'.format(
                        milestone_name, milestone_id))
                milestone_ids.append(milestone_id)
            logging.info('milestone_ids: {}.'.format(milestone_ids))

            # 課題登録API実行
            logging.info('Execute the issue registration API.')
            res = backlog.add_issue(record.get('summary'), issuetype_id,
                                    record.get('description'), start_date,
                                    due_date, assignee_id, category_ids,
                                    milestone_ids, [])
            logging.info(
                'Execute the issue registration API Result: {}'.format(res))

        logging.info('lambda_handler Normal end')
        return 'lambda_handler Normal end'

    except Exception as error:
        logging.info('lambda_handler Abnormal end')
        logging.error(error)
        raise error