示例#1
0
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))
示例#3
0
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))
示例#4
0
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()