From: Chris Lamb Date: Wed, 28 Oct 2009 13:32:40 +0000 (+0000) Subject: Add get_format_from_string utility method X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=68f805c214aa62ccd2e3624ebbc6f323eb8eb6dc;p=dak.git Add get_format_from_string utility method Signed-off-by: Chris Lamb --- diff --git a/daklib/srcformats.py b/daklib/srcformats.py index bcb2e2bb..ade3c453 100644 --- a/daklib/srcformats.py +++ b/daklib/srcformats.py @@ -5,6 +5,19 @@ from dak_exceptions import UnknownFormatError srcformats = [] +def get_format_from_string(txt): + """ + Returns the SourceFormat class that corresponds to the specified .changes + Format value. If the string does not match any class, UnknownFormatError + is raised. + """ + + for format in srcformats: + if format.re_format.match(txt): + return format + + raise UnknownFormatError, "Unknown format %r" % txt + def parse_format(txt): """ Parse a .changes Format string into a tuple representation for easy diff --git a/tests/test_srcformats.py b/tests/test_srcformats.py index d7b84496..f6d7215f 100755 --- a/tests/test_srcformats.py +++ b/tests/test_srcformats.py @@ -186,5 +186,27 @@ class ValidateFormatThreeQuiltTestCase(ValidateFormatTestCase): self.assertInvalid((0, 0)) self.assertInvalid((3, 0, 'native')) +class FormatFromStringTestCase(unittest.TestCase): + def assertFormat(self, txt, klass): + self.assertEqual(srcformats.get_format_from_string(txt), klass) + + def assertInvalid(self, txt): + self.assertRaises( + UnknownFormatError, + lambda: srcformats.get_format_from_string(txt), + ) + + def testFormats(self): + self.assertFormat('1.0', srcformats.FormatOne) + self.assertFormat('3.0 (native)', srcformats.FormatThree) + self.assertFormat('3.0 (quilt)', srcformats.FormatThreeQuilt) + + def testInvalidFormats(self): + self.assertInvalid('') + self.assertInvalid('.') + self.assertInvalid('3.0 (cvs)') + self.assertInvalid(' 1.0 ') + self.assertInvalid('8.4 (hardy)') + if __name__ == '__main__': unittest.main()