Esempio n. 1
0
    def test_assemble_yearly_2498(self):
        # online: http://jdata.yuanta.com.tw/z/zc/zcq/zcqa_2498.djhtm
        path = './yuantacat/tests/unit/data/income_statement_yearly/2498.html'
        param = {
            'content' : FileUtils().read_file(path),
            'stock_symbol' : '2498'
        }
        dao = IncomeStatementYearlyAssembler().assemble(param)

        self.assertEqual(dao.get_stock_symbol(), param['stock_symbol'])

        self.assertEqual(dao.get_period(), 'Y')

        actual = dao.get_column_name_list()
        expected = [
            u'年', 
            datetime.date(2014, 12, 31),
            datetime.date(2013, 12, 31),
            datetime.date(2012, 12, 31),
            datetime.date(2011, 12, 31),
            datetime.date(2010, 12, 31),
            datetime.date(2009, 12, 31),
            datetime.date(2008, 12, 31),
            datetime.date(2007, 12, 31)
        ]
        self.assertEqual(actual, expected)

        row_list = dao.get_row_list()
        self.assertEqual(row_list[0], [u'營業收入淨額', 187911, 203403, 289020, 465795, 278761, 144493, 152353, 118218])
        for row in row_list:
            self.assertEqual(len(row), 9)
Esempio n. 2
0
    def test_assemble_quarterly_2498(self):
        # online: http://jdata.yuanta.com.tw/z/zc/zcq/zcq_2498.djhtm
        path = './yuantacat/tests/unit/data/income_statement_quarterly/2498.html'
        param = {
            'content' : FileUtils().read_file(path),
            'stock_symbol' : '2498'
        }
        dao = IncomeStatementQuarterlyAssembler().assemble(param)

        self.assertEqual(dao.get_stock_symbol(), param['stock_symbol'])

        self.assertEqual(dao.get_period(), 'Q')

        actual = dao.get_column_name_list()
        expected = [
            u'期別', 
            datetime.date(2015, 6, 30), 
            datetime.date(2015, 3, 31), 
            datetime.date(2014, 12, 31),
            datetime.date(2014, 9, 30),
            datetime.date(2014, 6, 30),
            datetime.date(2014, 3, 31),
            datetime.date(2013, 12, 31),
            datetime.date(2013, 9, 30)
        ]
        self.assertEqual(actual, expected)

        row_list = dao.get_row_list()
        self.assertEqual(row_list[0], [u'營業收入淨額', 33010, 41524, 47866, 41864, 65060, 33121, 42900, 47048])
        for row in row_list:
            self.assertEqual(len(row), 9)
    def test_assemble_yearly_2498(self):
        # online: http://jdata.yuanta.com.tw/z/zc/zcp/zcp_2498.djhtm
        path = './yuantacat/tests/unit/data/balance_sheet_summary/2498.html'
        param = {
            'content' : FileUtils().read_file(path),
            'stock_symbol' : '2498'
        }
        dao = BalanceSheetYearlySummaryAssembler().assemble(param)

        self.assertEqual(dao.get_stock_symbol(), param['stock_symbol'])

        self.assertEqual(dao.get_period(), 'Y')

        actual = dao.get_column_name_list()
        expected = [
            u'期別', 
            datetime.date(2014, 12, 31),
            datetime.date(2013, 12, 31),
            datetime.date(2012, 12, 31),
            datetime.date(2011, 12, 31),
            datetime.date(2010, 12, 31),
            datetime.date(2009, 12, 31),
            datetime.date(2008, 12, 31),
            datetime.date(2007, 12, 31)
        ]
        self.assertEqual(actual, expected)

        row_list = dao.get_row_list()
        self.assertEqual(row_list[0], [u'流動資產', 110287, 111507, 139659, 192860, 168606, 104901, 104257, 85729])
        for row in row_list:
            self.assertEqual(len(row), 9)
Esempio n. 4
0
    def test_assemble_2498(self):
        # online: http://jdata.yuanta.com.tw/z/zc/zce/zce_2498.djhtm
        path = './yuantacat/tests/unit/data/profitability/2498.html'
        param = {
            'content': FileUtils().read_file(path),
            'stock_symbol': '2498'
        }
        dao = ProfitabilityAssembler().assemble(param)

        self.assertEqual(dao.get_stock_symbol(), param['stock_symbol'])

        self.assertEqual(dao.get_period(), 'Q')

        actual = dao.get_column_name_list()
        expected = [
            u'季別', u'營業收入', u'營業成本', u'營業毛利', u'毛利率', u'營業利益', u'營益率', u'業外收支',
            u'稅前淨利', u'稅後淨利'
        ]
        self.assertEqual(actual, expected)

        row_list = dao.get_row_list()
        self.assertEqual(row_list[0], [
            datetime.date(2015, 6, 30), 33010, 26648, 6362, 0.1927, -5141,
            -0.1557, -2777, -7918, -8034
        ])
        for row in row_list:
            self.assertEqual(len(row), 10)
    def test_assemble_quarterly_2498(self):
        # online: http://jdata.yuanta.com.tw/z/zc/zcp/zcpa_2498.djhtm
        path = './yuantacat/tests/unit/data/balance_sheet_quarterly/2498.html'
        param = {
            'content': FileUtils().read_file(path),
            'stock_symbol': '2498'
        }
        dao = BalanceSheetQuarterlyAssembler().assemble(param)

        self.assertEqual(dao.get_stock_symbol(), param['stock_symbol'])

        self.assertEqual(dao.get_period(), 'Q')

        actual = dao.get_column_name_list()
        expected = [
            u'期別',
            datetime.date(2015, 6, 30),
            datetime.date(2015, 3, 31),
            datetime.date(2014, 12, 31),
            datetime.date(2014, 9, 30),
            datetime.date(2014, 6, 30),
            datetime.date(2014, 3, 31),
            datetime.date(2013, 12, 31),
            datetime.date(2013, 9, 30)
        ]
        self.assertEqual(actual, expected)

        row_list = dao.get_row_list()
        self.assertEqual(row_list[0], [
            u'現金及約當現金', 47233, 51715, 55744, 54672, 48438, 43930, 53299, 43120
        ])
        for row in row_list:
            self.assertEqual(len(row), 9)
Esempio n. 6
0
    def test_assemble_yearly_2498(self):
        # online: http://jdata.yuanta.com.tw/z/zc/zc3/zc3a_2498.djhtm
        path = './yuantacat/tests/unit/data/cash_flow_yearly/2498.html'
        param = {
            'content': FileUtils().read_file(path),
            'stock_symbol': '2498'
        }
        dao = CashFlowYearlyAssembler().assemble(param)

        self.assertEqual(dao.get_stock_symbol(), param['stock_symbol'])

        self.assertEqual(dao.get_period(), 'Y')

        actual = dao.get_column_name_list()
        expected = [
            u'期別',
            datetime.date(2014, 12, 31),
            datetime.date(2013, 12, 31),
            datetime.date(2012, 12, 31),
            datetime.date(2011, 12, 31),
            datetime.date(2010, 12, 31),
            datetime.date(2009, 12, 31),
            datetime.date(2008, 12, 31),
            datetime.date(2007, 12, 31)
        ]
        self.assertEqual(actual, expected)

        row_list = dao.get_row_list()
        self.assertEqual(
            row_list[0],
            [u'稅後淨利', 1483, -1324, 17589, 62299, 39515, 22614, 28553, 28918])
        for row in row_list[:-1]:
            self.assertEqual(len(row), 9)
        self.assertEqual(row_list[-1],
                         [u'[說明]上列會計科目中,投資收益-權益法、長期投資(新增)、固定資產(購置)、'])
    def test_assemble_quarterly_2498(self):
        # online: http://jdata.yuanta.com.tw/z/zc/zcp/zcp_2498.djhtm
        path = './yuantacat/tests/unit/data/balance_sheet_summary/2498.html'
        param = {
            'content' : FileUtils().read_file(path),
            'stock_symbol' : '2498'
        }
        dao = BalanceSheetQuarterlySummaryAssembler().assemble(param)

        self.assertEqual(dao.get_stock_symbol(), param['stock_symbol'])

        self.assertEqual(dao.get_period(), 'Q')

        actual = dao.get_column_name_list()
        expected = [
            u'期別', 
            datetime.date(2015, 6, 30), 
            datetime.date(2015, 3, 31), 
            datetime.date(2014, 12, 31),
            datetime.date(2014, 9, 30),
            datetime.date(2014, 6, 30),
            datetime.date(2014, 3, 31),
            datetime.date(2013, 12, 31),
            datetime.date(2013, 9, 30)
        ]
        self.assertEqual(actual, expected)

        row_list = dao.get_row_list()
        self.assertEqual(row_list[0], [u'流動資產', 105701, 114095, 110287, 110883, 122386, 103908, 111507, 112025])
        for row in row_list:
            self.assertEqual(len(row), 9)
Esempio n. 8
0
    def test_assemble_quarterly_2498(self):
        # online: http://jdata.yuanta.com.tw/z/zc/zc3/zc3_2498.djhtm
        path = './yuantacat/tests/unit/data/cash_flow_quarterly/2498.html'
        param = {
            'content': FileUtils().read_file(path),
            'stock_symbol': '2498'
        }
        dao = CashFlowQuarterlyAssembler().assemble(param)

        self.assertEqual(dao.get_stock_symbol(), param['stock_symbol'])

        self.assertEqual(dao.get_period(), 'Q')

        actual = dao.get_column_name_list()
        expected = [
            u'期別',
            datetime.date(2015, 6, 30),
            datetime.date(2015, 3, 31),
            datetime.date(2014, 12, 31),
            datetime.date(2014, 9, 30),
            datetime.date(2014, 6, 30),
            datetime.date(2014, 3, 31),
            datetime.date(2013, 12, 31),
            datetime.date(2013, 9, 30)
        ]
        self.assertEqual(actual, expected)

        row_list = dao.get_row_list()
        self.assertEqual(
            row_list[0],
            [u'稅後淨利', -8034, 360, 466, 641, 2257, -1881, 315, -2974])
        for row in row_list[:-1]:
            self.assertEqual(len(row), 9)
        self.assertEqual(row_list[-1],
                         [u'[說明]上列會計科目中,投資收益-權益法、長期投資(新增)、固定資產(購置)、'])
    def test_assemble_yearly_2498(self):
        # online: http://jdata.yuanta.com.tw/z/zc/zcr/zcra_2498.djhtm
        path = './yuantacat/tests/unit/data/financial_analysis_yearly/2498.html'
        param = {
            'content': FileUtils().read_file(path),
            'stock_symbol': '2498'
        }
        dao = FinancialAnalysisYearlyAssembler().assemble(param)

        self.assertEqual(dao.get_stock_symbol(), param['stock_symbol'])

        self.assertEqual(dao.get_period(), 'Y')

        actual = dao.get_column_name_list()
        expected = [
            u'期別',
            datetime.date(2014, 12, 31),
            datetime.date(2013, 12, 31),
            datetime.date(2012, 12, 31),
            datetime.date(2011, 12, 31),
            datetime.date(2010, 12, 31),
            datetime.date(2009, 12, 31),
            datetime.date(2008, 12, 31),
            datetime.date(2007, 12, 31)
        ]
        self.assertEqual(actual, expected)

        row_list = dao.get_row_list()
        self.assertEqual(row_list[0], [
            u'淨值報酬率─稅後', 1.88, -1.68, 19.25, 70.34, 56.29, 35.79, 48.86, 58.48
        ])
    def test_assemble_yearly_2498(self):
        # online: http://jdata.yuanta.com.tw/z/zc/zcp/zcpb_2498.djhtm
        path = './yuantacat/tests/unit/data/balance_sheet_yearly/2498.html'
        param = {
            'content': FileUtils().read_file(path),
            'stock_symbol': '2498'
        }
        dao = BalanceSheetYearlyAssembler().assemble(param)

        self.assertEqual(dao.get_stock_symbol(), param['stock_symbol'])

        self.assertEqual(dao.get_period(), 'Y')

        actual = dao.get_column_name_list()
        expected = [
            u'期別',
            datetime.date(2014, 12, 31),
            datetime.date(2013, 12, 31),
            datetime.date(2012, 12, 31),
            datetime.date(2011, 12, 31),
            datetime.date(2010, 12, 31),
            datetime.date(2009, 12, 31),
            datetime.date(2008, 12, 31),
            datetime.date(2007, 12, 31)
        ]
        self.assertEqual(actual, expected)

        row_list = dao.get_row_list()
        self.assertEqual(row_list[0], [
            u'現金及約當現金', 55744, 53299, 53878, 87502, 74463, 64638, 64238, 56490
        ])
        for row in row_list:
            self.assertEqual(len(row), 9)
    def test_assemble_2498(self):
        # online: http://jdata.yuanta.com.tw/z/zc/zcc/zcc_2498.djhtm
        path = './yuantacat/tests/unit/data/dividend_policy/2498.html'
        param = {
            'content': FileUtils().read_file(path),
            'stock_symbol': '2498'
        }
        dao = DividendPolicyAssembler().assemble(param)

        self.assertEqual(dao.get_stock_symbol(), param['stock_symbol'])

        self.assertEqual(dao.get_period(), 'Y')

        actual = dao.get_column_name_list()
        expected = [
            u'年度', u'現金股利', u'盈餘配股', u'公積配股', u'股票股利', u'合計', u'員工配股率%'
        ]
        self.assertEqual(actual, expected)

        row_list = dao.get_row_list()
        self.assertEqual(
            row_list[0],
            [datetime.date(2014, 12, 31), 0.38, 0, 0, 0, 0.38, 0.0000])
        self.assertEqual(row_list[4], [
            datetime.date(2010, 12, 31), 37, 0.5000000092, 0, 0.5000000092,
            37.5000000092, 0.0050
        ])
        for row in row_list:
            self.assertEqual(len(row), 7)
    def test_assemble_quarterly_2498(self):
        # online: http://jdata.yuanta.com.tw/z/zc/zcr/zcr_2498.djhtm
        path = './yuantacat/tests/unit/data/financial_analysis_quarterly/2498.html'
        param = {
            'content': FileUtils().read_file(path),
            'stock_symbol': '2498'
        }
        dao = FinancialAnalysisQuarterlyAssembler().assemble(param)

        self.assertEqual(dao.get_stock_symbol(), param['stock_symbol'])

        self.assertEqual(dao.get_period(), 'Q')

        actual = dao.get_column_name_list()
        expected = [
            u'期別',
            datetime.date(2015, 6, 30),
            datetime.date(2015, 3, 31),
            datetime.date(2014, 12, 31),
            datetime.date(2014, 9, 30),
            datetime.date(2014, 6, 30),
            datetime.date(2014, 3, 31),
            datetime.date(2013, 12, 31),
            datetime.date(2013, 9, 30)
        ]
        self.assertEqual(actual, expected)

        row_list = dao.get_row_list()
        self.assertEqual(row_list[0], [u'獲利能力'])
        self.assertEqual(
            row_list[1],
            [u'營業毛利率', 19.27, 19.66, 20.36, 22.89, 22.23, 21.03, 17.8, 20.35])
 def test_assemble_raise_no_record_assemble_error(self):
     # online: http://jdata.yuanta.com.tw/z/zc/zcp/zcp_3009.djhtm
     path = './yuantacat/tests/unit/data/error/balance_sheet_summary_not_found_error.html'
     param = {
         'content' : FileUtils().read_file(path),
         'stock_symbol' : '3009'
     }
     with self.assertRaises(NoRecordAssembleError) as context:
         BalanceSheetQuarterlySummaryAssembler().assemble(param)
     self.assertEqual(context.exception.param['stock_symbol'], param['stock_symbol'])   
Esempio n. 14
0
 def test_assemble_yearly_raise_no_record_assemble_error(self):
     # online: http://jdata.yuanta.com.tw/z/zc/zcq/zcqa_3009.djhtm
     path = './yuantacat/tests/unit/data/error/income_statement_yearly_not_found_error.html'
     param = {
         'content' : FileUtils().read_file(path),
         'stock_symbol' : '3009'
     }
     with self.assertRaises(NoRecordAssembleError) as context:
         IncomeStatementYearlyAssembler().assemble(param)
     self.assertEqual(context.exception.param['stock_symbol'], param['stock_symbol'])   
 def test_assemble_quarterly_raise_no_record_assemble_error(self):
     # online: http://jdata.yuanta.com.tw/z/zc/zcr/zcr_3009.djhtm
     path = './yuantacat/tests/unit/data/error/financial_analysis_quarterly_not_found_error.html'
     param = {
         'content': FileUtils().read_file(path),
         'stock_symbol': '3009'
     }
     with self.assertRaises(NoRecordAssembleError) as context:
         FinancialAnalysisQuarterlyAssembler().assemble(param)
     self.assertEqual(context.exception.param['stock_symbol'],
                      param['stock_symbol'])
 def test_assemble_raise_no_record_assemble_error(self):
     # online: http://jdata.yuanta.com.tw/z/zc/zch/zch_3009.djhtm
     path = './yuantacat/tests/unit/data/error/operating_revenue_not_found_error.html'
     param = {
         'content': FileUtils().read_file(path),
         'stock_symbol': '3009'
     }
     with self.assertRaises(NoRecordAssembleError) as context:
         OperatingRevenueAssembler().assemble(param)
     self.assertEqual(context.exception.param['stock_symbol'],
                      param['stock_symbol'])
Esempio n. 17
0
class FileSpiderStorage():
    def __init__(self):
        self.file_utils = FileUtils()
        self.base_path = './yuantacat/data/'

    def set(self, key, url):
        filepath = self.__build_filepath(key)
        self.file_utils.copy_url_to_file(url, filepath)

    def contains(self, key):
        filepath = self.__build_filepath(key)
        return self.file_utils.is_file(filepath)
        
    def get(self, key):
        filepath = self.__build_filepath(key)
        return self.file_utils.read_file(filepath)

    def __build_filepath(self, key):
        relative_path = '''{key}.html'''.format(key=key)
        return self.file_utils.join_paths(self.base_path, relative_path)
 def test_assemble_raise_no_record_assemble_error(self):
     # online: http://jdata.yuanta.com.tw/z/zc/zcb/zcb_3009.djhtm
     path = './yuantacat/tests/unit/data/error/capital_increase_history_not_found_error.html'
     param = {
         'content': FileUtils().read_file(path),
         'stock_symbol': '3009'
     }
     with self.assertRaises(NoRecordAssembleError) as context:
         CapitalIncreaseHistoryAssembler().assemble(param)
     self.assertEqual(context.exception.param['stock_symbol'],
                      param['stock_symbol'])
Esempio n. 19
0
    def test_assemble_2498(self):
        # online:  http://real-chart.finance.yahoo.com/table.csv?s=2498.TW&ignore=.csv
        path = './yuantacat/tests/unit/data/stock_price/2498.html'
        param = {
            'content' : FileUtils().read_file(path),
            'stock_symbol' : '2498'
        }
        dao = StockPriceAssembler().assemble(param)
        self.assertEqual(dao.get_stock_symbol(), param['stock_symbol'])

        actual = dao.get_column_name_list()
        expected = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close']
        self.assertEqual(actual, expected)

        row_list = dao.get_row_list()
        self.assertEqual(row_list[0], [datetime.date(2015, 10, 23), 80.9, 81.3, 76.8, 77.0, 23948000, 77.0])
        for row in row_list:
            self.assertEqual(len(row), 7)  
    def test_assemble_otc_market(self):
        # online: http://isin.twse.com.tw/isin/C_public.jsp?strMode=4
        path = './yuantacat/tests/unit/data/stock_symbol/otc_market.html'
        param = {'content': FileUtils().read_file(path)}
        dao = StockSymbolAssembler().assemble(param)

        actual = dao.get_column_name_list()
        expected = [
            u'有價證券代號', u'名稱', u'國際證券辨識號碼(ISIN Code)', u'上市日', u'市場別', u'產業別',
            u'CFICode', u'備註'
        ]
        self.assertEqual(actual, expected)

        row_list = dao.get_row_list()
        self.assertEqual(row_list[0], [
            u'5364', u'力麗店', u'TW0005364004',
            datetime.date(2013, 8, 26), u'上櫃', u'其他業', u'ESVUFR', u''
        ])
        for row in row_list:
            self.assertEqual(len(row), 8)

        self.assertEqual(dao.get_release_date(), datetime.date(2015, 8, 7))
Esempio n. 21
0
class DataCreator():
    def __init__(self):
        self.json_utils = JsonUtils()
        self.file_utils = FileUtils()
        self.data_merger = DataMerger()

    def create(self, param):
        json = self.__build_json(param)
        path = self.__build_path(param)
        self.__save(json, path)

    def __build_json(self, param):
        return self.data_merger.merge(param)

    def __build_path(self, param):
        if 'path' in param:
            return param['path']
        else:
            relative_path = '''{key}.json'''.format(key=param['stock_symbol'])
            return self.file_utils.join_paths(param['base_path'], relative_path)

    def __save(self, json, path):
        self.json_utils.save(json, path)
        
    def test_assemble_2498(self):
        # online: http://jdata.yuanta.com.tw/z/zc/zch/zch_2498.djhtm
        path = './yuantacat/tests/unit/data/operating_revenue/2498.html'
        param = {
            'content': FileUtils().read_file(path),
            'stock_symbol': '2498'
        }
        dao = OperatingRevenueAssembler().assemble(param)

        self.assertEqual(dao.get_stock_symbol(), param['stock_symbol'])

        self.assertEqual(dao.get_period(), 'M')

        actual = dao.get_column_name_list()
        expected = [u'年/月', u'合併營收', u'月增率', u'去年同期', u'年增率', u'累計營收', u'年增率']
        self.assertEqual(actual, expected)

        row_list = dao.get_row_list()
        self.assertEqual(row_list[0], [
            datetime.date(2015, 8, 31), 6889966, -0.0699, 14541044, -0.5262,
            88831474, -0.2797
        ])
        for row in row_list:
            self.assertEqual(len(row), 7)
    def test_assemble_2498(self):
        # online: http://jdata.yuanta.com.tw/z/zc/zcb/zcb_2498.djhtm
        path = './yuantacat/tests/unit/data/capital_increase_history/2498.html'
        param = {
            'content': FileUtils().read_file(path),
            'stock_symbol': '2498'
        }
        dao = CapitalIncreaseHistoryAssembler().assemble(param)

        self.assertEqual(dao.get_stock_symbol(), param['stock_symbol'])

        self.assertEqual(dao.get_period(), 'Y')

        actual = dao.get_column_name_list()
        expected = [u'年度', u'現金增資', u'比重', u'盈餘轉增資', u'比重', u'公積及其他', u'比重']
        self.assertEqual(actual, expected)

        row_list = dao.get_row_list()
        self.assertEqual(row_list[0], [
            datetime.date(2015, 12, 31), 14.464519, 0.1747, 67.724067, 0.8180,
            0.598634, 0.0072
        ])
        for row in row_list:
            self.assertEqual(len(row), 7)
Esempio n. 24
0
class DataCreator():
    def __init__(self):
        self.json_utils = JsonUtils()
        self.file_utils = FileUtils()
        self.data_merger = DataMerger()

    def create(self, param):
        json = self.__build_json(param)
        path = self.__build_path(param)
        self.__save(json, path)

    def __build_json(self, param):
        return self.data_merger.merge(param)

    def __build_path(self, param):
        if 'path' in param:
            return param['path']
        else:
            relative_path = '''{key}.json'''.format(key=param['stock_symbol'])
            return self.file_utils.join_paths(param['base_path'],
                                              relative_path)

    def __save(self, json, path):
        self.json_utils.save(json, path)
Esempio n. 25
0
 def __init__(self):
     self.json_utils = JsonUtils()
     self.file_utils = FileUtils()
     self.data_merger = DataMerger()
Esempio n. 26
0
 def __init__(self):
     self.file_utils = FileUtils()
     self.base_path = './yuantacat/data/'
Esempio n. 27
0
 def __init__(self):
     self.json_utils = JsonUtils()
     self.file_utils = FileUtils()
     self.data_merger = DataMerger()