"""Settings schema for the streamer."""
from enum import Enum
from pathlib import Path
from typing import Optional
from pydantic import BaseModel
from pydantic import Extra
from pydantic import validator
from neural_data_simulator.core.settings import LSLChannelFormatType
from neural_data_simulator.core.settings import LSLOutputModel
[docs]class LSLSimplifiedOutputModel(BaseModel, extra=Extra.forbid):
"""Settings for all LSL outlets."""
class _Instrument(BaseModel, extra=Extra.forbid):
manufacturer: str
model: str
id: int
channel_format: LSLChannelFormatType
instrument: _Instrument
[docs]class Streamer(BaseModel, extra=Extra.forbid):
"""Settings specific to the streamer."""
[docs] class NPZ(BaseModel, extra=Extra.forbid):
"""Settings for streaming from a numpy archive file (.npz)."""
[docs] class Output(BaseModel, extra=Extra.forbid):
"""Settings for outputting to LSL."""
sampling_rate: float
n_channels: int
lsl: LSLOutputModel
output: Output
input: Input
[docs] class Blackrock(BaseModel, extra=Extra.forbid):
"""Settings for streaming from Blackrock Neurotech files."""
[docs] class Output(BaseModel, extra=Extra.forbid):
"""Settings for outputting to LSL."""
lsl: LSLSimplifiedOutputModel
output: Output
input: Input
blackrock: Optional[Blackrock]
npz: Optional[NPZ]
input_type: StreamerInputType
lsl_chunk_frequency: float
stream_indefinitely: bool
@validator("input_type")
def _config_is_set_for_input_type(cls, v, values):
if v == StreamerInputType.Blackrock and values.get("blackrock") is None:
raise ValueError(
"blackrock fields need to be configured"
" for a Blackrock Neurotech file"
)
if v == StreamerInputType.NPZ and values.get("npz") is None:
raise ValueError("npz fields need to be configured for an npz file")
return v