# HG changeset patch # User Radek Brich # Date 1330351960 -3600 # Node ID a8b7cd92f39f7d9507615592d663df554d223079 # Parent 8636719a30f6b28559ab3f6f6dd3366a34551f90 Fix analyzeall tool. Add user output formating to batchquery tool. Add isolation_level setting support to ToolBase. diff -r 8636719a30f6 -r a8b7cd92f39f analyzeall.py --- a/analyzeall.py Tue Feb 14 18:15:56 2012 +0100 +++ b/analyzeall.py Mon Feb 27 15:12:40 2012 +0100 @@ -1,4 +1,12 @@ #!/usr/bin/env python3.2 +""" +analyzeall + +Analyze/vacuum all tables in selected schemas. +See also "VACUUM ANALYZE VERBOSE;" query. +Unlike that, this program skips pg_catalog etc. + +""" from pgtoolkit import pgbrowser, toolbase from pgtoolkit.highlight import highlight @@ -10,6 +18,7 @@ self.parser.add_argument('-s', dest='schema', nargs='*', help='Schema filter') self.parser.add_argument('--vacuum', action='store_true', help='Call VACUUM ANALYZE') self.parser.add_argument('--full', action='store_true', help='Call VACUUM FULL ANALYZE') + self.target_isolation_level = 'autocommit' self.init() def main(self): diff -r 8636719a30f6 -r a8b7cd92f39f batchquery.py --- a/batchquery.py Tue Feb 14 18:15:56 2012 +0100 +++ b/batchquery.py Mon Feb 27 15:12:40 2012 +0100 @@ -11,6 +11,7 @@ self.parser.add_argument('--file', dest='file', type=str, help='CSV file with data to use as arguments.') self.parser.add_argument('--init', dest='init', type=str, help='Query which initialize database session (eg. temporary function).') self.parser.add_argument('--output', dest='output', type=str, help='File name for results.') + self.parser.add_argument('--outputfunc', dest='outputfunc', type=str, help='Python function which will format results (format_row(args, rows)).') self.parser.add_argument('--header', dest='header', action='store_true', help='First line of CSV is header with names for columns. These name can be used in query.') self.init() @@ -46,11 +47,21 @@ curs.connection.commit() # write results to output file if self.args.output: + format_row = None + if self.args.outputfunc: + with open(self.args.outputfunc, 'r', encoding='utf8') as f: + d = dict() + exec(f.read(), d) + format_row = d['format_row'] + with open(self.args.output, 'w', encoding='utf8') as f: for args, rows in results: - f.write(repr(args)) - f.write(' -> ') - f.write(repr(rows)) + if format_row: + f.write(format_row(args, rows)) + else: + f.write(repr(args)) + f.write(' -> ') + f.write(repr(rows)) f.write('\n') diff -r 8636719a30f6 -r a8b7cd92f39f pgtoolkit/toolbase.py --- a/pgtoolkit/toolbase.py Tue Feb 14 18:15:56 2012 +0100 +++ b/pgtoolkit/toolbase.py Mon Feb 27 15:12:40 2012 +0100 @@ -22,6 +22,7 @@ self.config.add_argument('meta_query') self.pgm = pgmanager.get_instance() + self.target_isolation_level = None def init(self, *args): self.config.load('pgtoolkit.conf') @@ -59,7 +60,9 @@ row = curs.fetchone_dict() curs.connection.commit() if row: - self.pgm.create_conn(name=name, **row) + self.pgm.create_conn(name=name, + isolation_level=self.target_isolation_level, + **row) return True def prepare_conn_from_config(self, name, lookup_name): @@ -67,13 +70,15 @@ if self.config.databases: if lookup_name in self.config.databases: dsn = self.config.databases[lookup_name] - self.pgm.create_conn(name=name, dsn=dsn) + self.pgm.create_conn(name=name, + isolation_level=self.target_isolation_level, + dsn=dsn) return True def prepare_conns(self, *pgm_names): if self.config.meta_db: self.pgm.create_conn(name='meta', dsn=self.config.meta_db) - + for name in pgm_names: lookup_name = self.args.__dict__[name] found = self.prepare_conn_from_config(name, lookup_name)