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,
SimpleDisplayProcessor,
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.jsonfile_archive_processor import JsonfileArchiveProcessor
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 ..paramgen import liveparam
from ..processors.default.processor import DefaultProcessor
from ..processors.combinator import Combinator
logger = mylogger.get_logger(__name__,mode=config.LOGGER_MODE)
MAX_RETRY = 10
@@ -72,7 +73,10 @@ class LiveChatAsync:
exception_handler = None,
direct_mode = False):
self.video_id = video_id
self.processor = processor
if isinstance(processor, tuple):
self.processor = Combinator(processor)
else:
self.processor = processor
self._buffer = buffer
self._callback = callback
self._done_callback = done_callback

View File

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

View File

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

View File

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