Beispiel #1
0
def test_sql_additional_events_with_session_start(
        domain: Domain, retrieve_events_from_previous_conversation_sessions):
    sender = "test_sql_additional_events_with_session_start"
    tracker_store = SQLTrackerStore(
        domain,
        retrieve_events_from_previous_conversation_sessions=(
            retrieve_events_from_previous_conversation_sessions),
    )
    tracker = _saved_tracker_with_multiple_session_starts(
        tracker_store, sender)

    tracker.update(UserUttered("hi2"), domain)

    # make sure only new events are returned
    with tracker_store.session_scope() as session:
        # noinspection PyProtectedMember
        additional_events = list(
            tracker_store._additional_events(session, tracker))
        assert len(additional_events) == 1
        assert isinstance(additional_events[0], UserUttered)
Beispiel #2
0
    def __init__(
        self,
        dialect: Text = "sqlite",
        host: Optional[Text] = None,
        port: Optional[int] = None,
        db: Text = "events.db",
        username: Optional[Text] = None,
        password: Optional[Text] = None,
    ) -> None:
        from rasa.core.tracker_store import SQLTrackerStore
        import sqlalchemy.orm

        engine_url = SQLTrackerStore.get_db_url(dialect, host, port, db,
                                                username, password)

        logger.debug(
            f"SQLEventBroker: Connecting to database: '{engine_url}'.")

        self.engine = sqlalchemy.create_engine(engine_url)
        self.Base.metadata.create_all(self.engine)
        self.sessionmaker = sqlalchemy.orm.sessionmaker(bind=self.engine)
Beispiel #3
0
async def test_load_sessions(tmp_path):
    """Tests loading a tracker with multiple sessions."""
    domain = Domain.empty()
    store = SQLTrackerStore(domain, db=os.path.join(tmp_path, "temp.db"))
    tracker = DialogueStateTracker("test123", None)
    tracker.update_with_events(
        [
            UserUttered("0"),
            UserUttered("1"),
            SessionStarted(),
            UserUttered("2"),
            UserUttered("3"),
        ],
        domain,
    )
    await store.save(tracker)

    loader = MarkerTrackerLoader(store, STRATEGY_ALL)
    result = [tracker async for tracker in loader.load()]
    assert len(result) == 1  # contains only one tracker
    assert len(result[0].events) == len(tracker.events)
Beispiel #4
0
def test_sql_tracker_store_with_login_db(
    postgres_login_db_connection: sa.engine.Connection, ):
    tracker_store = SQLTrackerStore(
        dialect="postgresql",
        host=POSTGRES_HOST,
        port=POSTGRES_PORT,
        username=POSTGRES_USER,
        password=POSTGRES_PASSWORD,
        db=POSTGRES_TRACKER_STORE_DB,
        login_db=POSTGRES_LOGIN_DB,
    )

    matching_rows = (postgres_login_db_connection.execution_options(
        isolation_level="AUTOCOMMIT"
    ).execute(
        sa.text(
            "SELECT 1 FROM pg_catalog.pg_database WHERE datname = :database_name"
        ),
        database_name=POSTGRES_TRACKER_STORE_DB,
    ).rowcount)
    assert matching_rows == 1
    assert tracker_store.engine.url.database == POSTGRES_TRACKER_STORE_DB
    tracker_store.engine.dispose()
def test_db_get_url_with_sqlite():
    expected = "sqlite:///rasa.db"
    assert str(SQLTrackerStore.get_db_url(dialect="sqlite", db="rasa.db")) == expected
def test_get_db_url_with_fully_specified_url(full_url: Text):
    assert SQLTrackerStore.get_db_url(host=full_url) == full_url
def test_login_db_with_no_postgresql(tmp_path: Path):
    with pytest.warns(UserWarning):
        SQLTrackerStore(db=str(tmp_path / "rasa.db"), login_db="other")
Beispiel #8
0
def _get_rasa_x_tracker_store() -> SQLTrackerStore:
    return SQLTrackerStore(Domain.empty(), db="tracker.db")
Beispiel #9
0
def test_sql_tracker_store_with_token_serialisation(
    domain: Domain, response_selector_agent: Agent
):
    tracker_store = SQLTrackerStore(domain, **{"host": "sqlite:///"})
    prepare_token_serialisation(tracker_store, response_selector_agent, "sql")
Beispiel #10
0
def _get_rasa_x_tracker_store(endpoints_file: Optional[Text]) -> TrackerStore:
    if endpoints_file and os.path.exists(endpoints_file):
        return _get_tracker_store_from_endpoints_config(endpoints_file)
    else:
        return SQLTrackerStore(Domain.empty(), db="tracker.db")
Beispiel #11
0
def stores_to_be_tested():
    temp = tempfile.mkdtemp()
    return [MockRedisTrackerStore(domain),
            InMemoryTrackerStore(domain),
            SQLTrackerStore(domain,
                            db=os.path.join(temp, 'rasa.db'))]