You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.7 KiB
Python
64 lines
1.7 KiB
Python
"""Fixtures for use with jupyter events."""
|
|
from __future__ import annotations
|
|
|
|
import io
|
|
import json
|
|
import logging
|
|
from typing import Any, Callable
|
|
|
|
import pytest
|
|
|
|
from jupyter_events import EventLogger
|
|
|
|
|
|
@pytest.fixture
|
|
def jp_event_sink() -> io.StringIO:
|
|
"""A stream for capture events."""
|
|
return io.StringIO()
|
|
|
|
|
|
@pytest.fixture
|
|
def jp_event_handler(jp_event_sink: io.StringIO) -> logging.Handler:
|
|
"""A logging handler that captures any events emitted by the event handler"""
|
|
return logging.StreamHandler(jp_event_sink)
|
|
|
|
|
|
@pytest.fixture
|
|
def jp_read_emitted_events(
|
|
jp_event_handler: logging.Handler, jp_event_sink: io.StringIO
|
|
) -> Callable[..., list[str] | None]:
|
|
"""Reads list of events since last time it was called."""
|
|
|
|
def _read() -> list[str] | None:
|
|
jp_event_handler.flush()
|
|
event_buf = jp_event_sink.getvalue().strip()
|
|
output = [json.loads(item) for item in event_buf.split("\n")] if event_buf else None
|
|
# Clear the sink.
|
|
jp_event_sink.truncate(0)
|
|
jp_event_sink.seek(0)
|
|
return output
|
|
|
|
return _read
|
|
|
|
|
|
@pytest.fixture
|
|
def jp_event_schemas() -> list[Any]:
|
|
"""A list of schema references.
|
|
|
|
Each item should be one of the following:
|
|
- string of serialized JSON/YAML content representing a schema
|
|
- a pathlib.Path object pointing to a schema file on disk
|
|
- a dictionary with the schema data.
|
|
"""
|
|
return []
|
|
|
|
|
|
@pytest.fixture
|
|
def jp_event_logger(jp_event_handler: logging.Handler, jp_event_schemas: list[Any]) -> EventLogger:
|
|
"""A pre-configured event logger for tests."""
|
|
logger = EventLogger()
|
|
for schema in jp_event_schemas:
|
|
logger.register_event_schema(schema)
|
|
logger.register_handler(handler=jp_event_handler)
|
|
return logger
|