X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/04b05946ab640eaf9135a73772b704dd41c323e7..717c14c014e3c988bcb392599a47ffa92630da78:/apps/filebrowser/base.py diff --git a/apps/filebrowser/base.py b/apps/filebrowser/base.py new file mode 100644 index 00000000..e72b9ff0 --- /dev/null +++ b/apps/filebrowser/base.py @@ -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 + + +