Returns a list of :py:class:`.Client` for the specific query by the user.

    Keyword Parameters:

    protocol
      Ignored.

    groups
      The groups (types) to which the clients belong either from ('Genuine', 'Impostor')
      Note that 'eval' is an alias for 'Genuine'.
      If no groups are specified, then both clients are impostors are listed.

    Returns: A list containing all the clients which have the given properties.

def clients(self, protocol=None, groups=None):
    """Returns a list of :py:class:`.Client` for the specific query by the user.

    Keyword Parameters:

    protocol
      Ignored.

    groups
      The groups (types) to which the clients belong either from ('Genuine', 'Impostor')
      Note that 'eval' is an alias for 'Genuine'.
      If no groups are specified, then both clients are impostors are listed.

    Returns: A list containing all the clients which have the given properties.
    """

    groups = self.__group_replace_eval_by_genuine__(groups)
    groups = self.check_parameters_for_validity(groups, "group", self.client_types())
    # List of the clients
    q = self.query(Client)
    if groups:
      q = q.filter(Client.stype.in_(groups))
    q = q.order_by(Client.id)
    return list(q)