def database_command(self, menuitem, name): if name == 'connect': if self.conn is None and not self.dialogs['dbname']: msg = 'connect to which database?' dbname = self.dblist.get_selected_data()[0].datname self.dialogs['dbname'] = dialogs.Entry(msg, name='dbname') entry = self.dialogs['dbname'] entry.set_ok(self.ok_dialog) entry.set_cancel(self.destroy_dialog) entry.set(dbname) else: dialogs.Message('no multiple connections yet') elif name == 'disconnect': if self.conn is not None: self.main.close() self.conn.close() self.conn = None self.dbname = None else: dialogs.Message('no connection to leave') elif name in ['backup', 'restore']: filesel = FileSelection(title='%s database' % name) filesel.cancel_button.connect('clicked', lambda x: filesel.destroy()) filesel.show() bkup_path = self.cfg['import_path'] filesel.set_filename(self._filepath_(bkup_path)) filesel.ok_button.connect('clicked', self.ok_file, filesel) filesel.set_data('action', name) else: dialogs.Message('%s unimplemented' % name)
def env_command(self, menuitem, command): if command == 'update': dialogs.Message('updating %s' % self.current_trait) self.update_environment() elif command == 'create': self.ask_new_entry() else: dialogs.Message('ack')
def _extract_packages(self): dialogs.Message('deprecated(for now)') if False: if self.extracted is None: packages = [p.package for p in self.traitpackage.packages()] path = self.trait_temp_path() self.set_extracted(True) packs = ',\n'.join(packages) message = 'extracted packages:\n %s into:\n%s' % (packs, path) dialogs.Message(message) else: dialogs.Message('already extracted')
def export_trait(self, trait, path=None): if path is None: path = self.tarball_path tt = TraitTemplate(self.conn, self.suite) tt.set_trait(trait) backup_trait(self.conn, self.suite, trait, path) dialogs.Message('%s exported to %s' % (trait, path))
def template_command(self, menuitem, command): if self.browser.extracted is None and command in [ 'new', 'diff', 'load' ]: dialogs.Message('packages not yet extracted') else: self.browser.template_command(command)
def delete_row(self, button, data): rows = self.dcbox.get_selected_data() if len(rows) != 1: dialogs.Message('need to select something') else: r = rows[0] self.dc.delete(r.name, r.trait)
def template_command(self, meuitem, command): if command in ['new']: path = self.trait_temp_path(filesel=True) select_a_file('new', path, self.fileselect_ok) elif command == 'diff': path = self.suite_template_path(filesel=True) select_a_file('load', path, self.fileselect_ok) elif command == 'save': self.save_template() elif command == 'load': path = self.suite_template_path(filesel=True) select_a_file('load', path, self.fileselect_ok) elif command == 'done': try: template = self.get_selected_data()[0].template self.remove_page(template) except IndexError: pass elif command == 'drop': print 'need to drop template' rows = self.get_selected_data() if len(rows): row = rows[0] self.traittemplate.drop_template(row.package, row.template) self.remove_page(row.template) self.reset_rows() else: dialogs.Message('a template must be selected') elif command == 'root': if self.dialogs['rootsel'] is None: path = self.tarball_path + '/' select_a_file('root', path, self.tarball_selected) elif command == 'edit': self.edit_template()
def remove_item(self, *args): d = self.dialogs['remove'] name = d.get_selected_data()[0].name environ = TraitEnvironment(self.conn, self.suite, self.current_trait) del environ[name] dialogs.Message('%s deleted' % name) self.destroy_dialog(d)
def dbconnect(self, dbname): self.cfg.change('database') dsn = self.cfg.get_dsn() dsn['dbname'] = dbname self.conn = PaellaConnection(dsn) self.main = StatementCursor(self.conn, 'mainManager') self.dbname = dbname dialogs.Message('connected to database %s' % dbname)
def new_script(self, name): if self.script.get(name) is not None: dialogs.Message('script exists') raise Error, 'script exists' tmp = strfile() self.script.insert_script(name, tmp) self.append_script(name) tmp.close() self.edit_script(None, name, None)
def pkey_command(self, menuitem, command): if command == 'insert': if self.dialogs['insert'] is None: dialog = dialogs.Entry('insert a %s' % self.pkey, name='insert') dialog.set_ok(self.pkey_insert_ok) dialog.set_cancel(self.destroy_dialog) self.dialogs['insert'] = dialog elif command == 'update': dialogs.Message('need to set update to cascade in db') elif command == 'done': value = None try: value = self.listbox.get_selected_data()[0][0] except IndexError: dialogs.Message('need to select %s first' % self.pkey) if value is not None: dialogs.Message('ok, i am done.')
def _get_debconf(self, data=True): rows = self.get_selected_data() if not len(rows): raise dialogs.Message('need to select something') name = rows[0].name if data: return self._get_debconf_data(name) else: return name
def create_family(self, button): name = button.get_name() if name == 'create': family = self.dialogs[name].get() try: self.browser.family.create_family(family) except ExistsError: dialogs.Message('family %s already exists' % family) self.destroy_dialog(self.dialogs['create']) self.browser.reset_rows()
def menu_command(self, menuitem, name): client = self.client_view.get_selected_data()[0][0] if name == 'export': self.export_client(client) elif name == 'import': self.import_client(client) elif name == 'remove': self.remove_client(client) else: dialogs.Message('%s %s' % (name, client))
def load_template(self, path): template, package = get_file_path(path, self.suite_template_path()) if template[-9:] == '.template': template = template[:-9] if template not in self.templates: try: orig = self.find_original(template) self.insert_new_template(package, template, path) except NoExistError: dialogs.Message('%s not in extracted packages' % template)
def modify_trait(self, menuitem, action): if action == 'hello': dialogs.Message('hello') elif action in ['import', 'update']: filesel = select_a_file(action, self.tarball_path + '/', self.select_trait_tarball) elif action in ['updatedir', 'exportdir', 'importdir']: filesel = select_a_file(action, self.tarball_path + '/', self.select_traitdir) elif action == 'export': try: trait = self.listbox.get_selected_data()[0].trait #self.pages[trait].extract_packages() self.select_export_path(trait) except IndexError: dialogs.Message('no trait selected') elif action == 'extract': try: trait = self.listbox.get_selected_data()[0].trait self.pages[trait].extract_packages() except IndexError: dialogs.Message('no trait selected')
def pkey_insert_ok(self, *args): dialog = self.dialogs['insert'] value = dialog.get() print value try: self.main.insert(data={self.pkey: value}) inserted = True except OperationalError: dialogs.Message('bad query\n%s is not allowed' % value) if inserted: self.destroy_dialog(dialog) self.reset_rows()
def create_trait(self, button): name = button.get_name() debug(name) if name == 'create': trait = self.dialogs[name].get() try: self.browser.trait.create_trait(trait) except ExistsError: dialogs.Message('trait %s already exists' % trait) self.browser.traits.insert(data=insert_data) self.destroy_dialog(self.dialogs['create']) self.browser.reset_rows()
def insert_new_template(self, package, template, path): newfile = readfile(path) filename = self.template_filename(package, template) makepaths(dirname(filename)) writefile(filename, newfile) try: self.traittemplate.insert_template( dict(package=package, template=template), file(path)) except OperationalError: dialogs.Message('template already exists') self.set_template(package, template) self.reset_rows()
def modify_trait(self, menuitem, action): try: trait = self.listbox.get_selected_data()[0].trait except IndexError: dialogs.Message('no trait selected') raise IndexError if action == 'getconfig': self.select_configdat(action='getconfig') elif action == 'getfromtar': self.select_configdat(action='getfromtar') elif action == 'update': print 'update' elif action == 'delete': print 'delete'
def fileselect_ok(self, button, filesel): path = filesel.get_filename() action = filesel.get_data('action') filesel.destroy() if action == 'new': template, package = get_file_path(path, self.trait_temp_path()) if template not in self.templates: self.insert_new_template(package, template, path) else: dialogs.Message('template already exists') elif action == 'diff': pass elif action == 'load': self.load_template(path)
def _connect(self, dbname): if self.connections.has_key(dbname): dialogs.Message('connection already exists for %s' % dbname) else: conn = BaseConnection(user=self._dbuser, host=self._dbhost, dbname=dbname, passwd=self._dbpasswd) self.connections[dbname] = conn cursor = StatementCursor(self.connections[dbname]) rows = cursor.tables() tables = ScrollCList(rcmenu=self.table_edit_menu) tables.set_rows(rows, columns=['table']) self.append_page(tables, dbname) self.set_current_page(dbname)
def toolbar_button_pressed(self, button, data): if data == 'machines': MachinesWin(self.conn) elif data == 'filesystems': FsWin(self.conn) elif data == 'machine types': #dialogs.Message('not ready yet') MachineTypesWin(self.conn) elif data == 'disks': DiskWin(self.conn) elif data == 'mounts': MountsWin(self.conn) elif data == 'kernels': KernelsWin(self.conn) else: dialogs.Message('unhandled command %s' % data)
def edit_command(self, menuitem, name): if self.conn is None: dialogs.Message('Not Connected') else: if name == 'profiles': self.workspace['profiles'] = ProfileGenWin( self.conn, self.dbname) elif name in ['suitemanager']: if not self.dialogs[name]: msg = 'select a suite' self.dialogs[name] = dialogs.CList(msg, name=name) lbox = self.dialogs[name] lbox.set_rows(self.main.select(table='suites')) lbox.set_ok(self.suite_selected) lbox.set_cancel(self.destroy_dialog) else: self.run_tbar(None, name)
def modify_trait(self, menuitem, action): parent = menuitem.get_parent() command = parent.get_name() rows = self.get_selected_data() if len(rows): trait = rows[0].trait print action, trait if command == 'edit': if action not in self.pages[trait].pages: self.pages[trait].new_script(action) else: self.pages[trait].edit_script(None, action, None) elif command == 'diff': print 'diff', action AllScriptsDialog('which script?', self.conn, self.suite) else: dialogs.Message('select a trait first')
def run_tbar(self, button=None, data=None): if data == 'profiles': self.workspace[data] = ProfileGenWin(self.conn, self.dbname) elif data == 'machines': self.workspace[data] = MainMachineWin(self.conn) elif data == 'traits': self.workspace[data] = TraitManagerWin(self.conn) elif data == 'families': self.workspace[data] = FamilyWin(self.conn) elif data == 'tdiff': self.workspace[data] = DifferWin(self.conn, 'template') elif data == 'sdiff': self.workspace[data] = DifferWin(self.conn, 'script') elif data == 'fdiff': self.workspace[data] = DifferWin(self.conn, 'family') elif data == 'default_environment': self.workspace[data] = DefEnvEditor(self.conn) else: dialogs.Message('bad command %s' % data)
def relmenu_command_selected(self, button, *data): command = button.get_name() dialog = self.dialogs[command] items = dialog.items() if command == 'insert': self.rel.insert(data=dict(items)) elif command == 'delete': print 'delete delete delete delete' clause = SimpleClause(items, '=', 'and') dialogs.Message(self.rel.stmt.delete(clause=clause)) if False: dialog = self.dialogs['insert'] print dialog items = dialog.items() print items self.rel.insert(data=dict(items)) self.destroy_dialog(dialog) self.reset_rows()
def edit_command(self, menuitem, name): if self.conn is None: dialogs.Message('Not Connected') else: if name == 'profiles': self.workspace['profiles'] = ProfileGenWin( self.conn, self.dbname) elif name in ['suitemanager']: if not self.dialogs[name]: msg = 'select a suite' self.dialogs[name] = dialogs.CList(msg, name=name) lbox = self.dialogs[name] lbox.set_rows(self.main.select(table='suites')) lbox.set_ok(self.suite_selected) lbox.set_cancel(self.destroy_dialog) elif name == 'traitmanager': self.workspace['traitmanager'] = TraitManagerWin(self.conn) elif name == 'machines': self.workspace['machines'] = MainMachineWin(self.conn) else: raise Error, 'bad edit_command'
def save_template(self): template_path = 'in database' package, template = self.package, self.template data = strfile(self.workspace.get_text()) self.traittemplate.save_template(package, template, data) dialogs.Message('saved %s in\n%s' % (template, template_path))
def edit_template(self): try: template = self.get_selected_data()[0].template self.pages[template].edit_template() except IndexError: dialogs.Message('a template must be selected')