def save_model(self, request, obj, form, change): """ Imposta alcune proprietà di base del file quando viene creato manualmente Inoltre adatta il tipo di oggetto in base all'estensione effettiva """ # Le personalizzazioni valgono solo se l'oggetto non è stato ancora salvato if not obj.pk: if not obj.original_filename: obj.original_filename = os.path.basename(obj.path) if not obj.owner_id: obj.owner_id = request.user.pk if not obj.is_public: obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT try: obj.folder_id = int(request.GET.get('parent_id', None)) except TypeError: pass # codice analogo a filer.admin.clipboardadmin per la gestione dei tipi for filer_class in filer_settings.FILER_FILE_MODELS: FileSubClass = load_object(filer_class) if obj.file and FileSubClass.matches_file_type(obj.file.path, None, request): break else: FileSubClass = load_object(filer_settings.FILER_FILE_MODELS[-1]) ConcreteFileClass = FileSubClass if ConcreteFileClass: new = ConcreteFileClass() for k, v in obj.__dict__.items(): new.__dict__[k] = v super(AdminDocumento, self).save_model(request, new, form, change) obj.pk = new.pk return super(AdminDocumento, self).save_model(request, obj, form, change)
def get_allowed_sites(request, model=None): if settings.ALLOWED_SITES_FOR_USER and request and model: get_sites_for = load_object(settings.ALLOWED_SITES_FOR_USER) return get_sites_for(request.user, model) if global_settings.CMS_PERMISSION and request: from cms.utils.permissions import get_user_sites_queryset return get_user_sites_queryset(request.user) return Site.objects.all()
def ajax_upload(self, request, folder_id=None): """ Receives an upload from the uploader. Receives only one file at a time. """ mimetype = "application/json" if request.is_ajax() else "text/html" content_type_key = 'mimetype' if DJANGO_1_4 else 'content_type' response_params = {content_type_key: mimetype} try: upload, filename, is_raw = handle_upload(request) # Get clipboad clipboard = Clipboard.objects.get_or_create(user=request.user)[0] # find the file type for filer_class in filer_settings.FILER_FILE_MODELS: FileSubClass = load_object(filer_class) # TODO: What if there are more than one that qualify? if FileSubClass.matches_file_type(filename, upload, request): FileForm = modelform_factory(model=FileSubClass, fields=('original_filename', 'owner', 'file')) break uploadform = FileForm( { 'original_filename': filename, 'owner': request.user.pk }, {'file': upload}) if uploadform.is_valid(): file_obj = uploadform.save(commit=False) # Enforce the FILER_IS_PUBLIC_DEFAULT file_obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT file_obj.save() clipboard_item = ClipboardItem(clipboard=clipboard, file=file_obj) clipboard_item.save() json_response = { 'thumbnail': file_obj.icons['32'], 'alt_text': '', 'label': str(file_obj), } return HttpResponse(json.dumps(json_response), **response_params) else: form_errors = '; '.join([ '%s: %s' % (field, ', '.join(errors)) for field, errors in list(uploadform.errors.items()) ]) raise UploadException( "AJAX request not valid: form invalid '%s'" % (form_errors, )) except UploadException as e: return HttpResponse(json.dumps({'error': str(e)}), **response_params)
def ajax_upload(self, request, folder_id=None): """ Receives an upload from the uploader. Receives only one file at a time. """ mimetype = "application/json" if request.is_ajax() else "text/html" content_type_key = 'mimetype' if DJANGO_1_4 else 'content_type' response_params = {content_type_key: mimetype} try: upload, filename, is_raw = handle_upload(request) # Get clipboad clipboard = Clipboard.objects.get_or_create(user=request.user)[0] # find the file type for filer_class in filer_settings.FILER_FILE_MODELS: FileSubClass = load_object(filer_class) # TODO: What if there are more than one that qualify? if FileSubClass.matches_file_type(filename, upload, request): FileForm = modelform_factory( model=FileSubClass, fields=('original_filename', 'owner', 'file') ) break uploadform = FileForm({'original_filename': filename, 'owner': request.user.pk}, {'file': upload}) if uploadform.is_valid(): file_obj = uploadform.save(commit=False) # Enforce the FILER_IS_PUBLIC_DEFAULT file_obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT file_obj.save() clipboard_item = ClipboardItem( clipboard=clipboard, file=file_obj) clipboard_item.save() json_response = { 'thumbnail': file_obj.icons['32'], 'alt_text': '', 'label': str(file_obj), } return HttpResponse(json.dumps(json_response), **response_params) else: form_errors = '; '.join(['%s: %s' % ( field, ', '.join(errors)) for field, errors in list( uploadform.errors.items()) ]) raise UploadException( "AJAX request not valid: form invalid '%s'" % ( form_errors,)) except UploadException as e: return HttpResponse(json.dumps({'error': str(e)}), **response_params)
def save_model(self, request, obj, form, change): """ Imposta alcune proprietà di base del file quando viene creato manualmente Inoltre adatta il tipo di oggetto in base all'estensione effettiva """ # Le personalizzazioni valgono solo se l'oggetto non è stato ancora salvato if not obj.pk: if not obj.original_filename: obj.original_filename = os.path.basename(obj.path) if not obj.owner_id: obj.owner_id = request.user.pk if not obj.is_public: obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT try: obj.folder_id = int(request.GET.get('parent_id', None)) except TypeError: pass # codice analogo a filer.admin.clipboardadmin per la gestione dei tipi for filer_class in filer_settings.FILER_FILE_MODELS: FileSubClass = load_object(filer_class) if obj.file and FileSubClass.matches_file_type( obj.file.path, None, request): break else: FileSubClass = load_object( filer_settings.FILER_FILE_MODELS[-1]) ConcreteFileClass = FileSubClass if ConcreteFileClass: new = ConcreteFileClass() for k, v in obj.__dict__.items(): new.__dict__[k] = v super(AdminDocumento, self).save_model(request, new, form, change) obj.pk = new.pk return super(AdminDocumento, self).save_model(request, obj, form, change)
def ajax_upload(self, request, folder_id=None): """ receives an upload from the uploader. Receives only one file at the time. """ mimetype = "application/json" if request.is_ajax() else "text/html" try: upload, filename, is_raw = handle_upload(request) # Get clipboad clipboard = Clipboard.objects.get_or_create(user=request.user)[0] # find the file type for filer_class in filer_settings.FILER_FILE_MODELS: FileSubClass = load_object(filer_class) #TODO: What if there are more than one that qualify? if FileSubClass.matches_file_type(filename, upload, request): FileForm = modelform_factory(model=FileSubClass, fields=('original_filename', 'owner', 'file')) break uploadform = FileForm( { 'original_filename': filename, 'owner': request.user.pk }, {'file': upload}) if uploadform.is_valid(): file_obj = uploadform.save(commit=False) # Enforce the FILER_IS_PUBLIC_DEFAULT file_obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT file_obj.save() clipboard_item = ClipboardItem(clipboard=clipboard, file=file_obj) clipboard_item.save() try: json_response = { 'thumbnail': file_obj.icons['32'], 'alt_text': '', 'label': unicode(file_obj), } except Exception, e: json_response = { 'thumbnail': None, 'alt_text': '', 'label': unicode(file_obj), } return HttpResponse(simplejson.dumps(json_response), mimetype=mimetype) else:
def ajax_upload(self, request, folder_id=None): """ receives an upload from the uploader. Receives only one file at the time. """ mimetype = "application/json" if request.is_ajax() else "text/html" try: upload, filename, is_raw = handle_upload(request) # Get clipboad clipboard = Clipboard.objects.get_or_create(user=request.user)[0] # find the file type for filer_class in filer_settings.FILER_FILE_MODELS: FileSubClass = load_object(filer_class) #TODO: What if there are more than one that qualify? if FileSubClass.matches_file_type(filename, upload, request): FileForm = modelform_factory( model = FileSubClass, fields = ('original_filename', 'owner', 'file') ) break uploadform = FileForm({'original_filename': filename, 'owner': request.user.pk}, {'file': upload}) if uploadform.is_valid(): file_obj = uploadform.save(commit=False) # Enforce the FILER_IS_PUBLIC_DEFAULT file_obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT file_obj.save() clipboard_item = ClipboardItem( clipboard=clipboard, file=file_obj) clipboard_item.save() try: json_response = { 'thumbnail': file_obj.icons['32'], 'alt_text': '', 'label': unicode(file_obj), } except Exception, e: json_response = { 'thumbnail': None, 'alt_text': '', 'label': unicode(file_obj), } return HttpResponse(simplejson.dumps(json_response), mimetype=mimetype) else:
FILER_SERVERS.rec_update(getattr(settings, 'FILER_SERVERS', {})) def update_server_settings(settings, defaults, s, t): if not settings[s][t]['ENGINE']: settings[s][t]['ENGINE'] = defaults[s][t]['ENGINE'] settings[s][t]['OPTIONS'] = defaults[s][t]['OPTIONS'] return settings update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, 'private', 'main') update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, 'private', 'thumbnails') # Public media (media accessible without any permission checks) FILER_PUBLICMEDIA_STORAGE = get_storage_class(FILER_STORAGES['public']['main']['ENGINE'])(**FILER_STORAGES['public']['main']['OPTIONS']) FILER_PUBLICMEDIA_UPLOAD_TO = load_object(FILER_STORAGES['public']['main']['UPLOAD_TO']) if 'UPLOAD_TO_PREFIX' in FILER_STORAGES['public']['main']: FILER_PUBLICMEDIA_UPLOAD_TO = load_object('filer.utils.generate_filename.prefixed_factory')(FILER_PUBLICMEDIA_UPLOAD_TO, FILER_STORAGES['public']['main']['UPLOAD_TO_PREFIX']) FILER_PUBLICMEDIA_THUMBNAIL_STORAGE = get_storage_class(FILER_STORAGES['public']['thumbnails']['ENGINE'])(**FILER_STORAGES['public']['thumbnails']['OPTIONS']) FILER_PUBLICMEDIA_THUMBNAIL_OPTIONS = FILER_STORAGES['public']['thumbnails']['THUMBNAIL_OPTIONS'] # Private media (media accessible through permissions checks) FILER_PRIVATEMEDIA_STORAGE = get_storage_class(FILER_STORAGES['private']['main']['ENGINE'])(**FILER_STORAGES['private']['main']['OPTIONS']) FILER_PRIVATEMEDIA_UPLOAD_TO = load_object(FILER_STORAGES['private']['main']['UPLOAD_TO']) if 'UPLOAD_TO_PREFIX' in FILER_STORAGES['private']['main']: FILER_PRIVATEMEDIA_UPLOAD_TO = load_object('filer.utils.generate_filename.prefixed_factory')(FILER_PRIVATEMEDIA_UPLOAD_TO, FILER_STORAGES['private']['main']['UPLOAD_TO_PREFIX']) FILER_PRIVATEMEDIA_THUMBNAIL_STORAGE = get_storage_class(FILER_STORAGES['private']['thumbnails']['ENGINE'])(**FILER_STORAGES['private']['thumbnails']['OPTIONS']) FILER_PRIVATEMEDIA_THUMBNAIL_OPTIONS = FILER_STORAGES['private']['thumbnails']['THUMBNAIL_OPTIONS'] FILER_PRIVATEMEDIA_SERVER = load_object(FILER_SERVERS['private']['main']['ENGINE'])(**FILER_SERVERS['private']['main']['OPTIONS']) FILER_PRIVATEMEDIA_THUMBNAIL_SERVER = load_object(FILER_SERVERS['private']['thumbnails']['ENGINE'])(**FILER_SERVERS['private']['thumbnails']['OPTIONS'])
def get_filer_file_field(): base_field = getattr(settings, 'FILER_FILE_FIELD', 'filer.fields.file.FilerFileField') return load_object(base_field)
def get_filer_image_field(): base_field = getattr(settings, 'FILER_IMAGE_FIELD', 'filer.fields.image.FilerImageField') return load_object(base_field)
def ajax_upload(request, folder_id=None): """ Receives an upload from the uploader. Receives only one file at a time. """ mimetype = "application/json" if request.is_ajax() else "text/html" content_type_key = 'mimetype' if DJANGO_1_4 else 'content_type' response_params = {content_type_key: mimetype} folder = None if folder_id: try: # Get folder folder = Folder.objects.get(pk=folder_id) except Folder.DoesNotExist: return HttpResponse(json.dumps({'error': NO_FOLDER_ERROR}), **response_params) # check permissions if folder and not folder.has_add_children_permission(request): return HttpResponse(json.dumps({'error': NO_PERMISSIONS_FOR_FOLDER}), **response_params) try: if len(request.FILES) == 1: # dont check if request is ajax or not, just grab the file upload, filename, is_raw = handle_request_files_upload(request) else: # else process the request as usual upload, filename, is_raw = handle_upload(request) # TODO: Deprecated/refactor # Get clipboad # clipboard = Clipboard.objects.get_or_create(user=request.user)[0] # find the file type for filer_class in filer_settings.FILER_FILE_MODELS: FileSubClass = load_object(filer_class) # TODO: What if there are more than one that qualify? if FileSubClass.matches_file_type(filename, upload, request): FileForm = modelform_factory(model=FileSubClass, fields=('original_filename', 'owner', 'file')) break uploadform = FileForm( { 'original_filename': filename, 'owner': request.user.pk }, {'file': upload}) if uploadform.is_valid(): file_obj = uploadform.save(commit=False) # Enforce the FILER_IS_PUBLIC_DEFAULT file_obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT file_obj.folder = folder file_obj.save() # TODO: Deprecated/refactor # clipboard_item = ClipboardItem( # clipboard=clipboard, file=file_obj) # clipboard_item.save() # Try to generate thumbnails. if not file_obj.icons: # There is no point to continue, as we can't generate # thumbnails for this file. Usual reasons: bad format or # filename. file_obj.delete() # This would be logged in BaseImage._generate_thumbnails() # if FILER_ENABLE_LOGGING is on. return HttpResponse(json.dumps( {'error': 'failed to generate icons for file'}), status=500, **response_params) thumbnail = None # Backwards compatibility: try to get specific icon size (32px) # first. Then try medium icon size (they are already sorted), # fallback to the first (smallest) configured icon. for size in (['32'] + filer_settings.FILER_ADMIN_ICON_SIZES[1::-1]): try: thumbnail = file_obj.icons[size] break except KeyError: continue json_response = { 'thumbnail': thumbnail, 'alt_text': '', 'label': str(file_obj), 'file_id': file_obj.pk, } # prepare preview thumbnail if type(file_obj) == Image: thumbnail_180_options = { 'size': (180, 180), 'crop': True, 'upscale': True, } thumbnail_180 = file_obj.file.get_thumbnail( thumbnail_180_options) json_response['thumbnail_180'] = thumbnail_180.url json_response['original_image'] = file_obj.url return HttpResponse(json.dumps(json_response), **response_params) else: form_errors = '; '.join([ '%s: %s' % (field, ', '.join(errors)) for field, errors in list(uploadform.errors.items()) ]) raise UploadException("AJAX request not valid: form invalid '%s'" % (form_errors, )) except UploadException as e: return HttpResponse(json.dumps({'error': str(e)}), status=500, **response_params)
def ajax_upload(self, request, folder_id=None): """ receives an upload from the uploader. Receives only one file at the time. """ mimetype = "application/json" if request.is_ajax() else "text/html" content_type_key = 'content_type' response_params = {content_type_key: mimetype} folder = None if folder_id: try: # Get folder folder = Folder.objects.get(pk=folder_id) except Folder.DoesNotExist: return HttpResponse(json.dumps({'error': NO_FOLDER_ERROR}), **response_params) # check permissions if folder and not folder.has_add_children_permission(request): return HttpResponse( json.dumps({'error': NO_PERMISSIONS_FOR_FOLDER}), **response_params) try: if len(request.FILES) == 1: # dont check if request is ajax or not, just grab the file upload, filename, is_raw = handle_request_files_upload(request) else: # else process the request as usual upload, filename, is_raw = handle_upload(request) # Get clipboad # TODO: Deprecated/refactor # clipboard = Clipboard.objects.get_or_create(user=request.user)[0] # find the file type for filer_class in media_settings.MEDIA_FILE_MODELS: FileSubClass = load_object(filer_class) # TODO: What if there are more than one that qualify? if FileSubClass.matches_file_type(filename, upload, request): FileForm = modelform_factory(model=FileSubClass, fields=('original_filename', 'owner', 'file')) break uploadform = FileForm( { 'original_filename': filename, 'owner': request.user.pk }, {'file': upload}) if uploadform.is_valid(): file_obj = uploadform.save(commit=False) # Enforce the FILER_IS_PUBLIC_DEFAULT file_obj.is_public = settings.MEDIA_IS_PUBLIC_DEFAULT file_obj.folder = folder file_obj.save() # TODO: Deprecated/refactor # clipboard_item = ClipboardItem( # clipboard=clipboard, file=file_obj) # clipboard_item.save() json_response = { 'thumbnail': file_obj.icons['32'], 'alt_text': '', 'label': str(file_obj), 'file_id': file_obj.pk, } return HttpResponse(json.dumps(json_response), **response_params) else: form_errors = '; '.join([ '%s: %s' % (field, ', '.join(errors)) for field, errors in list(uploadform.errors.items()) ]) raise UploadException( "AJAX request not valid: form invalid '%s'" % (form_errors, )) except UploadException as e: return HttpResponse(json.dumps({'error': str(e)}), **response_params)
def get_filer_file_field(): base_field = getattr(settings, 'FILER_FILE_FIELD', 'filer.fields.file.FilerFileField') return load_object(base_field)
def test_loader_loads_subclass(self): result = load_object(TestTargetClass) self.assertEqual(result, TestTargetClass)
def test_loader_loads_class(self): result = load_object(TestTargetClass()) self.assertEqual(result.__class__, TestTargetClass)
def test_loader_loads_strings_properly(self): target = 'tests.test_utils.TestTargetClass' result = load_object(target) # Should return an instance self.assertEqual(result, TestTargetClass)
def ajax_upload(self, request, folder_id=None): """ receives an upload from the uploader. Receives only one file at the time. """ mimetype = "application/json" if request.is_ajax() else "text/html" content_type_key = 'content_type' response_params = {content_type_key: mimetype} folder = None if folder_id: try: # Get folder folder = Folder.objects.get(pk=folder_id) except Folder.DoesNotExist: return HttpResponse(json.dumps({'error': NO_FOLDER_ERROR}), **response_params) # check permissions if folder and not folder.has_add_children_permission(request): return HttpResponse( json.dumps({'error': NO_PERMISSIONS_FOR_FOLDER}), **response_params) try: if len(request.FILES) == 1: # dont check if request is ajax or not, just grab the file upload, filename, is_raw = handle_request_files_upload(request) else: # else process the request as usual upload, filename, is_raw = handle_upload(request) # Get clipboad # TODO: Deprecated/refactor # clipboard = Clipboard.objects.get_or_create(user=request.user)[0] # find the file type for filer_class in media_settings.MEDIA_FILE_MODELS: FileSubClass = load_object(filer_class) # TODO: What if there are more than one that qualify? if FileSubClass.matches_file_type(filename, upload, request): FileForm = modelform_factory( model=FileSubClass, fields=('original_filename', 'owner', 'file') ) break uploadform = FileForm({'original_filename': filename, 'owner': request.user.pk}, {'file': upload}) if uploadform.is_valid(): file_obj = uploadform.save(commit=False) # Enforce the FILER_IS_PUBLIC_DEFAULT file_obj.is_public = settings.MEDIA_IS_PUBLIC_DEFAULT file_obj.folder = folder file_obj.save() # TODO: Deprecated/refactor # clipboard_item = ClipboardItem( # clipboard=clipboard, file=file_obj) # clipboard_item.save() json_response = { 'thumbnail': file_obj.icons['32'], 'alt_text': '', 'label': str(file_obj), 'file_id': file_obj.pk, } return HttpResponse(json.dumps(json_response), **response_params) else: form_errors = '; '.join(['%s: %s' % ( field, ', '.join(errors)) for field, errors in list(uploadform.errors.items()) ]) raise UploadException( "AJAX request not valid: form invalid '%s'" % (form_errors,)) except UploadException as e: return HttpResponse(json.dumps({'error': str(e)}), **response_params)
FILER_PRIVATEMEDIA_URL = os.path.normpath( getattr(settings, 'FILER_PRIVATEMEDIA_URL', os.path.join(settings.MEDIA_URL,FILER_PRIVATEMEDIA_PREFIX) ) ) FILER_PRIVATEMEDIA_ROOT = os.path.abspath( os.path.join(settings.MEDIA_ROOT, FILER_PRIVATEMEDIA_PREFIX ) ) FILER_ADMIN_ICON_SIZES = ( '16', '32', '48', '64', ) # Public media (media accessible without any permission checks) FILER_PUBLICMEDIA_STORAGE = load_object(getattr( settings, 'FILER_PUBLICMEDIA_STORAGE', storage_factory( klass=PublicFileSystemStorage, location=os.path.abspath( os.path.join(settings.MEDIA_ROOT, 'filer')), base_url=urlparse.urljoin(settings.MEDIA_URL, 'filer/') ))) FILER_PUBLICMEDIA_UPLOAD_TO = load_object(getattr(settings, 'FILER_PUBLICMEDIA_UPLOAD_TO', 'filer.utils.generate_filename.by_date')) FILER_PUBLICMEDIA_THUMBNAIL_STORAGE = load_object(getattr( settings, 'FILER_PUBLICMEDIA_THUMBNAIL_STORAGE', storage_factory( klass=PublicFileSystemStorage, location=os.path.abspath( os.path.join(settings.MEDIA_ROOT, 'filer_thumbnails')), base_url=urlparse.urljoin(settings.MEDIA_URL,
def update_server_settings(settings, defaults, s, t): if not settings[s][t]['ENGINE']: settings[s][t]['ENGINE'] = defaults[s][t]['ENGINE'] settings[s][t]['OPTIONS'] = defaults[s][t]['OPTIONS'] return settings update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, 'private', 'main') update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, 'private', 'thumbnails') # Public media (media accessible without any permission checks) FILER_PUBLICMEDIA_STORAGE = get_storage_class( FILER_STORAGES['public']['main']['ENGINE'])( **FILER_STORAGES['public']['main']['OPTIONS']) FILER_PUBLICMEDIA_UPLOAD_TO = load_object( FILER_STORAGES['public']['main']['UPLOAD_TO']) if 'UPLOAD_TO_PREFIX' in FILER_STORAGES['public']['main']: FILER_PUBLICMEDIA_UPLOAD_TO = load_object( 'filer.utils.generate_filename.prefixed_factory')( FILER_PUBLICMEDIA_UPLOAD_TO, FILER_STORAGES['public']['main']['UPLOAD_TO_PREFIX']) FILER_PUBLICMEDIA_THUMBNAIL_STORAGE = get_storage_class( FILER_STORAGES['public']['thumbnails']['ENGINE'])( **FILER_STORAGES['public']['thumbnails']['OPTIONS']) FILER_PUBLICMEDIA_THUMBNAIL_OPTIONS = FILER_STORAGES['public']['thumbnails'][ 'THUMBNAIL_OPTIONS'] # Private media (media accessible through permissions checks) FILER_PRIVATEMEDIA_STORAGE = get_storage_class( FILER_STORAGES['private']['main']['ENGINE'])( **FILER_STORAGES['private']['main']['OPTIONS'])
# classes that I should check for when adding files FILER_FILE_MODELS = getattr(settings, 'FILER_FILE_MODELS', ( 'filer.models.imagemodels.Image', 'filer.models.audiomodels.Audio', 'filer.models.filemodels.File', )) # Public media (media accessible without any permission checks) FILER_PUBLICMEDIA_STORAGE = getattr( settings, 'FILER_PUBLICMEDIA_STORAGE', storage_factory(klass=PublicFileSystemStorage, location=os.path.abspath( os.path.join(settings.MEDIA_ROOT, 'filer')), base_url=urlparse.urljoin(settings.MEDIA_URL, 'filer/'))) FILER_PUBLICMEDIA_UPLOAD_TO = load_object( getattr(settings, 'FILER_PUBLICMEDIA_UPLOAD_TO', 'filer.utils.generate_filename.by_date')) FILER_PUBLICMEDIA_THUMBNAIL_STORAGE = getattr( settings, 'FILER_PUBLICMEDIA_THUMBNAIL_STORAGE', storage_factory(klass=PublicFileSystemStorage, location=os.path.abspath( os.path.join(settings.MEDIA_ROOT, 'filer_thumbnails')), base_url=urlparse.urljoin(settings.MEDIA_URL, 'filer_thumbnails/'))) # Private media (media accessible through permissions checks) FILER_PRIVATEMEDIA_STORAGE = getattr( settings, 'FILER_PRIVATEMEDIA_STORAGE', storage_factory(klass=PrivateFileSystemStorage, location=os.path.abspath( os.path.join(settings.MEDIA_ROOT, '../smedia/filer/')),
def ajax_upload(self, request, folder_id=None): """ Receives an upload from the uploader. Receives only one file at a time. """ mimetype = "application/json" if request.is_ajax() else "text/html" content_type_key = "mimetype" if DJANGO_1_4 else "content_type" response_params = {content_type_key: mimetype} folder = None if folder_id: try: # Get folder folder = Folder.objects.get(pk=folder_id) except Folder.DoesNotExist: return HttpResponse(json.dumps({"error": NO_FOLDER_ERROR}), **response_params) # check permissions if folder and not folder.has_add_children_permission(request): return HttpResponse(json.dumps({"error": NO_PERMISSIONS_FOR_FOLDER}), **response_params) try: if len(request.FILES) == 1: # dont check if request is ajax or not, just grab the file upload, filename, is_raw = handle_request_files_upload(request) else: # else process the request as usual upload, filename, is_raw = handle_upload(request) # TODO: Deprecated/refactor # Get clipboad # clipboard = Clipboard.objects.get_or_create(user=request.user)[0] # find the file type for filer_class in filer_settings.FILER_FILE_MODELS: FileSubClass = load_object(filer_class) # TODO: What if there are more than one that qualify? if FileSubClass.matches_file_type(filename, upload, request): FileForm = modelform_factory(model=FileSubClass, fields=("original_filename", "owner", "file")) break uploadform = FileForm({"original_filename": filename, "owner": request.user.pk}, {"file": upload}) if uploadform.is_valid(): file_obj = uploadform.save(commit=False) # Enforce the FILER_IS_PUBLIC_DEFAULT file_obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT file_obj.folder = folder file_obj.save() # TODO: Deprecated/refactor # clipboard_item = ClipboardItem( # clipboard=clipboard, file=file_obj) # clipboard_item.save() # Try to generate thumbnails. if not file_obj.icons: # There is no point to continue, as we can't generate # thumbnails for this file. Usual reasons: bad format or # filename. file_obj.delete() # This would be logged in BaseImage._generate_thumbnails() # if FILER_ENABLE_LOGGING is on. return HttpResponse( json.dumps({"error": "failed to generate icons for file"}), status=500, **response_params ) thumbnail = None # Backwards compatibility: try to get specific icon size (32px) # first. Then try medium icon size (they are already sorted), # fallback to the first (smallest) configured icon. for size in ["32"] + filer_settings.FILER_ADMIN_ICON_SIZES[1::-1]: try: thumbnail = file_obj.icons[size] break except KeyError: continue json_response = {"thumbnail": thumbnail, "alt_text": "", "label": str(file_obj), "file_id": file_obj.pk} # prepare preview thumbnail if type(file_obj) == Image: thumbnail_180_options = {"size": (180, 180), "crop": True, "upscale": True} thumbnail_180 = file_obj.file.get_thumbnail(thumbnail_180_options) json_response["thumbnail_180"] = thumbnail_180.url return HttpResponse(json.dumps(json_response), **response_params) else: form_errors = "; ".join( ["%s: %s" % (field, ", ".join(errors)) for field, errors in list(uploadform.errors.items())] ) raise UploadException("AJAX request not valid: form invalid '%s'" % (form_errors,)) except UploadException as e: return HttpResponse(json.dumps({"error": str(e)}), **response_params)
def update_server_settings(settings, defaults, s, t): if not settings[s][t]['ENGINE']: settings[s][t]['ENGINE'] = defaults[s][t]['ENGINE'] settings[s][t]['OPTIONS'] = defaults[s][t]['OPTIONS'] return settings update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, 'private', 'main') update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, 'private', 'thumbnails') # Public media (media accessible without any permission checks) FILER_PUBLICMEDIA_STORAGE = get_storage_class( FILER_STORAGES['public']['main']['ENGINE'])( **FILER_STORAGES['public']['main']['OPTIONS']) FILER_PUBLICMEDIA_UPLOAD_TO = load_object( FILER_STORAGES['public']['main']['UPLOAD_TO']) FILER_PUBLICMEDIA_THUMBNAIL_STORAGE = get_storage_class( FILER_STORAGES['public']['thumbnails']['ENGINE'])( **FILER_STORAGES['public']['thumbnails']['OPTIONS']) # Private media (media accessible through permissions checks) FILER_PRIVATEMEDIA_STORAGE = get_storage_class( FILER_STORAGES['private']['main']['ENGINE'])( **FILER_STORAGES['private']['main']['OPTIONS']) FILER_PRIVATEMEDIA_UPLOAD_TO = load_object( FILER_STORAGES['private']['main']['UPLOAD_TO']) FILER_PRIVATEMEDIA_THUMBNAIL_STORAGE = get_storage_class( FILER_STORAGES['private']['thumbnails']['ENGINE'])( **FILER_STORAGES['private']['thumbnails']['OPTIONS']) FILER_PRIVATEMEDIA_SERVER = load_object( FILER_SERVERS['private']['main']['ENGINE'])(
def get_filer_image_field(): base_field = getattr(settings, 'FILER_IMAGE_FIELD', 'filer.fields.image.FilerImageField') return load_object(base_field)
update_storage_settings(FILER_STORAGES, DEFAULT_FILER_STORAGES, 'public', 'thumbnails') update_storage_settings(FILER_STORAGES, DEFAULT_FILER_STORAGES, 'private', 'main') update_storage_settings(FILER_STORAGES, DEFAULT_FILER_STORAGES, 'private', 'thumbnails') FILER_SERVERS = RecursiveDictionaryWithExcludes(MINIMAL_FILER_SERVERS, rec_excluded_keys=('OPTIONS',)) FILER_SERVERS.rec_update(getattr(settings, 'FILER_SERVERS', {})) def update_server_settings(settings, defaults, s, t): if not settings[s][t]['ENGINE']: settings[s][t]['ENGINE'] = defaults[s][t]['ENGINE'] settings[s][t]['OPTIONS'] = defaults[s][t]['OPTIONS'] return settings update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, 'private', 'main') update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, 'private', 'thumbnails') # Public media (media accessible without any permission checks) FILER_PUBLICMEDIA_STORAGE = get_storage_class(FILER_STORAGES['public']['main']['ENGINE'])(**FILER_STORAGES['public']['main']['OPTIONS']) FILER_PUBLICMEDIA_UPLOAD_TO = load_object(FILER_STORAGES['public']['main']['UPLOAD_TO']) FILER_PUBLICMEDIA_THUMBNAIL_STORAGE = get_storage_class(FILER_STORAGES['public']['thumbnails']['ENGINE'])(**FILER_STORAGES['public']['thumbnails']['OPTIONS']) # Private media (media accessible through permissions checks) FILER_PRIVATEMEDIA_STORAGE = get_storage_class(FILER_STORAGES['private']['main']['ENGINE'])(**FILER_STORAGES['private']['main']['OPTIONS']) FILER_PRIVATEMEDIA_UPLOAD_TO = load_object(FILER_STORAGES['private']['main']['UPLOAD_TO']) FILER_PRIVATEMEDIA_THUMBNAIL_STORAGE = get_storage_class(FILER_STORAGES['private']['thumbnails']['ENGINE'])(**FILER_STORAGES['private']['thumbnails']['OPTIONS']) FILER_PRIVATEMEDIA_SERVER = load_object(FILER_SERVERS['private']['main']['ENGINE'])(**FILER_SERVERS['private']['main']['OPTIONS']) FILER_PRIVATEMEDIA_THUMBNAIL_SERVER = load_object(FILER_SERVERS['private']['thumbnails']['ENGINE'])(**FILER_SERVERS['private']['thumbnails']['OPTIONS'])
def get_featured_image(self): '''returns first image from folder''' image_model = load_object(settings.MEDIA_IMAGE_MODEL) return self.media_file_files.instance_of(image_model).first()
def update_server_settings(settings, defaults, s, t): if not settings[s][t]["ENGINE"]: settings[s][t]["ENGINE"] = defaults[s][t]["ENGINE"] settings[s][t]["OPTIONS"] = defaults[s][t]["OPTIONS"] return settings update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, "private", "main") update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, "private", "thumbnails") # Public media (media accessible without any permission checks) FILER_PUBLICMEDIA_STORAGE = get_storage_class(FILER_STORAGES["public"]["main"]["ENGINE"])( **FILER_STORAGES["public"]["main"]["OPTIONS"] ) FILER_PUBLICMEDIA_UPLOAD_TO = load_object(FILER_STORAGES["public"]["main"]["UPLOAD_TO"]) if "UPLOAD_TO_PREFIX" in FILER_STORAGES["public"]["main"]: FILER_PUBLICMEDIA_UPLOAD_TO = load_object("filer.utils.generate_filename.prefixed_factory")( FILER_PUBLICMEDIA_UPLOAD_TO, FILER_STORAGES["public"]["main"]["UPLOAD_TO_PREFIX"] ) FILER_PUBLICMEDIA_THUMBNAIL_STORAGE = get_storage_class(FILER_STORAGES["public"]["thumbnails"]["ENGINE"])( **FILER_STORAGES["public"]["thumbnails"]["OPTIONS"] ) FILER_PUBLICMEDIA_THUMBNAIL_OPTIONS = FILER_STORAGES["public"]["thumbnails"]["THUMBNAIL_OPTIONS"] # Private media (media accessible through permissions checks) FILER_PRIVATEMEDIA_STORAGE = get_storage_class(FILER_STORAGES["private"]["main"]["ENGINE"])( **FILER_STORAGES["private"]["main"]["OPTIONS"] ) FILER_PRIVATEMEDIA_UPLOAD_TO = load_object(FILER_STORAGES["private"]["main"]["UPLOAD_TO"])
def ajax_upload(request, folder_id=None): """ Receives an upload from the uploader. Receives only one file at a time. """ mimetype = 'application/json' if request.is_ajax() else 'text/html' content_type_key = 'content_type' response_params = {content_type_key: mimetype} folder = None if folder_id: try: # Get folder folder = Folder.objects.get(pk=folder_id) except Folder.DoesNotExist: return HttpResponse(json.dumps({'error': NO_FOLDER_ERROR}), **response_params) # check permissions if folder and not folder.has_add_children_permission(request): return HttpResponse( json.dumps({'error': NO_PERMISSIONS_FOR_FOLDER}), **response_params) try: if len(request.FILES) == 1: # dont check if request is ajax or not, just grab the file upload, filename, is_raw = handle_request_files_upload(request) else: # else process the request as usual upload, filename, is_raw = handle_upload(request) FileForm = None # find the file type for filer_class in filer_settings.FILER_FILE_MODELS: FileSubClass = load_object(filer_class) if FileSubClass.matches_file_type(filename, upload, request): FileForm = modelform_factory( model=FileSubClass, fields=('original_filename', 'owner', 'file') ) break uploadform = FileForm({'original_filename': filename, 'owner': request.user.pk}, {'file': upload}) if uploadform.is_valid(): file_obj = uploadform.save(commit=False) # Enforce the FILER_IS_PUBLIC_DEFAULT file_obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT file_obj.folder = folder file_obj.save() # Try to generate thumbnails. if not file_obj.icons: # There is no point to continue, as we can't generate # thumbnails for this file. Usual reasons: bad format or # filename. file_obj.delete() # This would be logged in BaseImage._generate_thumbnails() # if FILER_ENABLE_LOGGING is on. return HttpResponse( json.dumps({'error': 'failed to generate icons for file'}), status=500, **response_params ) thumbnail = None # Backwards compatibility: try to get specific icon size (32px) # first. Then try medium icon size (they are already sorted), # fallback to the first (smallest) configured icon. for size in (['32'] + filer_settings.FILER_ADMIN_ICON_SIZES[1::-1]): try: thumbnail = file_obj.icons[size] break except KeyError: # pragma: no cover continue json_response = { 'thumbnail': thumbnail, 'alt_text': '', 'label': str(file_obj), 'file_id': file_obj.pk, } # prepare preview thumbnail if type(file_obj) == Image: thumbnail_180_options = { 'size': (180, 180), 'crop': True, 'upscale': True, } thumbnail_180 = get_thumbnail_lazy(file_obj, thumbnail_180_options) json_response['thumbnail_180'] = thumbnail_180.url json_response['original_image'] = file_obj.url return HttpResponse(json.dumps(json_response), **response_params) else: form_errors = '; '.join( ['%s: %s' % (field, ', '.join(errors)) for field, errors in list( uploadform.errors.items())] ) raise UploadException('AJAX request not valid: form invalid "%s"' % (form_errors,)) except UploadException as e: # pragma: no cover return HttpResponse(json.dumps({'error': str(e)}), status=500, **response_params) except Exception as e: # pragma: no cover return HttpResponse(json.dumps({'error': str(e)}), status=500, **response_params)
def get_featured_image(self): '''returns first image from folder''' image_model = load_object(settings.MEDIA_IMAGE_MODEL) return self.media_file_files.instance_of(image_model).first()
must_always_publish_author_credit = models.BooleanField(_('must always publish author credit'), default=False) must_always_publish_copyright = models.BooleanField(_('must always publish copyright'), default=False) def save(self, *args, **kwargs): if self.date_taken is None: try: exif_date = self.exif.get('DateTimeOriginal', None) if exif_date is not None: d, t = exif_date.split(" ") year, month, day = d.split(':') hour, minute, second = t.split(':') if getattr(settings, "USE_TZ", False): tz = get_current_timezone() self.date_taken = make_aware(datetime( int(year), int(month), int(day), int(hour), int(minute), int(second)), tz) else: self.date_taken = datetime( int(year), int(month), int(day), int(hour), int(minute), int(second)) except Exception: pass if self.date_taken is None: self.date_taken = now() super(Image, self).save(*args, **kwargs) else: # This is just an alias for the real model defined elsewhere # to let imports works transparently Image = load_object(filer_settings.FILER_IMAGE_MODEL)
) ) # Public media (media accessible without any permission checks) FILER_PUBLICMEDIA_STORAGE = getattr( settings, 'FILER_PUBLICMEDIA_STORAGE', storage_factory( klass=PublicFileSystemStorage, location=os.path.abspath( os.path.join(settings.MEDIA_ROOT, 'filer')), base_url=urlparse.urljoin(settings.MEDIA_URL, 'filer/') )) FILER_PUBLICMEDIA_UPLOAD_TO = load_object(getattr(settings, 'FILER_PUBLICMEDIA_UPLOAD_TO', 'filer.utils.generate_filename.by_date')) FILER_PUBLICMEDIA_THUMBNAIL_STORAGE = getattr( settings, 'FILER_PUBLICMEDIA_THUMBNAIL_STORAGE', storage_factory( klass=PublicFileSystemStorage, location=os.path.abspath( os.path.join(settings.MEDIA_ROOT, 'filer_thumbnails')), base_url=urlparse.urljoin(settings.MEDIA_URL, 'filer_thumbnails/') )) # Private media (media accessible through permissions checks) FILER_PRIVATEMEDIA_STORAGE = getattr(