Skip to content

Documentation for the pyflix.datasource module

This module is designed to provide some resources during the activities. This page provides documentation for the various functions. Not all functions are mentioned in the activities, but they can help you obtain alternative data to verify that your resulting code is working correctly.


Ce module est une source de données pour les différents exercices.

get_movies()

Fonction perméttant d'obtenir une liste de médias.

Returns:

Type Description
list[tuple[str, int, bool]]

Une liste de médias au format tuple(titre, durée, vu)

Source code in src/pyflix/datasource.py
55
56
57
58
59
60
61
62
63
64
65
66
67
68
def get_movies() -> list[tuple[str, int, bool]]:
    """
    Fonction perméttant d'obtenir une liste de médias.

    :return: Une liste de médias au format `tuple(titre, durée, vu)`
    """
    return [("The Philosopher's Stone", 152, True),
            ("The Chamber of Secrets", 161, True),
            ("The Prisoner of Azkaban", 142, False),
            ("the Goblet of Fire", 157, True),
            ("the Order of the Phoenix", 138, False),
            ("the Half-Blood Prince", 153, True),
            ("the Deathly Hallows – Part 1", 126, False),
            ("the Deathly Hallows – Part 2", 130, False)]

get_season(show_name=None, user=None)

Fonction permettant d'accéder à la saison d'une série. Sans paramètre (ou avec None), retourne la liste des titres de la saison. Avec, retourne une liste d'épisodes sous forme de dictionnaires.

Le nombre d'épisodes vus/non vus est aléatoire. Lors de la génération de la liste, chaque épisode a 80 % de chances d'être vu. Dès qu'un épisode n'a pas été vu, les suivants sont tous non-vus. Un épisode non vu a 60 % de chances de ne pas avoir la clef viewed.

Parameters:

Name Type Description Default
show_name str

le nom d'une série, si omis, il s'agira de Big Bang Theory

None
user str

un identifiant d'utilisateur.

None

Returns:

Type Description
list[dict]

Si un identifant est donné, une liste d'épisodes où un épisode est représenté par un dictionnaire contenant les clefs title, duration et viewed. Si l'épisode n'a pas été vu, cette dernière peut être absente.

Source code in src/pyflix/datasource.py
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
def get_season(show_name: str = None, user: str = None) -> list[dict]:
    """
    Fonction permettant d'accéder à la saison d'une série. Sans paramètre (ou avec `None`),
    retourne la liste des titres de la saison. Avec, retourne une liste d'épisodes sous forme
    de dictionnaires.

    Le nombre d'épisodes vus/non vus est aléatoire. Lors de la génération de la liste, chaque
    épisode a 80 % de chances d'être vu. Dès qu'un épisode n'a pas été vu, les suivants sont tous
    non-vus. Un épisode non vu a 60 % de chances de ne pas avoir la clef `viewed`.

    :param show_name: le nom d'une série, si omis, il s'agira de Big Bang Theory
    :param user: un identifiant d'utilisateur.
    :return: Si un identifant est donné, une liste d'épisodes où un épisode est représenté par un
    dictionnaire contenant les clefs `title`, `duration` et `viewed`. Si l'épisode n'a pas été vu,
    cette dernière peut être absente.
    """
    file_path = Path(__file__).resolve().parent / "assets" / "tv_shows.csv"

    with open(file_path, encoding="utf-8") as bbt_file:
        bbt_file.readline()

        if user is None:
            episodes = [_process_line(line)[1]
                        for line in bbt_file
                        if _is_show(line, show_name)]
        else:
            episodes = [_to_dict(*_process_line(line))
                        for line in bbt_file
                        if _is_show(line, show_name)]
            _randomize_viewed(episodes)

    return episodes

get_shows_names()

Permet de récupérer la liste des séries connues qui pourront être utilisé avec la fonction get_season().

Returns:

Type Description
list[str]

Liste des titres de séries.

Source code in src/pyflix/datasource.py
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def get_shows_names() -> list[str]:
    """
    Permet de récupérer la liste des séries connues qui pourront être utilisé avec la
    fonction `get_season()`.

    :return: Liste des titres de séries.
    """
    file_path = Path(__file__).resolve().parent / "assets" / "tv_shows.csv"

    with open(file_path, encoding="utf-8") as bbt_file:
        bbt_file.readline()

        shows = [_process_line(line)[0]
                 for line in bbt_file]

    shows = sorted(list(set(shows)))

    return shows

get_start_time()

Fonction simulant la collecte de la donnée de temps à partir d'une source de données. L'heure retournée est comprise entre '19h00' et '21h38'.

Returns:

Type Description
str

Une heure au format "mmhss" ('%Mh%S' pour les connaisseurs).

Source code in src/pyflix/datasource.py
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
def get_start_time() -> str:
    """
    Fonction simulant la collecte de la donnée de temps à partir d'une source de données.
    L'heure retournée est comprise entre '19h00' et '21h38'.

    :return: Une heure au format `"mmhss"` (`'%Mh%S'` pour les connaisseurs).
    """
    start_hour = random.randint(19, 21)
    start_minutes = random.randint(0, 59 if start_hour < 21 else 38)

    value = f"{start_hour:02}h{start_minutes:02}"

    return value

load_show(name=None)

Load show(s) episodes from the datasource.

You can iterate through the shows which will be tuples (show name, episode title, season number, episode number, duration, year).

The episodes order is not guaranteed.

Parameters:

Name Type Description Default
name str | None

Name of a show. If provided, the episodes will be filtered on this show's name.

None

Returns:

Type Description
Iterator[tuple[str, ...]]

a generator object.

Source code in src/pyflix/datasource.py
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
def load_show(name:str|None=None) -> Iterator[tuple[str, ...]]:
    """
    Load show(s) episodes from the datasource.

    You can iterate through the shows which will be tuples (show name, episode title, season
    number, episode number, duration, year).

    The episodes order is not guaranteed.

    :param name: Name of a show. If provided, the episodes will be filtered on this show's name.
    :return: a generator object.
    """
    file_path = Path(__file__).resolve().parent / "assets" / "tv_shows.csv"
    if name is None:
        yield from file_helpers.load_from_csv(file_path)
    else:
        for episode in file_helpers.load_from_csv(file_path):
            if episode[0] == name:
                yield episode