|         |      1 from pgtoolkit.toolbase import SrcDstTool | 
|         |      2 from pgtoolkit import pgmanager, pgbrowser, pgdiff, toolbase | 
|         |      3  | 
|         |      4  | 
|         |      5 class SchemaDiffTool(SrcDstTool): | 
|         |      6  | 
|         |      7     """ | 
|         |      8     Print differences in database schema. | 
|         |      9  | 
|         |     10     Prints changes from source to destination. | 
|         |     11     SQL patch updates source database schema to destination schema. | 
|         |     12  | 
|         |     13     """ | 
|         |     14  | 
|         |     15     def __init__(self): | 
|         |     16         SrcDstTool.__init__(self, name='schemadiff', allow_reverse=True) | 
|         |     17  | 
|         |     18     def specify_args(self): | 
|         |     19         SrcDstTool.specify_args(self) | 
|         |     20         self.parser.add_argument('-s', dest='schema', nargs='*', help='Schema filter') | 
|         |     21         self.parser.add_argument('-t', dest='table', nargs='*', help='Table filter') | 
|         |     22         self.parser.add_argument('-f', dest='function', type=str, help='Function filter (regex)') | 
|         |     23         self.parser.add_argument('--sql', action='store_true', help='Output is SQL script.') | 
|         |     24         self.parser.add_argument('--body', action='store_true', help='Output diff for function bodies.') | 
|         |     25  | 
|         |     26     def main(self): | 
|         |     27         srcbrowser = pgbrowser.PgBrowser(self.pgm.get_conn('src')) | 
|         |     28         dstbrowser = pgbrowser.PgBrowser(self.pgm.get_conn('dst')) | 
|         |     29  | 
|         |     30         pgd = pgdiff.PgDiff(srcbrowser, dstbrowser) | 
|         |     31  | 
|         |     32         try: | 
|         |     33             if self.args.schema: | 
|         |     34                 pgd.filter_schemas(include=self.args.schema) | 
|         |     35             if self.args.table: | 
|         |     36                 pgd.filter_tables(include=self.args.table) | 
|         |     37             if self.args.function: | 
|         |     38                 pgd.filter_functions(self.args.function) | 
|         |     39             if self.args.body: | 
|         |     40                 pgd.function_body_diff = True | 
|         |     41  | 
|         |     42             if self.args.sql: | 
|         |     43                 pgd.print_patch() | 
|         |     44             else: | 
|         |     45                 pgd.print_diff() | 
|         |     46         except pgdiff.PgDiffError as e: | 
|         |     47             print('PgDiff error:', str(e)) | 
|         |     48  | 
|         |     49  | 
|         |     50 cls = SchemaDiffTool | 
|         |     51  |