Merge branch 'feature/combinator' into develop

This commit is contained in:
taizan-hokuto
2019-12-30 11:04:25 +09:00
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,7 +73,10 @@ class LiveChatAsync:
exception_handler = None, exception_handler = None,
direct_mode = False): direct_mode = False):
self.video_id = video_id self.video_id = video_id
self.processor = processor if isinstance(processor, tuple):
self.processor = Combinator(processor)
else:
self.processor = processor
self._buffer = buffer self._buffer = buffer
self._callback = callback self._callback = callback
self._done_callback = done_callback self._done_callback = done_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,7 +79,10 @@ class ReplayChatAsync:
direct_mode = False): direct_mode = False):
self.video_id = video_id self.video_id = video_id
self.seektime = seektime self.seektime = seektime
self.processor = processor if isinstance(processor, tuple):
self.processor = Combinator(processor)
else:
self.processor = processor
self._buffer = buffer self._buffer = buffer
self._callback = callback self._callback = callback
self._done_callback = done_callback self._done_callback = done_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,7 +73,10 @@ class LiveChat:
direct_mode = False direct_mode = False
): ):
self.video_id = video_id self.video_id = video_id
self.processor = processor if isinstance(processor, tuple):
self.processor = Combinator(processor)
else:
self.processor = processor
self._buffer = buffer self._buffer = buffer
self._callback = callback self._callback = callback
self._done_callback = done_callback self._done_callback = done_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,7 +79,10 @@ class ReplayChat:
): ):
self.video_id = video_id self.video_id = video_id
self.seektime = seektime self.seektime = seektime
self.processor = processor if isinstance(processor, tuple):
self.processor = Combinator(processor)
else:
self.processor = processor
self._buffer = buffer self._buffer = buffer
self._callback = callback self._callback = callback
self._done_callback = done_callback self._done_callback = done_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