[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[dak/master 08/10] Add get_format_from_string utility method



Signed-off-by: Chris Lamb <lamby@debian.org>
---
 daklib/srcformats.py     |   13 +++++++++++++
 tests/test_srcformats.py |   22 ++++++++++++++++++++++
 2 files changed, 35 insertions(+), 0 deletions(-)

diff --git a/daklib/srcformats.py b/daklib/srcformats.py
index bcb2e2b..ade3c45 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 d7b8449..f6d7215 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()
-- 
1.6.3.3



Reply to: