File: parser.py

package info (click to toggle)
trash-cli 0.24.5.26-0.3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,972 kB
  • sloc: python: 9,789; sh: 121; makefile: 11
file content (115 lines) | stat: -rw-r--r-- 5,083 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
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
import argparse
from enum import Enum
from typing import List, Union

from trashcli.lib.print_version import PrintVersionArgs
from trashcli.list.list_trash_action import ListTrashArgs
from trashcli.list.minor_actions.debug_volumes import DebugVolumesArgs
from trashcli.list.minor_actions.list_trash_dirs import ListTrashDirsArgs
from trashcli.list.minor_actions.list_volumes import PrintVolumesArgs
from trashcli.list.minor_actions.print_python_executable import \
    PrintPythonExecutableArgs
from trashcli.shell_completion import add_argument_to, TRASH_DIRS

Args = Union[
    PrintVersionArgs,
    PrintVolumesArgs,
    DebugVolumesArgs,
    ListTrashDirsArgs,
    ListTrashArgs,
    PrintPythonExecutableArgs
]


class Parser:
    def __init__(self, prog):
        self.parser = argparse.ArgumentParser(prog=prog,
                                              description='List trashed files',
                                              epilog='Report bugs to https://github.com/andreafrancia/trash-cli/issues')
        add_argument_to(self.parser)
        self.parser.add_argument('--version',
                                 dest='action',
                                 action='store_const',
                                 const=ListAction.print_version,
                                 default=ListAction.list_trash,
                                 help="show program's version number and exit")
        self.parser.add_argument('--debug-volumes',
                                 dest='action',
                                 action='store_const',
                                 const=ListAction.debug_volumes,
                                 help=argparse.SUPPRESS)
        self.parser.add_argument('--volumes',
                                 dest='action',
                                 action='store_const',
                                 const=ListAction.list_volumes,
                                 help="list volumes")
        self.parser.add_argument('--trash-dirs',
                                 dest='action',
                                 action='store_const',
                                 const=ListAction.list_trash_dirs,
                                 help="list trash dirs")
        self.parser.add_argument('--trash-dir',
                                 action='append',
                                 default=[],
                                 dest='trash_dirs',
                                 help='specify the trash directory to use'
                                 ).complete = TRASH_DIRS
        self.parser.add_argument('--size',
                                 action='store_const',
                                 default='deletion_date',
                                 const='size',
                                 dest='attribute_to_print',
                                 help=argparse.SUPPRESS)
        self.parser.add_argument('--files',
                                 action='store_true',
                                 default=False,
                                 dest='show_files',
                                 help=argparse.SUPPRESS)
        self.parser.add_argument('--all-users',
                                 action='store_true',
                                 dest='all_users',
                                 help='list trashcans of all the users')
        self.parser.add_argument('--python',
                                 dest='action',
                                 action='store_const',
                                 const=ListAction.print_python_executable,
                                 help=argparse.SUPPRESS)

    def parse_list_args(self,
                        args,  # type: List[str]
                        argv0,  # type: str
                        ):  # type: (...) -> Args

        parsed = self.parser.parse_args(args)

        if parsed.action == ListAction.print_version:
            return PrintVersionArgs(argv0=argv0)
        if parsed.action == ListAction.list_volumes:
            return PrintVolumesArgs()
        if parsed.action == ListAction.debug_volumes:
            return DebugVolumesArgs()
        if parsed.action == ListAction.list_trash_dirs:
            return ListTrashDirsArgs(
                trash_dirs=parsed.trash_dirs,
                all_users=parsed.all_users
            )
        if parsed.action == ListAction.list_trash:
            return ListTrashArgs(
                trash_dirs=parsed.trash_dirs,
                attribute_to_print=parsed.attribute_to_print,
                show_files=parsed.show_files,
                all_users=parsed.all_users
            )
        if parsed.action == ListAction.print_python_executable:
            return PrintPythonExecutableArgs()

        raise ValueError('Unknown action: {}'.format(parsed.action))


class ListAction(Enum):
    debug_volumes = 'debug_volumes'
    print_version = 'print_version'
    list_trash = 'list_trash'
    list_volumes = 'list_volumes'
    list_trash_dirs = 'list_trash_dirs'
    print_python_executable = 'print_python_executable'