def _update_stocks(symbols): """ Update models.Stock entities. :param symbols: Iterable of stock symbols to update. :return: dict mapping symbols to new prices, dict mapping symbols to (old price, new price) for changed symbols. """ to_put = [] symbol_price_updated_dict = {} if symbols is None: stocks_ = list(Stock.query()) symbols = [s.key.id() for s in stocks_] else: stocks_ = [Stock.get_by_id(s) for s in symbols] symbol_price_dict = stocks.get_stock_prices(symbols) for stock in stocks_: if stock is None: continue symbol = stock.key.id() price = symbol_price_dict.get(symbol, None) if stock.price != price: symbol_price_updated_dict[symbol] = (stock.price, price) stock.price = price to_put.append(stock) ndb.put_multi(to_put) return symbol_price_dict, symbol_price_updated_dict