Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
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
Ejemplo n.º 7
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"])
Ejemplo n.º 8
0
def drop_test_db():
    """Создает и удаляет базу для тестирования."""
    db = database.MongoDB("test")
    yield db
    db.drop()