* fix: make homepage optiona, make us pass metadata tests
* check -> errors
This commit is contained in:
+1
-1
@@ -32,7 +32,7 @@ class Source:
|
|||||||
__metaclass__ = xmlfile.autoxml
|
__metaclass__ = xmlfile.autoxml
|
||||||
|
|
||||||
t_Name = [xmlfile.String, xmlfile.mandatory]
|
t_Name = [xmlfile.String, xmlfile.mandatory]
|
||||||
t_Homepage = [xmlfile.String, xmlfile.mandatory]
|
t_Homepage = [xmlfile.String, xmlfile.optional]
|
||||||
t_Packager = [specfile.Packager, xmlfile.mandatory]
|
t_Packager = [specfile.Packager, xmlfile.mandatory]
|
||||||
|
|
||||||
# FIXME: make inheritance work with autoxml (specfile.Package)
|
# FIXME: make inheritance work with autoxml (specfile.Package)
|
||||||
|
|||||||
+31
-31
@@ -106,7 +106,7 @@ class LocalText(dict):
|
|||||||
newnode.appendChild(newtext)
|
newnode.appendChild(newtext)
|
||||||
node.appendChild(newnode)
|
node.appendChild(newnode)
|
||||||
|
|
||||||
def check(self, where = unicode()):
|
def errors(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.has_key(x), langs):
|
if not util.any(lambda x : self.has_key(x), langs):
|
||||||
@@ -236,7 +236,7 @@ class autoxml(oo.autosuper, oo.autoprop):
|
|||||||
inits = []
|
inits = []
|
||||||
decoders = []
|
decoders = []
|
||||||
encoders = []
|
encoders = []
|
||||||
checkers = []
|
errorss = []
|
||||||
formatters = []
|
formatters = []
|
||||||
order = dict.keys()
|
order = dict.keys()
|
||||||
order.sort()
|
order.sort()
|
||||||
@@ -250,12 +250,12 @@ class autoxml(oo.autosuper, oo.autoprop):
|
|||||||
x = autoxml.gen_tag_member(cls, name)
|
x = autoxml.gen_tag_member(cls, name)
|
||||||
elif var.startswith('s_'):
|
elif var.startswith('s_'):
|
||||||
x = autoxml.gen_str_member(cls, name)
|
x = autoxml.gen_str_member(cls, name)
|
||||||
(name, init, decoder, encoder, checker, format_x) = x
|
(name, init, decoder, encoder, errors, format_x) = x
|
||||||
names.append(name)
|
names.append(name)
|
||||||
inits.append(init)
|
inits.append(init)
|
||||||
decoders.append(decoder)
|
decoders.append(decoder)
|
||||||
encoders.append(encoder)
|
encoders.append(encoder)
|
||||||
checkers.append(checker)
|
errorss.append(errors)
|
||||||
formatters.append(format_x)
|
formatters.append(format_x)
|
||||||
|
|
||||||
# generate top-level helper functions
|
# generate top-level helper functions
|
||||||
@@ -279,7 +279,7 @@ class autoxml(oo.autosuper, oo.autoprop):
|
|||||||
for decode_member in self.__class__.decoders:
|
for decode_member in self.__class__.decoders:
|
||||||
decode_member(self, node, errs, where)
|
decode_member(self, node, errs, where)
|
||||||
if hasattr(self, 'decode_hook'):
|
if hasattr(self, 'decode_hook'):
|
||||||
errs.extend(self.decode_hook(node, errs, where))
|
self.decode_hook(node, errs, where)
|
||||||
cls.decode = decode
|
cls.decode = decode
|
||||||
|
|
||||||
cls.encoders = encoders
|
cls.encoders = encoders
|
||||||
@@ -287,18 +287,18 @@ class autoxml(oo.autosuper, oo.autoprop):
|
|||||||
for encode_member in self.__class__.encoders:
|
for encode_member in self.__class__.encoders:
|
||||||
encode_member(self, xml, node, errs)
|
encode_member(self, xml, node, errs)
|
||||||
if hasattr(self, 'encode_hook'):
|
if hasattr(self, 'encode_hook'):
|
||||||
errs.extend(self.encode_hook(xml, node, errs))
|
self.encode_hook(xml, node, errs)
|
||||||
cls.encode = encode
|
cls.encode = encode
|
||||||
|
|
||||||
cls.checkers = checkers
|
cls.errorss = errorss
|
||||||
def check(self, where = unicode()):
|
def errors(self, where = unicode()):
|
||||||
errs = []
|
errs = []
|
||||||
for checker in self.__class__.checkers:
|
for errors in self.__class__.errorss:
|
||||||
errs.extend(checker(self, where))
|
errs.extend(errors(self, where))
|
||||||
if hasattr(self, 'check_hook'):
|
if hasattr(self, 'errors_hook'):
|
||||||
errs.extend(self.check_hook(where))
|
errs.extend(self.errors_hook(where))
|
||||||
return errs
|
return errs
|
||||||
cls.check = check
|
cls.errors = errors
|
||||||
|
|
||||||
cls.formatters = formatters
|
cls.formatters = formatters
|
||||||
def format(self, f, errs):
|
def format(self, f, errs):
|
||||||
@@ -344,13 +344,13 @@ class autoxml(oo.autosuper, oo.autoprop):
|
|||||||
|
|
||||||
self.unlink()
|
self.unlink()
|
||||||
|
|
||||||
errs = self.check()
|
errs = self.errors()
|
||||||
if errs:
|
if errs:
|
||||||
errs.append(_("autoxml.read: File '%s' has errors") % filename)
|
errs.append(_("autoxml.read: File '%s' has errors") % filename)
|
||||||
raise Error(*errs)
|
raise Error(*errs)
|
||||||
|
|
||||||
def write(self, filename):
|
def write(self, filename):
|
||||||
errs = self.check()
|
errs = self.errors()
|
||||||
if errs:
|
if errs:
|
||||||
errs.append(_("autoxml.write: object validation has failed"))
|
errs.append(_("autoxml.write: object validation has failed"))
|
||||||
raise Error(*errs)
|
raise Error(*errs)
|
||||||
@@ -430,7 +430,7 @@ class autoxml(oo.autosuper, oo.autoprop):
|
|||||||
name = cls.mixed_case(token)
|
name = cls.mixed_case(token)
|
||||||
token_type = spec[0]
|
token_type = spec[0]
|
||||||
req = spec[1]
|
req = spec[1]
|
||||||
(init_a, decode_a, encode_a, check_a, format_a) = anonfuns
|
(init_a, decode_a, encode_a, errors_a, format_a) = anonfuns
|
||||||
|
|
||||||
def init(self):
|
def init(self):
|
||||||
"""initialize component"""
|
"""initialize component"""
|
||||||
@@ -448,11 +448,11 @@ class autoxml(oo.autosuper, oo.autoprop):
|
|||||||
value = None
|
value = None
|
||||||
encode_a(xml, node, value, errs)
|
encode_a(xml, node, value, errs)
|
||||||
|
|
||||||
def check(self, where):
|
def errors(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, where + name + ': ' ))
|
errs.extend(errors_a(value, where + name + ': ' ))
|
||||||
else:
|
else:
|
||||||
if req == mandatory:
|
if req == mandatory:
|
||||||
errs.append(where + _('Mandatory variable %s not available') % name)
|
errs.append(where + _('Mandatory variable %s not available') % name)
|
||||||
@@ -468,7 +468,7 @@ class autoxml(oo.autosuper, oo.autoprop):
|
|||||||
if req == mandatory:
|
if req == mandatory:
|
||||||
errs.append(_('Mandatory variable %s not available') % name)
|
errs.append(_('Mandatory variable %s not available') % name)
|
||||||
|
|
||||||
return (name, init, decode, encode, check, format)
|
return (name, init, decode, encode, errors, format)
|
||||||
|
|
||||||
def mixed_case(cls, identifier):
|
def mixed_case(cls, identifier):
|
||||||
"""helper function to turn token name into mixed case"""
|
"""helper function to turn token name into mixed case"""
|
||||||
@@ -545,7 +545,7 @@ class autoxml(oo.autosuper, oo.autoprop):
|
|||||||
if req == mandatory:
|
if req == mandatory:
|
||||||
errs.append(_('Mandatory token %s not available') % token)
|
errs.append(_('Mandatory token %s not available') % token)
|
||||||
|
|
||||||
def check(value, where):
|
def errors(value, where):
|
||||||
errs = []
|
errs = []
|
||||||
if value and not isinstance(value, token_type):
|
if value and not isinstance(value, token_type):
|
||||||
errs.append(where + _('Type mismatch. Expected %s, got %s') %
|
errs.append(where + _('Type mismatch. Expected %s, got %s') %
|
||||||
@@ -556,7 +556,7 @@ class autoxml(oo.autosuper, oo.autoprop):
|
|||||||
"""format value for pretty printing"""
|
"""format value for pretty printing"""
|
||||||
f.add_literal_data(unicode(value))
|
f.add_literal_data(unicode(value))
|
||||||
|
|
||||||
return initialize, decode, encode, check, format
|
return initialize, decode, encode, errors, format
|
||||||
|
|
||||||
def gen_class_tag(cls, tag, spec):
|
def gen_class_tag(cls, tag, spec):
|
||||||
"""generate a class datatype"""
|
"""generate a class datatype"""
|
||||||
@@ -599,8 +599,8 @@ class autoxml(oo.autosuper, oo.autoprop):
|
|||||||
if req == mandatory:
|
if req == mandatory:
|
||||||
errs.append(_('Mandatory argument not available'))
|
errs.append(_('Mandatory argument not available'))
|
||||||
|
|
||||||
def check(obj, where):
|
def errors(obj, where):
|
||||||
return obj.check(where)
|
return obj.errors(where)
|
||||||
|
|
||||||
def format(obj, f, errs):
|
def format(obj, f, errs):
|
||||||
try:
|
try:
|
||||||
@@ -608,7 +608,7 @@ class autoxml(oo.autosuper, oo.autoprop):
|
|||||||
except Error:
|
except Error:
|
||||||
if req == mandatory:
|
if req == mandatory:
|
||||||
errs.append(_('Mandatory argument not available'))
|
errs.append(_('Mandatory argument not available'))
|
||||||
return (init, decode, encode, check, format)
|
return (init, decode, encode, errors, format)
|
||||||
|
|
||||||
def gen_list_tag(cls, tag, spec):
|
def gen_list_tag(cls, tag, spec):
|
||||||
"""generate a list datatype. stores comps in tag/comp_tag"""
|
"""generate a list datatype. stores comps in tag/comp_tag"""
|
||||||
@@ -622,7 +622,7 @@ class autoxml(oo.autosuper, oo.autoprop):
|
|||||||
raise Error(_('List type must contain only one element'))
|
raise Error(_('List type must contain only one element'))
|
||||||
|
|
||||||
x = cls.gen_tag(comp_tag, [tag_type[0], mandatory])
|
x = cls.gen_tag(comp_tag, [tag_type[0], mandatory])
|
||||||
(init_item, decode_item, encode_item, check_item, format_item) = x
|
(init_item, decode_item, encode_item, errors_item, format_item) = x
|
||||||
|
|
||||||
def init():
|
def init():
|
||||||
return []
|
return []
|
||||||
@@ -653,10 +653,10 @@ class autoxml(oo.autosuper, oo.autoprop):
|
|||||||
if req is mandatory:
|
if req is mandatory:
|
||||||
errs.append(_('Mandatory list empty'))
|
errs.append(_('Mandatory list empty'))
|
||||||
|
|
||||||
def check(l, where):
|
def errors(l, where):
|
||||||
errs = []
|
errs = []
|
||||||
for ix in range(len(l)):
|
for ix in range(len(l)):
|
||||||
errs.extend(check_item(l[ix], where + '[%s]' % ix))
|
errs.extend(errors_item(l[ix], where + '[%s]' % ix))
|
||||||
return errs
|
return errs
|
||||||
|
|
||||||
def format(l, f, errs):
|
def format(l, f, errs):
|
||||||
@@ -667,7 +667,7 @@ class autoxml(oo.autosuper, oo.autoprop):
|
|||||||
if ix != len(l)-1:
|
if ix != len(l)-1:
|
||||||
f.add_flowing_data(', ')
|
f.add_flowing_data(', ')
|
||||||
|
|
||||||
return (init, decode, encode, check, format)
|
return (init, decode, encode, errors, format)
|
||||||
|
|
||||||
def gen_insetclass_tag(cls, tag, spec):
|
def gen_insetclass_tag(cls, tag, spec):
|
||||||
"""generate a class datatype that is highly integrated
|
"""generate a class datatype that is highly integrated
|
||||||
@@ -711,8 +711,8 @@ class autoxml(oo.autosuper, oo.autoprop):
|
|||||||
if req == mandatory:
|
if req == mandatory:
|
||||||
errs.append(_('Mandatory argument not available'))
|
errs.append(_('Mandatory argument not available'))
|
||||||
|
|
||||||
def check(obj, where):
|
def errors(obj, where):
|
||||||
return obj.check(where)
|
return obj.errors(where)
|
||||||
|
|
||||||
def format(obj, f, errs):
|
def format(obj, f, errs):
|
||||||
try:
|
try:
|
||||||
@@ -721,7 +721,7 @@ class autoxml(oo.autosuper, oo.autoprop):
|
|||||||
if req == mandatory:
|
if req == mandatory:
|
||||||
errs.append(_('Mandatory argument not available'))
|
errs.append(_('Mandatory argument not available'))
|
||||||
|
|
||||||
return (init, decode, encode, check, format)
|
return (init, decode, encode, errors, format)
|
||||||
|
|
||||||
basic_cons_map = {
|
basic_cons_map = {
|
||||||
types.StringType : str,
|
types.StringType : str,
|
||||||
|
|||||||
@@ -13,10 +13,8 @@ import os
|
|||||||
|
|
||||||
from pisi import metadata
|
from pisi import metadata
|
||||||
from pisi import util
|
from pisi import util
|
||||||
import pisi.context as ctx
|
|
||||||
|
|
||||||
import testcase
|
class MetaDataTestCase(unittest.TestCase):
|
||||||
class MetaDataTestCase(testcase.TestCase):
|
|
||||||
|
|
||||||
def testRead(self):
|
def testRead(self):
|
||||||
md = metadata.MetaData()
|
md = metadata.MetaData()
|
||||||
@@ -31,11 +29,11 @@ class MetaDataTestCase(testcase.TestCase):
|
|||||||
|
|
||||||
def testWrite(self):
|
def testWrite(self):
|
||||||
md = self.testRead()
|
md = self.testRead()
|
||||||
md.write(os.path.join(ctx.config.tmp_dir(),'metadata-test.xml' ))
|
md.write('/tmp/metadata-test.xml')
|
||||||
|
|
||||||
def testVerify(self):
|
def testVerify(self):
|
||||||
md = self.testRead()
|
md = self.testRead()
|
||||||
if md.has_errors():
|
if md.errors():
|
||||||
self.fail("Couldn't verify!")
|
self.fail("Couldn't verify!")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ class SpecFileNewTestCase(unittest.TestCase):
|
|||||||
self.fail("Failed to match PartOf in Package")
|
self.fail("Failed to match PartOf in Package")
|
||||||
|
|
||||||
def testVerify(self):
|
def testVerify(self):
|
||||||
if self.spec.check() != []:
|
if self.spec.errors():
|
||||||
self.fail("Failed to verify specfile")
|
self.fail("Failed to verify specfile")
|
||||||
|
|
||||||
def testCopy(self):
|
def testCopy(self):
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ class AutoXmlTestCase(testcase.TestCase):
|
|||||||
self.assertEqual(len(a.projects), 3)
|
self.assertEqual(len(a.projects), 3)
|
||||||
self.assertEqual(len(a.otherInfo.codesWith), 4)
|
self.assertEqual(len(a.otherInfo.codesWith), 4)
|
||||||
|
|
||||||
self.assert_(not a.check())
|
self.assert_(not a.errors())
|
||||||
|
|
||||||
a.print_text(file('/tmp/a', 'w'))
|
a.print_text(file('/tmp/a', 'w'))
|
||||||
la = file('/tmp/a').readlines()
|
la = file('/tmp/a').readlines()
|
||||||
@@ -81,7 +81,7 @@ class AutoXmlTestCase(testcase.TestCase):
|
|||||||
a.href = 'http://cekirdek.uludag.org.tr/~baris'
|
a.href = 'http://cekirdek.uludag.org.tr/~baris'
|
||||||
a.otherInfo.birthDate = '30101979'
|
a.otherInfo.birthDate = '30101979'
|
||||||
a.projects = [ 'pisi', 'tasma', 'plasma' ]
|
a.projects = [ 'pisi', 'tasma', 'plasma' ]
|
||||||
errs = a.check()
|
errs = a.errors()
|
||||||
if errs:
|
if errs:
|
||||||
self.fail( 'We got a bunch of errors: ' + str(errs))
|
self.fail( 'We got a bunch of errors: ' + str(errs))
|
||||||
a.write('/tmp/a2.xml')
|
a.write('/tmp/a2.xml')
|
||||||
|
|||||||
Reference in New Issue
Block a user