Esempio n. 1
0
    def save(self, *args, **kwargs):
        if not self.id:
            self.guid = str(uuid.uuid1())
        self.assign_release_dt_local()

        photo_upload = kwargs.pop('photo', None)
        super(News, self).save(*args, **kwargs)

        if photo_upload and self.pk:
            image = NewsImage(object_id=self.pk,
                              creator=self.creator,
                              creator_username=self.creator_username,
                              owner=self.owner,
                              owner_username=self.owner_username)
            photo_upload.file.seek(0)
            image.file.save(photo_upload.name, photo_upload)  # save file row
            image.save()  # save image row

            if self.thumbnail:
                self.thumbnail.delete()  # delete image and file row
            self.thumbnail = image  # set image

            self.save()

        if self.thumbnail:
            if self.is_public():
                set_s3_file_permission(self.thumbnail.file, public=True)
            else:
                set_s3_file_permission(self.thumbnail.file, public=False)
Esempio n. 2
0
    def save(self, *args, **kwargs):
        initial_save = not self.id
        if not self.id:
            self.guid = str(uuid.uuid1())

        super(Image, self).save(*args, **kwargs)
        # # clear the cache
        # caching.instance_cache_clear(self, self.pk)
        # caching.cache_clear(PHOTOS_KEYWORDS_CACHE, key=self.pk)

        # # re-add instance to the cache
        # caching.instance_cache_add(self, self.pk)

        if not self.is_public_photo() or not self.is_public_photoset():
            if hasattr(settings, "USE_S3_STORAGE") and settings.USE_S3_STORAGE and hasattr(self.image, "file"):
                set_s3_file_permission(self.image.file, public=False)
            cache_set = cache.get("photos_cache_set.%s" % self.pk)
            if cache_set is not None:
                # TODO remove cached images
                cache.delete_many(cache.get("photos_cache_set.%s" % self.pk))
                cache.delete("photos_cache_set.%s" % self.pk)

        if initial_save:
            try:
                exif_exists = self.get_exif_data()
                if exif_exists:
                    self.save()
            except AttributeError:
                pass
Esempio n. 3
0
    def save(self, *args, **kwargs):
        initial_save = not self.id
        if not self.id:
            self.guid = str(uuid.uuid4())
        if not self.group:
            self.group_id = get_default_group()

        super(Image, self).save(*args, **kwargs)
        # clear the cache
        #caching.instance_cache_clear(self, self.pk)
        #caching.cache_clear(PHOTOS_KEYWORDS_CACHE, key=self.pk)

        # re-add instance to the cache
        #caching.instance_cache_add(self, self.pk)

        if not self.is_public_photo() or not self.is_public_photoset():
            if hasattr(
                    settings,
                    'USE_S3_STORAGE') and settings.USE_S3_STORAGE and hasattr(
                        self.image, 'file'):
                set_s3_file_permission(self.image.file, public=False)
            cache_set = cache.get("photos_cache_set.%s" % self.pk)
            if cache_set is not None:
                # TODO remove cached images
                cache.delete_many(cache.get("photos_cache_set.%s" % self.pk))
                cache.delete("photos_cache_set.%s" % self.pk)

        if initial_save:
            try:
                exif_exists = self.get_exif_data()
                if exif_exists:
                    self.save()
            except AttributeError:
                pass
Esempio n. 4
0
    def save(self, *args, **kwargs):
        if not self.id:
            self.guid = str(uuid.uuid1())
        self.assign_release_dt_local()

        photo_upload = kwargs.pop('photo', None)
        super(News, self).save(*args, **kwargs)

        if photo_upload and self.pk:
            image = NewsImage(
                object_id=self.pk,
                creator=self.creator,
                creator_username=self.creator_username,
                owner=self.owner,
                owner_username=self.owner_username
                    )
            photo_upload.file.seek(0)
            image.file.save(photo_upload.name, photo_upload)  # save file row
            image.save()  # save image row

            if self.thumbnail:
                self.thumbnail.delete()  # delete image and file row
            self.thumbnail = image  # set image

            self.save()

        if self.thumbnail:
            if self.is_public():
                set_s3_file_permission(self.thumbnail.file, public=True)
            else:
                set_s3_file_permission(self.thumbnail.file, public=False)
Esempio n. 5
0
 def save(self, *args, **kwargs):
     super(NewsletterTemplate, self).save(*args, **kwargs)
     if self.html_file:
         set_s3_file_permission(self.html_file.file, public=True)
     if self.zip_file:
         set_s3_file_permission(self.zip_file.file, public=True)
     #extract and serve files in zip
     extract_files(self)
Esempio n. 6
0
 def save(self, *args, **kwargs):
     super(NewsletterTemplate, self).save(*args, **kwargs)
     if self.html_file:
         set_s3_file_permission(self.html_file.file, public=True)
     if self.zip_file:
         set_s3_file_permission(self.zip_file.file, public=True)
     #extract and serve files in zip
     extract_files(self)
Esempio n. 7
0
 def save(self, *args, **kwargs):
     if not self.guid:
         self.guid = str(uuid.uuid1())
     super(BasePage, self).save(*args, **kwargs)
     if self.header_image:
         if self.is_public():
             set_s3_file_permission(self.header_image.file, public=True)
         else:
             set_s3_file_permission(self.header_image.file, public=False)
Esempio n. 8
0
 def save(self, *args, **kwargs):
     if not self.guid:
         self.guid = str(uuid.uuid4())
     super(BasePage, self).save(*args, **kwargs)
     if self.header_image:
         if self.is_public():
             set_s3_file_permission(self.header_image.file, public=True)
         else:
             set_s3_file_permission(self.header_image.file, public=False)
Esempio n. 9
0
    def save(self, *args, **kwargs):
        if not self.id:
            self.guid = str(uuid.uuid1())

        super(Directory, self).save(*args, **kwargs)
        if self.logo:
            if self.is_public():
                set_s3_file_permission(self.logo.name, public=True)
            else:
                set_s3_file_permission(self.logo.name, public=False)
Esempio n. 10
0
    def save(self, *args, **kwargs):
        self.guid = self.guid or unicode(uuid.uuid1())

        super(PhotoSet, self).save()

        if not self.is_public():
            for photo in Image.objects.filter(photoset=self.pk):
                set_s3_file_permission(photo.image.file, public=False)
                cache_set = cache.get("photos_cache_set.%s" % photo.pk)
                if cache_set is not None:
                    # TODO remove cached images
                    cache.delete_many(cache.get("photos_cache_set.%s" % photo.pk))
                    cache.delete("photos_cache_set.%s" % photo.pk)
Esempio n. 11
0
    def save(self, *args, **kwargs):
        self.guid = self.guid or unicode(uuid.uuid1())

        super(PhotoSet, self).save()

        if not self.is_public():
            for photo in Image.objects.filter(photoset=self.pk):
                set_s3_file_permission(photo.image.file, public=False)
                cache_set = cache.get("photos_cache_set.%s" % photo.pk)
                if cache_set is not None:
                    # TODO remove cached images
                    cache.delete_many(cache.get("photos_cache_set.%s" % photo.pk))
                    cache.delete("photos_cache_set.%s" % photo.pk)
Esempio n. 12
0
    def save(self, *args, **kwargs):
        if not self.id:
            self.guid = unicode(uuid.uuid1())

        super(File, self).save(*args, **kwargs)

        if self.is_public_file():
            set_s3_file_permission(self.file, public=True)
        else:
            set_s3_file_permission(self.file, public=False)
            cache_set = cache.get("files_cache_set.%s" % self.pk)
            if cache_set is not None:
                # TODO remove cached images
                cache.delete_many(cache.get("files_cache_set.%s" % self.pk))
                cache.delete("files_cache_set.%s" % self.pk)
Esempio n. 13
0
    def save(self, *args, **kwargs):
        if not self.id:
            self.guid = unicode(uuid.uuid1())

        super(File, self).save(*args, **kwargs)

        if self.is_public_file():
            set_s3_file_permission(self.file, public=True)
        else:
            set_s3_file_permission(self.file, public=False)
            cache_set = cache.get("files_cache_set.%s" % self.pk)
            if cache_set is not None:
                # TODO remove cached images
                cache.delete_many(cache.get("files_cache_set.%s" % self.pk))
                cache.delete("files_cache_set.%s" % self.pk)
Esempio n. 14
0
    def save(self, *args, **kwargs):
        if not self.id:
            self.guid = str(uuid.uuid1())
        super(Image, self).save(*args, **kwargs)
        # # clear the cache
        # caching.instance_cache_clear(self, self.pk)
        # caching.cache_clear(PHOTOS_KEYWORDS_CACHE, key=self.pk)

        # # re-add instance to the cache
        # caching.instance_cache_add(self, self.pk)

        if not self.is_public_photo() or not self.is_public_photoset():
            set_s3_file_permission(self.image.file, public=False)
            cache_set = cache.get("photos_cache_set.%s" % self.pk)
            if cache_set is not None:
                # TODO remove cached images
                cache.delete_many(cache.get("photos_cache_set.%s" % self.pk))
                cache.delete("photos_cache_set.%s" % self.pk)
Esempio n. 15
0
    def save(self, *args, **kwargs):
        if not self.id:
            self.guid = str(uuid.uuid1())
        super(Image, self).save(*args, **kwargs)
       # # clear the cache
       # caching.instance_cache_clear(self, self.pk)
       # caching.cache_clear(PHOTOS_KEYWORDS_CACHE, key=self.pk)

       # # re-add instance to the cache
       # caching.instance_cache_add(self, self.pk)

        if not self.is_public_photo() or not self.is_public_photoset():
            set_s3_file_permission(self.image.file, public=False)
            cache_set = cache.get("photos_cache_set.%s" % self.pk)
            if cache_set is not None:
                # TODO remove cached images
                cache.delete_many(cache.get("photos_cache_set.%s" % self.pk))
                cache.delete("photos_cache_set.%s" % self.pk)
Esempio n. 16
0
    def save(self, *args, **kwargs):
        created = False
        if not self.id:
            self.guid = str(uuid.uuid4())
            created = True
        self.f_type = self.type()

        if not self.group:
            self.group_id = get_default_group()

        super(File, self).save(*args, **kwargs)

        if self.is_public_file():
            set_s3_file_permission(self.file, public=True)
        else:
            set_s3_file_permission(self.file, public=False)

        cache_set = cache.get("files_cache_set.%s" % self.pk)
        if cache_set is not None:
            # TODO remove cached images
            cache.delete_many(cache.get("files_cache_set.%s" % self.pk))
            cache.delete("files_cache_set.%s" % self.pk)

        # send notification to administrator(s) and module recipient(s)
        if created:
            recipients = get_notice_recipients('module', 'files',
                                               'filerecipients')
            site_display_name = get_setting('site', 'global',
                                            'sitedisplayname')
            site_url = get_setting('site', 'global', 'siteurl')
            if recipients and notification:

                notification_params = {
                    'object': self,
                    'SITE_GLOBAL_SITEDISPLAYNAME': site_display_name,
                    'SITE_GLOBAL_SITEURL': site_url,
                }

                if self.owner:
                    notification_params['author'] = self.owner.get_full_name(
                    ) or self.owner

                notification.send_emails(recipients, 'file_added',
                                         notification_params)
    def handle(self, *apps, **kwargs):
        from tendenci.apps.files.models import File as tFile
        from tendenci.libs.boto_s3.utils import set_s3_file_permission

        files = tFile.objects.all()
        count = 0
        for tfile in files:
            if tfile.file:
                if tfile.allow_anonymous_view:
                    perm = 'public'
                else:
                    perm = 'private'

                print('Setting %s to %s' % (tfile.file.name, perm))

                set_s3_file_permission(tfile.file.name,
                                       public=(perm == 'public'))
                count += 1

        print('Done')
        print('Total files processed', count)
Esempio n. 18
0
    def save(self, *args, **kwargs):
        created = False
        if not self.id:
            self.guid = str(uuid.uuid4())
            created = True
        self.f_type = self.type()
        
        if not self.group:
            self.group_id = get_default_group()

        super(File, self).save(*args, **kwargs)

        if self.is_public_file():
            set_s3_file_permission(self.file, public=True)
        else:
            set_s3_file_permission(self.file, public=False)

        cache_set = cache.get("files_cache_set.%s" % self.pk)
        if cache_set is not None:
            # TODO remove cached images
            cache.delete_many(cache.get("files_cache_set.%s" % self.pk))
            cache.delete("files_cache_set.%s" % self.pk)

        # send notification to administrator(s) and module recipient(s)
        if created:
            recipients = get_notice_recipients('module', 'files', 'filerecipients')
            site_display_name = get_setting('site', 'global', 'sitedisplayname')
            site_url = get_setting('site', 'global', 'siteurl')
            if recipients and notification:

                notification_params = {
                    'object': self,
                    'SITE_GLOBAL_SITEDISPLAYNAME': site_display_name,
                    'SITE_GLOBAL_SITEURL': site_url,
                }

                if self.owner:
                    notification_params['author'] = self.owner.get_full_name() or self.owner

                notification.send_emails(recipients, 'file_added', notification_params)
    def handle(self, *apps, **kwargs):
        from tendenci.core.files.models import File as tFile
        from tendenci.libs.boto_s3.utils import set_s3_file_permission

        files = tFile.objects.all()
        count = 0
        for tfile in files:
            if tfile.file:
                if tfile.allow_anonymous_view:
                    perm = 'public'
                else:
                    perm = 'private'

                print 'Setting %s to %s' % (tfile.file.name,
                                            perm)

                set_s3_file_permission(tfile.file.name,
                                       public=(perm == 'public'))
                count += 1

        print 'Done'
        print 'Total files processed', count
Esempio n. 20
0
def details(request, id, size=None, crop=False, quality=90, download=False, constrain=False, template_name="files/details.html"):
    """
    Return an image response after paramters have been applied.
    """
    cache_key = generate_image_cache_key(
        file=id,
        size=size,
        pre_key=FILE_IMAGE_PRE_KEY,
        crop=crop,
        unique_key=id,
        quality=quality,
        constrain=constrain)

    cached_image = cache.get(cache_key)
    
    if cached_image:
        return redirect('%s%s' % (get_setting('site', 'global', 'siteurl'), cached_image))

    file = get_object_or_404(File, pk=id)

    # basic permissions
    if not has_view_perm(request.user, 'files.view_file', file):
        raise Http403

    # extra permission
    if not file.is_public:
        if not request.user.is_authenticated():
            raise Http403

    # if string and digit convert to integer
    if isinstance(quality, basestring) and quality.isdigit():
        quality = int(quality)

    # get image binary
    try:
        data = file.file.read()
        file.file.close()
    except IOError:  # no such file or directory
        raise Http404

    if download:  # log download
        attachment = u'attachment;'
        EventLog.objects.log(**{
            'event_id': 185000,
            'event_data': '%s %s (%d) dowloaded by %s' % (file.type(), file._meta.object_name, file.pk, request.user),
            'description': '%s downloaded' % file._meta.object_name,
            'user': request.user,
            'request': request,
            'instance': file,
        })
    else:  # log view
        attachment = u''
        if file.type() != 'image':
            EventLog.objects.log(**{
                'event_id': 186000,
                'event_data': '%s %s (%d) viewed by %s' % (file.type(), file._meta.object_name, file.pk, request.user),
                'description': '%s viewed' % file._meta.object_name,
                'user': request.user,
                'request': request,
                'instance': file,
            })

    # if image size specified
    if file.type() == 'image' and size:  # if size specified

        if file.ext() in ('.tif', '.tiff'):
            raise Http404  # tifs cannot (currently) be viewed via browsers

        size = [int(s) if s.isdigit() else 0 for s in size.split('x')]
        size = aspect_ratio(file.image_dimensions(), size, constrain)

        # check for dimensions
        # greater than zero
        if not all(size):
            raise Http404

        # gets resized image from cache or rebuilds
        image = get_image(file.file, size, FILE_IMAGE_PRE_KEY, cache=True, crop=crop, quality=quality, unique_key=None)
        response = HttpResponse(content_type=file.mime_type())
        response['Content-Disposition'] = '%s filename=%s' % (attachment, file.get_name())

        params = {'quality': quality}
        if image.format == 'GIF':
            params['transparency'] = 0

        image.save(response, image.format, **params)

        if file.is_public_file():
            file_name = "%s%s" % (file.get_name(), ".jpg")
            file_path = 'cached%s%s' % (request.path, file_name)
            default_storage.delete(file_path)
            default_storage.save(file_path, ContentFile(response.content))
            full_file_path = "%s%s" % (settings.MEDIA_URL, file_path)
            cache.set(cache_key, full_file_path)
            cache_group_key = "files_cache_set.%s" % file.pk
            cache_group_list = cache.get(cache_group_key)

            if cache_group_list is None:
                cache.set(cache_group_key, [cache_key])
            else:
                cache_group_list += [cache_key]
                cache.set(cache_group_key, cache_group_list)

        return response

    if file.is_public_file():
        cache.set(cache_key, file.get_file_public_url())
        set_s3_file_permission(file.file, public=True)
        cache_group_key = "files_cache_set.%s" % file.pk
        cache_group_list = cache.get(cache_group_key)

        if cache_group_list is None:
            cache.set(cache_group_key, [cache_key])
        else:
            cache_group_list += cache_key
            cache.set(cache_group_key, cache_group_list)

    # set mimetype
    if file.mime_type():
        response = HttpResponse(data, content_type=file.mime_type())
    else:
        raise Http404

    # return response
    if file.get_name().endswith(file.ext()):
        response['Content-Disposition'] = '%s filename=%s' % (attachment, file.get_name())
    else:
        response['Content-Disposition'] = '%s filename=%s' % (attachment, file.get_name_ext())
    return response
Esempio n. 21
0
def details(request,
            id,
            size=None,
            crop=False,
            quality=90,
            download=False,
            constrain=False,
            template_name="files/details.html"):
    """
    Return an image response after paramters have been applied.
    """
    file = get_object_or_404(File, pk=id)

    cache_key = generate_image_cache_key(file=id,
                                         size=size,
                                         pre_key=FILE_IMAGE_PRE_KEY,
                                         crop=crop,
                                         unique_key=id,
                                         quality=quality,
                                         constrain=constrain)

    cached_image = cache.get(cache_key)

    if cached_image:
        if file.type() != 'image':
            # log an event
            EventLog.objects.log(instance=file)
        return redirect(
            '%s%s' % (get_setting('site', 'global', 'siteurl'), cached_image))

    # basic permissions
    if not has_view_perm(request.user, 'files.view_file', file):
        raise Http403

    # extra permission
    if not file.is_public:
        if not request.user.is_authenticated():
            raise Http403

    # if string and digit convert to integer
    if isinstance(quality, basestring) and quality.isdigit():
        quality = int(quality)

    # get image binary
    try:
        data = file.file.read()
        file.file.close()
    except IOError:  # no such file or directory
        raise Http404

    if download:  # log download
        attachment = u'attachment;'
        EventLog.objects.log(
            **{
                'event_id':
                185000,
                'event_data':
                '%s %s (%d) dowloaded by %s' %
                (file.type(), file._meta.object_name, file.pk, request.user),
                'description':
                '%s downloaded' % file._meta.object_name,
                'user':
                request.user,
                'request':
                request,
                'instance':
                file,
            })
    else:  # log view
        attachment = u''
        if file.type() != 'image':
            EventLog.objects.log(
                **{
                    'event_id':
                    186000,
                    'event_data':
                    '%s %s (%d) viewed by %s' %
                    (file.type(), file._meta.object_name, file.pk,
                     request.user),
                    'description':
                    '%s viewed' % file._meta.object_name,
                    'user':
                    request.user,
                    'request':
                    request,
                    'instance':
                    file,
                })

    # if image size specified
    if file.type() == 'image' and size:  # if size specified

        if file.ext() in ('.tif', '.tiff'):
            raise Http404  # tifs cannot (currently) be viewed via browsers

        size = [int(s) if s.isdigit() else 0 for s in size.split('x')]
        size = aspect_ratio(file.image_dimensions(), size, constrain)

        # check for dimensions
        # greater than zero
        if not all(size):
            raise Http404

        # gets resized image from cache or rebuilds
        image = get_image(file.file,
                          size,
                          FILE_IMAGE_PRE_KEY,
                          cache=True,
                          crop=crop,
                          quality=quality,
                          unique_key=None)
        response = HttpResponse(content_type=file.mime_type())
        response['Content-Disposition'] = '%s filename="%s"' % (
            attachment, file.get_name())

        params = {'quality': quality}
        if image.format == 'GIF':
            params['transparency'] = 0

        image.save(response, image.format, **params)

        if file.is_public_file():
            file_name = "%s%s" % (file.get_name(), ".jpg")
            file_path = 'cached%s%s' % (request.path, file_name)
            default_storage.delete(file_path)
            default_storage.save(file_path, ContentFile(response.content))
            full_file_path = "%s%s" % (settings.MEDIA_URL, file_path)
            cache.set(cache_key, full_file_path)
            cache_group_key = "files_cache_set.%s" % file.pk
            cache_group_list = cache.get(cache_group_key)

            if cache_group_list is None:
                cache.set(cache_group_key, [cache_key])
            else:
                cache_group_list += [cache_key]
                cache.set(cache_group_key, cache_group_list)

        return response

    if file.is_public_file():
        cache.set(cache_key, file.get_file_public_url())
        set_s3_file_permission(file.file, public=True)
        cache_group_key = "files_cache_set.%s" % file.pk
        cache_group_list = cache.get(cache_group_key)

        if cache_group_list is None:
            cache.set(cache_group_key, [cache_key])
        else:
            cache_group_list += cache_key
            cache.set(cache_group_key, cache_group_list)

    # set mimetype
    if file.mime_type():
        response = HttpResponse(data, content_type=file.mime_type())
    else:
        raise Http404

    # return response
    if file.get_name().endswith(file.ext()):
        response['Content-Disposition'] = '%s filename="%s"' % (
            attachment, file.get_name())
    else:
        response['Content-Disposition'] = '%s filename="%s"' % (
            attachment, file.get_name_ext())
    return response
Esempio n. 22
0
 def save(self, *args, **kwargs):
     super(Template, self).save(*args, **kwargs)
     if self.html_file:
         set_s3_file_permission(self.html_file.file, public=True)
     if self.zip_file:
         set_s3_file_permission(self.zip_file.file, public=True)
Esempio n. 23
0
 def save(self, *args, **kwargs):
     super(Template, self).save(*args, **kwargs)
     if self.html_file:
         set_s3_file_permission(self.html_file.file, public=True)
     if self.zip_file:
         set_s3_file_permission(self.zip_file.file, public=True)