def map_quote(quote: dict) -> dict: instrument_id = parse_instrument_url(quote["instrument"]) plucked = { "instrument_id": instrument_id, **pluck(DESIRED_QUOTE_KEYS, quote) } plucked["updated_at"] = parse_updated_at(plucked["updated_at"]) return plucked
def update_index_symbol(datum: dict) -> pymongo.operations.UpdateOne: data = { "timestamp": timestamp, "has_traded": datum.get("has_traded"), "updated_at": parse_updated_at(datum.get("updated_at")), "trading_halted": datum.get("trading_halted"), } instrument_id = parse_instrument_url(datum["instrument"]) return pymongo.operations.UpdateOne({"instrument_id": instrument_id}, {"$set": data})
def store_fundamentals(data, collection: pymongo.collection.Collection): if not data: return for datum in data: if not datum: continue print(datum) instrument_id = parse_instrument_url(datum["instrument"]) doc = {**omit("instrument", datum), "instrument_id": instrument_id} try: collection.replace_one({"instrument_id": instrument_id}, doc, True) except Exception as e: print(f"Error storing fundamentals: {e}")
def reduce_popularity(acc: dict, datum: dict) -> dict: instrument_id = parse_instrument_url(datum["instrument"]) return {**acc, instrument_id: datum["num_open_positions"]}