Coverage for pyquickhelper/ipythonhelper/magic_class_compress.py: 89%
27 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-03 02:21 +0200
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-03 02:21 +0200
1# -*- coding: utf-8 -*-
2"""
3@file
4@brief Magic command to handle files
5"""
6import os
7from IPython.core.magic import magics_class, line_magic
9from .magic_class import MagicClassWithHelpers
10from .magic_parser import MagicCommandParser
11from ..filehelper import zip_files, gzip_files, zip7_files
14@magics_class
15class MagicCompress(MagicClassWithHelpers):
17 """
18 Defines magic commands to compress files.
19 """
21 @staticmethod
22 def compress_parser():
23 """
24 defines the way to parse the magic command ``%compress``
25 """
26 parser = MagicCommandParser(prog="compress",
27 description='display the content of a repository (GIT or SVN)')
28 parser.add_argument(
29 'dest',
30 type=str,
31 help='destination, the extension defines the compression format, zip, gzip 7z')
32 parser.add_argument(
33 'files',
34 type=str,
35 nargs="?",
36 help='files to compress or a python list')
37 return parser
39 @line_magic
40 def compress(self, line):
41 """
42 .. nbref::
43 :title: %compress
45 It compresses a list of files,
46 it returns the number of compressed files::
48 from pyquickhelper import zip_files, gzip_files, zip7_files
49 if format == "zip":
50 zip_files(dest, files)
51 elif format == "gzip":
52 gzip_files(dest, files)
53 elif format == "7z":
54 zip7_files(dest, files)
55 else:
56 raise ValueError("unexpected format: " + format)
57 """
58 parser = self.get_parser(MagicCompress.compress_parser, "compress")
59 args = self.get_args(line, parser)
61 if args is not None:
62 dest = args.dest
63 files = args.files
64 format = os.path.splitext(dest)[-1].strip(".").lower()
66 if format == "zip":
67 return zip_files(dest, files)
68 if format == "gzip":
69 return gzip_files(dest, files)
70 if format == "7z": # pragma: no cover
71 return zip7_files(dest, files)
72 raise ValueError( # pragma: no cover
73 f"Unexpected format: '{format}' from file '{dest}'?")
74 return None
77def register_file_magics(ip=None): # pragma: no cover
78 """
79 Registers magics function, can be called from a notebook.
81 @param ip from ``get_ipython()``
82 """
83 if ip is None:
84 from IPython import get_ipython
85 ip = get_ipython()
86 ip.register_magics(MagicCompress)