Ejemplo n.º 1
0
class Taskparser(object):
    """Parser to manage de options and arguments"""
    def __init__(self):
        self.args = []
        self.parser = ArgumentParser(description="Task Manager app",
                                     formatter_class=RawTextHelpFormatter)
        self.create_argument_parser()
        self.dbclient = Client()

    def create_argument_parser(self):
        """Create the argument group and other arguments."""
        group = self.parser.add_mutually_exclusive_group()
        group.add_argument("-a",
                           "--add",
                           nargs="+",
                           dest="description",
                           help="Add a task",
                           metavar="DESCRIPTION")
        group.add_argument("-f",
                           "--file",
                           dest="file",
                           type=FileType('r', encoding=None),
                           help="Add batch of tasks in a file",
                           metavar="INPUT FILE")
        group.add_argument("-c",
                           "--complete",
                           type=int,
                           help="Check a task as complete",
                           metavar="TASK ID")
        group.add_argument("-l",
                           "--list",
                           nargs='?',
                           const='all',
                           help="List all task",
                           metavar="FILTER")
        group.add_argument("-s",
                           "--show",
                           type=int,
                           help="Show a task",
                           metavar="TASK ID")
        self.parser.add_argument("parameter", nargs="*", metavar="Description")
        self.parser.add_argument("-p",
                                 "--project",
                                 dest="project",
                                 help="Project of a task",
                                 metavar="PROJECT")
        self.parser.add_argument("-t",
                                 "--tags",
                                 nargs="+",
                                 dest="tags",
                                 help="Tags of a task(space between tags)",
                                 metavar="TAGS")
        self.parser.add_argument("-q",
                                 "--queue-priority",
                                 dest="priority",
                                 help="Priority ([H]igh, [L]ow)",
                                 metavar="PRIORITY")
        help_due = """Due date as a date(dd/mm/YY) or a period in the format
+NUMBERS[h|d|w|m|y] where
h -> hours
d -> days
w -> weeks
m -> months
y -> years"""
        self.parser.add_argument("-d",
                                 "--due-date",
                                 dest="due_date",
                                 help=help_due,
                                 metavar="DUE DATE")
        self.parser.add_argument("-b",
                                 "--bairn",
                                 dest="parent",
                                 help="Id of the parent task",
                                 metavar="PARENT ID")

    def parse_args(self, args=None):
        """Parse arguments"""
        if args:
            return self.parser.parse_args(args)
        else:
            return self.parser.parse_args()

    def process_args(self, args):
        """Process arguments to execute the right for each one."""
        if args.parameter:
            if [
                    key for key, val in vars(args).items()
                    if val and key not in OPTIONALS
            ]:
                self.parser.print_help()
            else:
                new_doc = self.dbclient.create_task(vars(args))
                self.dbclient.insert_task(new_doc)
        elif args.list:
            self.dbclient.show_all_task(args.list)
        elif args.show:
            self.dbclient.show_task(args.show)
        elif args.description:
            new_doc = self.dbclient.create_task(vars(args))
            self.dbclient.insert_task(new_doc)
        elif args.complete:
            self.dbclient.complete_task(args.complete)
        elif args.file:
            for line in args.file:
                args = self.parse_args(line.rstrip('\r\n').split())
                self.process_args(args)
        else:
            self.parser.print_usage()
Ejemplo n.º 2
0
class Taskparser(object):
    """Parser to manage de options and arguments"""
    def __init__(self):
        self.args = []
        self.parser = ArgumentParser(
            description="Task Manager app",
            formatter_class=RawTextHelpFormatter
        )
        self.create_argument_parser()
        self.dbclient = Client()

    def create_argument_parser(self):
        """Create the argument group and other arguments."""
        group = self.parser.add_mutually_exclusive_group()
        group.add_argument(
            "-a",
            "--add",
            nargs="+",
            dest="description",
            help="Add a task",
            metavar="DESCRIPTION"
        )
        group.add_argument(
            "-f",
            "--file",
            dest="file",
            type=FileType('r', encoding=None),
            help="Add batch of tasks in a file",
            metavar="INPUT FILE"
        )
        group.add_argument(
            "-c",
            "--complete",
            type=int,
            help="Check a task as complete",
            metavar="TASK ID"
        )
        group.add_argument(
            "-l",
            "--list",
            nargs='?',
            const='all',
            help="List all task",
            metavar="FILTER"
        )
        group.add_argument(
            "-s",
            "--show",
            type=int,
            help="Show a task",
            metavar="TASK ID"
        )
        self.parser.add_argument(
            "parameter",
            nargs="*",
            metavar="Description"
        )
        self.parser.add_argument(
            "-p",
            "--project",
            dest="project",
            help="Project of a task",
            metavar="PROJECT"
        )
        self.parser.add_argument(
            "-t",
            "--tags",
            nargs="+",
            dest="tags",
            help="Tags of a task(space between tags)",
            metavar="TAGS"
        )
        self.parser.add_argument(
            "-q",
            "--queue-priority",
            dest="priority",
            help="Priority ([H]igh, [L]ow)",
            metavar="PRIORITY"
        )
        help_due = """Due date as a date(dd/mm/YY) or a period in the format
+NUMBERS[h|d|w|m|y] where
h -> hours
d -> days
w -> weeks
m -> months
y -> years"""
        self.parser.add_argument(
            "-d",
            "--due-date",
            dest="due_date",
            help=help_due,
            metavar="DUE DATE"
        )
        self.parser.add_argument(
            "-b",
            "--bairn",
            dest="parent",
            help="Id of the parent task",
            metavar="PARENT ID"
        )

    def parse_args(self, args=None):
        """Parse arguments"""
        if args:
            return self.parser.parse_args(args)
        else:
            return self.parser.parse_args()

    def process_args(self, args):
        """Process arguments to execute the right for each one."""
        if args.parameter:
            if [
                    key for key, val in vars(args).items()
                    if val and key not in OPTIONALS
            ]:
                self.parser.print_help()
            else:
                new_doc = self.dbclient.create_task(vars(args))
                self.dbclient.insert_task(new_doc)
        elif args.list:
            self.dbclient.show_all_task(args.list)
        elif args.show:
            self.dbclient.show_task(args.show)
        elif args.description:
            new_doc = self.dbclient.create_task(vars(args))
            self.dbclient.insert_task(new_doc)
        elif args.complete:
            self.dbclient.complete_task(args.complete)
        elif args.file:
            for line in args.file:
                args = self.parse_args(line.rstrip('\r\n').split())
                self.process_args(args)
        else:
            self.parser.print_usage()