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>`_.

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)