diff options
-rw-r--r-- | lesana/types.py | 30 | ||||
-rw-r--r-- | tests/test_types.py | 44 |
2 files changed, 74 insertions, 0 deletions
diff --git a/lesana/types.py b/lesana/types.py index e5c556c..565d1b2 100644 --- a/lesana/types.py +++ b/lesana/types.py @@ -191,6 +191,36 @@ class LesanaBoolean(LesanaType): return None +class LesanaFile(LesanaString): + """ + A path to a local file. + + Relative paths are assumed to be relative to the base lesana + directory (i.e. where .lesana lives) + """ + name = 'file' + + +class LesanaURL(LesanaString): + """ + An URL + """ + name = 'url' + + +class LesanaYAML(LesanaType): + """ + Free YAML contents (no structure is enforced) + """ + name = 'yaml' + + def load(self, data): + return data + + def empty(self): + return None + + class LesanaValueError(ValueError): """ Raised in case of validation errors. diff --git a/tests/test_types.py b/tests/test_types.py index 2d6b744..f27089d 100644 --- a/tests/test_types.py +++ b/tests/test_types.py @@ -209,6 +209,50 @@ class testTypes(unittest.TestCase): v = checker.load(None) self.assertEqual(v, None) + def test_file(self): + checker = types.LesanaFile() + + v = checker.empty() + self.assertEqual(v, "") + + v = checker.load("relative/path/to/file") + self.assertEqual(v, "relative/path/to/file") + + v = checker.load(None) + self.assertEqual(v, None) + + # TODO: check for invalid file paths + + def test_url(self): + checker = types.LesanaURL() + + v = checker.empty() + self.assertEqual(v, "") + + v = checker.load("http://example.org") + self.assertEqual(v, "http://example.org") + + v = checker.load(None) + self.assertEqual(v, None) + + # TODO: check for invalid URLs + + def test_yaml(self): + checker = types.LesanaYAML() + + v = checker.empty() + self.assertEqual(v, None) + + some_data = { + 'anything': 'goes', + 'everything': 42 + } + v = checker.load(some_data) + self.assertEqual(v, some_data) + + v = checker.load(None) + self.assertEqual(v, None) + if __name__ == '__main__': unittest.main() |