Source code for hangout_api.settings.microphone

"""
Hangout API for Microphone
"""

from hangout_api.settings.utils import BaseSettings, MutingHandler
from retrying import retry


[docs]class MicrophoneDevice(object): """ Class that represents microphone devise. More like marker than actual class .. testsetup:: MicrophoneDevice from hangout_api.settings.microphone import MicrophoneDevice .. doctest:: MicrophoneDevice >>> device_1 = MicrophoneDevice('microphone 1') >>> device_1.name 'microphone 1' >>> device_1 <MicrophoneDevice: 'microphone 1'> >>> device_1 == MicrophoneDevice('microphone 2') False >>> device_1 == MicrophoneDevice('microphone 1') True """ # pylint: disable=too-few-public-methods def __init__(self, name): self.name = name def __eq__(self, other): return self.name == other.name def __repr__(self): return "<MicrophoneDevice: %r>" % self.name
[docs]class MicrophoneSettings(BaseSettings): # pylint: disable=duplicate-code """ Controlling call microphone settings. ====================================== .. testsetup:: MicrophoneSettings from hangout_api.settings.microphone import ( MicrophoneSettings, MicrophoneDevice) from hangout_api.tests.doctests_utils import DummyHangout hangout = DummyHangout( name='microphone', klass=MicrophoneSettings, getter=[ MicrophoneDevice('Default'), MicrophoneDevice('usb001: microphone device')], setter=None, current=MicrophoneDevice('Default')) global was_called was_called = False def get_mute_button_label(*args): global was_called val = was_called and 'Unmute microphone' or 'Mute microphone' was_called = not was_called return val hangout.microphone.muting_handler.get_mute_button_label = \ get_mute_button_label """ device_class = MicrophoneDevice def __init__(self, base): super(MicrophoneSettings, self).__init__(base) self.muting_handler = MutingHandler( base=base, base_text='ute microphone', mute_label='Mute microphone', unmute_label='Unmute microphone', no_device='Microphone not detected') @property @retry(stop_max_attempt_number=3) def is_muted(self): """ Returns True if microphone is muted, otherwise returns False .. doctest:: MicrophoneSettings >>> hangout.microphone.is_muted in (True, False) True """ return self.muting_handler.is_muted() @retry(stop_max_attempt_number=3)
[docs] def unmute(self): """ Un-mute microphone device. Returns: * True - microphone went from muted to un-muted * False - microphone was already un-muted .. doctest:: MicrophoneSettings >>> hangout.microphone.mute() True >>> hangout.microphone.unmute() True >>> hangout.microphone.unmute() False """ return self.muting_handler.unmute()
@retry(stop_max_attempt_number=3)
[docs] def mute(self): """ Mute microphone device. Returns: * True - microphone went from un-muted to muted * False - microphone was already muted .. doctest:: MicrophoneSettings >>> hangout.microphone.unmute() True >>> hangout.microphone.mute() True >>> hangout.microphone.mute() False """ return self.muting_handler.mute()
@retry(stop_max_attempt_number=3)
[docs] def get_devices(self, with_nodes=False): """ Returns list of available microphone devices: .. doctest:: MicrophoneSettings >>> hangout.microphone.get_devices() [<MicrophoneDevice: 'Default'>, ...] """ device_xpath = '//*[text()="Microphone"]' devices_list_xpath = \ '//div[@class="c-i c-i-Ed Hz"]/div/div[@class="c-k-t"]' return self._devices_getter( device_xpath, devices_list_xpath, with_nodes)
@retry(stop_max_attempt_number=3)
[docs] def set_device(self, device_name): """ Set device by its name: .. doctest:: MicrophoneSettings >>> hangout.microphone.get_devices() [<MicrophoneDevice: 'Default'>, ...] >>> hangout.microphone.set_device('Default') """ return self._device_setter(device_name)
@property @retry(stop_max_attempt_number=3) def current_device(self): """ Returns current device: .. doctest:: MicrophoneSettings >>> hangout.microphone.current_device <MicrophoneDevice: 'Default'> """ return self._current_device_getter('Microphone', parrenty=1)