Example #1
0
 def __init__(self,
              filestore=UNSET,
              show_file_preview=True,
              show_download_link=False,
              show_image_thumbnail=False,
              url_base=None,
              css_class=None,
              image_thumbnail_default=None,
              show_remove_checkbox=True,
              url_ident_factory=None,
              thumbnail_size="20x20"):
     """
     :arg filestore: filestore for temporary files
     :arg show_image_thumbnail: a boolean that, if set, will include an image
         thumbnail with the widget
     :arg css_class: extra css classes to apply to the widget
     :arg image_thumbnail_default: a default url to 
     XXX image_thumbnail_default -> default_image 
     XXX allow_clear -> allow_delete 
     XXX url_ident_factory -> filestore_key_factory
     """
     # Setup defaults.
     if filestore is UNSET:
         filestore = CachedTempFilestore()
     if url_base is None:
         url_base = '/filehandler'
     if url_ident_factory is None:
         url_ident_factory = lambda i: i.filename
     # Initialise instance state
     Widget.__init__(self)
     self.filestore = filestore
     self.show_image_thumbnail = show_image_thumbnail
     self.image_thumbnail_default = image_thumbnail_default
     self.url_base = url_base
     self.show_download_link = show_download_link
     self.show_file_preview = show_file_preview
     self.url_ident_factory = url_ident_factory
     self.show_remove_checkbox = show_remove_checkbox
     self.thumbnail_size = thumbnail_size
Example #2
0
 def setUp(self):
     self.dirname = tempfile.mkdtemp()
     self.store = CachedTempFilestore(
         FileSystemHeaderedFilestore(self.dirname))
Example #3
0
class TestCachedTempFilestore(unittest.TestCase):
    def setUp(self):
        self.dirname = tempfile.mkdtemp()
        self.store = CachedTempFilestore(
            FileSystemHeaderedFilestore(self.dirname))

    def tearDown(self):
        shutil.rmtree(self.dirname)

    def test_put(self):
        self.store.put('foo', StringIO('bar'), '1',
                       [('Content-Type', 'text/plain')])
        assert file(
            os.path.join(self.dirname, 'foo'),
            'rb').read() == 'Cache-Tag: 1\nContent-Type: text/plain\n\nbar'

    def test_put_noheaders(self):
        self.store.put('foo', StringIO('bar'), '1')
        self.assertEqual(
            open(os.path.join(self.dirname, 'foo'), 'rb').read(),
            'Cache-Tag: 1\n\nbar')

    def test_get(self):
        self.store.put('foo', StringIO('bar'), '1',
                       [('Content-Type', 'text/plain')])
        (cache_tag, headers, f) = self.store.get('foo')
        try:
            assert cache_tag == '1'
            assert headers == [('Content-Type', 'text/plain')]
            assert f.read() == 'bar'
        finally:
            f.close()

    def test_get_cache_hit(self):
        self.store.put('foo', StringIO('bar'), '1',
                       [('Content-Type', 'text/plain')])
        (cache_tag, headers, f) = self.store.get('foo', cache_tag='1')
        assert cache_tag == '1'
        assert headers == [('Content-Type', 'text/plain')]
        assert f is None

    def test_get_cache_miss(self):
        self.store.put('foo', StringIO('bar'), '1',
                       [('Content-Type', 'text/plain')])
        (cache_tag, headers, f) = self.store.get('foo', cache_tag='miss')
        try:
            assert cache_tag == '1'
            assert headers == [('Content-Type', 'text/plain')]
            assert f.read() == 'bar'
        finally:
            f.close()

    def test_missing(self):
        self.assertRaises(KeyError, self.store.get, 'not_found')

    def test_none_cache_tag(self):
        self.store.put('foo', StringIO('bar'), None,
                       [('Content-Type', 'text/plain')])
        (cache_tag, headers, f) = self.store.get('foo', cache_tag='None')
        try:
            assert cache_tag is None
            assert headers == [('Content-Type', 'text/plain')]
            assert f
        finally:
            f.close()
        (cache_tag, content_type, f) = self.store.get('foo', cache_tag='')
        try:
            assert cache_tag is None
            assert headers == [('Content-Type', 'text/plain')]
            assert f
        finally:
            f.close()

    def test_delete(self):
        self.assertRaises(OSError, self.store.delete, 'not_found')
Example #4
0
 def setUp(self):
     self.dirname = tempfile.mkdtemp()
     self.store = CachedTempFilestore(FileSystemHeaderedFilestore(self.dirname))
Example #5
0
class TestCachedTempFilestore(unittest.TestCase):

    def setUp(self):
        self.dirname = tempfile.mkdtemp()
        self.store = CachedTempFilestore(FileSystemHeaderedFilestore(self.dirname))

    def tearDown(self):
        shutil.rmtree(self.dirname)

    def test_put(self):
        self.store.put('foo', StringIO('bar'), '1', [('Content-Type', 'text/plain')])
        assert file(os.path.join(self.dirname, 'foo'), 'rb').read() == 'Cache-Tag: 1\nContent-Type: text/plain\n\nbar'

    def test_put_noheaders(self):
        self.store.put('foo', StringIO('bar'), '1')
        self.assertEqual(open(os.path.join(self.dirname, 'foo'), 'rb').read(),
        'Cache-Tag: 1\n\nbar')

    def test_get(self):
        self.store.put('foo', StringIO('bar'), '1', [('Content-Type', 'text/plain')])
        (cache_tag, headers, f) = self.store.get('foo')
        try:
            assert cache_tag == '1'
            assert headers == [('Content-Type', 'text/plain')]
            assert f.read() == 'bar'
        finally:
            f.close()

    def test_get_cache_hit(self):
        self.store.put('foo', StringIO('bar'), '1', [('Content-Type', 'text/plain')])
        (cache_tag, headers, f) = self.store.get('foo', cache_tag='1')
        assert cache_tag == '1'
        assert headers == [('Content-Type', 'text/plain')]
        assert f is None

    def test_get_cache_miss(self):
        self.store.put('foo', StringIO('bar'), '1', [('Content-Type', 'text/plain')])
        (cache_tag, headers, f) = self.store.get('foo', cache_tag='miss')
        try:
            assert cache_tag == '1'
            assert headers == [('Content-Type', 'text/plain')]
            assert f.read() == 'bar'
        finally:
            f.close()

    def test_missing(self):
        self.assertRaises(KeyError, self.store.get, 'not_found')

    def test_none_cache_tag(self):
        self.store.put('foo', StringIO('bar'), None, [('Content-Type', 'text/plain')])
        (cache_tag, headers, f) = self.store.get('foo', cache_tag='None')
        try:
            assert cache_tag is None
            assert headers == [('Content-Type', 'text/plain')]
            assert f
        finally:
            f.close()
        (cache_tag, content_type, f) = self.store.get('foo', cache_tag='')
        try:
            assert cache_tag is None
            assert headers == [('Content-Type', 'text/plain')]
            assert f
        finally:
            f.close()

    def test_delete(self):
        self.assertRaises(OSError, self.store.delete, 'not_found')