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()
Example #2
0
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()
Example #3
0
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()