def main(): """Augment database specifications""" parser = cmd_parser("Generate a modified schema for a PostgreSQL " "database, in YAML format, augmented with specified " "attributes and procedures", __version__) # TODO: processing of multiple files, owner and privileges parser.add_argument('-m', '--multiple-files', action='store_true', help='multiple files (metadata directory)') parser.add_argument('-O', '--no-owner', action='store_true', help='exclude object ownership information') parser.add_argument('-x', '--no-privileges', action='store_true', dest='no_privs', help='exclude privilege (GRANT/REVOKE) information') parser.add_argument('spec', nargs='?', type=FileType('r'), default=sys.stdin, help='YAML augmenter specification') cfg = parse_args(parser) output = cfg['files']['output'] options = cfg['options'] augdb = AugmentDatabase(cfg) augmap = yaml.safe_load(options.spec) try: outmap = augdb.apply(augmap) except BaseException as exc: if type(exc) != KeyError: raise sys.exit("ERROR: %s" % str(exc)) print(yamldump(outmap), file=output or sys.stdout) if output: output.close()
def to_map(self, stmts, augmap): """Apply an augment map and return a map of the updated database. :param stmts: list of SQL statements to execute :param augmap: dictionary describing the augmentations :return: dictionary of the updated database """ for stmt in stmts: self.db.execute(stmt) self.db.conn.commit() self.config_options(schemas=[], tables=[], no_owner=True, no_privs=True, multiple_files=False) db = AugmentDatabase(self.cfg) return db.apply(augmap)