diff --git a/pynames/tests/test_utils.py b/pynames/tests/test_utils.py new file mode 100644 index 0000000..fc58a2c --- /dev/null +++ b/pynames/tests/test_utils.py @@ -0,0 +1,29 @@ +# coding: utf-8 + +import unittest +import tempfile + +from pynames.utils import is_file + +try: + from django.core.files import File + from django.core.files.base import ContentFile + from django.core.files.uploadedfile import UploadedFile +except: + UploadedFile = None + File = None + ContentFile = None + + +class TestName(unittest.TestCase): + + def test_is_file(self): + some_file = tempfile.NamedTemporaryFile() + self.assertTrue(is_file(some_file)) + some_file.close() + + def test_is_file_on_django_files(self): + if File and UploadedFile and ContentFile: + self.assertTrue(is_file(UploadedFile('mock'))) + self.assertTrue(is_file(File('mock'))) + self.assertTrue(is_file(ContentFile('mock'))) diff --git a/pynames/utils.py b/pynames/utils.py index c8f4f81..a0e1c0b 100644 --- a/pynames/utils.py +++ b/pynames/utils.py @@ -49,4 +49,8 @@ def is_file(obj): Suitable to check both builtin ``file`` and ``django.core.file.File`` instances. """ - return all([callable(getattr(obj, method_name, None)) for method_name in ('next', '__enter__', '__exit__')]) + return all( + [callable(getattr(obj, method_name, None)) for method_name in ('__enter__', '__exit__')] + + + [any([callable(getattr(obj, method_name, None)) for method_name in ('next', '__iter__')])] + )