41   | 
    41   | 
    42     def specify_args(self):  | 
    42     def specify_args(self):  | 
    43         self.config.add_option('databases', dict) | 
    43         self.config.add_option('databases', dict) | 
    44         self.config.add_option('meta_db') | 
    44         self.config.add_option('meta_db') | 
    45         self.config.add_option('meta_query') | 
    45         self.config.add_option('meta_query') | 
    46         self.parser.add_argument('-Q', dest='queries', action='store_true', | 
    46         self.parser.add_argument('-Q', dest='show_queries', action='store_true', | 
    47             help='Print database queries.')  | 
    47             help='Print database queries.')  | 
    48   | 
    48         self.parser.add_argument('-C', dest='config_file', type=str, | 
    49     def load_args(self, args=None, config_file=None):  | 
    49             help='Additional config file (besides pgtoolkit.conf).')  | 
    50         self.config.load(config_file or 'pgtoolkit.conf')  | 
    50   | 
         | 
    51     def load_args(self, args=None, config_file=None):  | 
         | 
    52         # Parse command line arguments  | 
    51         self.args = self.parser.parse_args(args)  | 
    53         self.args = self.parser.parse_args(args)  | 
         | 
    54         # Load global config  | 
         | 
    55         self.config.load('/etc/pgtoolkit.conf', must_exist=False) | 
         | 
    56         # Load local config  | 
         | 
    57         self.config.load(config_file or 'pgtoolkit.conf', must_exist=False)  | 
         | 
    58         # Load additional config  | 
         | 
    59         if self.args.config_file:  | 
         | 
    60             self.config.load(self.args.config_file)  | 
    52   | 
    61   | 
    53     def init_logging(self):  | 
    62     def init_logging(self):  | 
    54         # logging  | 
    63         # logging  | 
    55         format = ColoredFormatter(highlight(1,7,0)+'%(asctime)s %(levelname)-5s'+highlight(0)+' %(message)s', '%H:%M:%S')  | 
    64         format = ColoredFormatter(highlight(1,7,0)+'%(asctime)s %(levelname)-5s'+highlight(0)+' %(message)s', '%H:%M:%S')  | 
    56         handler = logging.StreamHandler()  | 
    65         handler = logging.StreamHandler()  | 
    62   | 
    71   | 
    63         log_notices = logging.getLogger('pgmanager_notices') | 
    72         log_notices = logging.getLogger('pgmanager_notices') | 
    64         log_notices.addHandler(handler)  | 
    73         log_notices.addHandler(handler)  | 
    65         log_notices.setLevel(logging.DEBUG)  | 
    74         log_notices.setLevel(logging.DEBUG)  | 
    66   | 
    75   | 
    67         if self.args.queries:  | 
    76         if self.args.show_queries:  | 
    68             log_sql = logging.getLogger('pgmanager_sql') | 
    77             log_sql = logging.getLogger('pgmanager_sql') | 
    69             log_sql.addHandler(handler)  | 
    78             log_sql.addHandler(handler)  | 
    70             log_sql.setLevel(logging.DEBUG)  | 
    79             log_sql.setLevel(logging.DEBUG)  | 
    71   | 
    80   | 
    72     def prepare_conn_from_metadb(self, name, lookup_name):  | 
    81     def prepare_conn_from_metadb(self, name, lookup_name):  | 
   121     def __init__(self, name, desc=None, **kwargs):  | 
   130     def __init__(self, name, desc=None, **kwargs):  | 
   122         ToolBase.__init__(self, name, desc, **kwargs)  | 
   131         ToolBase.__init__(self, name, desc, **kwargs)  | 
   123   | 
   132   | 
   124     def specify_args(self):  | 
   133     def specify_args(self):  | 
   125         ToolBase.specify_args(self)  | 
   134         ToolBase.specify_args(self)  | 
   126         self.parser.add_argument('target', metavar='target', type=str, help='Target database') | 
   135         self.config.add_option('target', type=str, default=None) | 
         | 
   136         self.parser.add_argument('target', nargs='?', type=str, help='Target database') | 
         | 
   137   | 
         | 
   138     def load_args(self, args=None, config_file=None):  | 
         | 
   139         ToolBase.load_args(self, args, config_file)  | 
         | 
   140         self.target = self.args.target or self.config.target or 'default'  | 
   127   | 
   141   | 
   128     def setup(self, args=None):  | 
   142     def setup(self, args=None):  | 
   129         ToolBase.setup(self, args)  | 
   143         ToolBase.setup(self, args)  | 
   130         self.prepare_conns(target=self.args.target)  | 
   144         self.prepare_conns(target=self.target)  | 
   131   | 
   145   | 
   132   | 
   146   | 
   133 class SrcDstTool(ToolBase):  | 
   147 class SrcDstTool(ToolBase):  | 
   134   | 
   148   | 
   135     def __init__(self, name, desc=None, *, allow_reverse=False, force_reverse=False, **kwargs):  | 
   149     def __init__(self, name, desc=None, *, allow_reverse=False, force_reverse=False, **kwargs):  |