Example #1
0
def get_financial_data(symbol, timeframe, report_type):
    """ Returns financial data in an iterator of csv rows (tuples). First row will be the headers.
        symbol: e.g. "C6L.SI"
        timeframe: "annual" or "quarter"
        report_type: any string in FINANCIAL_REPORT_TYPES
    """
    logger.info("getting {0} {1} data of {2}".format(timeframe, report_type, symbol))

    url = _get_report_url(symbol, timeframe, report_type)
    html = strict_get(url, _test_for_not_found)

    try:
        raw_data = _scrape_html(html)
    except (IndexError, AttributeError, KeyError) as e:
        msg = "failed to scrape raw data out from the html content of {0} {1} {2}".format(symbol, timeframe, report_type)
        logger.exception(e)
        logger.error(msg)
        raise ScrapingError(msg) from e

    try:    # exception can only be triggered in transpose_items because preprocess returns a generator
        items = preprocess(raw_data, symbol, timeframe, report_type)
        return transpose_items(items)
    except (AssertionError, ValueError) as e:
        msg = "failed to preprocess the raw data of {0} {1} {2}".format(symbol, timeframe, report_type)
        logger.exception(e)
        logger.error(msg)
        raise PreprocessingError(msg) from e
Example #2
0
 def test_transpose_items(self):
     transposed = fa_util.transpose_items((("foo", [1, 2, 3]), ("bar", [4, 5, 6])))
     self.assertEqual(list(transposed), [("foo", "bar"), (1, 4), (2, 5), (3, 6)])