Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
 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
Beispiel #4
0
    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),
        )
Beispiel #5
0
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()
Beispiel #6
0
 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 ""