Source code for hangout_api.settings.bandwidth
"""
Hangout API for bandwidth
"""
from enum import Enum
from hangout_api.settings.utils import BaseSettings
from hangout_api.utils import TIMEOUTS
from retrying import retry
BANDWIDTH_LEVELS = Enum(
'Bandwidth', {
'Audio only': 0,
'Very Low': 1,
'Low': 2,
'Medium': 3,
'Auto HD': 4})
[docs]class BandwidthSettings(BaseSettings):
# pylint: disable=duplicate-code
"""
Controlling bandwidth settings.
Available bandwidth levels are:
* 0 - Audio only
* 1 - Very Low
* 2 - Low
* 3 - Medium
* 4 - Auto HD
.. testsetup:: BandwidthSettings
from hangout_api.settings.bandwidth import (
BandwidthSettings, BANDWIDTH_LEVELS)
from hangout_api.tests.doctests_utils import (
DummyHangout, DummySelenium)
hangout = DummyHangout(
name='bandwidth',
klass=BandwidthSettings)
DummySelenium.get_attribute = lambda *args: 1
"""
# pylint: disable=W0223
def _get_bandwidth_controller(self):
"""
Returns selenium wrapper object for "Bandwidth" bar
"""
limit_bandwidth_xpath = '//div[text()="Limit Bandwidth"]'
if not self.base.browser.xpath(limit_bandwidth_xpath).is_displayed():
# no need to open bandwidth settings tab if it's opened already
self.base.click_menu_element(
'//div[@aria-label="Adjust bandwidth usage"]')
return self.base.browser.xpath(
'//div[@aria-label="Adjust the quality of your video"]')
@retry(stop_max_attempt_number=3)
[docs] def set(self, bandwidth):
"""
Set bandwidth setting for hangout
.. doctest:: BandwidthSettings
>>> hangout.bandwidth.set(2)
"""
controller = self._get_bandwidth_controller()
levels = controller.by_class('Sa-IU-HT', eager=True)
# setting levels
levels[bandwidth].click(TIMEOUTS.fast)
@retry(stop_max_attempt_number=3)
[docs] def get(self):
"""
Get bandwidth setting for hangout.
.. doctest:: BandwidthSettings
>>> hangout.bandwidth.get()
<Bandwidth.Very Low: 1>
"""
controller = self._get_bandwidth_controller()
# pylint: disable=E1102
return BANDWIDTH_LEVELS(int(controller.get_attribute('aria-valuenow')))