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

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 

8 

9from .magic_class import MagicClassWithHelpers 

10from .magic_parser import MagicCommandParser 

11from ..filehelper import zip_files, gzip_files, zip7_files 

12 

13 

14@magics_class 

15class MagicCompress(MagicClassWithHelpers): 

16 

17 """ 

18 Defines magic commands to compress files. 

19 """ 

20 

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 

38 

39 @line_magic 

40 def compress(self, line): 

41 """ 

42 .. nbref:: 

43 :title: %compress 

44 

45 It compresses a list of files, 

46 it returns the number of compressed files:: 

47 

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) 

60 

61 if args is not None: 

62 dest = args.dest 

63 files = args.files 

64 format = os.path.splitext(dest)[-1].strip(".").lower() 

65 

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 

75 

76 

77def register_file_magics(ip=None): # pragma: no cover 

78 """ 

79 Registers magics function, can be called from a notebook. 

80 

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)