Source code for pyquickhelper.ipythonhelper.magic_class_compress
# -*- coding: utf-8 -*-
"""
Magic command to handle files
:githublink:`%|py|6`
"""
import os
from IPython.core.magic import magics_class, line_magic
from .magic_class import MagicClassWithHelpers
from .magic_parser import MagicCommandParser
from ..filehelper import zip_files, gzip_files, zip7_files
[docs]@magics_class
class MagicCompress(MagicClassWithHelpers):
"""
Defines magic commands to compress files.
:githublink:`%|py|19`
"""
[docs] @staticmethod
def compress_parser():
"""
defines the way to parse the magic command ``%compress``
:githublink:`%|py|25`
"""
parser = MagicCommandParser(prog="compress",
description='display the content of a repository (GIT or SVN)')
parser.add_argument(
'dest',
type=str,
help='destination, the extension defines the compression format, zip, gzip 7z')
parser.add_argument(
'files',
type=str,
nargs="?",
help='files to compress or a python list')
return parser
[docs] @line_magic
def compress(self, line):
"""
.. nbref::
:title: %compress
It compresses a list of files,
it returns the number of compressed files::
from pyquickhelper import zip_files, gzip_files, zip7_files
if format == "zip":
zip_files(dest, files)
elif format == "gzip":
gzip_files(dest, files)
elif format == "7z":
zip7_files(dest, files)
else:
raise ValueError("unexpected format: " + format)
:githublink:`%|py|57`
"""
parser = self.get_parser(MagicCompress.compress_parser, "compress")
args = self.get_args(line, parser)
if args is not None:
dest = args.dest
files = args.files
format = os.path.splitext(dest)[-1].strip(".").lower()
if format == "zip":
return zip_files(dest, files)
if format == "gzip":
return gzip_files(dest, files)
if format == "7z":
return zip7_files(dest, files)
raise ValueError(
"Unexpected format: '{0}' from file '{1}'?".format(
format, dest))
return None
[docs]def register_file_magics(ip=None): # pragma: no cover
"""
Registers magics function, can be called from a notebook.
:param ip: from ``get_ipython()``
:githublink:`%|py|83`
"""
if ip is None:
from IPython import get_ipython
ip = get_ipython()
ip.register_magics(MagicCompress)