From: Chris Lamb Date: Wed, 28 Oct 2009 13:23:36 +0000 (+0000) Subject: Attach validate_format(...) to each SourceFormat that can reject formats. X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fee8895dd909a9d0f4f4a71c83f689dabee62cfe;p=dak Attach validate_format(...) to each SourceFormat that can reject formats. Signed-off-by: Chris Lamb --- diff --git a/daklib/srcformats.py b/daklib/srcformats.py index f3afb8db..bcb2e2bb 100644 --- a/daklib/srcformats.py +++ b/daklib/srcformats.py @@ -59,15 +59,12 @@ class SourceFormat(type): @classmethod def validate_format(cls, format, is_a_dsc=False, field='files'): - if is_a_dsc: - if format != (1,0) and \ - format != (3,0,"quilt") and format != (3,0,"native"): - raise UnknownFormatError, repr(format) - else: - if (format < (1,5) or format > (1,8)): - raise UnknownFormatError, repr(format) - if field != "files" and format < (1,8): - raise UnknownFormatError, repr(format) + """ + Raises UnknownFormatError if the specified format tuple is not valid for + this format (for example, the format (1, 0) is not valid for the + "3.0 (quilt)" format). Return value is undefined in all other cases. + """ + pass class FormatOne(SourceFormat): __metaclass__ = SourceFormat @@ -91,6 +88,19 @@ class FormatOne(SourceFormat): for msg in super(FormatOne, cls).reject_msgs(has): yield msg + @classmethod + def validate_format(cls, format, is_a_dsc=False, field='files'): + msg = "Invalid format %s definition: %r" % (cls.name, format) + + if is_a_dsc: + if format != (1, 0): + raise UnknownFormatError, msg + else: + if (format < (1,5) or format > (1,8)): + raise UnknownFormatError, msg + if field != "files" and format < (1,8): + raise UnknownFormatError, msg + class FormatThree(SourceFormat): __metaclass__ = SourceFormat @@ -100,6 +110,12 @@ class FormatThree(SourceFormat): requires = ('native_tar',) disallowed = ('orig_tar', 'debian_diff', 'debian_tar', 'more_orig_tar') + @classmethod + def validate_format(cls, format, **kwargs): + if format != (3, 0, 'native'): + raise UnknownFormatError, "Invalid format %s definition: %r" % \ + (cls.name, format) + class FormatThreeQuilt(SourceFormat): __metaclass__ = SourceFormat @@ -108,3 +124,9 @@ class FormatThreeQuilt(SourceFormat): requires = ('orig_tar', 'debian_tar') disallowed = ('debian_diff', 'native_tar') + + @classmethod + def validate_format(cls, format, **kwargs): + if format != (3, 0, 'quilt'): + raise UnknownFormatError, "Invalid format %s definition: %r" % \ + (cls.name, format) diff --git a/tests/test_srcformats.py b/tests/test_srcformats.py index 0ae18231..d7b84496 100755 --- a/tests/test_srcformats.py +++ b/tests/test_srcformats.py @@ -127,51 +127,64 @@ class ParseFormatTestCase(unittest.TestCase): self.assertParse('1.2 (three)', (1, 2, 'three')) self.assertParseFail('0.0 ()') -class ParseSourceFormat(ParseFormat): - def assertFormat(self, *args, **kwargs): +class ValidateFormatTestCase(unittest.TestCase): + def assertValid(self, format, **kwargs): kwargs['is_a_dsc'] = kwargs.get('is_a_dsc', True) - super(ParseSourceFormat, self).assertFormat(*args, **kwargs) + self.fmt.validate_format(format, **kwargs) - def assertInvalidFormat(self, *args, **kwargs): - kwargs['is_a_dsc'] = kwargs.get('is_a_dsc', True) - super(ParseSourceFormat, self).assertInvalidFormat(*args, **kwargs) + def assertInvalid(self, *args, **kwargs): + self.assertRaises( + UnknownFormatError, + lambda: self.assertValid(*args, **kwargs), + ) - def testSimple(self): - self.assertFormat('1.0', (1, 0)) +class ValidateFormatOneTestCase(ValidateFormatTestCase): + fmt = srcformats.FormatOne - def testZero(self): - self.assertInvalidFormat('0.0') + def testValid(self): + self.assertValid((1, 0)) - def testNative(self): - self.assertFormat('3.0 (native)', (3, 0, 'native')) + def testInvalid(self): + self.assertInvalid((0, 1)) + self.assertInvalid((3, 0, 'quilt')) - def testQuilt(self): - self.assertFormat('3.0 (quilt)', (3, 0, 'quilt')) + ## - def testUnknownThree(self): - self.assertInvalidFormat('3.0 (cvs)') + def testBinary(self): + self.assertValid((1, 5), is_a_dsc=False) + self.assertInvalid((1, 0), is_a_dsc=False) -class ParseBinaryFormat(ParseFormat): - def assertFormat(self, *args, **kwargs): - kwargs['is_a_dsc'] = kwargs.get('is_a_dsc', False) - super(ParseBinaryFormat, self).assertFormat(*args, **kwargs) + def testRange(self): + self.assertInvalid((1, 3), is_a_dsc=False) + self.assertValid((1, 5), is_a_dsc=False) + self.assertValid((1, 8), is_a_dsc=False) + self.assertInvalid((1, 9), is_a_dsc=False) - def assertInvalidFormat(self, *args, **kwargs): - kwargs['is_a_dsc'] = kwargs.get('is_a_dsc', False) - super(ParseBinaryFormat, self).assertInvalidFormat(*args, **kwargs) + def testFilesField(self): + self.assertInvalid((1, 7), is_a_dsc=False, field='notfiles') + self.assertValid((1, 8), is_a_dsc=False, field='notfiles') - def testSimple(self): - self.assertFormat('1.5', (1, 5)) +class ValidateFormatThreeTestCase(ValidateFormatTestCase): + fmt = srcformats.FormatThree - def testRange(self): - self.assertInvalidFormat('1.0') - self.assertFormat('1.5', (1, 5)) - self.assertFormat('1.8', (1, 8)) - self.assertInvalidFormat('1.9') + def testValid(self): + self.assertValid((3, 0, 'native')) - def testFilesField(self): - self.assertInvalidFormat('1.7', field='notfiles') - self.assertFormat('1.8', (1, 8), field='notfiles') + def testInvalid(self): + self.assertInvalid((1, 0)) + self.assertInvalid((0, 0)) + self.assertInvalid((3, 0, 'quilt')) + +class ValidateFormatThreeQuiltTestCase(ValidateFormatTestCase): + fmt = srcformats.FormatThreeQuilt + + def testValid(self): + self.assertValid((3, 0, 'quilt')) + + def testInvalid(self): + self.assertInvalid((1, 0)) + self.assertInvalid((0, 0)) + self.assertInvalid((3, 0, 'native')) if __name__ == '__main__': unittest.main()