Kaydet (Commit) ad562f25 authored tarafından Suleyman Poyraz's avatar Suleyman Poyraz

Rewrited ugly looking db library with xmlext

üst c9fb1883
......@@ -45,6 +45,10 @@ Gives a brief list of sources published in the repositories.
self.init(database = True, write = False)
l = self.sourcedb.list_sources()
if l:
maxlen = max([len(_p) for _p in l])
l.sort()
for p in l:
sf, repo = self.sourcedb.get_spec_repo(p)
......@@ -52,8 +56,7 @@ Gives a brief list of sources published in the repositories.
ctx.ui.info('[Repository: ' + repo + ']')
ctx.ui.info(str(sf.source))
else:
lenp = len(p)
#if p in installed_list:
# p = util.colorize(p, 'cyan')
p = p + ' ' * max(0, 15 - lenp)
sf.source.name += ' ' * max(0, maxlen - len(p))
ctx.ui.info('{0} - {1}'.format(sf.source.name, str(sf.source.summary)))
......@@ -20,17 +20,12 @@ import inary.db.repodb
import inary.db.itembyrepo
import inary.data.component as Component
import inary.db.lazydb as lazydb
import inary.sxml
from inary.sxml import autoxml, xmlext
class ComponentDB(lazydb.LazyDB):
def __init__(self):
lazydb.LazyDB.__init__(self, cacheable=True)
try:
import ciksemel
self.parser = "ciksemel"
except:
self.parser = "minidom"
def init(self):
component_nodes = {}
......@@ -49,42 +44,35 @@ class ComponentDB(lazydb.LazyDB):
self.cpdb = inary.db.itembyrepo.ItemByRepo(component_packages)
self.csdb = inary.db.itembyrepo.ItemByRepo(component_sources)
def __generate_packages(self, doc, ):
def __generate_packages(self, doc):
components = {}
if self.parser == "ciksemel":
for pkg in doc.tags("Package"):
components.setdefault(pkg.getTagData("PartOf"), []).append(pkg.getTagData("Name"))
else:
for pkg in doc.childNodes:
if pkg.nodeType == pkg.ELEMENT_NODE and pkg.tagName == "Package":
partOf = pkg.getElementsByTagName("PartOf")[0].firstChild.data
pkgName = pkg.getElementsByTagName("Name")[0].firstChild.data
components.setdefault(partOf, []).append(pkgName)
packages = xmlext.getTagByName(doc, "Package")
for pkg in packages:
name = xmlext.getNodeText(pkg, "Name")
partof = xmlext.getNodeText(pkg,"PartOf")
components.setdefault(partof, []).append(name)
return components
def __generate_sources(self, doc):
components = {}
if self.parser == "ciksemel":
for spec in doc.tags("SpecFile"):
src = spec.getTag("Source")
components.setdefault(src.getTagData("PartOf"), []).append(src.getTagData("Name"))
else:
for spec in doc.childNodes:
if spec.nodeType == spec.ELEMENT_NODE and spec.tagName == "SpecFile":
src = spec.getElementsByTagName("Source")[0]
partOf = src.getElementsByTagName("PartOf")[0].firstChild.data
pkgName = src.getElementsByTagName("Name")[0].firstChild.data
components.setdefault(partOf, []).append(pkgName)
specfile = xmlext.getTagByName(doc, "SpecFile")
for spec in specfile:
source = xmlext.getNode(spec, "Source")
name = xmlext.getNodeText(source, "Name")
partof = xmlext.getNodeText(source, "PartOf")
components.setdefault(partof, []).append(name)
return components
def __generate_components(self, doc):
if self.parser == "ciksemel":
return dict([(x.getTagData("Name"), x.toString()) for x in doc.tags("Component")])
else:
return dict([(x.getElementsByTagName("Name")[0].firstChild.data, x.toxml('utf-8')) for x in doc.getElementsByTagName("Component")])
components = {}
component = xmlext.getTagByName(doc, "Component")
for comp in component:
name = xmlext.getNodeText(comp, "Name")
components[name] = xmlext.toString(comp)
return components
def has_component(self, name, repo = None):
return self.cdb.has_item(name, repo)
......@@ -98,7 +86,7 @@ class ComponentDB(lazydb.LazyDB):
redesc = '<Description xml:lang="({0}|en)">.*?{1}.*?</Description>'
if not lang:
lang = inary.sxml.autoxml.LocalText.get_lang()
lang = autoxml.LocalText.get_lang()
found = []
for name, xml in self.cdb.get_items_iter(repo):
if name not in found and terms == [term for term in terms if re.compile(rename.format(lang, term), re.I).search(xml) or \
......
......@@ -19,6 +19,8 @@ import inary.db.repodb
import inary.db.itembyrepo
import inary.data.group as Group
import inary.db.lazydb as lazydb
from inary.sxml import xmlext
class GroupNotFound(Exception):
pass
......@@ -32,12 +34,6 @@ class GroupDB(lazydb.LazyDB):
group_nodes = {}
group_components = {}
try:
import ciksemel
self.parser = "ciksemel"
except:
self.parser = "minidom"
repodb = inary.db.repodb.RepoDB()
for repo in repodb.list_repos():
......@@ -50,31 +46,22 @@ class GroupDB(lazydb.LazyDB):
def __generate_components(self, doc):
groups = {}
components = xmlext.getTagByName(doc, "Component")
for comp in components:
group = xmlext.getNodeText(comp, "Group")
name = xmlext.getNodeText(comp, "Name")
groups.setdefault(group, []).append(name)
if self.parser=="ciksemel":
for c in doc.tags("Component"):
group = c.getTagData("Group")
if not group:
group = "unknown"
groups.setdefault(group, []).append(c.getTagData("Name"))
else:
for c in doc.childNodes:
if c.nodeType == c.ELEMENT_NODE and c.tagName == "Component":
group = c.getElementsByTagName("Group")[0]
if not group:
group = "unknown"
groups.setdefault(group.firstChild.data, []).append(c.getElementsByTagName("Name")[0].firstChild.data)
return groups
def __generate_groups(self, doc):
groups = {}
group = xmlext.getTagByName(doc, "Group")
for gr in group:
name = xmlext.getNodeText(gr, "Name")
groups[name] = xmlext.toString(gr)
if self.parser=="ciksemel":
return dict([(x.getTagData("Name"), x.toString()) for x in doc.tags("Group")])
else:
return dict([(x.getElementsByTagName("Name")[0].firstChild.data, x.toxml()) \
for x in doc.childNodes if x.nodeType == x.ELEMENT_NODE and x.tagName == "Group"])
return groups
def has_group(self, name, repo = None):
return self.gdb.has_item(name, repo)
......
......@@ -25,16 +25,9 @@ import inary.context as ctx
import inary.data
import inary.data.files as Files
import inary.db.lazydb as lazydb
import inary.sxml
from inary.sxml import autoxml, xmlext
import inary.util
try:
import ciksemel
parser = "ciksemel"
except:
import xml.dom.minidom as minidom
parser = "minidom"
class InstallDBError(inary.errors.Error):
pass
......@@ -99,57 +92,31 @@ class InstallDB(lazydb.LazyDB):
def __add_to_revdeps(self, package, revdeps):
metadata_xml = os.path.join(self.package_path(package), ctx.const.metadata_xml)
meta_doc = xmlext.parse(metadata_xml)
try:
pkg = xmlext.getNode(meta_doc, "Package")
except:
pkg = None
if pkg is None:
# If package info is broken or not available, skip it.
ctx.ui.warning(_("Installation info for package '{}' is broken. "
"Reinstall it to fix this problem.").format(package))
del self.installed_db[package]
return
if parser=="ciksemel":
try:
meta_doc = ciksemel.parse(metadata_xml)
pkg = meta_doc.getTag("Package")
except:
pkg = None
if pkg is None:
# If package info is broken or not available, skip it.
ctx.ui.warning(_("Installation info for package '{}' is broken. "
"Reinstall it to fix this problem.").format(package))
del self.installed_db[package]
return
deps = pkg.getTag('RuntimeDependencies')
if deps:
for dep in deps.tags("Dependency"):
revdep = revdeps.setdefault(dep.firstChild().data(), {})
revdep[package] = dep.toString()
for anydep in deps.tags("AnyDependency"):
for dep in anydep.tags("Dependency"):
revdep = revdeps.setdefault(dep.firstChild().data(), {})
revdep[package] = anydep.toString()
deps= xmlext.getTagByName(meta_doc, 'RuntimeDependencies')
if deps:
for dep in xmlext.getTagByName(deps, 'Dependency'):
else:
try:
meta_doc = minidom.parse(metadata_xml).documentElement
pkg = meta_doc.getElementsByTagName("Package")[0]
except:
pkg = None
if pkg is None:
# If package info is broken or not available, skip it.
ctx.ui.warning(_("Installation info for package '{}' is broken. "
"Reinstall it to fix this problem.").format(package))
del self.installed_db[package]
return
deps = pkg.getElementsByTagName('RuntimeDependencies')
if deps:
for dep_tag in deps:
for dep in dep_tag.childNodes:
if dep.nodeType == dep.ELEMENT_NODE and dep.tagName == "Dependency":
revdep = revdeps.setdefault(dep.childNodes[0].data, {})
revdep[package] = dep.toxml('utf-8')
for anydep in dep_tag.childNodes:
if dep.nodeType == dep.ELEMENT_NODE and dep.tagName == "AnyDependency":
for dep in anydep.getElementsByTagName ("Dependency"):
revdep = revdeps.setdefault(dep.firstChild.data, {})
revdep[package] = anydep.toxml('utf-8')
revdep = revdeps.setdefault(xmlext.getNodeText(dep), {})
revdep[package] = xmlext.toString(dep)
for anydep in xmlext.getTagByName(deps, 'AnyDependency'):
for dep in xmlext.getTagByName(anydep, 'Dependency'):
revdep = revdeps.setdefault(xmlext.getNodeText(dep), {})
revdep[package] = xmlext.toString(anydep)
def __generate_revdeps(self):
revdeps = {}
......@@ -180,56 +147,63 @@ class InstallDB(lazydb.LazyDB):
return found
def __get_version(self, meta_doc):
if parser== "ciksemel":
history = meta_doc.getTag("Package").getTag("History")
version = history.getTag("Update").getTagData("Version")
release = history.getTag("Update").getAttribute("release")
package = xmlext.getNode(meta_doc,'Package')
update = xmlext.getNode(meta_doc,'Update')
history = xmlext.getNodeText(package, 'History')
version = xmlext.getNodeText(update, 'Version')
release = xmlext.getNodeText(update, 'release')
else:
history = meta_doc.getElementsByTagName("Package")[0].getElementsByTagName("History")[0]
version = history.getElementsByTagName("Update")[0].getElementsByTagName("Version")[0].firstChild.data
release = history.getElementsByTagName("Update")[0].getAttribute("release")[0]
# TODO Remove None
return version, release, None
def __get_distro_release(self, meta_doc):
if parser== "ciksemel":
distro = meta_doc.getTag("Package").getTagData("Distribution")
release = meta_doc.getTag("Package").getTagData("DistributionRelease")
else:
distro = meta_doc.getElementsByTagName("Package")[0].getElementsByTagName("Distribution")[0].firstChild.data
release = meta_doc.getElementsByTagName("Package")[0].getElementsByTagName("DistributionRelease")[0].firstChild.data
package = xmlext.getNode(meta_doc, 'Package')
distro = xmlext.getNodeText(package, 'Distribution')
release = xmlext.getNodeText(package, 'DistributionRelease')
return distro, release
def __get_install_tar_hash(self, meta_doc):
if parser== "ciksemel":
hash = meta_doc.getTag("Package").getTagData("InstallTarHash")
else:
hash = meta_doc.getElementsByTagName("Package")[0].getElementsByTagName("InstallTarHash")[0].firstChild.data
package = xmlext.getNode(meta_doc, 'Package')
hash = xmlext.getNodeText(package, 'InstallTarHash')
return hash
def get_install_tar_hash(self, package):
metadata_xml = os.path.join(self.package_path(package), ctx.const.metadata_xml)
if parser== "ciksemel":
try:
import ciksemel
meta_doc = ciksemel.parse(metadata_xml)
else:
except:
import xml.dom.minidom as minidom
meta_doc = minidom.parse(metadata_xml).documentElement
return self.__get_install_tar_hash(meta_doc)
def get_version_and_distro_release(self, package):
metadata_xml = os.path.join(self.package_path(package), ctx.const.metadata_xml)
if parser== "ciksemel":
try:
import ciksemel
meta_doc = ciksemel.parse(metadata_xml)
else:
except:
import xml.dom.minidom as minidom
meta_doc = minidom.parse(metadata_xml).documentElement
return self.__get_version(meta_doc) + self.__get_distro_release(meta_doc)
def get_version(self, package):
metadata_xml = os.path.join(self.package_path(package), ctx.const.metadata_xml)
if parser== "ciksemel":
try:
import ciksemel
meta_doc = ciksemel.parse(metadata_xml)
else:
except:
import xml.dom.minidom as minidom
meta_doc = minidom.parse(metadata_xml).documentElement
return self.__get_version(meta_doc)
def get_files(self, package):
......@@ -257,7 +231,7 @@ class InstallDB(lazydb.LazyDB):
if not fields:
fields = {'name': True, 'summary': True, 'desc': True}
if not lang:
lang = inary.sxml.autoxml.LocalText.get_lang()
lang = autoxml.LocalText.get_lang()
found = []
for name in self.list_installed():
xml = open(os.path.join(self.package_path(name), ctx.const.metadata_xml)).read()
......@@ -295,21 +269,20 @@ class InstallDB(lazydb.LazyDB):
return info
def __make_dependency(self, depStr):
if parser=="ciksemel":
try:
import ciksemel
node = ciksemel.parseString(depStr)
dependency = inary.analyzer.dependency.Dependency()
dependency.package = node.firstChild().data()
if node.attributes():
attr = node.attributes()[0]
dependency.__dict__[str(attr)] = node.getAttribute(str(attr))
else:
except:
import xml.dom.minidom as minidom
node = minidom.parseString(depStr).documentElement
dependency = inary.analyzer.dependency.Dependency()
dependency.package = node.childNodes[0].data
if node.attributes:
attr = node.attributes[0]
dependency.__dict__[str(attr)] = node.getAttribute(str(attr))
dependency = inary.analyzer.dependency.Dependency()
dependency.package = xmlext.getNodeText(node)
if xmlext.getAttributeList(node):
attr = xmlext.getAttributeList(node)[0]
dependency.__dict__[str(attr)] = xmlext.getNodeAttribute(node.str(attr))
return dependency
......
......@@ -22,19 +22,12 @@ import inary.analyzer.dependency
import inary.db.itembyrepo
import inary.db.lazydb as lazydb
import inary.context as ctx
from inary.sxml import xmlext
import gettext
__trans = gettext.translation('inary', fallback=True)
_ = __trans.gettext
try:
import ciksemel
parser = "ciksemel"
except:
import xml.dom.minidom as minidom
parser = "minidom"
class PackageDB(lazydb.LazyDB):
def __init__(self):
......@@ -64,72 +57,40 @@ class PackageDB(lazydb.LazyDB):
## Generate functions look sooo ugly
def __generate_replaces(self, doc):
if parser== "ciksemel":
return [x.getTagData("Name") for x in doc.tags("Package") if x.getTagData("Replaces")]
else:
return [node.getElementsByTagName("Name")[0].firstChild.data \
for node in doc.childNodes \
if node.nodeType == node.ELEMENT_NODE and \
node.tagName == "Package" and \
node.getElementsByTagName("Replaces")]
replaces = []
packages = xmlext.getTagByName(doc, "Package")
for node in packages:
if xmlext.getNodeText(node, "Replaces"):
replaces.append(xmlext.getNodeText(node, "Name"))
return replaces
def __generate_obsoletes(self, doc):
if parser=="ciksemel":
distribution = doc.getTag("Distribution")
obsoletes = distribution and distribution.getTag("Obsoletes")
src_repo = doc.getTag("SpecFile") is not None
if not obsoletes or src_repo:
return []
return [x.firstChild().data() for x in obsoletes.tags("Package")]
else:
distribution = doc.getElementsByTagName("Distribution")[0]
obsoletes = distribution and distribution.getElementsByTagName("Obsoletes")[0]
try:
src_repo = doc.getElementsByTagName("SpecFile")[0]
except:
src_repo = None
distribution = xmlext.getNode(doc, "Distribution")
obsoletes = distribution and xmlext.getNode(distribution, "Obsoletes")
src_repo = xmlext.getNode(doc, "SpecFile") is not None
if not obsoletes or src_repo:
return []
return [x.childNodes[0].data for x in obsoletes.getElementsByTagName("Package")]
if not obsoletes or src_repo:
return []
return [xmlext.getNodeText(x) for x in xmlext.getTagByName(obsolates, "Package")]
def __generate_packages(self, doc):
pdict={}
if parser=="ciksemel":
for x in doc.tags("Package"):
pdict[x.getTagData("Name")]= gzip.zlib.compress(x.toString().encode('utf-8'))
else:
for node in doc.childNodes:
if node.nodeType == node.ELEMENT_NODE and node.tagName == "Package":
name = node.getElementsByTagName('Name')[0].firstChild.data
pdict[name]= gzip.zlib.compress(node.toxml('utf-8'))
for x in xmlext.getTagByName(doc, "Package"):
name = xmlext.getNodeText(x, "Name")
compressed_data =gzip.zlib.compress(xmlext.toString(x).encode('utf-8'))
pdict[name]= compressed_data
return pdict
def __generate_revdeps(self, doc):
revdeps = {}
if parser=="ciksemel":
for node in doc.tags("Package"):
name = node.getTagData('Name')
deps = node.getTag('RuntimeDependencies')
if deps:
for dep in deps.tags("Dependency"):
revdeps.setdefault(dep.firstChild().data(), set()).add((name, dep.toString()))
else:
for node in doc.childNodes:
if node.nodeType == node.ELEMENT_NODE and node.tagName == "Package":
name = node.getElementsByTagName('Name')[0].firstChild.data
deps = node.getElementsByTagName('RuntimeDependencies')
if deps:
for dep in deps:
for i in dep.getElementsByTagName('Dependency'):
revdeps.setdefault(i.firstChild.data, set()).add((name, i.toxml('utf-8')))
for node in xmlext.getTagByName(doc,"Package"):
name = xmlext.getNodeText(node, 'Name')
deps = xmlext.getNode(node, 'RuntimeDependencies')
if deps:
for dep in xmlext.getTagByName(deps, "Dependency"):
revdeps.setdefault(xmlext.getNodeText(dep), set()).add((name, xmlext.toString(dep)))
return revdeps
......
......@@ -18,19 +18,12 @@ import inary.context as ctx
import inary.data.specfile as Specfile
import inary.db
import inary.db.lazydb as lazydb
import inary.sxml
from inary.sxml import autoxml, xmlext
import gettext
__trans = gettext.translation('inary', fallback=True)
_ = __trans.gettext
try:
import ciksemel
parser = "ciksemel"
except:
import xml.dom.minidom as minidom
parser = "minidom"
class SourceDB(lazydb.LazyDB):
def __init__(self):
......@@ -56,45 +49,28 @@ class SourceDB(lazydb.LazyDB):
sources = {}
pkgstosrc = {}
if parser=="ciksemel":
for spec in doc.tags("SpecFile"):
src_name = spec.getTag("Source").getTagData("Name")
sources[src_name] = gzip.zlib.compress(spec.toString().encode('utf-8'))
for package in spec.tags("Package"):
pkgstosrc[package.getTagData("Name")] = src_name
for spec in xmlext.getTagByName(doc, "SpecFile"):
src = xmlext.getNodeText(spec, "Source")
src_name = xmlext.getNodeText(src, "Name")
compressed_data = gzip.zlib.compress(xmlext.toString(spec).encode('utf-8'))
sources[src_name] = gzip.zlib.compress(compressed_data)
else:
for spec in doc.childNodes:
if spec.nodeType == spec.ELEMENT_NODE and spec.tagName == "SpecFile":
src_name = spec.getElementsByTagName("Source")[0].getElementsByTagName("Name")[0].firstChild.data
sources[src_name] = gzip.zlib.compress(spec.toxml('utf-8'))
for package in spec.childNodes:
if package.nodeType == package.ELEMENT_NODE and package.tagName == "Package":
pkgstosrc[package.getElementsByTagName("Name")[0].firstChild.data] = src_name
for package in xmlext.getTagByName(doc, "Package"):
pkgstosrc[xmlext.getNodeText(package, "Name")] = src_name
return sources, pkgstosrc
def __generate_revdeps(self, doc):
revdeps = {}
if parser=="ciksemel":
for spec in doc.tags("SpecFile"):
name = spec.getTag("Source").getTagData("Name")
deps = spec.getTag("Source").getTag("BuildDependencies")
if deps:
for dep in deps.tags("Dependency"):
revdeps.setdefault(dep.firstChild().data(), set()).add((name, dep.toString()))
else:
for spec in doc.childNodes:
if spec.nodeType == spec.ELEMENT_NODE and spec.tagName == "SpecFile":
source = spec.getElementsByTagName("Source")[0]
name = source.getElementsByTagName("Name")[0].firstChild.data
deps = source.getElementsByTagName("BuildDependencies")
if deps:
for sdep in deps:
for dep in sdep.childNodes:
if dep.nodeType == dep.ELEMENT_NODE and dep.tagName == "Dependency":
revdeps.setdefault(dep.childNodes[0].data, set()).add((name, dep.toxml()))
for spec in xmlext.getTagByName(doc, "SpecFile"):
src = xmlext.getNodeText(spec, "Source")
name = xmlext.getNodeText(src, "Name")
deps = xmlext.getNode(src, "BuildDependencies")
if deps:
for dep in xmlext.getTagByName(deps, "Dependency"):
revdeps.setdefault(xmlext.getNodeText(dep, set())).add((name, xmlext.toString(dep)))
return revdeps
def list_sources(self, repo=None):
......@@ -129,7 +105,7 @@ class SourceDB(lazydb.LazyDB):
if not fields:
fields = {'name': True, 'summary': True, 'desc': True}
if not lang:
lang = inary.sxml.autoxml.LocalText.get_lang()
lang = autoxml.LocalText.get_lang()
found = []
for name, xml in self.sdb.get_items_iter(repo):
if terms == [term for term in terms if (fields['name'] and \
......
......@@ -52,6 +52,9 @@ def getNodeAttribute(node, attrname):
"""get named attribute from DOM node"""
return node.getAttribute(attrname)
def getAttributeList(node):
return node.attributes()
def setNodeAttribute(node, attrname, value):
"""get named attribute from DOM node"""
return node.setAttribute(attrname, value)
......@@ -69,6 +72,7 @@ def getNodeText(node, tagpath = ""):
node = getNode(node, tagpath)
if not node:
return None
child = node.firstChild()
if not child:
return None
......@@ -167,3 +171,9 @@ def addText(node, tagpath, text):
def newNode(node, tag):
return iks.newDocument(tag)
def toString(node):
return node.toString()
def toPretty(node):
return node.toPrettyString()
......@@ -67,6 +67,9 @@ def getNodeAttribute(node, attrname):
return None
return node.getAttribute(attrname)
def getAttributeList(node):
return node.attributes
def setNodeAttribute(node, attrname, value):
"""get named attribute from DOM node"""
return node.setAttribute(attrname, value)
......@@ -183,3 +186,9 @@ def addText(node, tagPath, text, branch = True):
def newNode(node, tag):
return node.ownerDocument.createElement(tag)
def toString(node):
return node.toxml('utf-8')
def toPretty(node):
return node.toprettyxml()
......@@ -29,7 +29,7 @@ _ = __trans.gettext
import io
import ciksemel as iks
import inary.file
import inary.errors
import inary.config
from inary.file import File
from inary.util import join_path as join
......
......@@ -29,6 +29,8 @@ import io
import xml.dom.minidom as minidom
from xml.parsers.expat import ExpatError
import inary.errors
import inary.config
from inary.file import File
from inary.util import join_path as join
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment