Add groupdb

This commit is contained in:
Faik Uygur
2009-06-15 11:16:37 +00:00
parent 89b7b287ad
commit 8127a83e04
5 changed files with 79 additions and 6 deletions
+1
View File
@@ -32,6 +32,7 @@ import pisi.db.installdb
import pisi.db.historydb
import pisi.db.sourcedb
import pisi.db.componentdb
import pisi.db.groupdb
import pisi.index
import pisi.config
import pisi.metadata
+5 -3
View File
@@ -13,17 +13,19 @@
def invalidate_caches():
# Invalidates pisi caches in use and forces to re-fill caches from disk when needed
for db in [packagedb.PackageDB(), sourcedb.SourceDB(), componentdb.ComponentDB(),
installdb.InstallDB(), historydb.HistoryDB()]:
installdb.InstallDB(), historydb.HistoryDB(), groupdb.GroupDB()]:
db.invalidate()
def flush_caches():
# Invalidate and flush caches to re-generate them when needed
for db in [packagedb.PackageDB(), sourcedb.SourceDB(), componentdb.ComponentDB()]:
for db in [packagedb.PackageDB(), sourcedb.SourceDB(),
componentdb.ComponentDB(), groupdb.GroupDB()]:
db.invalidate()
db.cache_flush()
def update_caches():
# Updates ondisk caches
for db in [packagedb.PackageDB(), sourcedb.SourceDB(), componentdb.ComponentDB(), installdb.InstallDB()]:
for db in [packagedb.PackageDB(), sourcedb.SourceDB(), componentdb.ComponentDB(),
installdb.InstallDB(), groupdb.GroupDB()]:
if db.is_initialized():
db.cache_save()
+68
View File
@@ -0,0 +1,68 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2009, TUBITAK/UEKAE
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2 of the License, or (at your option)
# any later version.
#
# Please read the COPYING file.
#
import gettext
__trans = gettext.translation('pisi', fallback=True)
_ = __trans.ugettext
import pisi
import pisi.db.repodb
import pisi.db.itembyrepo
import pisi.group
import pisi.db.lazydb as lazydb
class GroupDB(lazydb.LazyDB):
def __init__(self):
lazydb.LazyDB.__init__(self, cacheable=True)
def init(self):
group_nodes = {}
group_components = {}
self.repodb = pisi.db.repodb.RepoDB()
for repo in self.repodb.list_repos():
doc = self.repodb.get_repo_doc(repo)
group_nodes[repo] = self.__generate_groups(doc)
group_components[repo] = self.__generate_components(doc)
self.gdb = pisi.db.itembyrepo.ItemByRepo(group_nodes)
self.gcdb = pisi.db.itembyrepo.ItemByRepo(group_components)
def __generate_components(self, doc):
groups = {}
for c in doc.tags("Component"):
groups.setdefault(c.getTagData("Group"), []).append(c.getTagData("Name"))
return groups
def __generate_groups(self, doc):
return dict(map(lambda x: (x.getTagData("Name"), x.toString()), doc.tags("Group")))
def has_group(self, name, repo = None):
return self.gdb.has_item(name, repo)
def list_groups(self, repo=None):
return self.gdb.get_item_keys(repo)
def get_group(self, name, repo = None):
if not self.has_group(name, repo):
raise Exception(_('Group %s not found') % name)
group = pisi.group.Group()
group.parse(self.gdb.get_item(name, repo))
return group
def get_group_components(self, name, repo=None):
return self.gcdb.get_item(name, repo)
+1 -1
View File
@@ -23,7 +23,7 @@ class Error(pisi.Error):
__metaclass__ = autoxml.autoxml
class Group:
class Group(xmlfile.XmlFile):
"representation for group declarations"
__metaclass__ = autoxml.autoxml
+4 -2
View File
@@ -29,6 +29,7 @@ import pisi.pxml.xmlfile as xmlfile
import pisi.file
import pisi.pxml.autoxml as autoxml
import pisi.component as component
import pisi.group as group
class Error(pisi.Error):
pass
@@ -43,6 +44,7 @@ class Index(xmlfile.XmlFile):
t_Packages = [ [metadata.Package], autoxml.optional, "Package"]
#t_Metadatas = [ [metadata.MetaData], autoxml.optional, "MetaData"]
t_Components = [ [component.Component], autoxml.optional, "Component"]
t_Groups = [ [group.Group], autoxml.optional, "Group"]
def name(self):
return self.distribution.name + self.distribution.repositoryname
@@ -153,8 +155,8 @@ class Index(xmlfile.XmlFile):
ctx.ui.info("Adding groups.xml to index...")
groups_xml = group.Groups()
groups_xml.read(path)
for group in groups_xml.groups:
self.groups.append(group)
for grp in groups_xml.groups:
self.groups.append(grp)
def add_components(self, path):
ctx.ui.info("Adding components.xml to index...")