class ColorThingyWindow(CommandBoxWindow): def __init__(self, rgb, conn, name='ColorThingyWindow'): CommandBoxWindow.__init__(self, name=name) self.browser = ColorThingy(rgb) self.rgb = rgb self.cmd = StatementCursor(conn, 'themer') self.theme = None self.vbox.add(self.browser) self.tbar.add_button('import', 'import', self.__ask_import__) self.tbar.add_button('insert', 'insert', self.__ask_insert__) self.tbar.add_button('update', 'update', self.__update_theme__) self.tbar.add_button('save', 'save', self.__save_files__) self._insert_box = None self._import_box = None def __ask_import__(self, *args): if not self._import_box: #print args #print '__import__' themes = self.cmd.getall(['theme'], 'themes') self._import_box = CList('hello') self._import_box.set_rows(themes) self._import_box.set_ok(self.__import_ok__) def __import_ok__(self, *args): theme = self._import_box.listbox.get_selected_data()[0]['theme'] self._import_box.destroy() self._import_box = None rows = self.cmd.select(table=theme) b = self.browser b._style.quick_set(rows) for e, sb in b._elements.items(): for s in sb.keys(): color = b._style.elements[e][s] sb[s] = color.name _bg_widget(sb[s].button, color) self.theme = theme def __ask_insert__(self, *args): if not self._import_box: self._insert_box = EntryDialog('please insert name') self._insert_box.set_ok(self.__insert_ok__) def __insert_ok__(self, *args): style = self.browser._style tname = self._insert_box.get() self.theme = tname table = ThemeTable(tname) self.cmd.create_table(table) self.cmd.insert('themes', {'theme': tname}) for row in style.to_irows(): self.cmd.insert(tname, row) def __update_theme__(self, *args): if self.theme: for element, states in self.browser._style.to_urows(): self.cmd.update(self.theme, states, "element = '%s'" % element) def __save_files__(self, *args): colordict = Rgbdb() tmpl = GtkrcTemplate(self.theme, theme_base, self.browser._style) tmpl.write_files()
class RepositoryManager(object): def __init__(self, conn): self.conn = conn self.main = StatementCursor(self.conn, 'RepositoryMain') self.repos = StatementCursor(self.conn, 'Repository') self.repos.set_table('repository') self.sources = StatementCursor(self.conn, 'Sources') self.sources.set_table('sources') self.release = ReleaseCursor(self.conn) self.repsections = StatementCursor(self.conn, 'repos_section') self.repsections.set_table('repos_section') self.__init_db__() def __init_db__(self): if not len(self.main.tables()): map(self.main.create_table, primary_tables()) def drop_source(self, name, type): nameclause = Eq('name', name) clause = nameclause & Eq('type', type) for section in self.get_sections(name): self.main.drop(list_tablename(name, type, section)) self.sources.delete(clause=clause) sources = self.sources.select(clause=clause) if not len(sources): self.repsections.delete(clause=nameclause) self.repos.delete(clause=nameclause) def add_source(self, name, source): source = make_source(source) if name not in [x.name for x in self.repos.select()]: self.repos.insert(data=dict(name=name)) clause = Eq('name', name) & Eq('type', source.type) count = int(self.sources.select(fields=['count(name)'], clause=clause)[0][0]) if count == 0: if islocaluri(source.uri): data = dict(name=name, type=source.type, uri=source.uri, suite=source.suite) self.sources.insert(data=data) current_sections = self.get_sections(name) sdata = dict(name=name, section=None) for section in source.sections: if section not in current_sections: sdata['section'] = section self.repsections.insert(data=sdata) fullparse = FullParseTable(name, source.type, section) if fullparse.name not in self.main.tables(): self.main.create_table(fullparse) listtable = ListTable(name, source.type, section) if listtable.name not in self.main.tables(): self.main.create_table(listtable) else: raise Error, 'local uris first' else: if not islocaluri(source.uri): data = dict(remote=source.uri) self.sources.update(data=data, clause=clause) else: raise ExistsError, 'already there' def get_sections(self, name): clause = Eq('name', name) return [x.section for x in self.repsections.iselect(fields=['section'], clause=clause)] def make_source_line(self, name, type, remote=False): repsrc = self.make_source(name, type, remote) return str(repsrc) def make_source(self, name, type, remote=False): clause = Eq('name', name) & Eq('type', type) source = self.sources.select_row(clause=clause) repsrc = RepositorySource() repsrc.type = source.type if remote: repsrc.uri = source.remote else: repsrc.uri = source.uri repsrc.suite = source.suite repsrc.sections = self.get_sections(name) repsrc.set_path() return repsrc def listfile(self, name, type, section=None): source = self.make_source(name, type) release = Release(source) print 'Need to pull from database!!!' if source.has_release(): return join(source.distpath, release.path(section)) else: return join(source.distpath, source.listfile()) def get_remote(self, name, type, remote=True): return self.make_source(name, type, remote=True) def parse_section(self, name, type, section=None): listfile = self.listfile(name, type, section) debug(listfile) if not isfile(listfile): raise NoFileError, 'file not there' if type == 'deb': return full_parse(listfile) elif type == 'deb-src': return parse_sources(listfile) else: raise Error, 'bad source type' def add_repository(self, name): self.repos.insert(data=dict(name=name))
class RepositoryManager(object): def __init__(self, conn): self.conn = conn self.main = StatementCursor(self.conn, 'RepositoryMain') self.repos = StatementCursor(self.conn, 'Repository') self.repos.set_table('repository') self.sources = StatementCursor(self.conn, 'Sources') self.sources.set_table('sources') self.release = ReleaseCursor(self.conn) self.repsections = StatementCursor(self.conn, 'repos_section') self.repsections.set_table('repos_section') self.__init_db__() def __init_db__(self): if not len(self.main.tables()): map(self.main.create_table, primary_tables()) def drop_source(self, name, type): nameclause = Eq('name', name) clause = nameclause & Eq('type', type) for section in self.get_sections(name): self.main.drop(list_tablename(name, type, section)) self.sources.delete(clause=clause) sources = self.sources.select(clause=clause) if not len(sources): self.repsections.delete(clause=nameclause) self.repos.delete(clause=nameclause) def add_source(self, name, source): source = make_source(source) if name not in [x.name for x in self.repos.select()]: self.repos.insert(data=dict(name=name)) clause = Eq('name', name) & Eq('type', source.type) count = int( self.sources.select(fields=['count(name)'], clause=clause)[0][0]) if count == 0: if islocaluri(source.uri): data = dict(name=name, type=source.type, uri=source.uri, suite=source.suite) self.sources.insert(data=data) current_sections = self.get_sections(name) sdata = dict(name=name, section=None) for section in source.sections: if section not in current_sections: sdata['section'] = section self.repsections.insert(data=sdata) fullparse = FullParseTable(name, source.type, section) if fullparse.name not in self.main.tables(): self.main.create_table(fullparse) listtable = ListTable(name, source.type, section) if listtable.name not in self.main.tables(): self.main.create_table(listtable) else: raise Error, 'local uris first' else: if not islocaluri(source.uri): data = dict(remote=source.uri) self.sources.update(data=data, clause=clause) else: raise ExistsError, 'already there' def get_sections(self, name): clause = Eq('name', name) return [ x.section for x in self.repsections.iselect(fields=['section'], clause=clause) ] def make_source_line(self, name, type, remote=False): repsrc = self.make_source(name, type, remote) return str(repsrc) def make_source(self, name, type, remote=False): clause = Eq('name', name) & Eq('type', type) source = self.sources.select_row(clause=clause) repsrc = RepositorySource() repsrc.type = source.type if remote: repsrc.uri = source.remote else: repsrc.uri = source.uri repsrc.suite = source.suite repsrc.sections = self.get_sections(name) repsrc.set_path() return repsrc def listfile(self, name, type, section=None): source = self.make_source(name, type) release = Release(source) print 'Need to pull from database!!!' if source.has_release(): return join(source.distpath, release.path(section)) else: return join(source.distpath, source.listfile()) def get_remote(self, name, type, remote=True): return self.make_source(name, type, remote=True) def parse_section(self, name, type, section=None): listfile = self.listfile(name, type, section) debug(listfile) if not isfile(listfile): raise NoFileError, 'file not there' if type == 'deb': return full_parse(listfile) elif type == 'deb-src': return parse_sources(listfile) else: raise Error, 'bad source type' def add_repository(self, name): self.repos.insert(data=dict(name=name))
class ColorThingyWindow(CommandBoxWindow): def __init__(self, rgb, conn, name='ColorThingyWindow'): CommandBoxWindow.__init__(self, name=name) self.browser = ColorThingy(rgb) self.rgb = rgb self.cmd = StatementCursor(conn, 'themer') self.theme = None self.vbox.add(self.browser) self.tbar.add_button('import', 'import', self.__ask_import__) self.tbar.add_button('insert', 'insert', self.__ask_insert__) self.tbar.add_button('update', 'update', self.__update_theme__) self.tbar.add_button('save', 'save', self.__save_files__) self._insert_box = None self._import_box = None def __ask_import__(self, *args): if not self._import_box: #print args #print '__import__' themes = self.cmd.getall(['theme'], 'themes') self._import_box = CList('hello') self._import_box.set_rows(themes) self._import_box.set_ok(self.__import_ok__) def __import_ok__(self, *args): theme = self._import_box.listbox.get_selected_data()[0]['theme'] self._import_box.destroy() self._import_box = None rows = self.cmd.select(table=theme) b = self.browser b._style.quick_set(rows) for e, sb in b._elements.items(): for s in sb.keys(): color = b._style.elements[e][s] sb[s] = color.name _bg_widget(sb[s].button, color) self.theme = theme def __ask_insert__(self, *args): if not self._import_box: self._insert_box = EntryDialog('please insert name') self._insert_box.set_ok(self.__insert_ok__) def __insert_ok__(self, *args): style = self.browser._style tname = self._insert_box.get() self.theme = tname table = ThemeTable(tname) self.cmd.create_table(table) self.cmd.insert('themes', {'theme':tname}) for row in style.to_irows(): self.cmd.insert(tname, row) def __update_theme__(self, *args): if self.theme: for element, states in self.browser._style.to_urows(): self.cmd.update(self.theme, states, "element = '%s'" %element) def __save_files__(self, *args): colordict = Rgbdb() tmpl = GtkrcTemplate(self.theme, theme_base, self.browser._style) tmpl.write_files()