<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def update_user(self, login=None, user_name=None, password=None, envs=[], query='/users/'):
 """ `login` - Login or username of user to update `user_name` - Updated full name of user `password` - Updated plain text password for user Update user information """

        juicer.utils.Log.log_debug("Update user information %s" % login)

        login = login.lower()

        data = {'delta': {}}

        if not user_name and not password:
            raise JuicerError("Error: --name or --password must be present")

        if user_name:
            data['delta']['name'] = user_name

        if password:
            data['delta']['password'] = password[0]

        query = "%s%s/" % (query, login)

        for env in envs:
            juicer.utils.Log.log_info("%s:", env)
            if not juicer.utils.user_exists_p(login, self.connectors[env]):
                juicer.utils.Log.log_info("user `%s` does not exist in %s... skipping!",
                                          (login, env))
                continue
            else:
                _r = self.connectors[env].put(query, data)
                if _r.status_code == Constants.PULP_PUT_OK:
                    juicer.utils.Log.log_info("user %s updated" %
                            juicer.utils.load_json_str(_r.content)['login'])
                else:
                    _r.raise_for_status()
        return True