docs: def login(self, username, password):
          '''
          Logs into Brickset as a user, returning a userhash, which can be used in other methods.
          The user hash is stored inside the client (:attr:`userHash`).
  
          :param str username: Your Brickset username.
          :param str password: Your Brickset password.
          :returns: If the login is valid, this will return ``True``.
          :rtype: `bool`
          :raises: :class:`brickfront.errors.InvalidLoginCredentials`
          '''
  
          # Get the site
          url = Client.ENDPOINT.format('login')
          params = {
              'apiKey': self.apiKey,
              'username': username,
              'password': password,
          }
          returned = get(url, params=params)
          self.checkResponse(returned)
          root = ET.fromstring(returned.text)
  
          # Determine whether they logged in correctly
          if root.text.startswith('ERROR'):
              self.userHash = ''
              raise InvalidLoginCredentials('The provided username and password were unable to authenticate.')
          self.userHash = root.text
          return True