Example #1
0
def save_insider_trades(tmp_file: IO):
    """Прочитать данные о торгах инсайдеров из файла и сохранить их в базу.

    :param tmp_file: временный файл, откуда откуда будут прочитаны данные и сохранены в файл
    """
    for chunk in chunked(tmp_file.readlines(), Config.CHUNK_SIZE):
        insider_trades = [json.loads(line) for line in chunk]

        insiders: Set[InsiderTuple] = set(
            InsiderTuple(
                id=insider_trade['insider_id'],
                name=insider_trade['insider_name'],
            ) for insider_trade in insider_trades)
        Insider.insert_insiders(insiders)

        symbols: Set[str] = set(insider_trade['symbol']
                                for insider_trade in insider_trades)
        Ticker.insert_tickers(symbols)
        symbol_to_uuid: Dict[str, UUID] = Ticker.get_uuids_by_symbol()

        InsiderTrade.bulk_insert([
            dict(ticker_id=symbol_to_uuid[insider_trade['symbol']],
                 **{
                     k: v
                     for k, v in insider_trade.items()
                     if k != 'symbol' and k != 'insider_name'
                 }) for insider_trade in insider_trades
        ])

        session.commit()
Example #2
0
def save_historical_prices(tmp_file: IO) -> None:
    """Прочитать исторические данные из файла и сохранить их в базу.

    :param tmp_file: временный файл, откуда откуда будут прочитаны данные и сохранены в файл
    """
    for chunk in chunked(tmp_file.readlines(), Config.CHUNK_SIZE):
        historical_prices = [json.loads(line) for line in chunk]

        symbols: Set[str] = set(historical_price['symbol']
                                for historical_price in historical_prices)
        Ticker.insert_tickers(symbols)
        symbol_to_uuid: Dict[str, UUID] = Ticker.get_uuids_by_symbol()

        HistoricalPrice.bulk_insert([
            dict(
                ticker_id=symbol_to_uuid[historical_price['symbol']],
                **{k: v
                   for k, v in historical_price.items() if k != 'symbol'})
            for historical_price in historical_prices
        ])

        session.commit()