docs: def client_update(self,
                             client,
                             reason=None,
                             pin=None,
                             current_pin=None,
                             verification_speed=None,
                             row_doubling=None,
                             password=None,
                             bypass_expiration=None,
                             bypass_limit=None,
                             bypass_spacing_minutes=None,
                             bypass_code=None,
                             is_disabled=None,
                             verification_lock=None,
                             password_lock=None,
                             enroll_deadline_extension_minutes=None,
                             enroll_deadline_enable=None,
                             windows_profile=None,
                             role_rationale=None,
                             role=None,
                             ):
          """
          Update client info
          Uses PUT to /clients/<client> interface
  
          :Args:
              * *client*: (str) Client's ID
  
          :Kwargs:
              * *reason*: (str) The reason for changing the client's settings
              * *pin*: (str) The new PIN to set
              * *current_pin*: (str) The current PIN of the user. Only required if role is not admin and the Account Reset Mode (System Configuration) requires PIN.
              * *verification_speed*: (int) The speed at which the verification should appear for the client.  Allowed values: 0, 25, 50, 75, 100.
              * *row_doubling*: (str) Row doubling is an AudioPIN only option that puts two rows of words in each pinpad digit.  Allowed values: "OFF", "TRAIN", "ON"
              * *password*: (str) New client password
              * *bypass_expiration*: (int) Used to enable/disable a client's bypass. The time, in minutes, from when the request was received until the bypass expires. 0 removes the bypass, while -1 sets a bypass that doesn't expire.
              * *bypass_limit*: (int) The number of times a user may bypass. Set to 0 for no limit. If set without either an existing valid bypass_expiration, or providing one in the request, the client's bypass_expiration will be set to 10 mins.  Default value: 0.  Size range: >=0
              * *bypass_spacing_minutes*: (int) Specifies the time, in minutes, the user must wait between using each bypass. Set to 0 for no bypass rate limiting. If set without either an existing valid bypass_expiration, or providing one in the request, the client's bypass_expiration will be set to 10 mins.
              * *bypass_code*: (str) The code that the client must enter to bypass.
              * *is_disabled*: (bool) If true, the client cannot do verifications (will automatically bypass).
              * *verification_lock*: (bool) Unlocks the given client if the client verified incorrectly too many times.
              * *password_lock*: (bool) Set to false to unlock a client who enter thier password incorrectly too many times.
              * *enroll_deadline_extension_minutes*: (int) Amount of time, in minutes, to extend an enrollment deadline by.
              * *enroll_deadline_enable*: (bool) When true, enables the enrollment deadline for a certain client, when false disables an enrollment deadline.
              * *windows_profile*: (str) Assigns a Windows Profile to the user using the Windows Profile ID. To remove a profile, send null.
              * *role_rationale*: (str) Update the client rationale for a role
              * *role*: (str) Update the client role. Note: Google users cannot have their role updated.  Allowed values: "admin", "manager", "support", "user".
  
          :More information: Can be found `here <https://cloud.knuverse.com/docs/api/#api-Clients-Update_client_information>`_.
  
          """
          client = self._client_id(client)
  
          body = {}
          if reason is not None:
              body["reason"] = reason
          if pin is not None:
              body["pin"] = pin
          if current_pin is not None:
              body["current_pin"] = current_pin
          if verification_speed is not None:
              body["verification_speed"] = verification_speed
          if row_doubling is not None:
              body["row_doubling"] = row_doubling
          if password is not None:
              body["auth_password"] = self._password
              body["password"] = password
          if bypass_expiration is not None:
              body["bypass_expiration"] = bypass_expiration
          if bypass_limit is not None:
              body["bypass_limit"] = bypass_limit
          if bypass_spacing_minutes is not None:
              body["bypass_spacing_minutes"] = bypass_spacing_minutes
          if bypass_code is not None:
              body["bypass_code"] = bypass_code
          if is_disabled is not None:
              body["is_disabled"] = is_disabled
          if verification_lock is not None:
              body["verification_lock"] = verification_lock
          if password_lock is not None:
              body["password_lock"] = password_lock
          if enroll_deadline_extension_minutes is not None:
              body["enroll_deadline_extension_minutes"] = enroll_deadline_extension_minutes
          if enroll_deadline_enable is not None:
              body["enroll_deadline_enable"] = enroll_deadline_enable
          if windows_profile is not None:
              body["windows_profile"] = windows_profile
          if role is not None:
              body["auth_password"] = self._password
              body["role"] = role
          if role_rationale is not None:
              body["role_rationale"] = role_rationale
  
          response = self._put(url.clients_id.format(id=client), body=body)
          self._check_response(response, 200)