Ticket #8204: filestorage.2.diff

File filestorage.2.diff, 1.5 KB (added by flosch, 7 years ago)

I extended ContentFile for usage with PIL or others .. example follows, works for me (dunno whether ContentFile is the right place for that?)

  • django/core/files/base.py

     
    44
    55try:
    66    from cStringIO import StringIO
     7    c_string_io = True
    78except ImportError:
    89    from StringIO import StringIO
     10    c_string_io = False
    911
    1012class File(object):
    1113    DEFAULT_CHUNK_SIZE = 64 * 2**10
     
    151153    """
    152154    A File-like object that takes just raw content, rather than an actual file.
    153155    """
    154     def __init__(self, content):
    155         self.file = StringIO(content or '')
     156    def __init__(self, content = None):
     157        if c_string_io:
     158            if content:
     159                self.file = StringIO(content)
     160                self._mode = "r"
     161            else:
     162                self.file = StringIO()
     163                self._mode = "w"
     164        else:
     165            self.file = StringIO(content or '')
     166            self._mode = "w"
    156167        self.size = len(content or '')
    157168        self.file.seek(0)
     169        self._name = "contentfile"
    158170        self._closed = False
    159171
    160172    def __str__(self):
     
    163175    def __nonzero__(self):
    164176        return True
    165177
     178    def _get_size(self):
     179        old_position = self.file.tell()
     180        self.file.seek(0, 2)
     181        size = self.file.tell()
     182        self.file.seek(old_position)
     183        return size
     184
     185    def _set_size(self, value): pass
     186
     187    size = property(_get_size, _set_size)
     188
    166189    def open(self, mode=None):
    167190        if self._closed:
    168191            self._closed = False
Back to Top