summaryrefslogtreecommitdiff
path: root/app/lib/filebrowser/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'app/lib/filebrowser/base.py')
-rw-r--r--app/lib/filebrowser/base.py219
1 files changed, 219 insertions, 0 deletions
diff --git a/app/lib/filebrowser/base.py b/app/lib/filebrowser/base.py
new file mode 100644
index 0000000..1b60dce
--- /dev/null
+++ b/app/lib/filebrowser/base.py
@@ -0,0 +1,219 @@
+# coding: utf-8
+
+# imports
+import os, re, datetime
+from time import gmtime, strftime
+
+# django imports
+from django.conf import settings
+
+# filebrowser imports
+from filebrowser.settings import *
+from filebrowser.functions import get_file_type, url_join, is_selectable, get_version_path
+from django.utils.encoding import force_unicode
+
+# 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):
+ path = force_unicode(path)
+ self.path = path
+ self.url_rel = path.replace("\\","/")
+ self.head = os.path.split(path)[0]
+ self.filename = os.path.split(path)[1]
+ self.filename_lower = self.filename.lower() # important for sorting
+ # ABP: fix for dotted folder names
+ if os.path.isdir(self.path_full):
+ self.filetype = 'Folder'
+ else:
+ self.filetype = get_file_type(self.filename)
+
+ def _filesize(self):
+ """
+ Filesize.
+ """
+ path = self.path
+ if os.path.isfile(os.path.join(MEDIA_ROOT, path)) or os.path.isdir(os.path.join(MEDIA_ROOT, path)):
+ return os.path.getsize(os.path.join(MEDIA_ROOT, 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 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.url_rel
+ url_relative = property(_url_relative)
+
+ def _url_full(self):
+ """
+ Full URL including MEDIA_URL.
+ """
+ return force_unicode(url_join(MEDIA_URL, self.url_rel))
+ 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.url_rel
+ 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 _folder(self):
+ directory_re = re.compile(r'^(%s)' % (DIRECTORY.rstrip('/')))
+ return u"%s/" % directory_re.sub('', self.head)
+ folder = property(_folder)
+
+ def _folder_for_link(self):
+ directory_re = re.compile(r'^(%s)' % (DIRECTORY.rstrip('/')))
+ return u"%s" % directory_re.sub('', self.head)[1:]
+ folder_for_link = property(_folder_for_link)
+
+ 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 force_unicode(self.url_save)
+
+ def __str__(self):
+ return force_unicode(self.url_save)
+
+ def __unicode__(self):
+ return force_unicode(self.url_save)
+
+