Source code for raincloudy.controller
# -*- coding: utf-8 -*-
"""RainCloud Controller."""
import raincloudy
from raincloudy.faucet import RainCloudyFaucet
from raincloudy.const import SETUP_ENDPOINT
from raincloudy.helpers import find_controller_or_faucet_name
[docs]class RainCloudyController():
"""RainCloudy Controller object."""
def __init__(self, parent, controller_id, index, faucets=None):
"""
Initialize RainCloudy Controller object.
:param parent: RainCloudy parent object
:param controller_id: Control Unit ID
:param valve_id: Value Unit ID assigned controller
:type parent: RainCloudy object
:type controller_id: string
:type valve_id: string
:return: RainCloudyController object
:rtype: RainCloudyController object
"""
self.attributes = {}
self._parent = parent
self.home = parent.html['home']
self._controller_id = controller_id
self.index = index
self._verify_parent()
# faucets associated with controller
self._faucets = []
# load assigned faucets
self._assign_faucets(faucets)
# populate controller attributes
self.update()
def _verify_parent(self):
"""Verify parent type."""
if not isinstance(self._parent, raincloudy.core.RainCloudy):
raise TypeError("Invalid parent object.")
def _assign_faucets(self, faucets):
"""Assign RainCloudyFaucet objects to self._faucets."""
if not faucets:
raise TypeError("Controller does not have a faucet assigned.")
for index, faucet in enumerate(faucets):
self._faucets.append(
RainCloudyFaucet(
self._parent,
self,
faucet['serial'],
index,
faucet['zones']
))
def __repr__(self):
"""Object representation."""
try:
return "<{0}: {1}>".format(self.__class__.__name__, self.name)
except AttributeError:
return "<{0}: {1}>".format(self.__class__.__name__, self.id)
[docs] def update(self):
"""
Call 1 method to update zone attributes
"""
# update zone attributes
for faucet in self._faucets:
faucet.update()
@property
def serial(self):
"""Return controller id."""
return self._controller_id
# pylint: disable=invalid-name
@property
def id(self):
"""Return controller id."""
return self.serial
@property
def name(self):
"""Return controller name."""
return \
find_controller_or_faucet_name(self._parent.html['home'],
'controller',
self.index)
@name.setter
def name(self, value):
"""Set a new name to controller."""
data = {
'select_controller': self.index,
'_set_controller_name': 'Set Name',
'controller_name': value,
}
self._parent.post(data, url=SETUP_ENDPOINT, referer=SETUP_ENDPOINT)
@property
def status(self):
"""Return controller status."""
return self.attributes['controller_status']
@property
def current_time(self):
"""Return controller current time."""
return self.attributes['current_time']
@property
def faucets(self):
"""Show current linked faucet."""
if hasattr(self, '_faucets'):
return self._faucets
raise AttributeError("There are no faucets assigned.")
# vim:sw=4:ts=4:et: