Example #1
0
    def test_create_section_assignees_data(self):
        test_data: dict = {
            'zentai': {
                '1_zentai': '前期活動総括,田所 浩二,114514',
                '2_unei': '運営総括,田所 浩二',
                '3_gakusai': '学園祭総括',
            },
            'system': {
                '1_zentai': '全体方針',
            },
        }

        result: dict = {
            'soukatsu/zentai/1_zentai.tex':
            ArticleInfo('前期活動総括', Assignee('114514', '田所', '浩二')),
            'soukatsu/zentai/2_unei.tex':
            ArticleInfo('運営総括', Assignee(family='田所', name='浩二')),
            'soukatsu/zentai/3_gakusai.tex':
            ArticleInfo('学園祭総括', Assignee()),
            'soukatsu/system/1_zentai.tex':
            ArticleInfo('全体方針', Assignee()),
        }

        for key, value in assignees.create_section_assignees_data(
                test_data, {}, 'soukatsu').items():
            with self.subTest(test_data=str(result[key]), result=str(value)):
                self.assertEqual(result[key], value)

        self.assertEqual(
            result,
            assignees.create_section_assignees_data(test_data, {}, 'soukatsu'))
def create_file(filepath: str, info: ArticleInfo) -> None:
    # テンプレートファイルのパスを指定
    file_loader = FileSystemLoader(config.TEMPLATE_ROOT_PATH)
    env = Environment(loader=file_loader)
    tex_template = env.get_template(config.DOCUMENT_PARTS_TEX_TEMPLATE)

    if is_subsection_path(filepath):
        section: str = get_section_from_subsection_path(filepath)
        subsection_filepath: str = path.join(config.SRC_ROOT_PATH, filepath)

        # ファイルがあれば何もしない
        if path.exists(subsection_filepath):
            print(msg.ERROR_FILE_EXIST(subsection_filepath))
            return

        positions: list = get_positions(section)

        # ファイル生成
        with open(subsection_filepath, mode='w') as f:
            f.write(
                tex_template.render(title=info.get_title(),
                                    positions=positions,
                                    assignee=info.get_assignee(),
                                    is_newfile=True))

        print(msg.CREATED_FILE_MSG(subsection_filepath))

    elif is_kaisei_tex(filepath) or is_hajimeni_tex(filepath):
        # 回生別 または はじめに の場合
        subsection_filepath: str = path.join(config.SRC_ROOT_PATH, filepath)
        type_name: str = None if is_hajimeni_tex(filepath) else 'kaisei'

        print(msg.WORNING_FILE_CHANGE(subsection_filepath))

        positions: list = get_positions(type_name)

        # ファイルを上書き
        with open(subsection_filepath, mode='a') as f:
            f.write(
                tex_template.render(title=info.get_title(),
                                    positions=positions,
                                    assignee=info.get_assignee(),
                                    is_newfile=False))

        print(msg.OVERWRITTEN_FILE_MSG(subsection_filepath))

    else:
        print(msg.ERROR_UNSUPPORTED_FILE_PATH)
        return
Example #3
0
def create_issue(filepath: str, info: ArticleInfo, project_id: int, private_token: str,\
      created_issue_titles: list) -> None:
    assignee: Assignee = info.get_assignee()

    if assignee.get_gitlab_id() is None:
        print(msg.ERROR_MISSING_GITLAB_ID(filepath))
        return

    # 情報をセットする
    title: str = filepath + ':' + info.get_title()
    description: str = '担当者は、' + assignee.get_family() + ' ' + assignee.get_name() + 'さんです。\n' +\
        'src/' + filepath + 'を編集してください。'
    assignee_id: str = assignee.get_gitlab_id()

    # 既にissueが作られていたらworningを出して終了
    if is_issue_already_created(title, created_issue_titles):
        print(msg.WORNING_ISSUE_DUPLICATED(title))
        return

    result_title: str = post_issue(project_id, private_token, title,
                                   description, assignee_id)
    print(msg.CREATED_ISSUE_MSG(result_title))
Example #4
0
    def test_create_type_assignees_data(self):

        yml_data: dict = {
            'hajimeni': 'はじめに,田所 浩二,114514',
            'soukatsu': {
                'zentai': {
                    '1_zentai': '前期活動総括,田所 浩二',
                    '2_unei': '運営総括'
                },
                '1kai': '1回生総括',
                '2kai': '2回生総括',
                '3kai': '3回生総括',
                '4kai': '4回生総括',
                'kaikei': None,
                'kensui': None,
                'syogai': None,
                'system': {
                    '1_zentai': '全体総括',
                },
                'soumu': None
            },
            'houshin': {
                'zentai': {
                    '1_zentai': '前期活動方針',
                    '2_unei': '運営方針'
                },
                '1kai': '1回生方針',
                '2kai': '2回生方針',
                '3kai': '3回生方針',
                'kaikei': None,
                'kensui': None,
                'syogai': None,
                'system': {
                    '1_zentai': '全体方針',
                },
                'soumu': None
            }
        }

        result: dict = {
            'hajimeni.tex':
            ArticleInfo('はじめに', Assignee('114514', '田所', '浩二')),
            'soukatsu/zentai/1_zentai.tex':
            ArticleInfo('前期活動総括', Assignee(family='田所', name='浩二')),
            'soukatsu/zentai/2_unei.tex':
            ArticleInfo('運営総括', Assignee()),
            'soukatsu/1kai.tex':
            ArticleInfo('1回生総括', Assignee()),
            'soukatsu/2kai.tex':
            ArticleInfo('2回生総括', Assignee()),
            'soukatsu/3kai.tex':
            ArticleInfo('3回生総括', Assignee()),
            'soukatsu/4kai.tex':
            ArticleInfo('4回生総括', Assignee()),
            'soukatsu/system/1_zentai.tex':
            ArticleInfo('全体総括', Assignee()),
            'houshin/zentai/1_zentai.tex':
            ArticleInfo('前期活動方針', Assignee()),
            'houshin/zentai/2_unei.tex':
            ArticleInfo('運営方針', Assignee()),
            'houshin/1kai.tex':
            ArticleInfo('1回生方針', Assignee()),
            'houshin/2kai.tex':
            ArticleInfo('2回生方針', Assignee()),
            'houshin/3kai.tex':
            ArticleInfo('3回生方針', Assignee()),
            'houshin/system/1_zentai.tex':
            ArticleInfo('全体方針', Assignee()),
        }

        for key, value in assignees.create_type_assignees_data(
                yml_data).items():
            with self.subTest(yml_data=str(result[key]), result=str(value)):
                self.assertEqual(result[key], value)

        self.assertEqual(result,
                         assignees.create_type_assignees_data(yml_data))
Example #5
0
 def test_parse_assignee_one_args(self):
     test_data: str = 'はじめに'
     result: ArticleInfo = ArticleInfo('はじめに', Assignee())
     self.assertEqual(result, assignees.parse_assignee(test_data))
Example #6
0
 def test_parse_assignee_two_args(self):
     test_data: str = 'はじめに,田所 浩二'
     result: ArticleInfo = ArticleInfo('はじめに',
                                       Assignee(family='田所', name='浩二'))
     self.assertEqual(result, assignees.parse_assignee(test_data))
Example #7
0
 def test_parse_assignee_three_args(self):
     test_data: str = 'はじめに,田所 浩二,114514'
     result: ArticleInfo = ArticleInfo('はじめに',
                                       Assignee('114514', '田所', '浩二'))
     self.assertEqual(result, assignees.parse_assignee(test_data))