Dodanie aplikacji sorl.thumbnail i filebrowser.
[redakcja.git] / apps / filebrowser / base.py
diff --git a/apps/filebrowser/base.py b/apps/filebrowser/base.py
new file mode 100644 (file)
index 0000000..e72b9ff
--- /dev/null
@@ -0,0 +1,199 @@
+# coding: utf-8
+
+import os, re, datetime
+from time import gmtime, strftime
+from django.conf import settings
+
+# filebrowser imports
+from filebrowser.fb_settings import *
+from filebrowser.functions import _get_file_type, _url_join, _is_selectable, _get_version_path
+
+# PIL import
+if STRICT_PIL:
+    from PIL import Image
+else:
+    try:
+        from PIL import Image
+    except ImportError:
+        import Image
+    
+
+class FileObject(object):
+    """
+    The FileObject represents a File on the Server.
+    
+    PATH has to be relative to MEDIA_ROOT.
+    """
+    
+    def __init__(self, path):
+        self.path = path
+        self.head = os.path.split(path)[0]
+        self.filename = os.path.split(path)[1]
+        self.filename_lower = self.filename.lower() # important for sorting
+        self.filetype = _get_file_type(self.filename)
+    
+    def _filesize(self):
+        """
+        Filesize.
+        """
+        if os.path.isfile(os.path.join(MEDIA_ROOT, self.path)) or os.path.isdir(os.path.join(MEDIA_ROOT, self.path)):
+            return os.path.getsize(os.path.join(MEDIA_ROOT, self.path))
+        return ""
+    filesize = property(_filesize)
+        
+    def _date(self):
+        """
+        Date.
+        """
+        if os.path.isfile(os.path.join(MEDIA_ROOT, self.path)) or os.path.isdir(os.path.join(MEDIA_ROOT, self.path)):
+            return os.path.getmtime(os.path.join(MEDIA_ROOT, self.path))
+        return ""
+    date = property(_date)
+    
+    def _datetime(self):
+        """
+        Datetime Object.
+        """
+        return datetime.datetime.fromtimestamp(self.date)
+    datetime = property(_datetime)
+    
+    def _extension(self):
+        """
+        Extension.
+        """
+        return u"%s" % os.path.splitext(self.filename)[1]
+    extension = property(_extension)
+    
+    def _filetype_checked(self):
+        if self.filetype == "Folder" and os.path.isdir(self.path_full):
+            return self.filetype
+        elif self.filetype != "Folder" and os.path.isfile(self.path_full):
+            return self.filetype
+        else:
+            return ""
+    filetype_checked = property(_filetype_checked)
+    
+    def _path_full(self):
+        """
+        Full server PATH including MEDIA_ROOT.
+        """
+        return u"%s" % os.path.join(MEDIA_ROOT, self.path)
+    path_full = property(_path_full)
+    
+    def _path_relative(self):
+        return self.path
+    path_relative = property(_path_relative)
+    
+    def _path_relative_directory(self):
+        """
+        Path relative to initial directory.
+        """
+        directory_re = re.compile(r'^(%s)' % (DIRECTORY))
+        value = directory_re.sub('', self.path)
+        return u"%s" % value
+    path_relative_directory = property(_path_relative_directory)
+    
+    def _url_relative(self):
+        return self.path
+    url_relative = property(_url_relative)
+    
+    def _url_full(self):
+        """
+        Full URL including MEDIA_URL.
+        """
+        return u"%s" % _url_join(MEDIA_URL, self.path)
+    url_full = property(_url_full)
+    
+    def _url_save(self):
+        """
+        URL used for the filebrowsefield.
+        """
+        if SAVE_FULL_URL:
+            return self.url_full
+        else:
+            return self.path
+    url_save = property(_url_save)
+    
+    def _url_thumbnail(self):
+        """
+        Thumbnail URL.
+        """
+        if self.filetype == "Image":
+            return u"%s" % _url_join(MEDIA_URL, _get_version_path(self.path, 'fb_thumb'))
+        else:
+            return ""
+    url_thumbnail = property(_url_thumbnail)
+    
+    def url_admin(self):
+        if self.filetype_checked == "Folder":
+            directory_re = re.compile(r'^(%s)' % (DIRECTORY))
+            value = directory_re.sub('', self.path)
+            return u"%s" % value
+        else:
+            return u"%s" % _url_join(MEDIA_URL, self.path)
+    
+    def _dimensions(self):
+        """
+        Image Dimensions.
+        """
+        if self.filetype == 'Image':
+            try:
+                im = Image.open(os.path.join(MEDIA_ROOT, self.path))
+                return im.size
+            except:
+                pass
+        else:
+            return False
+    dimensions = property(_dimensions)
+    
+    def _width(self):
+        """
+        Image Width.
+        """
+        return self.dimensions[0]
+    width = property(_width)
+    
+    def _height(self):
+        """
+        Image Height.
+        """
+        return self.dimensions[1]
+    height = property(_height)
+    
+    def _orientation(self):
+        """
+        Image Orientation.
+        """
+        if self.dimensions:
+            if self.dimensions[0] >= self.dimensions[1]:
+                return "Landscape"
+            else:
+                return "Portrait"
+        else:
+            return None
+    orientation = property(_orientation)
+    
+    def _is_empty(self):
+        """
+        True if Folder is empty, False if not.
+        """
+        if os.path.isdir(self.path_full):
+            if not os.listdir(self.path_full):
+                return True
+            else:
+                return False
+        else:
+            return None
+    is_empty = property(_is_empty)
+    
+    def __repr__(self):
+        return u"%s" % self.url_save
+    
+    def __str__(self):
+        return u"%s" % self.url_save
+    
+    def __unicode__(self):
+        return u"%s" % self.url_save
+    
+
+