Source code for frostmark.parser

'''
Module for parsing arguments from console.
'''

from argparse import ArgumentParser, Action

from frostmark import VERSION, __name__ as name
from frostmark.common import fetch_bookmark_tree, print_bookmark_tree
from frostmark.editor import Editor
from frostmark.importer import Importer
from frostmark.exporter import Exporter
from frostmark.profiles import print_profiles
from frostmark.core.console import Console


[docs]class ExecuteAction(Action): '''ArgumentParser action for add_argument(action=...) Executes a function and its args + kwargs passed as the __init__ arguments: * func * func_args * func_kwargs together with argument values inserted into func_kwargs as 'arg_values' and exits immediately. ''' # pylint: disable=too-few-public-methods def __init__(self, *a, func=None, func_args=(), func_kwargs={}, **kw): # pylint: disable=dangerous-default-value super(ExecuteAction, self).__init__(*a, **kw) self.func = func self.func_args = func_args self.func_kwargs = func_kwargs def __call__(self, parser, namespace, values, option_string=None): self.func_kwargs['arg_values'] = values self.func(*self.func_args, **self.func_kwargs) exit()
[docs]class FrostmarkArgumentParser(ArgumentParser): ''' Inheriting from `ArgumentParser` to print custom print message. ''' # pylint: disable=too-few-public-methods def print_help(self, *args, **kwargs): # pylint: disable=arguments-differ print('\n'.join(Console.logo)) super(FrostmarkArgumentParser, self).print_help(*args, **kwargs)
# create main parser PARSER = FrostmarkArgumentParser( prog=name, epilog='Epilog', add_help=True ) PARSER.add_argument( '-V', '--version', action='version', version='%(prog)s %(ver)s' % { 'prog': PARSER.prog, 'ver': VERSION } ) # create subparsers for main parser SUBPARSERS = PARSER.add_subparsers() # add positional argument for main parser # pylint: disable=attribute-defined-outside-init PARSER.console_parser = SUBPARSERS.add_parser('console') PARSER.gui_parser = SUBPARSERS.add_parser('gui') # add optional argument for console parser PARSER.console_parser.add_argument( '-l', '--list-bookmarks', help='show all available bookmarks as a tree', required=False, nargs=0, # pylint: disable=unnecessary-lambda action=lambda *args, **kwargs: ExecuteAction( *args, **kwargs, func=lambda *args, **kwargs: print_bookmark_tree( fetch_bookmark_tree() ) ) ) PARSER.console_parser.add_argument( '-p', '--list-profiles', help='import bookmarks from a browser profile', required=False, nargs=1, metavar=('BROWSER', ), # pylint: disable=unnecessary-lambda action=lambda *args, **kwargs: ExecuteAction( *args, **kwargs, func=lambda *args, **kwargs: print_profiles( kwargs['arg_values'][0] ) ) ) PARSER.console_parser.add_argument( '-i', '--import-bookmarks', help='import bookmarks from a browser profile', required=False, nargs='+', metavar=('BROWSER', 'PROFILE'), # pylint: disable=unnecessary-lambda action=lambda *args, **kwargs: ExecuteAction( *args, **kwargs, func=lambda *args, **kwargs: [ Importer( kwargs['arg_values'][0] ).import_from(val) for val in kwargs['arg_values'][1:] ] ) ) PARSER.console_parser.add_argument( '-x', '--export-bookmarks', help='export bookmarks to an HTML format', required=False, nargs=1, metavar=('PATH', ), # pylint: disable=unnecessary-lambda action=lambda *args, **kwargs: ExecuteAction( *args, **kwargs, func=lambda *args, **kwargs: Exporter().export_to( path=kwargs['arg_values'][0] ) ) ) PARSER.console_parser.add_argument( '-cpf', '--change-parent-folder', help='change parent for a folder', required=False, nargs=2, metavar=('FOLDER_ID', 'PARENT_ID'), # pylint: disable=unnecessary-lambda action=lambda *args, **kwargs: ExecuteAction( *args, **kwargs, func=lambda *args, **kwargs: Editor.change_parent_folder( folder_id=int(kwargs['arg_values'][0]), parent_id=int(kwargs['arg_values'][1]) ) ) ) PARSER.console_parser.add_argument( '-cpb', '--change-parent-bookmark', help='change parent for a bookmark', required=False, nargs=2, metavar=('BOOKMARK_ID', 'PARENT_ID'), # pylint: disable=unnecessary-lambda action=lambda *args, **kwargs: ExecuteAction( *args, **kwargs, func=lambda *args, **kwargs: Editor.change_parent_bookmark( bookmark_id=int(kwargs['arg_values'][0]), parent_id=int(kwargs['arg_values'][1]) ) ) )