/usr/lib/python3/dist-packages/imagekit/files.py is in python3-django-imagekit 4.0.2-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | from __future__ import unicode_literals
import os
from django.core.files.base import File, ContentFile
from django.utils.encoding import smart_str
from .lib import smart_text
from .utils import format_to_mimetype, extension_to_mimetype
class BaseIKFile(File):
    """
    This class contains all of the methods we need from
    django.db.models.fields.files.FieldFile, but with the model stuff ripped
    out. It's only extended by one class, but we keep it separate for
    organizational reasons.
    """
    def __init__(self, storage):
        self.storage = storage
    def _require_file(self):
        if not self:
            raise ValueError()
    def _get_file(self):
        self._require_file()
        if not hasattr(self, '_file') or self._file is None:
            self._file = self.storage.open(self.name, 'rb')
        return self._file
    def _set_file(self, file):
        self._file = file
    def _del_file(self):
        del self._file
    file = property(_get_file, _set_file, _del_file)
    def _get_path(self):
        self._require_file()
        return self.storage.path(self.name)
    path = property(_get_path)
    def _get_url(self):
        self._require_file()
        return self.storage.url(self.name)
    url = property(_get_url)
    def _get_size(self):
        self._require_file()
        if not self._committed:
            return self.file.size
        return self.storage.size(self.name)
    size = property(_get_size)
    def open(self, mode='rb'):
        self._require_file()
        try:
            self.file.open(mode)
        except ValueError:
            # if the underlaying file can't be reopened
            # then we will use the storage to try to open it again
            if self.file.closed:
                # clear cached file instance
                del self.file
                # Because file is a property we can acces it after
                # we deleted it
                return self.file.open(mode)
            raise
    def _get_closed(self):
        file = getattr(self, '_file', None)
        return file is None or file.closed
    closed = property(_get_closed)
    def close(self):
        file = getattr(self, '_file', None)
        if file is not None:
            file.close()
class IKContentFile(ContentFile):
    """
    Wraps a ContentFile in a file-like object with a filename and a
    content_type. A PIL image format can be optionally be provided as a content
    type hint.
    """
    def __init__(self, filename, content, format=None):
        self.file = ContentFile(content)
        self.file.name = filename
        mimetype = getattr(self.file, 'content_type', None)
        if format and not mimetype:
            mimetype = format_to_mimetype(format)
        if not mimetype:
            ext = os.path.splitext(filename or '')[1]
            mimetype = extension_to_mimetype(ext)
        self.file.content_type = mimetype
    @property
    def name(self):
        return self.file.name
    def __str__(self):
        return smart_str(self.file.name or '')
    def __unicode__(self):
        # Python 2
        return smart_text(self.file.name or '')
 |