# `sol.models.player` -- Players

class `sol.models.player.``Player`(**kwargs)

  A single person.

  `acceptedDiscernibility`()

    Determine whether the player's name should be obfuscated or not.

    The player may have already explicitly stated his privacy policy agreement, and in such case we honor his will, showing the full name only when he agrees.

    Otherwise, we check if he participated to any tournaments after January 1, 2020: if so, assume he implicitly accepted the common clause that requires one to agree in order to play in public tourneys.

  `agreedprivacy`

    Whether the player explicitly accepted the privacy policy: `A` means agreed, `N` means did not agree.

    When left blank, this gets implicitly inferred from whether the person participated to a tournament after January 1, 2020.

    His name and other details will be dimmed if he did not agree.

  `birthdate`

    Date of birth of the player.

  `caption`(html=None, localized=True, css_class=None, ignore_privacy=False)

    Description of the player, made up concatenating his names.

  classmethod `check_insert`(session, fields, user_id)

    Prevent duplicated players.

  `check_update`(fields)

    Perform any check before updating the instance.

  `citizenship`

    Whether the player belongs legally to the given country or not.

  property `country`

    The name of the player's country.

  `delete`()

    Prevent deletion if this player is involved in some tourney.

  property `description`

    Description of the player, made up concatenating his names.

  `email`

    Email address of the player.

  classmethod `find`(session, lastname, firstname, nickname, guid=None)

    Find a player, even after it has been merged into another.

    Parameters

      - session -- an SQLAlchemy session

      - lastname -- a string, the last name of the player

      - firstname -- a string, the first name of the player

      - nickname -- a string, the nick name of the player

      - guid -- the hex string of an UUID

    Return type

      a tuple

    This tries to find the given player by looking for it first in the `players` table then in the `merged_players` table, either by guid or by name.

    If found, it returns a tuple with the current player (that is, the eventual target of the merge) and a boolean flag, `False` when it is current or `True` if it has been merged.

    If not found it returns a `(None, False)` tuple.

  `firstname`

    Player's first name.

  `idclub`

    Membership club's ID.

  `idfederation`

    Membership federation's ID.

  `idowner`

    ID of the `user` that is responsible for this record.

  `idplayer`

    Primary key.

  `language`

    The ISO code of the preferred language of the player.

  `lastname`

    Player's last name.

  `matchesSummary`()

    Return the number of won, lost, tied and single matches.

  `mergePlayers`(other_players, clogger=None)

    Merge multiple players into a single one.

    Parameters

      other_players -- a sequence of players ids or guids, or tuples like `(guid, lastname, firstname, nickname)`

    Return type

      a list of replaced players descriptions

    This will replace the specified players with this one wherever they participated to a game, either in singles or team events.

    This is obviously possible only when the specified players didn't play together in any tourney.

    The old names are stored in the table `merged_players` with a reference to the current player (that is, self), so that they can be correctly resolved in the future.

  `merged`

    A possibly empty list of `MergedPlayer` that has been merged into this one.

  `nationality`

    ISO country code to compute national rankings.

  `nickname`

    Player's nickname.

  `opponentMatches`(opponent)

    Return the list of `matches` against the opponent.

  `opponents`()

    Return a summary of the opponents this player met, in singles.

  `owner`

    The `owner` of this record, admin when `None`.

  `participations`()

    Return the list of `competitors` involving this player.

  `portrait`

    Picture of the player, used by lit.

    This is just the filename, referencing a picture inside the `sol.portraits_dir` directory.

  `serialize`(serializer)

    Reduce a single player to a simple dictionary.

    Parameters

      serializer -- a `Serializer` instance

    Return type

      dict

    Returns

      a plain dictionary containing a flatified view of this player

  `sex`

    Player's gender: `F` means female, `M` means male.

  `shouldOmitNickName`(_non_word_letters=re.compile('\\W'))

    Determine if the nickname should be omitted because redundant.