share/factory.py (24 lines of code) (raw):

# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one # or more contributor license agreements. Licensed under the Elastic License 2.0; # you may not use this file except in compliance with the Elastic License 2.0. from typing import Any, Callable from .multiline import CountMultiline, PatternMultiline, ProtocolMultiline, WhileMultiline _init_definition_by_multiline_type: dict[str, dict[str, Any]] = { "count": { "class": CountMultiline, }, "pattern": { "class": PatternMultiline, }, "while_pattern": { "class": WhileMultiline, }, } class MultilineFactory: """ Multiline factory. Provides a static method to instantiate a multiline processor """ @staticmethod def create(multiline_type: str, **kwargs: Any) -> ProtocolMultiline: """ Instantiates a concrete Multiline processor given a multiline type and args """ if multiline_type not in _init_definition_by_multiline_type: raise ValueError( "You must provide one of the following multiline types: " + f"{', '.join(_init_definition_by_multiline_type.keys())}. {multiline_type} given" ) multiline_definition = _init_definition_by_multiline_type[multiline_type] multiline_builder: Callable[..., ProtocolMultiline] = multiline_definition["class"] return multiline_builder(**kwargs)