def setUp(self): self.filename = "test_file" store = Storage("..\\testData\\") self.filepath = store.excel("test_file") self.xls = XLSio(store) self.xls.table = Mock() self.xls.table.to_excel = Mock()
def storeValuationSummaryBrief(tickers = None): store = Storage() if tickers is None: xls = XLSio(store) xls.loadWorkbook("StockSummary") xls.table = xls.table[xls.table["P/E Ratio (TTM)"].notnull()] tickers = xls.getTickers() summary = {} count = 1.0 errors = {} print("Assessing " + str(len(tickers)) + " companies") for ticker in tickers: try: reporter = Reporter(ticker) summary[ticker] = reporter.oneLineValuation() except MissingStatementEntryError as E: errors[ticker] = E.message except InsufficientDataError as E: errors[ticker] = E.message except Exception as E: errors[ticker] = E.message if count % max(len(tickers) / 4, 1) == 0: pct_complete = round(100.0 * count / len(tickers)) print(str(pct_complete) + "% complete") count += 1 index = summary.items()[0][1].index summary = pandas.DataFrame(summary, index = index).T summary.to_excel(store.excel("ValuationSummary")) print(str(len(errors)) + " Failed") print(str(len(summary)) + " Succeeded") return errors
def setUp(self): self.filename = "test_file" store = Storage("..\\testData\\") self.filepath = store.excel("test_file") self.xls = XLSio(store) self.xls.table = Mock() self.xls.table.to_excel = Mock()
class Test_Storage(unittest.TestCase): def setUp(self): self.root_location = "..\\testData\\" self.store = Storage(self.root_location) self.resource = Financials("ASX", "annual") def test_StorageLoadResource(self): self.resource.fromDict = Mock(return_value = self.resource) self.store.load_pickle = Mock(return_value = "saved_dict") loaded_resource = self.store.load(self.resource) self.resource.fromDict.assert_called_once_with("saved_dict") self.assertIs(loaded_resource, self.resource) def test_StorageLocationForFinancials(self): expected_folder = self.root_location + self.resource.ticker + "\\Financials" self.assertEqual(self.store.financials(self.resource), expected_folder) def test_StorageLocationForAnnualFinancials(self): expected_folder = self.root_location + self.resource.ticker + "\\Financials\\Annual" self.assertEqual(self.store.annualFinancials(self.resource), expected_folder) def test_StorageLocationForInterimFinancials(self): expected_folder = self.root_location + self.resource.ticker + "\\Financials\\Interim" self.assertEqual(self.store.interimFinancials(self.resource), expected_folder)
class Test_ScrapingOverviewData(unittest.TestCase): def setUp(self): self.ticker = "SRV" self.type = "overview" self.data_dir = "..\\testData\\" self.store = Storage(self.data_dir) self.expected = { "P/E Ratio (TTM)": 21.68, "EPS (TTM)": 0.34, "Market Cap": 698.87, "Shares Outstanding": 98.43, "Public Float": 43.03, "Yield": 3.01, "Latest Dividend": 0.11, "Ex-Dividend Date": "09/07/15" } self.scraper = WSJscraper(self.store) self.scraper.overview = BeautifulSoup( open(self.store.html(self.ticker, self.type)), "lxml") def test_RetrievesKeyStockDataTable(self): data = self.scraper.keyStockData() # scraper should return a dictionary self.assertIsInstance(data, dict) self.assertEqual(data.keys().sort(), self.expected.keys().sort()) self.assertEqual(data, self.expected)
class Test_ScrapingOverviewData(unittest.TestCase): def setUp(self): self.ticker = "SRV" self.type = "overview" self.data_dir = "..\\testData\\" self.store = Storage(self.data_dir) self.expected = {"P/E Ratio (TTM)" : 21.68, "EPS (TTM)" : 0.34, "Market Cap" : 698.87, "Shares Outstanding" : 98.43, "Public Float" : 43.03, "Yield" : 3.01, "Latest Dividend" : 0.11, "Ex-Dividend Date" : "09/07/15"} self.scraper = WSJscraper(self.store) self.scraper.overview = BeautifulSoup(open(self.store.html(self.ticker, self.type)), "lxml") def test_RetrievesKeyStockDataTable(self): data = self.scraper.keyStockData() # scraper should return a dictionary self.assertIsInstance(data, dict) self.assertEqual(data.keys().sort(), self.expected.keys().sort()) self.assertEqual(data, self.expected)
def test_BuildsIncomeStatementAddress(self): scraper = WSJdownloader(Storage("")) for ticker in tickers: scraper_address = scraper.get_address(ticker, "income") expected_address = annual_income_statement.replace( "[ticker]", ticker) self.assertEqual(scraper_address, expected_address)
def setUp(self): self.existing_tickers = ["1PG", "ONT", "1ST", "TGP", "TIX"] self.existing_headings = [ "Company name", "ASX code", "GICS industry group" ] self.xls = XLSio(Storage("..\\testData\\")) self.xls.loadWorkbook("ASXListedCompanies")
def saveAnalysisToExcel(ticker): results = Reporter(ticker) store = Storage() writer = pandas.ExcelWriter(store.excel(ticker + "analysis")) results.summaryTable().to_excel(writer, "Summary") results.financials.income.income_sheet.to_excel(writer, "Income") assets = results.financials.balance.asset_sheet liabilities = results.financials.balance.liabilities assets.to_excel(writer, "Balance") liabilities.to_excel(writer, "Balance", startrow = len(assets) + 1) operating = results.financials.cashflow.operating investing = results.financials.cashflow.investing financing = results.financials.cashflow.financing operating.to_excel(writer, "Cashflow") investing.to_excel(writer, "Cashflow", startrow = len(operating) + 1) financing.to_excel(writer, "Cashflow", startrow = len(operating) + len(investing) + 2) writer.save()
def setUp(self): self.ticker = "GNG" self.type = "balance" data_dir = "..\\testData\\" store = Storage(data_dir) self.assets = pandas.read_pickle(data_dir + "GNG\\GNGassets.pkl") self.liabilities = pandas.read_pickle(data_dir + "GNG\\GNGliabilities.pkl") self.scraper = WSJscraper(store)
def setUp(self): self.ticker = "SRV" self.type = "overview" self.data_dir = "..\\testData\\" self.store = Storage(self.data_dir) self.expected = { "P/E Ratio (TTM)": 21.68, "EPS (TTM)": 0.34, "Market Cap": 698.87, "Shares Outstanding": 98.43, "Public Float": 43.03, "Yield": 3.01, "Latest Dividend": 0.11, "Ex-Dividend Date": "09/07/15" } self.scraper = WSJscraper(self.store) self.scraper.overview = BeautifulSoup( open(self.store.html(self.ticker, self.type)), "lxml")
class Test_Storage(unittest.TestCase): def setUp(self): self.root_location = "..\\testData\\" self.store = Storage(self.root_location) def test_StorageLocationForExcel(self): filename = "test" expected_filepath = self.root_location + filename + ".xlsx" self.assertEqual(self.store.excel(filename), expected_filepath) def test_StorageLocationForHTML(self): ticker = "AAA" type = "overview" expected_filepath = self.root_location + ticker + "\\" + ticker + type + ".html" self.assertEqual(self.store.html(ticker, type), expected_filepath) def test_StorageLocationForStockPickle(self): ticker = "AAA" type = "income" expected_filepath = self.root_location + ticker + "\\pickles\\" + type + ".pkl" self.assertEqual(self.store.stock_pickle(ticker, type), expected_filepath)
class Test_Storage(unittest.TestCase): def setUp(self): self.root_location = "..\\testData\\" self.store = Storage(self.root_location) def test_StorageLocationForExcel(self): filename = "test" expected_filepath = self.root_location + filename + ".xlsx" self.assertEqual(self.store.excel(filename), expected_filepath) def test_StorageLocationForHTML(self): ticker = "AAA" type = "overview" expected_filepath = self.root_location + ticker + "\\" + ticker + type + ".html" self.assertEqual(self.store.html(ticker, type), expected_filepath) def test_StorageLocationForStockPickle(self): ticker = "AAA" type = "income" expected_filepath = self.root_location + ticker + "\\pickles\\" + type + ".pkl" self.assertEqual(self.store.stock_pickle(ticker, type), expected_filepath)
def retrieveOverviewData(storage_dir, headings = None): store = Storage(storage_dir) xls = XLSio(store) scraper = WSJscraper(store) xls.loadWorkbook("ASXListedCompanies") tickers = xls.getTickers() new_data = {} for ticker in tickers: scraper.load_overview(ticker) try: new_data[ticker] = scraper.keyStockData() except Exception: print("Problem with: " + ticker) xls.updateTable(new_data) xls.saveAs("StockSummary")
def setUp(self): self.ticker = "SRV" self.type = "overview" self.data_dir = "..\\testData\\" self.store = Storage(self.data_dir) self.expected = {"P/E Ratio (TTM)" : 21.68, "EPS (TTM)" : 0.34, "Market Cap" : 698.87, "Shares Outstanding" : 98.43, "Public Float" : 43.03, "Yield" : 3.01, "Latest Dividend" : 0.11, "Ex-Dividend Date" : "09/07/15"} self.scraper = WSJscraper(self.store) self.scraper.overview = BeautifulSoup(open(self.store.html(self.ticker, self.type)), "lxml")
class Test_LoadingPages(unittest.TestCase): def setUp(self): self.ticker = "SRV" self.type = "overview" self.data_dir = "..\\testData\\" self.store = Storage(self.data_dir) self.scraper = WSJscraper(self.store) def test_StoresSoupObjectOnPageLoad(self): self.scraper.load_overview(self.ticker) expected = BeautifulSoup(open(self.store.html(self.ticker, "overview")), "lxml") self.assertIsInstance(self.scraper.overview, BeautifulSoup) self.assertEqual(self.scraper.overview.title, expected.title) def test_ChecksForValidYears(self): years = [u'2015', u' ', u'012', u'.3'] self.assertRaises(InsufficientDataError, self.scraper.check_years, years = years) self.assertIsNone(self.scraper.check_years([u'2015', u'2014', u'2013']))
class Test_LoadingPages(unittest.TestCase): def setUp(self): self.ticker = "SRV" self.type = "overview" self.data_dir = "..\\testData\\" self.store = Storage(self.data_dir) self.scraper = WSJscraper(self.store) def test_StoresSoupObjectOnPageLoad(self): self.scraper.load_overview(self.ticker) expected = BeautifulSoup( open(self.store.html(self.ticker, "overview")), "lxml") self.assertIsInstance(self.scraper.overview, BeautifulSoup) self.assertEqual(self.scraper.overview.title, expected.title) def test_ChecksForValidYears(self): years = [u'2015', u' ', u'012', u'.3'] self.assertRaises(InsufficientDataError, self.scraper.check_years, years=years) self.assertIsNone(self.scraper.check_years([u'2015', u'2014', u'2013']))
def test_BuildsFinancialsOverviewAddress(self): scraper = WSJdownloader(Storage("")) for ticker in tickers: scraper_address = scraper.get_address(ticker, "financials") expected_address = financials_overview.replace("[ticker]", ticker) self.assertEqual(scraper_address, expected_address)
def setUp(self): self.ticker = "SRV" self.type = "overview" self.data_dir = "..\\testData\\" self.store = Storage(self.data_dir) self.scraper = WSJscraper(self.store)
def test_BuildsCashFlowAddress(self): scraper = WSJdownloader(Storage("")) for ticker in tickers: scraper_address = scraper.get_address(ticker, "cashflow") expected_address = annual_cash_flow.replace("[ticker]", ticker) self.assertEqual(scraper_address, expected_address)
def test_BuildsBalanceSheetAddress(self): scraper = WSJdownloader(Storage("")) for ticker in tickers: scraper_address = scraper.get_address(ticker, "balance") expected_address = annual_balance_sheet.replace("[ticker]", ticker) self.assertEqual(scraper_address, expected_address)
def setUp(self): self.root_location = "..\\testData\\" self.store = Storage(self.root_location)
def test_FinancialsCallsAppropriateFolder(self): store = Storage() store.financials = Mock() self.financials.selectFolder(store) store.financials.assert_called_once_with(self.financials)
def buildFinancialAnalyst(ticker, storage_dir = "D:\\Investing\\Data"): resource = StockFinancialsResource(Storage(storage_dir)) income = IncomeStatement(resource.getFinancials(ticker, "income")) balance = BalanceSheet(resource.getFinancials(ticker, "assets"), resource.getFinancials(ticker, "liabilities")) cashflow = CashflowStatement(resource.getFinancials(ticker, "operating"), resource.getFinancials(ticker, "investing"), resource.getFinancials(ticker, "financing")) return FinanceAnalyst(income, balance, cashflow)
def setUp(self): self.root_location = "..\\testData\\" self.store = Storage(self.root_location) self.resource = Financials("ASX", "annual")
def buildPriceAnalyser(ticker, storage_dir = "D:\\Investing\\Data"): store = Storage(storage_dir) prices = pandas.read_pickle(store.yahoo(ticker)) return PriceAnalyser(prices)
def setUp(self): self.root_location = "..\\testData\\" self.store = Storage(self.root_location)
def setUp(self): self.ticker = "SRV" self.type = "overview" self.data_dir = "..\\testData\\" self.store = Storage(self.data_dir) self.scraper = WSJscraper(self.store)