Saltar a contenido

Files Module

Files

Files utility class.

Source code in devices\raspberry_pi_5\src\files\__init__.py
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
class Files:
    """
    Files utility class.
    """

    @staticmethod
    def move_file(
        input_path: str | os.PathLike[str],
        output_dir: str | os.PathLike[str]
    ) -> None:
        """
        Move file between folders.

        Args:
            input_path (str | os.PathLike[str]): The path of the file to be moved.
            output_dir (str | os.PathLike[str]): The directory where the file should be moved.
        """
        if os.path.exists(input_path):
            shutil.move(input_path, output_dir)

    @staticmethod
    def move_folder(
        input_dir: str | os.PathLike[str],
        output_dir: str | os.PathLike[str]
    ) -> None:
        """
        Move folder between folders.

        Args:
            input_dir (str | os.PathLike[str]): The path of the folder to be moved.
            output_dir (str | os.PathLike[str]): The directory where the folder should be moved.
        """
        if os.path.exists(input_dir):
            shutil.move(input_dir, output_dir)

    @classmethod
    def move_folder_content(
        cls,
        input_dir: str | os.PathLike[str],
        output_dir: str | os.PathLike[str]
    ) -> None:
        """
        Move folder content to another folder.

        Args:
            input_dir (str | os.PathLike[str]): The path of the folder whose content will be moved.
            output_dir (str | os.PathLike[str]): The directory where the content should be moved.
        """
        if os.path.exists(input_dir):
            # Check if the output directory exists, if not create it
            cls.ensure_directory_exists(output_dir)

            # Get all files and folders in the input directory
            for item in os.listdir(input_dir):
                item_input_path = os.path.join(input_dir, item)
                item_output_path = os.path.join(output_dir, item)

                # Check if it's a file and the item already exists in the output directory
                if not os.path.isdir(item_input_path) and os.path.exists(
                        item_output_path
                ):
                    # Delete the item if it already exists in the output directory
                    os.remove(item_output_path)

                # Move each item to the output directory
                shutil.move(item_input_path, output_dir)

    @staticmethod
    def copy_file(
        input_path: str | os.PathLike[str],
        output_path: str | os.PathLike[str]
    ) -> None:
        """
        Copy a file from input path to output path.

        Args:
            input_path (str | os.PathLike[str]): The path of the file to be copied.
            output_path (str | os.PathLike[str]): The path where the file should be copied.
        """
        if os.path.exists(input_path):
            shutil.copy(input_path, output_path)

    @staticmethod
    def ensure_directory_exists(path: str | os.PathLike[str]) -> None:
        """
        Ensure the directory exists, if not create it.

        Args:
            path (str | os.PathLike[str]): The path to check and create if it doesn't exist.
        """
        # Check if it contains an extension
        output_dir = os.path.dirname(path) if os.path.splitext(path)[
            1] else path

        # Ensure the output directory exists
        os.makedirs(output_dir, exist_ok=True)

    @staticmethod
    def ensure_file_exists(file_path: str | os.PathLike[str]) -> None:
        """
        Ensure the file exists, if not create it.

        Args:
            file_path (str | os.PathLike[str]): The path of the file to check and create if it doesn't exist.
        """
        # Ensure the directory exists
        Files.ensure_directory_exists(os.path.dirname(file_path))

        # Create the file if it does not exist
        if not os.path.exists(file_path):
            with open(file_path, 'w'):
                pass

    @staticmethod
    def check_path_exists(path: str | os.PathLike[str]) -> bool:
        """
        Check if the path exists.

        Args:
            path (str | os.PathLike[str]): The path to check.
        Returns:
            bool: True if the path exists, False otherwise.
        """
        return os.path.exists(path)

    @classmethod
    def get_log_file_path(cls) -> str | os.PathLike[str]:
        """
        Get the log file path.

        Returns:
            str | os.PathLike[str]: The path to the log file with the current timestamp.
        """
        # Get the current time formatted as a string
        formatted_time = dt.now().strftime('%Y-%m-%d_%H-%M-%S')

        return os.path.join(LOGS_DIR, f'{formatted_time}.txt')

    @classmethod
    def get_yolo_version_dir_path(cls, yolo_version: str) -> str | os.PathLike:
        """
        Get the YOLO version folder path.

        Args:
            yolo_version (str): The version of the YOLO model.
        Returns:
            str | os.PathLike: The path to the YOLO version folder.
        """
        # Check the validity of the YOLO version
        Args.check_yolo_version(yolo_version)

        return os.path.join(YOLO_DIR, yolo_version)

    @classmethod
    def get_yolo_runs_dir_path(cls, yolo_version: str) -> str | os.PathLike:
        """
        Get the YOLO runs folder path.

        Args:
            yolo_version (str): The version of the YOLO model.
        Returns:
            str | os.PathLike: The path to the YOLO runs folder.
        """
        # Get the YOLO version folder path
        yolo_version_dir = cls.get_yolo_version_dir_path(yolo_version)

        return os.path.join(yolo_version_dir, RUNS)

    @classmethod
    def get_model_runs_dir_path(
        cls,
        model_name: str,
        yolo_version: str
    ) -> str | os.PathLike:
        """
        Get the model runs path.

        Args:
            model_name (str): Name of the YOLO model.
            yolo_version (str): Version of the YOLO model.
        Returns:
            str | os.PathLike: The path to the model runs folder.
        """
        # Get the YOLO runs folder path
        yolo_runs_dir = cls.get_yolo_runs_dir_path(yolo_version)

        # Check the validity of the model name
        Args.check_model_name(model_name)

        return os.path.join(yolo_runs_dir, model_name)

    @classmethod
    def get_model_weight_dir_path(
        cls,
        model_name: str,
        yolo_version: str
    ) -> str | os.PathLike:
        """
        Get the model weights path.

        Args:
            model_name (str): Name of the YOLO model.
            yolo_version (str): Version of the YOLO model.
        Returns:
            str | os.PathLike: The path to the model weights folder.
        """
        # Get the model runs path
        model_runs_path = cls.get_model_runs_dir_path(model_name, yolo_version)

        return os.path.join(model_runs_path, WEIGHTS)

    @classmethod
    def get_model_hailo_suite_dir_path(
        cls,
        model_name: str,
        yolo_version: str
    ) -> str | os.PathLike[str]:
        """
        Get the model Hailo Suite path.

        Args:
            model_name (str): Name of the YOLO model.
            yolo_version (str): Version of the YOLO model.
        Returns:
            str | os.PathLike[str]: The path to the model Hailo Suite folder.
        """
        # Check the validity of the model name
        Args.check_model_name(model_name)

        # Check the validity of the YOLO version
        Args.check_yolo_version(yolo_version)

        return os.path.join(HAILO_SUITE_DIR, yolo_version, model_name)

    @classmethod
    def get_model_hailo_suite_file_path(
        cls,
        model_name: str,
        yolo_version: str,
        filename: str
    ) -> str | os.PathLike[str]:
        """
        Get the model Hailo Suite file path.

        Args:
            model_name (str): Name of the YOLO model.
            yolo_version (str): Version of the YOLO model.
            filename (str): Name of the file to retrieve.
        Returns:
            str | os.PathLike[str]: The path to the specified file in the model Hailo Suite folder.
        """
        # Get the model Hailo Suite path
        model_hailo_suite_dir = cls.get_model_hailo_suite_dir_path(
            model_name,
            yolo_version
        )

        return os.path.join(model_hailo_suite_dir, filename)

    @classmethod
    def get_model_hailo_suite_parsed_har_file_name(
        cls,
        model_name: str
    ) -> str | os.PathLike[str]:
        """
        Get the Hailo Suite parsed filename.

        Args:
            model_name (str): Name of the YOLO model.
        Returns:
            str | os.PathLike[str]: The name of the Hailo Suite parsed file.
        """
        return f'{model_name}_parsed.har'

    @classmethod
    def get_model_hailo_suite_optimized_har_file_name(
        cls,
        model_name: str
    ) -> str | os.PathLike[str]:
        """
        Get the Hailo Suite optimized filename.

        Args:
            model_name (str): Name of the YOLO model.
        Returns:
            str | os.PathLike[str]: The name of the Hailo Suite optimized file.
        """
        return f'{model_name}_optimized.har'

    @classmethod
    def get_model_hailo_suite_compiled_hef_file_name(
        cls,
        model_name: str
    ) -> str | os.PathLike[str]:
        """
        Get the Hailo Suite compiled filename.

        Args:
            model_name (str): Name of the YOLO model.
        Returns:
            str | os.PathLike[str]: The name of the Hailo Suite compiled file.
        """
        return f'{model_name}_compiled.hef'

    @classmethod
    def get_model_hailo_suite_parsed_har_file_path(
        cls,
        model_name: str,
        yolo_version: str
    ) -> str | os.PathLike[str]:
        """
        Get the model Hailo Suite parsed file path.

        Args:
            model_name (str): Name of the YOLO model.
            yolo_version (str): Version of the YOLO model.
        Returns:
            str | os.PathLike[str]: The path to the model Hailo Suite parsed file.
        """
        # Get the model Hailo Suite path
        model_hailo_suite_dir = cls.get_model_hailo_suite_dir_path(
            model_name,
            yolo_version
        )

        # Get the Hailo Suite parsed filename
        model_hailo_suite_parsed_har_file_name = cls.get_model_hailo_suite_parsed_har_file_name(
            model_name
        )

        return os.path.join(
            model_hailo_suite_dir,
            model_hailo_suite_parsed_har_file_name
        )

    @classmethod
    def get_model_hailo_suite_optimized_har_file_path(
        cls,
        model_name: str,
        yolo_version: str
    ) -> str | os.PathLike[str]:
        """
        Get the model Hailo Suite optimized file path.

        Args:
            model_name (str): Name of the YOLO model.
            yolo_version (str): Version of the YOLO model.
        Returns:
            str | os.PathLike[str]: The path to the model Hailo Suite optimized file.
        """
        # Get the model Hailo Suite path
        model_hailo_suite_dir = cls.get_model_hailo_suite_dir_path(
            model_name,
            yolo_version
        )

        # Get the Hailo Suite optimized filename
        model_hailo_suite_optimized_har_file_name = cls.get_model_hailo_suite_optimized_har_file_name(
            model_name
        )

        return os.path.join(
            model_hailo_suite_dir,
            model_hailo_suite_optimized_har_file_name
        )

    @classmethod
    def get_model_hailo_suite_compiled_hef_file_path(
        cls,
        model_name: str,
        yolo_version: str
    ) -> str | os.PathLike[str]:
        """
        Get the model Hailo Suite compiled file path.

        Args:
            model_name (str): Name of the YOLO model.
            yolo_version (str): Version of the YOLO model.
        Returns:
            str | os.PathLike[str]: The path to the model Hailo Suite compiled file.
        """
        # Get the model Hailo Suite path
        model_hailo_suite_dir = cls.get_model_hailo_suite_dir_path(
            model_name,
            yolo_version
        )

        # Get the Hailo Suite compiled filename
        model_hailo_suite_compiled_hef_file_name = cls.get_model_hailo_suite_compiled_hef_file_name(
            model_name
        )

        return os.path.join(
            model_hailo_suite_dir,
            model_hailo_suite_compiled_hef_file_name
        )

    @classmethod
    def get_model_weights_parsed_har_file_path(
        cls,
        model_name: str,
        yolo_version: str
    ) -> str | os.PathLike[str]:
        """
        Get the model weights parsed file path.

        Args:
            model_name (str): Name of the YOLO model.
            yolo_version (str): Version of the YOLO model.
        Returns:
            str | os.PathLike[str]: The path to the model weights parsed file.
        """
        # Get the model weights directory path
        model_weights_dir = cls.get_model_weight_dir_path(
            model_name,
            yolo_version
        )

        return os.path.join(model_weights_dir, 'parsed.har')

    @classmethod
    def get_model_weights_optimized_har_file_path(
        cls,
        model_name: str,
        yolo_version: str
    ) -> str | os.PathLike[str]:
        """
        Get the model weights optimized file path.

        Args:
            model_name (str): Name of the YOLO model.
            yolo_version (str): Version of the YOLO model.
        Returns:
            str | os.PathLike[str]: The path to the model weights optimized file.
        """
        # Get the model weights directory path
        model_weights_dir = cls.get_model_weight_dir_path(
            model_name,
            yolo_version
        )

        return os.path.join(model_weights_dir, 'optimized.har')

    @classmethod
    def get_model_weights_compiled_hef_file_path(
        cls,
        model_name: str,
        yolo_version: str
    ) -> str | os.PathLike[str]:
        """
        Get the model weights compiled file path.

        Args:
            model_name (str): Name of the YOLO model.
            yolo_version (str): Version of the YOLO model.
        Returns:
            str | os.PathLike[str]: The path to the model weights compiled file.
        """
        # Get the model weights directory path
        model_weights_dir = cls.get_model_weight_dir_path(
            model_name,
            yolo_version
        )

        return os.path.join(model_weights_dir, 'compiled.hef')

    @classmethod
    def get_hailo_suite_calib_file_path(cls) -> str | os.PathLike[str]:
        """
        Get the Hailo Suite calibration set file path.

        Returns:
            str | os.PathLike[str]: The path to the Hailo Suite calibration set file.
        """
        return os.path.join(HAILO_CALIB_DIR, HAILO_CALIB + '.npy')

    @classmethod
    def get_hailo_labels_file_path(cls, model_name: str) -> str | os.PathLike[
        str]:
        """
        Get the Hailo labels file path.

        Args:
            model_name (str): Name of the YOLO model.
        Returns:
            str | os.PathLike[str]: The path to the Hailo labels file.
        """
        # Check the validity of the model name
        Args.check_model_name(model_name)

        return os.path.join(HAILO_LABELS_DIR, model_name + '.txt')

    @staticmethod
    def get_labels_from_txt(labels_path: str | os.PathLike[str]) -> List:
        """
        Load labels from a text file.

        Args:
            labels_path (str | os.PathLike[str]): Path to the labels file.
        Returns:
            List: List of class names.
        Raises:
            ValueError: If the labels file does not exist or is not a text file.
        """
        # Ensure the labels file exists
        Files.ensure_directory_exists(labels_path)

        # Check if it's a text file
        if not labels_path.endswith('.txt'):
            raise ValueError(
                f"Expected a .txt file, but got '{labels_path}' instead"
            )

        # Read the labels from the file
        with open(labels_path, 'r', encoding="utf-8") as f:
            class_names = f.read().splitlines()
        return class_names

check_path_exists(path) staticmethod

Check if the path exists.

Parameters:

Name Type Description Default
path str | PathLike[str]

The path to check.

required

Returns:
bool: True if the path exists, False otherwise.

Source code in devices\raspberry_pi_5\src\files\__init__.py
132
133
134
135
136
137
138
139
140
141
142
@staticmethod
def check_path_exists(path: str | os.PathLike[str]) -> bool:
    """
    Check if the path exists.

    Args:
        path (str | os.PathLike[str]): The path to check.
    Returns:
        bool: True if the path exists, False otherwise.
    """
    return os.path.exists(path)

copy_file(input_path, output_path) staticmethod

Copy a file from input path to output path.

Parameters:

Name Type Description Default
input_path str | PathLike[str]

The path of the file to be copied.

required
output_path str | PathLike[str]

The path where the file should be copied.

required
Source code in devices\raspberry_pi_5\src\files\__init__.py
86
87
88
89
90
91
92
93
94
95
96
97
98
99
@staticmethod
def copy_file(
    input_path: str | os.PathLike[str],
    output_path: str | os.PathLike[str]
) -> None:
    """
    Copy a file from input path to output path.

    Args:
        input_path (str | os.PathLike[str]): The path of the file to be copied.
        output_path (str | os.PathLike[str]): The path where the file should be copied.
    """
    if os.path.exists(input_path):
        shutil.copy(input_path, output_path)

ensure_directory_exists(path) staticmethod

Ensure the directory exists, if not create it.

Parameters:

Name Type Description Default
path str | PathLike[str]

The path to check and create if it doesn't exist.

required
Source code in devices\raspberry_pi_5\src\files\__init__.py
101
102
103
104
105
106
107
108
109
110
111
112
113
114
@staticmethod
def ensure_directory_exists(path: str | os.PathLike[str]) -> None:
    """
    Ensure the directory exists, if not create it.

    Args:
        path (str | os.PathLike[str]): The path to check and create if it doesn't exist.
    """
    # Check if it contains an extension
    output_dir = os.path.dirname(path) if os.path.splitext(path)[
        1] else path

    # Ensure the output directory exists
    os.makedirs(output_dir, exist_ok=True)

ensure_file_exists(file_path) staticmethod

Ensure the file exists, if not create it.

Parameters:

Name Type Description Default
file_path str | PathLike[str]

The path of the file to check and create if it doesn't exist.

required
Source code in devices\raspberry_pi_5\src\files\__init__.py
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
@staticmethod
def ensure_file_exists(file_path: str | os.PathLike[str]) -> None:
    """
    Ensure the file exists, if not create it.

    Args:
        file_path (str | os.PathLike[str]): The path of the file to check and create if it doesn't exist.
    """
    # Ensure the directory exists
    Files.ensure_directory_exists(os.path.dirname(file_path))

    # Create the file if it does not exist
    if not os.path.exists(file_path):
        with open(file_path, 'w'):
            pass

get_hailo_labels_file_path(model_name) classmethod

Get the Hailo labels file path.

Parameters:

Name Type Description Default
model_name str

Name of the YOLO model.

required

Returns:
str | os.PathLike[str]: The path to the Hailo labels file.

Source code in devices\raspberry_pi_5\src\files\__init__.py
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
@classmethod
def get_hailo_labels_file_path(cls, model_name: str) -> str | os.PathLike[
    str]:
    """
    Get the Hailo labels file path.

    Args:
        model_name (str): Name of the YOLO model.
    Returns:
        str | os.PathLike[str]: The path to the Hailo labels file.
    """
    # Check the validity of the model name
    Args.check_model_name(model_name)

    return os.path.join(HAILO_LABELS_DIR, model_name + '.txt')

get_hailo_suite_calib_file_path() classmethod

Get the Hailo Suite calibration set file path.

Returns:

Type Description
str | PathLike[str]

str | os.PathLike[str]: The path to the Hailo Suite calibration set file.

Source code in devices\raspberry_pi_5\src\files\__init__.py
485
486
487
488
489
490
491
492
493
@classmethod
def get_hailo_suite_calib_file_path(cls) -> str | os.PathLike[str]:
    """
    Get the Hailo Suite calibration set file path.

    Returns:
        str | os.PathLike[str]: The path to the Hailo Suite calibration set file.
    """
    return os.path.join(HAILO_CALIB_DIR, HAILO_CALIB + '.npy')

get_labels_from_txt(labels_path) staticmethod

Load labels from a text file.

Parameters:

Name Type Description Default
labels_path str | PathLike[str]

Path to the labels file.

required

Returns:
List: List of class names.
Raises:
ValueError: If the labels file does not exist or is not a text file.

Source code in devices\raspberry_pi_5\src\files\__init__.py
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
@staticmethod
def get_labels_from_txt(labels_path: str | os.PathLike[str]) -> List:
    """
    Load labels from a text file.

    Args:
        labels_path (str | os.PathLike[str]): Path to the labels file.
    Returns:
        List: List of class names.
    Raises:
        ValueError: If the labels file does not exist or is not a text file.
    """
    # Ensure the labels file exists
    Files.ensure_directory_exists(labels_path)

    # Check if it's a text file
    if not labels_path.endswith('.txt'):
        raise ValueError(
            f"Expected a .txt file, but got '{labels_path}' instead"
        )

    # Read the labels from the file
    with open(labels_path, 'r', encoding="utf-8") as f:
        class_names = f.read().splitlines()
    return class_names

get_log_file_path() classmethod

Get the log file path.

Returns:

Type Description
str | PathLike[str]

str | os.PathLike[str]: The path to the log file with the current timestamp.

Source code in devices\raspberry_pi_5\src\files\__init__.py
144
145
146
147
148
149
150
151
152
153
154
155
@classmethod
def get_log_file_path(cls) -> str | os.PathLike[str]:
    """
    Get the log file path.

    Returns:
        str | os.PathLike[str]: The path to the log file with the current timestamp.
    """
    # Get the current time formatted as a string
    formatted_time = dt.now().strftime('%Y-%m-%d_%H-%M-%S')

    return os.path.join(LOGS_DIR, f'{formatted_time}.txt')

get_model_hailo_suite_compiled_hef_file_name(model_name) classmethod

Get the Hailo Suite compiled filename.

Parameters:

Name Type Description Default
model_name str

Name of the YOLO model.

required

Returns:
str | os.PathLike[str]: The name of the Hailo Suite compiled file.

Source code in devices\raspberry_pi_5\src\files\__init__.py
308
309
310
311
312
313
314
315
316
317
318
319
320
321
@classmethod
def get_model_hailo_suite_compiled_hef_file_name(
    cls,
    model_name: str
) -> str | os.PathLike[str]:
    """
    Get the Hailo Suite compiled filename.

    Args:
        model_name (str): Name of the YOLO model.
    Returns:
        str | os.PathLike[str]: The name of the Hailo Suite compiled file.
    """
    return f'{model_name}_compiled.hef'

get_model_hailo_suite_compiled_hef_file_path(model_name, yolo_version) classmethod

Get the model Hailo Suite compiled file path.

Parameters:

Name Type Description Default
model_name str

Name of the YOLO model.

required
yolo_version str

Version of the YOLO model.

required

Returns:
str | os.PathLike[str]: The path to the model Hailo Suite compiled file.

Source code in devices\raspberry_pi_5\src\files\__init__.py
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
@classmethod
def get_model_hailo_suite_compiled_hef_file_path(
    cls,
    model_name: str,
    yolo_version: str
) -> str | os.PathLike[str]:
    """
    Get the model Hailo Suite compiled file path.

    Args:
        model_name (str): Name of the YOLO model.
        yolo_version (str): Version of the YOLO model.
    Returns:
        str | os.PathLike[str]: The path to the model Hailo Suite compiled file.
    """
    # Get the model Hailo Suite path
    model_hailo_suite_dir = cls.get_model_hailo_suite_dir_path(
        model_name,
        yolo_version
    )

    # Get the Hailo Suite compiled filename
    model_hailo_suite_compiled_hef_file_name = cls.get_model_hailo_suite_compiled_hef_file_name(
        model_name
    )

    return os.path.join(
        model_hailo_suite_dir,
        model_hailo_suite_compiled_hef_file_name
    )

get_model_hailo_suite_dir_path(model_name, yolo_version) classmethod

Get the model Hailo Suite path.

Parameters:

Name Type Description Default
model_name str

Name of the YOLO model.

required
yolo_version str

Version of the YOLO model.

required

Returns:
str | os.PathLike[str]: The path to the model Hailo Suite folder.

Source code in devices\raspberry_pi_5\src\files\__init__.py
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
@classmethod
def get_model_hailo_suite_dir_path(
    cls,
    model_name: str,
    yolo_version: str
) -> str | os.PathLike[str]:
    """
    Get the model Hailo Suite path.

    Args:
        model_name (str): Name of the YOLO model.
        yolo_version (str): Version of the YOLO model.
    Returns:
        str | os.PathLike[str]: The path to the model Hailo Suite folder.
    """
    # Check the validity of the model name
    Args.check_model_name(model_name)

    # Check the validity of the YOLO version
    Args.check_yolo_version(yolo_version)

    return os.path.join(HAILO_SUITE_DIR, yolo_version, model_name)

get_model_hailo_suite_file_path(model_name, yolo_version, filename) classmethod

Get the model Hailo Suite file path.

Parameters:

Name Type Description Default
model_name str

Name of the YOLO model.

required
yolo_version str

Version of the YOLO model.

required
filename str

Name of the file to retrieve.

required

Returns:
str | os.PathLike[str]: The path to the specified file in the model Hailo Suite folder.

Source code in devices\raspberry_pi_5\src\files\__init__.py
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
@classmethod
def get_model_hailo_suite_file_path(
    cls,
    model_name: str,
    yolo_version: str,
    filename: str
) -> str | os.PathLike[str]:
    """
    Get the model Hailo Suite file path.

    Args:
        model_name (str): Name of the YOLO model.
        yolo_version (str): Version of the YOLO model.
        filename (str): Name of the file to retrieve.
    Returns:
        str | os.PathLike[str]: The path to the specified file in the model Hailo Suite folder.
    """
    # Get the model Hailo Suite path
    model_hailo_suite_dir = cls.get_model_hailo_suite_dir_path(
        model_name,
        yolo_version
    )

    return os.path.join(model_hailo_suite_dir, filename)

get_model_hailo_suite_optimized_har_file_name(model_name) classmethod

Get the Hailo Suite optimized filename.

Parameters:

Name Type Description Default
model_name str

Name of the YOLO model.

required

Returns:
str | os.PathLike[str]: The name of the Hailo Suite optimized file.

Source code in devices\raspberry_pi_5\src\files\__init__.py
293
294
295
296
297
298
299
300
301
302
303
304
305
306
@classmethod
def get_model_hailo_suite_optimized_har_file_name(
    cls,
    model_name: str
) -> str | os.PathLike[str]:
    """
    Get the Hailo Suite optimized filename.

    Args:
        model_name (str): Name of the YOLO model.
    Returns:
        str | os.PathLike[str]: The name of the Hailo Suite optimized file.
    """
    return f'{model_name}_optimized.har'

get_model_hailo_suite_optimized_har_file_path(model_name, yolo_version) classmethod

Get the model Hailo Suite optimized file path.

Parameters:

Name Type Description Default
model_name str

Name of the YOLO model.

required
yolo_version str

Version of the YOLO model.

required

Returns:
str | os.PathLike[str]: The path to the model Hailo Suite optimized file.

Source code in devices\raspberry_pi_5\src\files\__init__.py
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
@classmethod
def get_model_hailo_suite_optimized_har_file_path(
    cls,
    model_name: str,
    yolo_version: str
) -> str | os.PathLike[str]:
    """
    Get the model Hailo Suite optimized file path.

    Args:
        model_name (str): Name of the YOLO model.
        yolo_version (str): Version of the YOLO model.
    Returns:
        str | os.PathLike[str]: The path to the model Hailo Suite optimized file.
    """
    # Get the model Hailo Suite path
    model_hailo_suite_dir = cls.get_model_hailo_suite_dir_path(
        model_name,
        yolo_version
    )

    # Get the Hailo Suite optimized filename
    model_hailo_suite_optimized_har_file_name = cls.get_model_hailo_suite_optimized_har_file_name(
        model_name
    )

    return os.path.join(
        model_hailo_suite_dir,
        model_hailo_suite_optimized_har_file_name
    )

get_model_hailo_suite_parsed_har_file_name(model_name) classmethod

Get the Hailo Suite parsed filename.

Parameters:

Name Type Description Default
model_name str

Name of the YOLO model.

required

Returns:
str | os.PathLike[str]: The name of the Hailo Suite parsed file.

Source code in devices\raspberry_pi_5\src\files\__init__.py
278
279
280
281
282
283
284
285
286
287
288
289
290
291
@classmethod
def get_model_hailo_suite_parsed_har_file_name(
    cls,
    model_name: str
) -> str | os.PathLike[str]:
    """
    Get the Hailo Suite parsed filename.

    Args:
        model_name (str): Name of the YOLO model.
    Returns:
        str | os.PathLike[str]: The name of the Hailo Suite parsed file.
    """
    return f'{model_name}_parsed.har'

get_model_hailo_suite_parsed_har_file_path(model_name, yolo_version) classmethod

Get the model Hailo Suite parsed file path.

Parameters:

Name Type Description Default
model_name str

Name of the YOLO model.

required
yolo_version str

Version of the YOLO model.

required

Returns:
str | os.PathLike[str]: The path to the model Hailo Suite parsed file.

Source code in devices\raspberry_pi_5\src\files\__init__.py
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
@classmethod
def get_model_hailo_suite_parsed_har_file_path(
    cls,
    model_name: str,
    yolo_version: str
) -> str | os.PathLike[str]:
    """
    Get the model Hailo Suite parsed file path.

    Args:
        model_name (str): Name of the YOLO model.
        yolo_version (str): Version of the YOLO model.
    Returns:
        str | os.PathLike[str]: The path to the model Hailo Suite parsed file.
    """
    # Get the model Hailo Suite path
    model_hailo_suite_dir = cls.get_model_hailo_suite_dir_path(
        model_name,
        yolo_version
    )

    # Get the Hailo Suite parsed filename
    model_hailo_suite_parsed_har_file_name = cls.get_model_hailo_suite_parsed_har_file_name(
        model_name
    )

    return os.path.join(
        model_hailo_suite_dir,
        model_hailo_suite_parsed_har_file_name
    )

get_model_runs_dir_path(model_name, yolo_version) classmethod

Get the model runs path.

Parameters:

Name Type Description Default
model_name str

Name of the YOLO model.

required
yolo_version str

Version of the YOLO model.

required

Returns:
str | os.PathLike: The path to the model runs folder.

Source code in devices\raspberry_pi_5\src\files\__init__.py
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
@classmethod
def get_model_runs_dir_path(
    cls,
    model_name: str,
    yolo_version: str
) -> str | os.PathLike:
    """
    Get the model runs path.

    Args:
        model_name (str): Name of the YOLO model.
        yolo_version (str): Version of the YOLO model.
    Returns:
        str | os.PathLike: The path to the model runs folder.
    """
    # Get the YOLO runs folder path
    yolo_runs_dir = cls.get_yolo_runs_dir_path(yolo_version)

    # Check the validity of the model name
    Args.check_model_name(model_name)

    return os.path.join(yolo_runs_dir, model_name)

get_model_weight_dir_path(model_name, yolo_version) classmethod

Get the model weights path.

Parameters:

Name Type Description Default
model_name str

Name of the YOLO model.

required
yolo_version str

Version of the YOLO model.

required

Returns:
str | os.PathLike: The path to the model weights folder.

Source code in devices\raspberry_pi_5\src\files\__init__.py
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
@classmethod
def get_model_weight_dir_path(
    cls,
    model_name: str,
    yolo_version: str
) -> str | os.PathLike:
    """
    Get the model weights path.

    Args:
        model_name (str): Name of the YOLO model.
        yolo_version (str): Version of the YOLO model.
    Returns:
        str | os.PathLike: The path to the model weights folder.
    """
    # Get the model runs path
    model_runs_path = cls.get_model_runs_dir_path(model_name, yolo_version)

    return os.path.join(model_runs_path, WEIGHTS)

get_model_weights_compiled_hef_file_path(model_name, yolo_version) classmethod

Get the model weights compiled file path.

Parameters:

Name Type Description Default
model_name str

Name of the YOLO model.

required
yolo_version str

Version of the YOLO model.

required

Returns:
str | os.PathLike[str]: The path to the model weights compiled file.

Source code in devices\raspberry_pi_5\src\files\__init__.py
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
@classmethod
def get_model_weights_compiled_hef_file_path(
    cls,
    model_name: str,
    yolo_version: str
) -> str | os.PathLike[str]:
    """
    Get the model weights compiled file path.

    Args:
        model_name (str): Name of the YOLO model.
        yolo_version (str): Version of the YOLO model.
    Returns:
        str | os.PathLike[str]: The path to the model weights compiled file.
    """
    # Get the model weights directory path
    model_weights_dir = cls.get_model_weight_dir_path(
        model_name,
        yolo_version
    )

    return os.path.join(model_weights_dir, 'compiled.hef')

get_model_weights_optimized_har_file_path(model_name, yolo_version) classmethod

Get the model weights optimized file path.

Parameters:

Name Type Description Default
model_name str

Name of the YOLO model.

required
yolo_version str

Version of the YOLO model.

required

Returns:
str | os.PathLike[str]: The path to the model weights optimized file.

Source code in devices\raspberry_pi_5\src\files\__init__.py
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
@classmethod
def get_model_weights_optimized_har_file_path(
    cls,
    model_name: str,
    yolo_version: str
) -> str | os.PathLike[str]:
    """
    Get the model weights optimized file path.

    Args:
        model_name (str): Name of the YOLO model.
        yolo_version (str): Version of the YOLO model.
    Returns:
        str | os.PathLike[str]: The path to the model weights optimized file.
    """
    # Get the model weights directory path
    model_weights_dir = cls.get_model_weight_dir_path(
        model_name,
        yolo_version
    )

    return os.path.join(model_weights_dir, 'optimized.har')

get_model_weights_parsed_har_file_path(model_name, yolo_version) classmethod

Get the model weights parsed file path.

Parameters:

Name Type Description Default
model_name str

Name of the YOLO model.

required
yolo_version str

Version of the YOLO model.

required

Returns:
str | os.PathLike[str]: The path to the model weights parsed file.

Source code in devices\raspberry_pi_5\src\files\__init__.py
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
@classmethod
def get_model_weights_parsed_har_file_path(
    cls,
    model_name: str,
    yolo_version: str
) -> str | os.PathLike[str]:
    """
    Get the model weights parsed file path.

    Args:
        model_name (str): Name of the YOLO model.
        yolo_version (str): Version of the YOLO model.
    Returns:
        str | os.PathLike[str]: The path to the model weights parsed file.
    """
    # Get the model weights directory path
    model_weights_dir = cls.get_model_weight_dir_path(
        model_name,
        yolo_version
    )

    return os.path.join(model_weights_dir, 'parsed.har')

get_yolo_runs_dir_path(yolo_version) classmethod

Get the YOLO runs folder path.

Parameters:

Name Type Description Default
yolo_version str

The version of the YOLO model.

required

Returns:
str | os.PathLike: The path to the YOLO runs folder.

Source code in devices\raspberry_pi_5\src\files\__init__.py
172
173
174
175
176
177
178
179
180
181
182
183
184
185
@classmethod
def get_yolo_runs_dir_path(cls, yolo_version: str) -> str | os.PathLike:
    """
    Get the YOLO runs folder path.

    Args:
        yolo_version (str): The version of the YOLO model.
    Returns:
        str | os.PathLike: The path to the YOLO runs folder.
    """
    # Get the YOLO version folder path
    yolo_version_dir = cls.get_yolo_version_dir_path(yolo_version)

    return os.path.join(yolo_version_dir, RUNS)

get_yolo_version_dir_path(yolo_version) classmethod

Get the YOLO version folder path.

Parameters:

Name Type Description Default
yolo_version str

The version of the YOLO model.

required

Returns:
str | os.PathLike: The path to the YOLO version folder.

Source code in devices\raspberry_pi_5\src\files\__init__.py
157
158
159
160
161
162
163
164
165
166
167
168
169
170
@classmethod
def get_yolo_version_dir_path(cls, yolo_version: str) -> str | os.PathLike:
    """
    Get the YOLO version folder path.

    Args:
        yolo_version (str): The version of the YOLO model.
    Returns:
        str | os.PathLike: The path to the YOLO version folder.
    """
    # Check the validity of the YOLO version
    Args.check_yolo_version(yolo_version)

    return os.path.join(YOLO_DIR, yolo_version)

move_file(input_path, output_dir) staticmethod

Move file between folders.

Parameters:

Name Type Description Default
input_path str | PathLike[str]

The path of the file to be moved.

required
output_dir str | PathLike[str]

The directory where the file should be moved.

required
Source code in devices\raspberry_pi_5\src\files\__init__.py
24
25
26
27
28
29
30
31
32
33
34
35
36
37
@staticmethod
def move_file(
    input_path: str | os.PathLike[str],
    output_dir: str | os.PathLike[str]
) -> None:
    """
    Move file between folders.

    Args:
        input_path (str | os.PathLike[str]): The path of the file to be moved.
        output_dir (str | os.PathLike[str]): The directory where the file should be moved.
    """
    if os.path.exists(input_path):
        shutil.move(input_path, output_dir)

move_folder(input_dir, output_dir) staticmethod

Move folder between folders.

Parameters:

Name Type Description Default
input_dir str | PathLike[str]

The path of the folder to be moved.

required
output_dir str | PathLike[str]

The directory where the folder should be moved.

required
Source code in devices\raspberry_pi_5\src\files\__init__.py
39
40
41
42
43
44
45
46
47
48
49
50
51
52
@staticmethod
def move_folder(
    input_dir: str | os.PathLike[str],
    output_dir: str | os.PathLike[str]
) -> None:
    """
    Move folder between folders.

    Args:
        input_dir (str | os.PathLike[str]): The path of the folder to be moved.
        output_dir (str | os.PathLike[str]): The directory where the folder should be moved.
    """
    if os.path.exists(input_dir):
        shutil.move(input_dir, output_dir)

move_folder_content(input_dir, output_dir) classmethod

Move folder content to another folder.

Parameters:

Name Type Description Default
input_dir str | PathLike[str]

The path of the folder whose content will be moved.

required
output_dir str | PathLike[str]

The directory where the content should be moved.

required
Source code in devices\raspberry_pi_5\src\files\__init__.py
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
@classmethod
def move_folder_content(
    cls,
    input_dir: str | os.PathLike[str],
    output_dir: str | os.PathLike[str]
) -> None:
    """
    Move folder content to another folder.

    Args:
        input_dir (str | os.PathLike[str]): The path of the folder whose content will be moved.
        output_dir (str | os.PathLike[str]): The directory where the content should be moved.
    """
    if os.path.exists(input_dir):
        # Check if the output directory exists, if not create it
        cls.ensure_directory_exists(output_dir)

        # Get all files and folders in the input directory
        for item in os.listdir(input_dir):
            item_input_path = os.path.join(input_dir, item)
            item_output_path = os.path.join(output_dir, item)

            # Check if it's a file and the item already exists in the output directory
            if not os.path.isdir(item_input_path) and os.path.exists(
                    item_output_path
            ):
                # Delete the item if it already exists in the output directory
                os.remove(item_output_path)

            # Move each item to the output directory
            shutil.move(item_input_path, output_dir)

zip

Zip

Class for zipping files and folders.

Source code in devices\raspberry_pi_5\src\files\zip.py
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
class Zip:
    """
    Class for zipping files and folders.
    """

    @staticmethod
    def zip_files(
        zipf: ZipFile,
        filenames: List,
        input_file_base_path: str | os.PathLike[str],
        input_base_path: str | os.PathLike[str],
        ignore_filenames_regex: Optional[List[Pattern]] = None,
        debug: bool = False
    ) -> None:
        """
        Define the function to zip the files in a folder.

        Args:
            zipf (ZipFile): ZipFile object to write to.
            filenames (List): List of filenames to zip.
            input_file_base_path (str | os.PathLike[str]): Base path of the files to be zipped.
            input_base_path (str | os.PathLike[str]): Base path for relative file paths in the zip.
            ignore_filenames_regex (Optional[List[Pattern]]): List of regex patterns to ignore certain files.
            debug (bool): If True, prints debug information.
        """
        for filename in filenames:
            # Skip the file if it is in the ignore list
            if ignore_filenames_regex is not None and match_any(
                    ignore_filenames_regex, filename
            ):
                continue

            # Zip the file
            file_path = os.path.join(input_file_base_path, filename)
            file_rel_path = os.path.relpath(file_path, input_base_path)
            zipf.write(file_path, file_rel_path)

            # Log
            print(f'Zipped file: {file_rel_path}') if debug else None

    @classmethod
    def zip_not_nested_folder(
        cls,
        zipf: ZipFile,
        input_base_path: str | os.PathLike[str],
        input_folder_path: str | os.PathLike[str],
        ignore_filenames_regex: List = None,
        debug: bool = False
    ) -> None:
        """
        Define the function to zip a folder, this ignores nested folders.

        Args:
            zipf (ZipFile): ZipFile object to write to.
            input_base_path (str | os.PathLike[str]): Base path for relative file paths in the zip.
            input_folder_path (str | os.PathLike[str]): Path of the folder to be zipped.
            ignore_filenames_regex (Optional[List[Pattern]]): List of regex patterns to ignore certain files.
            debug (bool): If True, prints debug information.
        """
        # Get the list of files in the specified folder
        filenames = [f for f in os.listdir(input_folder_path)]

        # Zip the files in the folder
        cls.zip_files(
            zipf, filenames, input_folder_path, input_base_path,
            ignore_filenames_regex
        )

        # Log
        if debug:
            input_folder_rel_path = os.path.relpath(
                input_folder_path,
                input_base_path
            )
            print(f'Zipped folder: {input_folder_rel_path}')

    @classmethod
    def zip_nested_folder(
        cls,
        zipf: ZipFile,
        input_base_path: str | os.PathLike[str],
        input_folder_path: str | os.PathLike[str],
        ignore_dirs: List[str] = None,
        ignore_filenames_regex: List[Pattern] = None,
        debug: bool = False
    ) -> None:
        """
        Define the function to zip a folder, this includes nested folders.

        Args:
            zipf (ZipFile): ZipFile object to write to.
            input_base_path (str | os.PathLike[str]): Base path for relative file paths in the zip.
            input_folder_path (str | os.PathLike[str]): Path of the folder to be zipped.
            ignore_dirs (Optional[List[str]]): List of directories to ignore.
            ignore_filenames_regex (Optional[List[Pattern]]): List of regex patterns to ignore certain files.
            debug (bool): If True, prints debug information.
        """
        # Added to ignore directories the list of directories that should be always ignored
        if not ignore_dirs:
            ignore_dirs = []
        ignore_dirs += IGNORE_DIRS

        for root, _, filenames in os.walk(input_folder_path):
            # Skip directories in the ignore list
            filenames = [f for f in filenames if
                         not any(
                             os.path.relpath(root, input_base_path).startswith(
                                 d
                             ) for d in ignore_dirs
                         )]

            # Zip the files in the subfolders
            cls.zip_files(
                zipf, filenames, root, input_base_path,
                ignore_filenames_regex
            )

        # Log
        if debug:
            input_folder_rel_path = os.path.relpath(
                input_folder_path,
                input_base_path
            )
            print(f'Zipped folder: {input_folder_rel_path}')

    @staticmethod
    def extract_all(
        zip_path: str | os.PathLike[str],
        output_dir: str | os.PathLike[str],
        debug: bool = False
    ) -> None:
        """
        Extract all files from a zip file by batches.

        Args:
            zip_path (str | os.PathLike[str]): Path to the zip file.
            output_dir (str | os.PathLike[str]): Directory where files will be extracted.
            debug (bool): If True, prints debug information.
        """
        # Check if the path exists, if not it creates it
        Files.ensure_directory_exists(output_dir)

        with ZipFile(zip_path, "r") as zip_ref:
            files = zip_ref.namelist()

            for file in files:
                print(f"Extracting {file}...") if debug else None

                # Extract the file to the output directory
                file_path = os.path.join(output_dir, file)
                Files.ensure_directory_exists(file_path)
                zip_ref.extract(file, output_dir)

extract_all(zip_path, output_dir, debug=False) staticmethod

Extract all files from a zip file by batches.

Parameters:

Name Type Description Default
zip_path str | PathLike[str]

Path to the zip file.

required
output_dir str | PathLike[str]

Directory where files will be extracted.

required
debug bool

If True, prints debug information.

False
Source code in devices\raspberry_pi_5\src\files\zip.py
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
@staticmethod
def extract_all(
    zip_path: str | os.PathLike[str],
    output_dir: str | os.PathLike[str],
    debug: bool = False
) -> None:
    """
    Extract all files from a zip file by batches.

    Args:
        zip_path (str | os.PathLike[str]): Path to the zip file.
        output_dir (str | os.PathLike[str]): Directory where files will be extracted.
        debug (bool): If True, prints debug information.
    """
    # Check if the path exists, if not it creates it
    Files.ensure_directory_exists(output_dir)

    with ZipFile(zip_path, "r") as zip_ref:
        files = zip_ref.namelist()

        for file in files:
            print(f"Extracting {file}...") if debug else None

            # Extract the file to the output directory
            file_path = os.path.join(output_dir, file)
            Files.ensure_directory_exists(file_path)
            zip_ref.extract(file, output_dir)

zip_files(zipf, filenames, input_file_base_path, input_base_path, ignore_filenames_regex=None, debug=False) staticmethod

Define the function to zip the files in a folder.

Parameters:

Name Type Description Default
zipf ZipFile

ZipFile object to write to.

required
filenames List

List of filenames to zip.

required
input_file_base_path str | PathLike[str]

Base path of the files to be zipped.

required
input_base_path str | PathLike[str]

Base path for relative file paths in the zip.

required
ignore_filenames_regex Optional[List[Pattern]]

List of regex patterns to ignore certain files.

None
debug bool

If True, prints debug information.

False
Source code in devices\raspberry_pi_5\src\files\zip.py
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
@staticmethod
def zip_files(
    zipf: ZipFile,
    filenames: List,
    input_file_base_path: str | os.PathLike[str],
    input_base_path: str | os.PathLike[str],
    ignore_filenames_regex: Optional[List[Pattern]] = None,
    debug: bool = False
) -> None:
    """
    Define the function to zip the files in a folder.

    Args:
        zipf (ZipFile): ZipFile object to write to.
        filenames (List): List of filenames to zip.
        input_file_base_path (str | os.PathLike[str]): Base path of the files to be zipped.
        input_base_path (str | os.PathLike[str]): Base path for relative file paths in the zip.
        ignore_filenames_regex (Optional[List[Pattern]]): List of regex patterns to ignore certain files.
        debug (bool): If True, prints debug information.
    """
    for filename in filenames:
        # Skip the file if it is in the ignore list
        if ignore_filenames_regex is not None and match_any(
                ignore_filenames_regex, filename
        ):
            continue

        # Zip the file
        file_path = os.path.join(input_file_base_path, filename)
        file_rel_path = os.path.relpath(file_path, input_base_path)
        zipf.write(file_path, file_rel_path)

        # Log
        print(f'Zipped file: {file_rel_path}') if debug else None

zip_nested_folder(zipf, input_base_path, input_folder_path, ignore_dirs=None, ignore_filenames_regex=None, debug=False) classmethod

Define the function to zip a folder, this includes nested folders.

Parameters:

Name Type Description Default
zipf ZipFile

ZipFile object to write to.

required
input_base_path str | PathLike[str]

Base path for relative file paths in the zip.

required
input_folder_path str | PathLike[str]

Path of the folder to be zipped.

required
ignore_dirs Optional[List[str]]

List of directories to ignore.

None
ignore_filenames_regex Optional[List[Pattern]]

List of regex patterns to ignore certain files.

None
debug bool

If True, prints debug information.

False
Source code in devices\raspberry_pi_5\src\files\zip.py
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
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
@classmethod
def zip_nested_folder(
    cls,
    zipf: ZipFile,
    input_base_path: str | os.PathLike[str],
    input_folder_path: str | os.PathLike[str],
    ignore_dirs: List[str] = None,
    ignore_filenames_regex: List[Pattern] = None,
    debug: bool = False
) -> None:
    """
    Define the function to zip a folder, this includes nested folders.

    Args:
        zipf (ZipFile): ZipFile object to write to.
        input_base_path (str | os.PathLike[str]): Base path for relative file paths in the zip.
        input_folder_path (str | os.PathLike[str]): Path of the folder to be zipped.
        ignore_dirs (Optional[List[str]]): List of directories to ignore.
        ignore_filenames_regex (Optional[List[Pattern]]): List of regex patterns to ignore certain files.
        debug (bool): If True, prints debug information.
    """
    # Added to ignore directories the list of directories that should be always ignored
    if not ignore_dirs:
        ignore_dirs = []
    ignore_dirs += IGNORE_DIRS

    for root, _, filenames in os.walk(input_folder_path):
        # Skip directories in the ignore list
        filenames = [f for f in filenames if
                     not any(
                         os.path.relpath(root, input_base_path).startswith(
                             d
                         ) for d in ignore_dirs
                     )]

        # Zip the files in the subfolders
        cls.zip_files(
            zipf, filenames, root, input_base_path,
            ignore_filenames_regex
        )

    # Log
    if debug:
        input_folder_rel_path = os.path.relpath(
            input_folder_path,
            input_base_path
        )
        print(f'Zipped folder: {input_folder_rel_path}')

zip_not_nested_folder(zipf, input_base_path, input_folder_path, ignore_filenames_regex=None, debug=False) classmethod

Define the function to zip a folder, this ignores nested folders.

Parameters:

Name Type Description Default
zipf ZipFile

ZipFile object to write to.

required
input_base_path str | PathLike[str]

Base path for relative file paths in the zip.

required
input_folder_path str | PathLike[str]

Path of the folder to be zipped.

required
ignore_filenames_regex Optional[List[Pattern]]

List of regex patterns to ignore certain files.

None
debug bool

If True, prints debug information.

False
Source code in devices\raspberry_pi_5\src\files\zip.py
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
@classmethod
def zip_not_nested_folder(
    cls,
    zipf: ZipFile,
    input_base_path: str | os.PathLike[str],
    input_folder_path: str | os.PathLike[str],
    ignore_filenames_regex: List = None,
    debug: bool = False
) -> None:
    """
    Define the function to zip a folder, this ignores nested folders.

    Args:
        zipf (ZipFile): ZipFile object to write to.
        input_base_path (str | os.PathLike[str]): Base path for relative file paths in the zip.
        input_folder_path (str | os.PathLike[str]): Path of the folder to be zipped.
        ignore_filenames_regex (Optional[List[Pattern]]): List of regex patterns to ignore certain files.
        debug (bool): If True, prints debug information.
    """
    # Get the list of files in the specified folder
    filenames = [f for f in os.listdir(input_folder_path)]

    # Zip the files in the folder
    cls.zip_files(
        zipf, filenames, input_folder_path, input_base_path,
        ignore_filenames_regex
    )

    # Log
    if debug:
        input_folder_rel_path = os.path.relpath(
            input_folder_path,
            input_base_path
        )
        print(f'Zipped folder: {input_folder_rel_path}')