class TableManager(object): def __init__(self, stdscreen, userpass): self.username = userpass['user'] self.password = userpass['pass'] self.screen = stdscreen self.dimensions = self.screen.getmaxyx() self.screen_manager = ScreenManager(self.screen) def listTables(self, dbname): table_query = "SELECT table_name FROM information_schema.tables where table_schema = 'public'" rows = query.query(table_query, dbname, self.screen, None, None, self.username, self.password) parsed_table_menu = [] for datas in rows[1]: opts = {'table':str(datas[0]), 'db':dbname} lst = (str(datas[0]), self.showTable, opts) parsed_table_menu.append(tuple(lst)) headeropts = {'db':dbname,'title':"Select Table to Display",'user':self.username} table_menu = Menu(parsed_table_menu,self.screen, headeropts) table_menu.display() def showTable(self, options): table = options['table'] db = options['db'] display_query = "SELECT * from " + table rows = query.query(display_query, db, self.screen, None, None, self.username, self.password) tableDisplay.navigate(rows,0,0,self.screen) self.screen.clear() def createTable(self, dbname): self.screen_manager.set_cursor_visible() curses.echo() self.screen_manager.display_mid("Please enter a name for the new table: ") new_table_name = self.screen_manager.screen.getstr() self.screen.clear() table_creation_query = "CREATE TABLE IF NOT EXISTS " + new_table_name + "(ID INT PRIMARY KEY NOT NULL);" if query.query(table_creation_query, dbname, self.screen, 0, None, self.username, self.password) == -1: ScreenManager.throw(self.screen, "An error prevented table creation.") else: self.screen_manager.display_mid("Table successfully created!") self.screen_manager.screen.getstr() self.screen.clear() def drop_table(self, options): table = options['table'] db = options['db'] self.screen_manager.display_mid("Are you sure you want to delete "+ table + "? (y/n)") confirmation = self.screen_manager.screen.getstr() if confirmation == 'y' or confirmation == "Y": tbl_delete_query = "DROP TABLE " + table + " CASCADE" if query.query(tbl_delete_query, db, self.screen, 0) == -1: self.screen_manager.display_mid("ERROR deleting table") self.screen.getch() self.screen.clear() else: self.screen_manager.display_mid("Table " + table + " deleted.") self.screen.getch() self.screen.clear() else: self.screen_manager.display_mid("Table " + table + " will not be deleted.") self.screen.getch() self.screen.clear() self.screen.clear() def list_drop_tables(self, dbname): table_query = "SELECT table_name FROM information_schema.tables where table_schema = 'public'" rows = query.query(table_query, dbname, self.screen, None, None, self.username, self.password) parsed_table_menu = [] for datas in rows[1]: opts = {'db':dbname,'table':str(datas[0])} lst = (str(datas[0]),self.drop_table, opts) parsed_table_menu.append(tuple(lst)) headeropts = {'db':dbname,'title':"Select Table to Drop",'user':self.username} table_menu = Menu(parsed_table_menu,self.screen, headeropts) table_menu.display()
class TableManager(object): def __init__(self, stdscreen, userpass): self.username = userpass['user'] self.password = userpass['pass'] self.screen = stdscreen self.dimensions = self.screen.getmaxyx() self.screen_manager = ScreenManager(self.screen) def listTables(self, dbname): table_query = "SELECT table_name FROM information_schema.tables where table_schema = 'public'" rows = query.query(table_query, dbname, self.screen, None, None, self.username, self.password) parsed_table_menu = [] for datas in rows[1]: opts = {'table': str(datas[0]), 'db': dbname} lst = (str(datas[0]), self.showTable, opts) parsed_table_menu.append(tuple(lst)) headeropts = { 'db': dbname, 'title': "Select Table to Display", 'user': self.username } table_menu = Menu(parsed_table_menu, self.screen, headeropts) table_menu.display() def showTable(self, options): table = options['table'] db = options['db'] display_query = "SELECT * from " + table rows = query.query(display_query, db, self.screen, None, None, self.username, self.password) tableDisplay.navigate(rows, 0, 0, self.screen) self.screen.clear() def createTable(self, dbname): self.screen_manager.set_cursor_visible() curses.echo() self.screen_manager.display_mid( "Please enter a name for the new table: ") new_table_name = self.screen_manager.screen.getstr() self.screen.clear() table_creation_query = "CREATE TABLE IF NOT EXISTS " + new_table_name + "(ID INT PRIMARY KEY NOT NULL);" if query.query(table_creation_query, dbname, self.screen, 0, None, self.username, self.password) == -1: ScreenManager.throw(self.screen, "An error prevented table creation.") else: self.screen_manager.display_mid("Table successfully created!") self.screen_manager.screen.getstr() self.screen.clear() def drop_table(self, options): table = options['table'] db = options['db'] self.screen_manager.display_mid("Are you sure you want to delete " + table + "? (y/n)") confirmation = self.screen_manager.screen.getstr() if confirmation == 'y' or confirmation == "Y": tbl_delete_query = "DROP TABLE " + table + " CASCADE" if query.query(tbl_delete_query, db, self.screen, 0) == -1: self.screen_manager.display_mid("ERROR deleting table") self.screen.getch() self.screen.clear() else: self.screen_manager.display_mid("Table " + table + " deleted.") self.screen.getch() self.screen.clear() else: self.screen_manager.display_mid("Table " + table + " will not be deleted.") self.screen.getch() self.screen.clear() self.screen.clear() def list_drop_tables(self, dbname): table_query = "SELECT table_name FROM information_schema.tables where table_schema = 'public'" rows = query.query(table_query, dbname, self.screen, None, None, self.username, self.password) parsed_table_menu = [] for datas in rows[1]: opts = {'db': dbname, 'table': str(datas[0])} lst = (str(datas[0]), self.drop_table, opts) parsed_table_menu.append(tuple(lst)) headeropts = { 'db': dbname, 'title': "Select Table to Drop", 'user': self.username } table_menu = Menu(parsed_table_menu, self.screen, headeropts) table_menu.display()
class DatabaseManager(object): def __init__(self, stdscreen, userpass): self.username = userpass['user'] self.password = userpass['pass'] self.screen = stdscreen self.dimensions = self.screen.getmaxyx() self.screen_manager = ScreenManager(self.screen) self.all_databases_query = "SELECT pg_catalog.pg_database.datname FROM pg_catalog.pg_database WHERE pg_catalog.pg_get_userbyid(pg_catalog.pg_database.datdba) = \'%s\';" % (self.username) self.all_tables_query = "SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;" self.current_database = None #Database query methods def fetch_all_databases(self): databases = query.query(self.all_databases_query, 'postgres', self.screen, None, None, self.username, self.password) return databases[1] def create_database(self, name): to_query = "SELECT 1 FROM pg_database WHERE datname = \'%s\'" % (name) database_exists = query.query(to_query, 'postgres', self.screen, None, None, self.username, self.password) if database_exists[1]: ScreenManager.throw(self.screen, 'Database already exists.') return False else: db_creation_query = "CREATE DATABASE " + name if query.query(db_creation_query, 'postgres', self.screen, 0, None, self.username, self.password) == -1: ScreenManager.throw(self.screen, "An error prevented database creation.") return False return True #Display methods def display_all_databases(self): parsed_dbs = [] databases = self.fetch_all_databases() if databases is not None: for db in databases: lst = list(db) lst.append(curses.flash) parsed_dbs.append(tuple(lst)) headeroptions = {'title':"List of Databases",'user':self.username} displayDatabasesMenu = Menu(parsed_dbs, self.screen, headeroptions) displayDatabasesMenu.display() #Display methods def display_all_databases_opt(self, action): parsed_dbs = [] databases = self.fetch_all_databases() if databases is not None: for db in databases: lst = (str(db[0]),action,str(db[0])) parsed_dbs.append(tuple(lst)) headoptions = {'title':"Select Database",'user':self.username} displayDatabasesMenu = Menu(parsed_dbs, self.screen, headoptions) displayDatabasesMenu.display() def display_all_copy_database(self): parsed_dbs = [] databases = self.fetch_all_databases() if databases is not None: for db in databases: lst = list(db) lst.append(self.copy_database) lst.append(db) parsed_dbs.append(tuple(lst)) headoptions = {'title':"Select Database to Copy",'user':self.username} displayDatabasesMenu = Menu(parsed_dbs, self.screen, headoptions) displayDatabasesMenu.display() def display_all_delete_database(self): parsed_dbs = [] databases = self.fetch_all_databases() if databases is not None: for db in databases: lst = list(db) lst.append(self.drop_database) lst.append(db) parsed_dbs.append(tuple(lst)) headoptions = {'title':"Select Database to delete",'user':self.username} displayDatabasesMenu = Menu(parsed_dbs, self.screen, headoptions) displayDatabasesMenu.display() def copy_database(self, database): db_name = database[0] self.screen_manager.set_cursor_visible() curses.echo() self.screen_manager.display_mid("Please enter a name for the new database: ") new_db_name = self.screen_manager.screen.getstr() self.screen.clear() db_copy_query = "CREATE DATABASE " + new_db_name + " WITH TEMPLATE " + db_name if query.query(db_copy_query, 'postgres', self.screen, 0, None, self.username, self.password) == -1: ScreenManager.throw(self.screen, "An error prevented database creation.") else: self.screen_manager.display_mid("The database " + new_db_name + " has been copied from " + db_name) self.screen.getstr() self.screen.clear() self.screen_manager.set_cursor_invisible() def drop_database(self, database): db_name = database[0] self.screen_manager.set_cursor_visible() curses.echo() self.screen_manager.display_mid("Are you sure you want to delete " + db_name + "? (Y/N): ") confirmation = self.screen_manager.screen.getstr() if confirmation == 'Y': db_delete_query = "DROP DATABASE " + db_name if query.query(db_delete_query, 'postgres', self.screen, 0, None, self.username, self.password) == -1: ScreenManager.throw(self.screen, "An error prevented database creation.") else: self.screen_manager.display_mid("The database " + db_name + " has been deleted") self.screen.getstr() else: self.screen_manager.display_mid(db_name + " will not be deleted") self.screen_manager.screen.getstr() self.screen.clear() self.screen_manager.set_cursor_invisible() def create_new_database(self): self.screen_manager.set_cursor_visible() curses.echo() self.screen_manager.display_mid("Please enter a name for the new database: ") database_name = self.screen_manager.screen.getstr() self.screen.clear() try: did_create_database = self.create_database(database_name) except RuntimeError as rt_error: self.screen_manager.display_mid("Error with the database creation query") else: if did_create_database is True: self.screen_manager.display_mid("The database " + database_name + " has been created") self.screen.getstr() self.screen.clear() self.screen_manager.set_cursor_invisible()