Skip to content

Documentation for the pyflix.loaders package

The pyflix.loaders package contains a file_helpers module that allows you to load episode information from a CSV file or video file names.

Details of the load_from_csv function

The load_from_csv function loads data from a csv file. The separator must be a semicolon (;) and the file must have the following header:

"tvshow" "season" "ep_number" "ep_title" "duration" "year"

Details of the load_from_filenames function

The load_from_filenames function extracts information from the video file name. The file name must have the following structure: series_name-sXXeYY-episode_title.ext.

  • series_name is a string containing the name of the series. The _ will be replaced by spaces.
  • XX is an integer representing the season number with 2 digits. Season 1 will be 01.
  • YY is an integer representing the episode number with 2 digits. Episode 1 will be 01.
  • episode_title is a string containing the episode title. The _ will be replaced by spaces.

load_from_csv(file_path)

Générateur qui fournit les informations média série à partir d'un fichier csv

Parameters:

Name Type Description Default
file_path Path | str

Chemin vers un fichier csv correctement formaté

required
Source code in src/pyflix/loaders/file_helpers.py
28
29
30
31
32
33
34
35
36
37
38
39
40
41
def load_from_csv(file_path:Path|str):
    """
    Générateur qui fournit les informations média série à partir d'un fichier csv

    :param file_path: Chemin vers un fichier csv correctement formaté
    """
    with open(file_path, encoding="utf-8") as csv_file:
        header = tuple(csv_file.readline().strip().split(";"))
        if header != ("tvshow", "season", "ep_number", "ep_title", "duration", "year"):
            raise ValueError("Unexpected CSV structure")

        for episode in csv_file:
            show, season, number, title, duration, year = episode.strip().split(";")
            yield show, title, season, number, duration, year

load_from_filenames(dir_path)

Générateur qui fournit les informations média série à partir du nom des fichiers du répertoire.

Cette fonction se base sur les regex pour extraire les informations à partir d'un nom de fichier. Voir la documentation pour les détails sur la regax.

Parameters:

Name Type Description Default
dir_path Path | str

Chemin vers un répertoire de fichiers média correctement formatés

required
Source code in src/pyflix/loaders/file_helpers.py
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def load_from_filenames(dir_path:Path|str):
    """
    Générateur qui fournit les informations média série à partir du nom des fichiers du répertoire.

    Cette fonction se base sur les regex pour extraire les informations à partir d'un nom de
    fichier. Voir la documentation pour les détails sur la regax.

    :param dir_path: Chemin vers un répertoire de fichiers média correctement formatés
    """
    pattern = "-s(?P<season>[0-9]{2})e(?P<episode>[0-9]{2})-"
    p = Path(dir_path)
    for media_file in p.iterdir():
        episode_name = media_file.stem
        result = re.search(pattern, episode_name)

        if result:
            yield (episode_name[:result.start()].replace("_", " "),
                   episode_name[result.end():].replace("_", " "),
                   result.group("season"),
                   result.group("episode"),
                   )

load_from_sources(sources)

Générateur qui fournit les informations média série à partir d'une liste de sources.

Parameters:

Name Type Description Default
sources list[Path | str]

Liste chemins soit vers des fichiers csv soit vers des répertoires.

required
Source code in src/pyflix/loaders/file_helpers.py
44
45
46
47
48
49
50
51
52
53
54
55
56
def load_from_sources(sources:list[Path|str]):
    """
    Générateur qui fournit les informations média série à partir d'une liste de sources.

    :param sources: Liste chemins soit vers des fichiers csv soit vers des répertoires.
    """
    for source in sources:
        source = Path(source)

        if source.is_file():
            yield from load_from_csv(source)
        elif source.is_dir():
            yield from load_from_filenames(source)