async def get_account( mock_client, logged_in: bool = False, load_robots: bool = False ) -> Account: """Gets an account that has the underlying API patched.""" with patch("pylitterbot.session.AsyncOAuth2Client", mock_client): account = Account() if logged_in: await account.connect( username=USERNAME, password=PASSWORD, load_robots=load_robots ) return account
async def get_account(logged_in: bool = False, load_robots: bool = False) -> Account: """Get an account that has the underlying API patched.""" with patch( "pylitterbot.session.ClientSession.ws_connect", return_value=ClientWebSocketResponse(Mock(), Mock(), Mock(), Mock(), Mock(), Mock(), Mock(), Mock()), ): account = Account() if logged_in: await account.connect(username=USERNAME, password=PASSWORD, load_robots=load_robots) return account
async def login(self, load_robots: bool = False) -> None: """Login to Litter-Robot.""" self.account = Account() try: await self.account.connect( username=self._data[CONF_USERNAME], password=self._data[CONF_PASSWORD], load_robots=load_robots, ) return except LitterRobotLoginException as ex: _LOGGER.error("Invalid credentials") raise ex except LitterRobotException as ex: _LOGGER.error("Unable to connect to Litter-Robot API") raise ex
def __init__(self, hass: HomeAssistant, data: Mapping[str, Any]) -> None: """Initialize the Litter-Robot hub.""" self._data = data self.account = Account(websession=async_get_clientsession(hass)) async def _async_update_data() -> bool: """Update all device states from the Litter-Robot API.""" await self.account.refresh_robots() return True self.coordinator = DataUpdateCoordinator( hass, _LOGGER, name=DOMAIN, update_method=_async_update_data, update_interval=timedelta(seconds=UPDATE_INTERVAL_SECONDS), )
async def main(): # Create an account. account = Account() try: # Connect to the API and load robots. await account.connect(username=username, password=password, load_robots=True) # Print robots associated with account. print("Robots:") for robot in account.robots: print(robot) finally: # Disconnect from the API. await account.disconnect()
async def _async_validate_input(self, user_input: Mapping[str, Any]) -> str: """Validate login credentials.""" account = Account(websession=async_get_clientsession(self.hass)) try: await account.connect( username=user_input[CONF_USERNAME], password=user_input[CONF_PASSWORD], ) await account.disconnect() except LitterRobotLoginException: return "invalid_auth" except LitterRobotException: return "cannot_connect" except Exception as ex: # pylint: disable=broad-except _LOGGER.exception("Unexpected exception: %s", ex) return "unknown" return ""