code: def _get_users_from_project(self, project_id, roles, project_users):
          
  
          # For keystone.user_list project_id is not passed as argument because
          # it is ignored when using admin credentials
          # Get all users (to be able to find user name)
          users = api.keystone.user_list(self.request)
          users = {user.id: user for user in users}
  
          # Get project_users_roles ({user_id: [role_id_1, role_id_2]})
          project_users_roles = api.keystone.get_project_users_roles(
              self.request,
              project=project_id)
  
          for user_id in project_users_roles:
  
              if user_id not in project_users:
                  # Add user to the project_users
                  project_users[user_id] = users[user_id]
                  project_users[user_id].roles = []
                  project_users[user_id].roles_from_groups = []
  
              # Update the project_user role in order to get:
              # project_users[user_id].roles = [role_name1, role_name2]
              self._update_user_roles_names_from_roles_id(
                  user=project_users[user_id],
                  users_roles=project_users_roles[user_id],
                  roles_list=roles
              )
docs: Update with users which have role on project NOT through a group.
  
          :param project_id: ID of the project
          :param roles: list of roles from keystone
          :param project_users: list to be updated with the users found