Source code for hangout_api.gadgets.cameraman
"""
API for Cameraman Hangout PlugIn
"""
from hangout_api.gadgets.utils import gadget_context_handler
from hangout_api.utils import TIMEOUTS
[docs]class Cameraman(object):
"""
Cameraman plugin for OnAir
.. testsetup:: Cameraman
from hangout_api.gadgets.cameraman import (Cameraman)
from hangout_api.tests.doctests_utils import (
DummyHangout, DummySelenium)
from hangout_api.gadgets import utils
utils.open_app = lambda *args: None
global call_num
call_num = 0
def get_attribute(*args):
global call_num
if call_num == 6:
call_num = 0
call_num += 1
val = [False, True, True, True, False, False][call_num - 1]
return val and 'Yes' or 'No'
DummySelenium.get_attribute = get_attribute
hangout = DummyHangout(
name='cameraman',
klass=Cameraman)
"""
def __init__(self, base):
self.base = base
def _status_getter_setter(self, class_name, value):
"""
Helper function that handles turning on and off Cameraman properties
"""
status_xpath = \
'//*[contains(@class, "%s")]/div[@aria-checked="true"]' \
% class_name
value_xpath = '//*[contains(@class, "%s")]//div[text()="%s"]' % (
class_name, 'Yes' if value else 'No')
status = self.base.browser.xpath(status_xpath).get_attribute(
'innerText').strip() == 'Yes'
if value is None:
return status
if status != value:
self.base.browser.xpath(value_xpath).click(TIMEOUTS.fast)
# waiting for a change
self.base.browser.xpath(
status_xpath + '//div[text()="%s"]' % (
'Yes' if value else 'No'))
return True
return False
@gadget_context_handler("Cameraman")
[docs] def mute_new_guests(self, value=None):
"""
New guests in my large (3+) broadcast are muted when they join?
As argument takes True or False and returns:
* True - went to opposite state
(from 'on' to 'off', or from 'off' to 'on')
* False -desired state was already chosen
In case if no argument was provided returns current state
.. doctest:: Cameraman
>>> hangout.cameraman.mute_new_guests(True)
True
>>> hangout.cameraman.mute_new_guests()
True
>>> hangout.cameraman.mute_new_guests(True)
False
>>> hangout.cameraman.mute_new_guests(False)
True
>>> hangout.cameraman.mute_new_guests()
False
>>> hangout.cameraman.mute_new_guests(False)
False
"""
return self._status_getter_setter('u-Xc-Ox-ra', value)
@gadget_context_handler("Cameraman")
[docs] def video_only(self, value=None):
"""
Broadcast the large video that I see to my audience and
hide the other video feeds?
As argument takes True or False and returns:
* True - went to opposite state
(from 'on' to 'off', or from 'off' to 'on')
* False -desired state was already chosen
In case if no argument was provided returns current state
.. doctest:: Cameraman
>>> hangout.cameraman.video_only(True)
True
>>> hangout.cameraman.video_only()
True
>>> hangout.cameraman.video_only(True)
False
>>> hangout.cameraman.video_only(False)
True
>>> hangout.cameraman.video_only()
False
>>> hangout.cameraman.video_only(False)
False
"""
return self._status_getter_setter('u-Xc-Wt-ra', value)
@gadget_context_handler("Cameraman")
[docs] def hide_new_guests(self, value=None):
"""
As guests join, hide their audio and video from my broadcast?
As argument takes True or False and returns:
* True - went to opposite state
(from 'on' to 'off', or from 'off' to 'on')
* False -desired state was already chosen
In case if no argument was provided returns current state.
.. doctest:: Cameraman
>>> hangout.cameraman.hide_new_guests(True)
True
>>> hangout.cameraman.hide_new_guests()
True
>>> hangout.cameraman.hide_new_guests(True)
False
>>> hangout.cameraman.hide_new_guests(False)
True
>>> hangout.cameraman.hide_new_guests()
False
>>> hangout.cameraman.hide_new_guests(False)
False
"""
return self._status_getter_setter('u-Xc-ra', value)