Implement Combinator, DummyProcessor

This commit is contained in:
taizan-hokuto
2019-12-30 11:02:29 +09:00
parent c4f1194a53
commit 4e956b8d84
8 changed files with 71 additions and 6 deletions

View File

@@ -19,5 +19,6 @@ from .api import (
CompatibleProcessor, CompatibleProcessor,
SimpleDisplayProcessor, SimpleDisplayProcessor,
JsonfileArchiveProcessor, JsonfileArchiveProcessor,
SpeedCalculator SpeedCalculator,
DummyProcessor
) )

View File

@@ -8,3 +8,4 @@ from .processors.compatible.processor import CompatibleProcessor
from .processors.simple_display_processor import SimpleDisplayProcessor from .processors.simple_display_processor import SimpleDisplayProcessor
from .processors.jsonfile_archive_processor import JsonfileArchiveProcessor from .processors.jsonfile_archive_processor import JsonfileArchiveProcessor
from .processors.speed_calculator import SpeedCalculator from .processors.speed_calculator import SpeedCalculator
from .processors.dummy_processor import DummyProcessor

View File

@@ -15,6 +15,7 @@ from .. import mylogger
from ..exceptions import ChatParseException,IllegalFunctionCall from ..exceptions import ChatParseException,IllegalFunctionCall
from ..paramgen import liveparam from ..paramgen import liveparam
from ..processors.default.processor import DefaultProcessor from ..processors.default.processor import DefaultProcessor
from ..processors.combinator import Combinator
logger = mylogger.get_logger(__name__,mode=config.LOGGER_MODE) logger = mylogger.get_logger(__name__,mode=config.LOGGER_MODE)
MAX_RETRY = 10 MAX_RETRY = 10
@@ -72,6 +73,9 @@ class LiveChatAsync:
exception_handler = None, exception_handler = None,
direct_mode = False): direct_mode = False):
self.video_id = video_id self.video_id = video_id
if isinstance(processor, tuple):
self.processor = Combinator(processor)
else:
self.processor = processor self.processor = processor
self._buffer = buffer self._buffer = buffer
self._callback = callback self._callback = callback

View File

@@ -16,6 +16,7 @@ from .. import mylogger
from ..exceptions import ChatParseException,IllegalFunctionCall from ..exceptions import ChatParseException,IllegalFunctionCall
from ..paramgen import arcparam from ..paramgen import arcparam
from ..processors.default.processor import DefaultProcessor from ..processors.default.processor import DefaultProcessor
from ..processors.combinator import Combinator
logger = mylogger.get_logger(__name__,mode=config.LOGGER_MODE) logger = mylogger.get_logger(__name__,mode=config.LOGGER_MODE)
MAX_RETRY = 10 MAX_RETRY = 10
@@ -78,6 +79,9 @@ class ReplayChatAsync:
direct_mode = False): direct_mode = False):
self.video_id = video_id self.video_id = video_id
self.seektime = seektime self.seektime = seektime
if isinstance(processor, tuple):
self.processor = Combinator(processor)
else:
self.processor = processor self.processor = processor
self._buffer = buffer self._buffer = buffer
self._callback = callback self._callback = callback

View File

@@ -14,6 +14,7 @@ from .. import mylogger
from ..exceptions import ChatParseException,IllegalFunctionCall from ..exceptions import ChatParseException,IllegalFunctionCall
from ..paramgen import liveparam from ..paramgen import liveparam
from ..processors.default.processor import DefaultProcessor from ..processors.default.processor import DefaultProcessor
from ..processors.combinator import Combinator
logger = mylogger.get_logger(__name__,mode=config.LOGGER_MODE) logger = mylogger.get_logger(__name__,mode=config.LOGGER_MODE)
MAX_RETRY = 10 MAX_RETRY = 10
@@ -72,6 +73,9 @@ class LiveChat:
direct_mode = False direct_mode = False
): ):
self.video_id = video_id self.video_id = video_id
if isinstance(processor, tuple):
self.processor = Combinator(processor)
else:
self.processor = processor self.processor = processor
self._buffer = buffer self._buffer = buffer
self._callback = callback self._callback = callback

View File

@@ -15,6 +15,7 @@ from .. import mylogger
from ..exceptions import ChatParseException,IllegalFunctionCall from ..exceptions import ChatParseException,IllegalFunctionCall
from ..paramgen import arcparam from ..paramgen import arcparam
from ..processors.default.processor import DefaultProcessor from ..processors.default.processor import DefaultProcessor
from ..processors.combinator import Combinator
logger = mylogger.get_logger(__name__,mode=config.LOGGER_MODE) logger = mylogger.get_logger(__name__,mode=config.LOGGER_MODE)
MAX_RETRY = 10 MAX_RETRY = 10
@@ -78,6 +79,9 @@ class ReplayChat:
): ):
self.video_id = video_id self.video_id = video_id
self.seektime = seektime self.seektime = seektime
if isinstance(processor, tuple):
self.processor = Combinator(processor)
else:
self.processor = processor self.processor = processor
self._buffer = buffer self._buffer = buffer
self._callback = callback self._callback = callback

View File

@@ -0,0 +1,39 @@
from .chat_processor import ChatProcessor
class Combinator(ChatProcessor):
'''
Combinator combines multiple chat processors.
Specify processors as tuple at `processor` params of LiveChat object.
For example:
[constructor]
chat = LiveChat("video_id", processor = ( Processor1(), Processor2(), Processor3() )
[receive return values]
ret1, ret2, ret3 = chat.get()
The return values are tuple of processed chat data,
the order of return depends on parameter order.
Parameter
---------
processors : Tuple[ChatProcessor]
multiple processors for processing chat data
'''
def __init__(self, processors: tuple):
self.processors = processors
def process(self, chat_components: list):
'''
Called from LiveChat.get() function by user,
or LiveChat._listen() automatically.
Returns
-------
Tuple of chat data processed by each chat processor.
'''
return tuple([processor.process(chat_components)
for processor in self.processors])

View File

@@ -0,0 +1,8 @@
from .chat_processor import ChatProcessor
class DummyProcessor(ChatProcessor):
'''
Dummy processor just returns received chat_components directly.
'''
def process(self, chat_components: list):
return chat_components