class LoginScreen: def __init__(self): self.username = '' #username we will store from the user input self.password = '' self.screen = curses.initscr() self.screen_manager = ScreenManager(self.screen) #recursive function used to select either create account or login def selector(self, location): self.screen.keypad(1) dimensions = self.screen.getmaxyx() self.screen.clear() message = "Select Using ->, <-, and Enter:" self.screen.addstr(dimensions[0] / 3, dimensions[1] / 2 - len(message) / 2, message) if (location): message = 'Login' self.screen.addstr(dimensions[0] / 2, dimensions[1] / 3 - len(message) / 2, message, curses.A_DIM) message = 'Create User' self.screen.addstr(dimensions[0] / 2, 2 * dimensions[1] / 3 - len(message) / 2, message, curses.A_STANDOUT) self.screen.refresh() else: message = 'Login' self.screen.addstr(dimensions[0] / 2, dimensions[1] / 3 - len(message) / 2, message, curses.A_STANDOUT) message = 'Create User' self.screen.addstr(dimensions[0] / 2, 2 * dimensions[1] / 3 - len(message) / 2, message, curses.A_DIM) self.screen.refresh() choice = self.screen.getch() if choice == ord('\n'): return location elif choice == curses.KEY_LEFT: return LoginScreen.selector(self, 0) elif choice == curses.KEY_RIGHT: return LoginScreen.selector(self, 1) else: return LoginScreen.selector(self, location) #function used to insert a new user into the databse: def create_user(self): self.screen_manager.display_mid('Please enter your desired Username: '******'Please enter your desired Password: '******'%s\'" % self.username rows = query.query(to_query, 'postgres', self.screen) if rows[1]: ScreenManager.throw(self.screen, 'Username already in use.') return LoginScreen.create_user(self) else: to_query = "CREATE USER %s WITH CREATEDB PASSWORD \'%s\'" % ( self.username, self.password) if query.query(to_query, 'postgres', self.screen) == -1: ScreenManager.throw(self.screen, "An error prevented user creation.") return False to_query = "CREATE DATABASE %s_default" % (self.username) if query.query(to_query, 'postgres', self.screen, 0) == -1: ScreenManager.throw( self.screen, "An error occured during user default database creation.") return False to_query = "ALTER DATABASE %s_default owner to %s" % ( self.username, self.username) if query.query(to_query, 'postgres', self.screen) == -1: ScreenManager.throw( self.screen, "An error occured while assigning new user to default database." ) return False return True def login(self): self.screen_manager.display_mid('Please enter your Username: '******'Please enter your Password: '******'root\'" rows = query.query(to_query, 'postgres', None, None, None, self.username, self.password) if rows != -1 and rows != -2: return True elif rows == -1: ScreenManager.throw( self.screen, "Couldn't sign in. Please ensure your system is set up correctly." ) return False else: ScreenManager.throw(self.screen, "Incorrect Username or Password.") return False #function that prints a flowing welcome message def welcome(self): anim = Animators() anim.enter_down(self.screen, "Welcome!") time.sleep(.25) anim.exit_up(self.screen, "Welcome!") self.screen.clear()
class LoginScreen: def __init__(self): self.username = '' #username we will store from the user input self.password = '' self.screen = curses.initscr() self.screen_manager = ScreenManager(self.screen) #recursive function used to select either create account or login def selector(self, location): self.screen.keypad(1) dimensions = self.screen.getmaxyx() self.screen.clear() message = "Select Using ->, <-, and Enter:" self.screen.addstr(dimensions[0]/3, dimensions[1]/2 - len(message)/2, message) if(location): message = 'Login' self.screen.addstr(dimensions[0]/2, dimensions[1]/3 - len(message)/2, message, curses.A_DIM) message = 'Create User' self.screen.addstr(dimensions[0]/2, 2 * dimensions[1]/3 - len(message)/2, message, curses.A_STANDOUT) self.screen.refresh() else: message = 'Login' self.screen.addstr(dimensions[0]/2, dimensions[1]/3 - len(message)/2, message, curses.A_STANDOUT) message = 'Create User' self.screen.addstr(dimensions[0]/2, 2 * dimensions[1]/3 - len(message)/2, message, curses.A_DIM) self.screen.refresh() choice = self.screen.getch() if choice == ord('\n'): return location elif choice == curses.KEY_LEFT: return LoginScreen.selector(self, 0) elif choice == curses.KEY_RIGHT: return LoginScreen.selector(self, 1) else: return LoginScreen.selector(self, location) #function used to insert a new user into the databse: def create_user(self): self.screen_manager.display_mid('Please enter your desired Username: '******'Please enter your desired Password: '******'%s\'" % self.username rows = query.query(to_query, 'postgres', self.screen) if rows[1]: ScreenManager.throw(self.screen, 'Username already in use.') return LoginScreen.create_user(self) else: to_query = "CREATE USER %s WITH CREATEDB PASSWORD \'%s\'" % (self.username, self.password) if query.query(to_query, 'postgres', self.screen) == -1: ScreenManager.throw(self.screen, "An error prevented user creation.") return False to_query = "CREATE DATABASE %s_default" % (self.username) if query.query(to_query, 'postgres', self.screen, 0) == -1: ScreenManager.throw(self.screen, "An error occured during user default database creation.") return False to_query = "ALTER DATABASE %s_default owner to %s" % (self.username, self.username) if query.query(to_query, 'postgres', self.screen) == -1: ScreenManager.throw(self.screen, "An error occured while assigning new user to default database.") return False return True def login(self): self.screen_manager.display_mid('Please enter your Username: '******'Please enter your Password: '******'root\'" rows = query.query(to_query, 'postgres', None, None, None, self.username, self.password) if rows != -1 and rows != -2: return True elif rows == -1: ScreenManager.throw(self.screen, "Couldn't sign in. Please ensure your system is set up correctly.") return False else: ScreenManager.throw(self.screen, "Incorrect Username or Password.") return False #function that prints a flowing welcome message def welcome(self): anim = Animators() anim.enter_down(self.screen, "Welcome!") time.sleep(.25) anim.exit_up(self.screen, "Welcome!") self.screen.clear()
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()