def test_mongodb_metadata(): """Проверка, что хранилище предоставляет необходимые метаданные о MongoDB.""" mongo = database.MongoDB("main", "test") assert isinstance(mongo.collection, Collection) and mongo.collection.name == "main" assert isinstance(mongo.db, Database) and mongo.db.name == "test" assert isinstance(mongo.client, MongoClient) and mongo.client is database.MONGO_CLIENT
def get_last_history_date(db: str = DB, collection: str = MISC) -> pd.Timestamp: """"Момент времени UTC после, которого не нужно обновлять данные.""" mongodb = database.MongoDB(collection, db) doc = mongodb["last_date"] now, end_of_trading = now_and_end_of_trading_day() if doc is None or doc["timestamp"] < end_of_trading: data = apimoex.get_board_dates(mongo.HTTP_SESSION, board="TQBR", market="shares", engine="stock") doc = dict(data=data, timestamp=now) mongodb["last_date"] = doc logging.info(f"Последняя дата с историей: {doc['data'][0]['till']}") return last_history_from_doc(doc)
def __init__( self, tickers: tuple[str, ...], date: pd.Timestamp, label: str = FORECAST, ): """Подключается к базе и загружает индекс кэша.""" self._tickers = tickers self._date = date self._store = database.MongoDB(collection=label) self._index = self._prepare_index(date, tickers)
def test_mongodb_not_valid_data(): """Проверка сохранения нестандартного для MongoDB документа.""" mongo = database.MongoDB("main", "test") assert not mongo key_value = [{"q": 1, "w": "text"}] mongo["key2"] = key_value assert mongo["key2"] == key_value assert len(mongo) == 1 del mongo["key2"] # noqa: WPS420 assert mongo["key2"] is None assert not mongo
def __init__( self, collection: str, db: str = DB, client: pymongo.MongoClient = mongo.MONGO_CLIENT, create_from_scratch: bool = False, validate_last: bool = True, index: str = utils.DATE, unique_index: bool = True, ascending_index: bool = True, session: requests.Session = mongo.HTTP_SESSION, ): """Данные хранятся в MongoDB и извлекаются в виде DataFrame. Сохраняемые данные представляются в виде следующего документа: { _id: str data: DataFrame.to_dict("records"), timestamp: datetime.datetime } :param collection: Коллекция в которой хранятся данные. :param db: База данных в которой хранятся данные. :param client: Подключенный клиент MongoDB. :param create_from_scratch: Нужно ли удалять данные при каждом обновлении. :param validate_last: Нужно ли при обновлении проверять только последнее значение или все значения. :param index: Наименование колонки для индекса. :param unique_index: Нужно ли тестировать индекс данных на уникальность. :param ascending_index: Нужно ли тестировать индекс данных на возрастание. :param session: Сессия для обновления данных по интернет. """ self._mongo = database.MongoDB(collection, db, client) self._index = index self._create_from_scratch = create_from_scratch self._validate_last = validate_last self._unique_index = unique_index self._ascending_index = ascending_index self._session = session
def test_mongodb_not_valid_data(): mongo = database.MongoDB("main", "test") assert isinstance(mongo.collection, Collection) assert mongo.collection.name == "main" assert isinstance(mongo.db, Database) assert mongo.db.name == "test" assert isinstance(mongo.client, MongoClient) assert mongo.client is MONGO_CLIENT assert len(mongo) == 0 value = [dict(q=1, w="text")] mongo["key"] = value assert mongo["key"] == value assert len(mongo) == 1 del mongo["key"] assert mongo["key"] is None assert len(mongo) == 0
def last_history_date(db: str = DB, collection: str = MISC) -> pd.Timestamp: """Последняя доступная дата исторических котировок.""" mongodb = database.MongoDB(collection, db) doc = mongodb["last_date"] return pd.Timestamp(doc["data"][0]["till"])
def drop_test_db(): """Создает и удаляет базу для тестирования.""" db = database.MongoDB("test") yield db db.drop()