Source code for aiobosest.helpers.base

# Copyright 2016 Wagner Sartori Junior
#
# This file is part of aiobosest.
#
# aiobosest is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License.
#
# aiobosest is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with aiobosest.  If not, see <http://www.gnu.org/licenses/>.

import asyncio
import logging

from lxml import etree

ART_STATUS = [
    'INVALID',
    'SHOW_DEFAULT_IMAGE',
    'DOWNLOADING',
    'IMAGE_PRESENT',
]

KEY_VALUE = [
    'PLAY',
    'PAUSE',
    'STOP',
    'PREV_TRACK',
    'NEXT_TRACK',
    'THUMBS_UP',
    'THUMBS_DOWN',
    'BOOKMARK',
    'POWER',
    'MUTE',
    'VOLUME_UP',
    'VOLUME_DOWN',
    'PRESET_1',
    'PRESET_2',
    'PRESET_3',
    'PRESET_4',
    'PRESET_5',
    'PRESET_6',
    'AUX_INPUT',
    'SHUFFLE_OFF',
    'SHUFFLE_ON',
    'REPEAT_OFF',
    'REPEAT_ONE',
    'REPEAT_ALL',
    'PLAY_PAUSE',
    'ADD_FAVORITE',
    'REMOVE_FAVORITE',
    'INVALID_KEY',
]

KEY_STATE = [
    'press',
    'release',
]

PLAY_STATUS = [
    'PLAY_STATE',
    'PAUSE_STATE',
    'STOP_STATE',
    'BUFFERING_STATE',
    'INVALID_PLAY_STATUS',
]

SOURCE_STATUS = [
    'UNAVAILABLE',
    'READY',
]


[docs]class BaseHelper: """BaseHelper class for all the API methods available on Bose SoundTouch. Args: key_name: The XML Element name. e.g. 'volume' is_updated: asyncio.Event() is set when an update happens """ def __init__(self, key_name=None, is_updated=None): if is_updated is None: is_updated = asyncio.Event() self.key_name = key_name self.is_updated = is_updated
[docs] async def xml_parse(self, data): """Parse the XML data taking into consideration if it's coming from WebSocket or not. Args: data: string data to be parsed Returns: An XMLElement relative to the key_name""" xmldata = etree.XML(data) updates = xmldata.xpath('/updates') if updates: updated = updates[0].xpath('./{key_name}Updated/{key_name}'.format( key_name=self.key_name)) if updated: return updated[0] if xmldata.xpath('/{key_name}'.format(key_name=self.key_name)): return xmldata
[docs] def set_update(self): """Set the is_updated event""" self.is_updated.set()
[docs] async def get(self): """Stub for get method""" pass
[docs] async def set(self): """Stub for set method""" pass