def run_test(self): fs = self.crp.get_financial_statement(start_dt=self.start_dt, separate=self.separate, report_tp=self.report_tp) for test in self.test_set: tp = test['fs_tp'] date = test['date'] column = test['column'] item = test['item'] expected = test['expected'] df = fs[tp] date_column = find_all_columns(df=df, query=date)[0] label_column = find_all_columns(df=df, query=column)[0] actual = None for idx in range(len(df)): text = df[label_column].iloc[idx].replace(' ', '') if compare_str(text, item): actual = df[date_column].iloc[idx] if actual != expected: pytest.fail("Test failed: crp_cd='{}', fs_tp='{}', ".format( self.crp.crp_cd, tp) + "start_dt='{}', report_tp='{}', ".format( self.start_dt, fs.info['report_tp']) + "date='{}', column='{}',".format(date, column) + "item='{}', actual='{}', expected='{}'".format( item, actual, expected))
def show(self, tp, show_class: bool = True, show_depth: int = 10, show_concept: bool = True) -> DataFrame: """ 재무제표 정보를 표시해주는 Method Parameters ---------- tp: str 표시할 재무제표 타입: 'fs' 재무상태표, 'is' 손익계산서, 'ci' 포괄손익계산서, 'cf' 현금흐름표 show_class: bool class 표시 여부 show_depth: bool 표시할 class의 깊이 show_concept: bool concept_id 표시 여부 Returns ------- DataFrame 재무제표 """ from dart_fss.fs_search import find_all_columns df = self._statements[tp] if df is None: return df class_columns = find_all_columns(df, 'class') if show_class is False: ncolumns = [] columns = df.columns.tolist() for column in columns: if column not in class_columns: ncolumns.append(column) df = df[ncolumns] else: drop_rows = [] columns = df.columns.tolist() cdf = df[class_columns] for idx in range(len(cdf)): for class_idx, item in enumerate(cdf.iloc[idx]): if class_idx > show_depth and item is not None: drop_rows.append(idx) ncolumns = [] for column in columns: if column not in class_columns[show_depth + 1:]: ncolumns.append(column) df = df[ncolumns].drop(drop_rows) if show_concept is False: concept_colmuns = find_all_columns(df, 'concept_id') if len(concept_colmuns) == 1: ncolumns = [] columns = df.columns.tolist() for column in columns: if column not in concept_colmuns: ncolumns.append(column) df = df[ncolumns] return df
def test_fs_concept_false(fs_report): df = fs_report.show('fs', show_concept=False) columns = find_all_columns(df, 'concept') actual = len(columns) expected = 0 assert actual == expected
def test_fs_show_depth(fs_report): df = fs_report.show('fs', show_depth=1) columns = find_all_columns(df, 'class') actual = len(columns) expected = 2 assert actual == expected
def test_xbrl_get_author_information(samsung_xbrl): author = samsung_xbrl.get_author_information() column = find_all_columns(author, '공시담당자')[0] actual = author[column][3] expected = '031-277-7227' assert actual == expected