Aller au contenu

player_views.py

DeletePlayerMenu

View for player deletion

Attributes:

Name Type Description
selected_player Player

Player selected by user for deletion.

__init__(self, player_id=None) special

Constructor for DeletePlayerMenu.

Parameters:

Name Type Description Default
player_id int

Optional player id to be loaded. Defaults to None.

None
Source code in views/player_views.py
def __init__(self, player_id: int = None):
    """Constructor for DeletePlayerMenu.

    Args:
        player_id (int, optional): Optional player id to be loaded. Defaults to None.
    """

    _HELPER.print_title("suppression d'un joueur")

    self.cli_argument_handler(player_id=player_id)

    if self.selected_player is None:
        _HELPER.print_error("aucun joueur créé.")
        _HELPER.go_back(current_view=self.__class__.__name__)
        return

    self.confirm_selection()

    _HELPER.go_back(current_view=self.__class__.__name__)

cli_argument_handler(self, player_id)

Handles eventual player id passed at instantiation.

Parameters:

Name Type Description Default
player_id str

Optional player id to be loaded.

required
Source code in views/player_views.py
def cli_argument_handler(self, player_id: str):
    """Handles eventual player id passed at instantiation.

    Args:
        player_id (str): Optional player id to be loaded.
    """

    player_exists = DatabaseHandler().helper.is_player_id_in_database(player_id=player_id)

    if player_id is not None and not player_exists:
        _HELPER.print_error(f"le joueur n°{player_id} n'est pas disponible.")

    if player_id is not None and player_exists:
        self.selected_player = DatabaseHandler().helper.get_player_object_from_id_str(player_id=str(player_id))
    else:
        self.selected_player = _HELPER.select_player()

confirm_selection(self)

Prompts the user to confirm user deletion.

Source code in views/player_views.py
def confirm_selection(self):
    """Prompts the user to confirm user deletion."""

    _HELPER.print_warning(
        "vous allez supprimer définitivement '{first_name} {last_name}'".format(
            first_name=self.selected_player.first_name, last_name=self.selected_player.last_name
        )
    )

    confirm = typer.confirm("Confirmer la suppression ?")

    if confirm:
        self.delete_player()
    else:
        _HELPER.print_success("l'utilisateur n'a pas été supprimé.")

delete_player(self)

Uses database handler to delete player.

Source code in views/player_views.py
def delete_player(self):
    """Uses database handler to delete player."""

    DatabaseHandler().delete_player(player=self.selected_player)

EditPlayerMenu

View for player editing.

Attributes:

Name Type Description
selected_player Player

Player selected by user for edit.

original_player_copy Player

Deep copy of initial Player state for modification check.

__init__(self, player_id=None) special

Constructor for EditPlayerMenu.

Parameters:

Name Type Description Default
player_id int

Optional player id to be loaded. Defaults to None.

None
Source code in views/player_views.py
def __init__(self, player_id: int = None):
    """Constructor for EditPlayerMenu.

    Args:
        player_id (int, optional): Optional player id to be loaded. Defaults to None.
    """

    _HELPER.print_title("modification d'un joueur")

    self.cli_argument_handler(player_id=player_id)

    if self.selected_player is None:
        _HELPER.print_error("aucun joueur créé.")
        _HELPER.go_back(current_view=self.__class__.__name__)
        return

    self.original_player_copy = deepcopy(self.selected_player)

    self.select_edit()

    if self.is_player_edited():
        self.confirm_settings()
        self.save_player()
    else:
        _HELPER.print_success("aucune modification effectuée.")

    _HELPER.go_back(current_view=self.__class__.__name__)

cli_argument_handler(self, player_id)

Handles eventual player id passed at instantiation.

Parameters:

Name Type Description Default
player_id str

Optional player id to be loaded.

required
Source code in views/player_views.py
def cli_argument_handler(self, player_id: str):
    """Handles eventual player id passed at instantiation.

    Args:
        player_id (str): Optional player id to be loaded.
    """

    player_exists = DatabaseHandler().helper.is_player_id_in_database(player_id=player_id)

    if player_id is not None and not player_exists:
        _HELPER.print_error(f"le joueur n°{player_id} n'est pas disponible.")

    if player_id is not None and player_exists:
        self.selected_player = DatabaseHandler().helper.get_player_object_from_id_str(player_id=str(player_id))
    else:
        self.selected_player = _HELPER.select_player()

confirm_settings(self)

Prompts the user to confirm the settings previously entered.

Exceptions:

Type Description
typer.Exit

Exits if the user cancels the creation.

Source code in views/player_views.py
def confirm_settings(self):
    """Prompts the user to confirm the settings previously entered.

    Raises:
        typer.Exit: Exits if the user cancels the creation.
    """

    self.list_settings()

    confirm = typer.confirm("\nSouhaitez vous confirmer la modification de ce joueur ?")
    if not confirm:
        _HELPER.print_error("annulation. Le joueur n'a pas été modifié.")
        raise typer.Exit

is_player_edited(self)

Compares selected player object and original player copy for difference.

Returns:

Type Description
bool

The Player attributes were modified.

Source code in views/player_views.py
def is_player_edited(self):
    """Compares selected player object and original player copy for difference.

    Returns:
        bool: The Player attributes were modified.
    """

    if self.selected_player.first_name != self.original_player_copy.first_name:
        return True
    elif self.selected_player.last_name != self.original_player_copy.last_name:
        return True
    elif self.selected_player.dob != self.original_player_copy.dob:
        return True
    elif self.selected_player.gender != self.original_player_copy.gender:
        return True
    elif int(self.selected_player.elo) != self.original_player_copy.elo:
        return True
    else:
        return False

list_settings(self)

Displays all previously entered player settings.

Source code in views/player_views.py
def list_settings(self):
    """Displays all previously entered player settings."""

    _HELPER.print_info("nouvelles informations du joueur:")

    parameter = typer.style("Prénom: ", bold=True)
    typer.echo(parameter + self.selected_player.first_name)
    parameter = typer.style("Nom de famille: ", bold=True)
    typer.echo(parameter + self.selected_player.last_name)
    parameter = typer.style("Date de naissance: ", bold=True)
    typer.echo(parameter + self.selected_player.dob)
    parameter = typer.style("Genre: ", bold=True)
    typer.echo(parameter + self.selected_player.gender)
    parameter = typer.style("ELO: ", bold=True)
    typer.echo(parameter + str(self.selected_player.elo))

save_player(self)

Uses database handler to save edited player.

Source code in views/player_views.py
def save_player(self):
    """Uses database handler to save edited player."""

    DatabaseHandler().create_player(
        first_name=self.selected_player.first_name,
        last_name=self.selected_player.last_name,
        dob=self.selected_player.dob,
        gender=self.selected_player.gender,
        elo=self.selected_player.elo,
        id_num=self.selected_player.id_num,
    )

    _HELPER.print_success(f"le joueur n°{str(self.selected_player.id_num)} a été modifié.")

select_edit(self)

Enumerates all player's settings and asks for edit.

Source code in views/player_views.py
def select_edit(self):
    """Enumerates all player's settings and asks for edit."""

    _HELPER.print_info("informations actuelles du joueur:")

    self.selected_player.first_name = _HELPER.edit_prompt(
        field_title="Prénom", value=self.selected_player.first_name
    )
    self.selected_player.last_name = _HELPER.edit_prompt(
        field_title="Nom de famille", value=self.selected_player.last_name
    )
    self.selected_player.dob = _HELPER.edit_prompt(field_title="Date de naissance", value=self.selected_player.dob)
    self.selected_player.gender = _HELPER.edit_prompt(field_title="Genre", value=self.selected_player.gender)
    self.selected_player.elo = _HELPER.edit_prompt(field_title="ELO", value=str(self.selected_player.elo))

NewPlayerMenu

View for new player creation.

Attributes:

Name Type Description
first_name str

Players's first name.

last_name str

Player's last name.

dob str

Player's date of birth.

gender str

Player's gender.

elo str

Player's ELO ranking.

__init__(self) special

Constructor for NewPlayerMenu.

Source code in views/player_views.py
def __init__(self):
    """Constructor for NewPlayerMenu."""

    _HELPER.print_title("création d'un joueur")

    self.first_name = ""
    self.last_name = ""
    self.dob = ""
    self.gender = ""
    self.elo = ""

    self.settings_prompt()
    self.confirm_settings()
    self.save_player()

    _HELPER.go_back(current_view=self.__class__.__name__)

confirm_settings(self)

Prompts the user to confirm the settings previously entered.

Exceptions:

Type Description
typer.Exit

Exits if the user cancels the creation.

Source code in views/player_views.py
def confirm_settings(self):
    """Prompts the user to confirm the settings previously entered.

    Raises:
        typer.Exit: Exits if the user cancels the creation.
    """

    self.list_settings()

    confirm = typer.confirm("\nSouhaitez vous confirmer la création de ce joueur ?")
    if not confirm:
        _HELPER.print_error("annulation. Le joueur n'a pas été créé.")
        raise typer.Exit

list_settings(self)

Displays all previously entered player settings.

Source code in views/player_views.py
def list_settings(self):
    """Displays all previously entered player settings."""

    _HELPER.print_info("informations du joueur:")

    parameter = typer.style("Prénom: ", bold=True)
    typer.echo(parameter + self.first_name)
    parameter = typer.style("Nom de famille: ", bold=True)
    typer.echo(parameter + self.last_name)
    parameter = typer.style("Date de naissance: ", bold=True)
    typer.echo(parameter + self.dob)
    parameter = typer.style("Genre: ", bold=True)
    typer.echo(parameter + self.gender)
    parameter = typer.style("ELO: ", bold=True)
    typer.echo(parameter + str(self.elo))

save_player(self)

Uses database handler to save created player.

Source code in views/player_views.py
def save_player(self):
    """Uses database handler to save created player."""

    created_player_id = DatabaseHandler().create_player(
        first_name=self.first_name,
        last_name=self.last_name,
        dob=self.dob,
        gender=self.gender,
        elo=int(self.elo),
    )

    _HELPER.print_success(f"le joueur a été créé avec le numéro {created_player_id}.")

settings_prompt(self)

Prompts the user to input the different player settings.

Source code in views/player_views.py
def settings_prompt(self):
    """Prompts the user to input the different player settings."""

    _HELPER.print_info("entrez les informations du joueur")

    while len(self.first_name) == 0:
        self.first_name = typer.prompt("Prénom du joueur")

    while len(self.last_name) == 0:
        self.last_name = typer.prompt("Nom de famille du joueur")

    while not _HELPER.date_is_valid(date=self.dob):
        self.dob = typer.prompt("Date de naissance (JJ/MM/AAAA)")

    while not _HELPER.gender_is_valid(gender=self.gender):
        self.gender = typer.prompt("Genre (H/F)")

    while not self.elo.isnumeric():
        self.elo = typer.prompt("ELO")

PlayerMenu

View for player related operations.

__init__(self) special

Constructor for PlayerMenu.

Source code in views/player_views.py
def __init__(self):
    """Constructor for PlayerMenu."""

    _HELPER.print_title("menu des joueurs")

    self.print_menu()
    self.user_selection()

print_menu(self)

Displays the different menu options.

Source code in views/player_views.py
def print_menu(self):
    """Displays the different menu options."""

    number = typer.style("1. ", bold=True)
    typer.echo(number + "Créer un nouveau joueur")

    number = typer.style("2. ", bold=True)
    typer.echo(number + "Modifier un joueur")

    number = typer.style("3. ", bold=True)
    typer.echo(number + "Supprimer un joueur")

    number = typer.style("4. ", bold=True)
    typer.echo(number + "Afficher tous les joueurs")

    number = typer.style("\n0. ", bold=True)
    typer.echo(number + "Retour")

user_selection(self)

Prompts the user to select an option.

Source code in views/player_views.py
def user_selection(self):
    """Prompts the user to select an option."""

    selection = typer.prompt("\nEntrez votre sélection: ")

    if selection == "0":
        _HELPER.go_back(current_view=self.__class__.__name__)
    elif selection == "1":
        typer.echo("\n\n")
        NewPlayerMenu()
    elif selection == "2":
        typer.echo("\n\n")
        EditPlayerMenu()
    elif selection == "3":
        typer.echo("\n\n")
        DeletePlayerMenu()
    elif selection == "4":
        typer.echo("\n\n")
        _HELPER.list_all_players()
        typer.echo("\n")
        self.user_selection()
    else:
        self.user_selection()