* autoxml: add a "where" identifier for errror checking in decode and
check methods, for now. (maybe we can find a better soln)
This commit is contained in:
+6
-1
@@ -29,6 +29,9 @@ import pisi.context as ctx
|
|||||||
from pisi.dependency import DepInfo
|
from pisi.dependency import DepInfo
|
||||||
from pisi.util import Checks
|
from pisi.util import Checks
|
||||||
|
|
||||||
|
class Error(pisi.Error):
|
||||||
|
pass
|
||||||
|
|
||||||
__metaclass__ = xmlfile.autoxml
|
__metaclass__ = xmlfile.autoxml
|
||||||
|
|
||||||
class Packager:
|
class Packager:
|
||||||
@@ -70,9 +73,9 @@ class Patch:
|
|||||||
|
|
||||||
class Update:
|
class Update:
|
||||||
|
|
||||||
|
a_Release = [xmlfile.String, xmlfile.mandatory]
|
||||||
t_Date = [xmlfile.String, xmlfile.mandatory]
|
t_Date = [xmlfile.String, xmlfile.mandatory]
|
||||||
t_Version = [xmlfile.String, xmlfile.mandatory]
|
t_Version = [xmlfile.String, xmlfile.mandatory]
|
||||||
t_Release = [xmlfile.String, xmlfile.mandatory]
|
|
||||||
t_Type = [xmlfile.String, xmlfile.optional]
|
t_Type = [xmlfile.String, xmlfile.optional]
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
@@ -180,6 +183,8 @@ class SpecFile(XmlFile):
|
|||||||
|
|
||||||
errs = []
|
errs = []
|
||||||
self.decode(self.rootNode(), errs)
|
self.decode(self.rootNode(), errs)
|
||||||
|
if errs:
|
||||||
|
raise Error(*errs)
|
||||||
|
|
||||||
self.merge_tags()
|
self.merge_tags()
|
||||||
self.override_tags()
|
self.override_tags()
|
||||||
|
|||||||
+37
-36
@@ -76,19 +76,19 @@ class LocalText(object):
|
|||||||
self.req = spec[1]
|
self.req = spec[1]
|
||||||
self.locs = {}
|
self.locs = {}
|
||||||
|
|
||||||
def decode(self, node, errs):
|
def decode(self, node, errs, where = ""):
|
||||||
# flags, tag name, instance attribute
|
# flags, tag name, instance attribute
|
||||||
nodes = getAllNodes(node, self.tag)
|
nodes = getAllNodes(node, self.tag)
|
||||||
if not nodes:
|
if not nodes:
|
||||||
if self.req == mandatory:
|
if self.req == mandatory:
|
||||||
errs.append(_("LocalText '%s' should have at least one '%s' tag\n") %
|
errs.append(where + _("LocalText '%s' should have at least one '%s' tag\n") %
|
||||||
self.tag)
|
self.tag)
|
||||||
else:
|
else:
|
||||||
for node in nodes:
|
for node in nodes:
|
||||||
lang = getNodeAttribute(node, "xml:lang")
|
lang = getNodeAttribute(node, "xml:lang")
|
||||||
c = getNodeText(node)
|
c = getNodeText(node)
|
||||||
if not c:
|
if not c:
|
||||||
errs.append(_("'%s' language of tag '%s' should have some text data\n") %
|
errs.append(where + _("'%s' language of tag '%s' should have some text data\n") %
|
||||||
(lang, self.tag))
|
(lang, self.tag))
|
||||||
# FIXME: check for dups and 'en'
|
# FIXME: check for dups and 'en'
|
||||||
if not lang:
|
if not lang:
|
||||||
@@ -103,11 +103,11 @@ class LocalText(object):
|
|||||||
newnode.appendChild(newtext)
|
newnode.appendChild(newtext)
|
||||||
node.appendChild(newnode)
|
node.appendChild(newnode)
|
||||||
|
|
||||||
def check(self):
|
def check(self, where = unicode()):
|
||||||
errs = []
|
errs = []
|
||||||
langs = [ locale.getlocale()[0][0:2], 'tr', 'en' ]
|
langs = [ locale.getlocale()[0][0:2], 'tr', 'en' ]
|
||||||
if not util.any(lambda x : self.locs.has_key(x), langs):
|
if not util.any(lambda x : self.locs.has_key(x), langs):
|
||||||
errs.append(_("Tag should have at least an English or Turkish version"))
|
errs.append( where + _("Tag should have at least an English or Turkish version"))
|
||||||
return errs
|
return errs
|
||||||
|
|
||||||
def format(self, f, errs):
|
def format(self, f, errs):
|
||||||
@@ -252,9 +252,9 @@ class autoxml(oo.autosuper):
|
|||||||
cls.__init__ = initialize
|
cls.__init__ = initialize
|
||||||
|
|
||||||
cls.decoders = decoders
|
cls.decoders = decoders
|
||||||
def decode(self, node, errs):
|
def decode(self, node, errs, where = unicode()):
|
||||||
for decode_member in self.__class__.decoders:
|
for decode_member in self.__class__.decoders:
|
||||||
decode_member(self, node, errs)
|
decode_member(self, node, errs, where)
|
||||||
cls.decode = decode
|
cls.decode = decode
|
||||||
|
|
||||||
cls.encoders = encoders
|
cls.encoders = encoders
|
||||||
@@ -264,10 +264,10 @@ class autoxml(oo.autosuper):
|
|||||||
cls.encode = encode
|
cls.encode = encode
|
||||||
|
|
||||||
cls.checkers = checkers
|
cls.checkers = checkers
|
||||||
def check(self):
|
def check(self, where = unicode()):
|
||||||
errs = []
|
errs = []
|
||||||
for checker in self.__class__.checkers:
|
for checker in self.__class__.checkers:
|
||||||
errs.extend(checker(self))
|
errs.extend(checker(self), where)
|
||||||
return errs
|
return errs
|
||||||
cls.check = check
|
cls.check = check
|
||||||
|
|
||||||
@@ -344,9 +344,9 @@ class autoxml(oo.autosuper):
|
|||||||
"""initialize component"""
|
"""initialize component"""
|
||||||
setattr(self, name, init_a())
|
setattr(self, name, init_a())
|
||||||
|
|
||||||
def decode(self, node, errs):
|
def decode(self, node, errs, where):
|
||||||
"""decode component from DOM node"""
|
"""decode component from DOM node"""
|
||||||
setattr(self, name, decode_a(node, errs))
|
setattr(self, name, decode_a(node, errs, where + unicode(name) + " "))
|
||||||
|
|
||||||
def encode(self, xml, node, errs):
|
def encode(self, xml, node, errs):
|
||||||
"""encode self inside, possibly new, DOM node using xml"""
|
"""encode self inside, possibly new, DOM node using xml"""
|
||||||
@@ -356,14 +356,14 @@ class autoxml(oo.autosuper):
|
|||||||
value = None
|
value = None
|
||||||
encode_a(xml, node, value, errs)
|
encode_a(xml, node, value, errs)
|
||||||
|
|
||||||
def check(self):
|
def check(self, where):
|
||||||
errs = []
|
errs = []
|
||||||
if hasattr(self, name):
|
if hasattr(self, name):
|
||||||
value = getattr(self,name)
|
value = getattr(self,name)
|
||||||
errs.extend(check_a(value))
|
errs.extend(check_a(value, unicode("%s: " %name)))
|
||||||
else:
|
else:
|
||||||
if req == mandatory:
|
if req == mandatory:
|
||||||
errs.append(_('Mandatory variable %s not available') % name)
|
errs.append(where + _('Mandatory variable %s not available') % name)
|
||||||
return errs
|
return errs
|
||||||
|
|
||||||
def format(self, f, errs):
|
def format(self, f, errs):
|
||||||
@@ -417,7 +417,7 @@ class autoxml(oo.autosuper):
|
|||||||
"""default value for all basic types is None"""
|
"""default value for all basic types is None"""
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def decode(node, errs):
|
def decode(node, errs, where):
|
||||||
"""decode from DOM node, the value, watching the spec"""
|
"""decode from DOM node, the value, watching the spec"""
|
||||||
text = readtext(node, token)
|
text = readtext(node, token)
|
||||||
#print 'read text ', text
|
#print 'read text ', text
|
||||||
@@ -426,7 +426,7 @@ class autoxml(oo.autosuper):
|
|||||||
value = autoxml.basic_cons_map[token_type](text)
|
value = autoxml.basic_cons_map[token_type](text)
|
||||||
except Error:
|
except Error:
|
||||||
value = None
|
value = None
|
||||||
errs.append(_('Type mismatch: read text cannot be decoded'))
|
errs.append(where + _('Type mismatch: read text cannot be decoded'))
|
||||||
return value
|
return value
|
||||||
else:
|
else:
|
||||||
if req == mandatory:
|
if req == mandatory:
|
||||||
@@ -442,10 +442,10 @@ class autoxml(oo.autosuper):
|
|||||||
if req == mandatory:
|
if req == mandatory:
|
||||||
errs.append(_('Mandatory argument not available'))
|
errs.append(_('Mandatory argument not available'))
|
||||||
|
|
||||||
def check(value):
|
def check(value, where):
|
||||||
errs = []
|
errs = []
|
||||||
if not isinstance(value, token_type):
|
if not isinstance(value, token_type):
|
||||||
errs.append(_('Type mismatch'))
|
errs.append(where + _('Type mismatch'))
|
||||||
return errs
|
return errs
|
||||||
|
|
||||||
def format(value, f, errs):
|
def format(value, f, errs):
|
||||||
@@ -466,18 +466,18 @@ class autoxml(oo.autosuper):
|
|||||||
def init():
|
def init():
|
||||||
return make_object()
|
return make_object()
|
||||||
|
|
||||||
def decode(node, errs):
|
def decode(node, errs, where):
|
||||||
node = getNode(node, tag)
|
node = getNode(node, tag)
|
||||||
if node:
|
if node:
|
||||||
try:
|
try:
|
||||||
obj = make_object()
|
obj = make_object()
|
||||||
obj.decode(node, errs)
|
obj.decode(node, errs, where + unicode("Class %s :") % tag)
|
||||||
return obj
|
return obj
|
||||||
except Error:
|
except Error:
|
||||||
errs.append(_('Type mismatch: DOM cannot be decoded'))
|
errs.append(where + _('Type mismatch: DOM cannot be decoded'))
|
||||||
else:
|
else:
|
||||||
if req == mandatory:
|
if req == mandatory:
|
||||||
errs.append(_('Mandatory argument not available'))
|
errs.append(where + _('Mandatory argument not available'))
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def encode(xml, node, obj, errs):
|
def encode(xml, node, obj, errs):
|
||||||
@@ -495,8 +495,8 @@ class autoxml(oo.autosuper):
|
|||||||
if req == mandatory:
|
if req == mandatory:
|
||||||
errs.append(_('Mandatory argument not available'))
|
errs.append(_('Mandatory argument not available'))
|
||||||
|
|
||||||
def check(obj):
|
def check(obj, where):
|
||||||
return obj.check()
|
return obj.check(where)
|
||||||
|
|
||||||
def format(obj, f, errs):
|
def format(obj, f, errs):
|
||||||
try:
|
try:
|
||||||
@@ -520,16 +520,17 @@ class autoxml(oo.autosuper):
|
|||||||
def init():
|
def init():
|
||||||
return []
|
return []
|
||||||
|
|
||||||
def decode(node, errs):
|
def decode(node, errs, where):
|
||||||
l = []
|
l = []
|
||||||
nodes = getAllNodes(node, tag + '/' + comp_tag)
|
nodes = getAllNodes(node, tag + '/' + comp_tag)
|
||||||
#print node, tag + '/' + comp_tag, nodes
|
#print node, tag + '/' + comp_tag, nodes
|
||||||
if len(nodes) is 0 and req is mandatory:
|
if len(nodes) is 0 and req is mandatory:
|
||||||
errs.append(_('Mandatory list empty'))
|
errs.append(where + _('Mandatory list empty'))
|
||||||
for node in nodes:
|
for ix in range(len(nodes)):
|
||||||
|
node = nodes[ix]
|
||||||
dummy = node.ownerDocument.createElement("Dummy")
|
dummy = node.ownerDocument.createElement("Dummy")
|
||||||
dummy.appendChild(node)
|
dummy.appendChild(node)
|
||||||
l.append(decode_item(dummy, errs))
|
l.append(decode_item(dummy, errs, where + unicode("[%s]" % ix)))
|
||||||
return l
|
return l
|
||||||
|
|
||||||
def encode(xml, node, l, errs):
|
def encode(xml, node, l, errs):
|
||||||
@@ -542,10 +543,10 @@ class autoxml(oo.autosuper):
|
|||||||
if req is mandatory:
|
if req is mandatory:
|
||||||
errs.append(_('Mandatory list empty'))
|
errs.append(_('Mandatory list empty'))
|
||||||
|
|
||||||
def check(l):
|
def check(l, where):
|
||||||
errs = []
|
errs = []
|
||||||
for ix in range(len(l)):
|
for ix in range(len(l)):
|
||||||
errs.extend(check_item(l[ix]))
|
errs.extend(check_item(l[ix], unicode(ix)))
|
||||||
return errs
|
return errs
|
||||||
|
|
||||||
def format(l, f, errs):
|
def format(l, f, errs):
|
||||||
@@ -574,17 +575,17 @@ class autoxml(oo.autosuper):
|
|||||||
def init():
|
def init():
|
||||||
return make_object()
|
return make_object()
|
||||||
|
|
||||||
def decode(node, errs):
|
def decode(node, errs, where):
|
||||||
if node:
|
if node:
|
||||||
try:
|
try:
|
||||||
obj = make_object()
|
obj = make_object()
|
||||||
obj.decode(node, errs)
|
obj.decode(node, errs, where)
|
||||||
return obj
|
return obj
|
||||||
except Error:
|
except Error:
|
||||||
errs.append(_('Type mismatch: DOM cannot be decoded'))
|
errs.append(where + _('Type mismatch: DOM cannot be decoded'))
|
||||||
else:
|
else:
|
||||||
if req == mandatory:
|
if req == mandatory:
|
||||||
errs.append(_('Mandatory argument not available'))
|
errs.append(where + _('Mandatory argument not available'))
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def encode(xml, node, obj, errs):
|
def encode(xml, node, obj, errs):
|
||||||
@@ -600,8 +601,8 @@ class autoxml(oo.autosuper):
|
|||||||
if req == mandatory:
|
if req == mandatory:
|
||||||
errs.append(_('Mandatory argument not available'))
|
errs.append(_('Mandatory argument not available'))
|
||||||
|
|
||||||
def check(obj):
|
def check(obj, where):
|
||||||
return obj.check()
|
return obj.check(where)
|
||||||
|
|
||||||
def format(obj, f, errs):
|
def format(obj, f, errs):
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user