+++ /dev/null
-# coding: utf-8
-
-import locale
-
-import os, re, datetime
-from time import gmtime, strftime
-from django.conf import settings
-import urllib
-
-# 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
-
-
-def filesystem_encoding(ucode):
- ucode = ucode.encode('utf-8')
- ucode = urllib.quote(ucode)
- return ucode
-
-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 = unicode(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))
- # IMHO this should raise an exception
- return None
- 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 filesystem_encoding(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 filesystem_encoding(self.path)
- url_save = property(_url_save)
-
- def _url_thumbnail(self):
- """
- Thumbnail URL.
- """
- if self.filetype == "Image":
- return filesystem_encoding(u"%s" % _url_join(MEDIA_URL, _get_version_path(self.path, u'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 filesystem_encoding(u"%s" % value)
- else:
- return filesystem_encoding(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
-
-
-