Esempio n. 1
0
class Command:
    def __init__(self):
        self._command_parse()
        self.parse = Parse()
        self.backlog = Backlog(self.args.project)

    def exec(self):
        logger.debug(f"[DEBUG]コマンド: {self.args.command}がコールされました。")
        if self.args.command != 'get_project_data':
            # get_project_data以外はそのままコマンド名を実行
            data = eval(f'self.backlog.{self.args.command}()')
            self.parse.create_output_file(data, self.args)
        else:
            # TODO:あとでBacklogクラスに移行
            # get_project_dataは各種データをdictで取得
            project, issues, wikis, users = self.backlog.get_project_data()

            # 各テンプレートにデータを渡して、それぞれのHTMLファイルを出力
            data = {'project': project, 'issues': issues}
            self.parse.create_html_file('issue_list.html', 'issue_list.html',
                                        data)
            logger.info('[INFO]Create issue_list.html')
            for issue in issues:
                data['issue'] = issue
                self.parse.create_html_file('issue_detail.html',
                                            f'issue_{issue["id"]}.html', data)
                logger.info(f'[INFO]Create issue_{issue["id"]}.html')
            del data['issues'], data['issue']

            for wiki in wikis:
                data['wiki'] = wiki
                self.parse.create_html_file('wiki.html',
                                            f'wiki_{wiki["id"]}.html', data)
                logger.info(f'[INFO]Create wiki_{wiki["id"]}.html')

    def _command_parse(self):
        """
        コマンドラインから受け取った引数をパース
        """
        parser = argparse.ArgumentParser(description='BacklogのAPIをコマンド化したもの')
        parser.add_argument('command',
                            help='Backlogの情報に対する操作をおこなう',
                            choices=[
                                'get_users', 'get_issues', 'get_projects',
                                'get_project_issues', 'get_project_users',
                                'get_wiki_page_list', 'get_project_data'
                            ])
        parser.add_argument('-p', '--project', help='プロジェクトID')
        parser.add_argument('-u', '--user', type=int, help='ユーザーID')
        parser.add_argument('-o',
                            '--output',
                            help='アウトプットの形式',
                            default='json',
                            choices=['csv', 'json'])
        parser.add_argument('--dir',
                            help='データを出力するディレクトリ名',
                            default='./output/')
        self.args = parser.parse_args()