예제 #1
0
파일: attach.py 프로젝트: Janyell/crm
def save_file_in_node(obj):
    new_file_node = FileNode(file=obj.file, node_type=FileNode.FILE, has_metadata=True)

    new_file_node.name = os.path.basename(new_file_node.file.name)
    # using os.path.splitext(), foo.tar.gz would become foo.tar_2.gz instead of foo_2.tar.gz
    split = multi_splitext(new_file_node.name)
    new_file_node.make_name_unique_numbered(split[0], split[1])

    # Determine various file parameters
    # new_file_node.size = new_file_node.file.size
    new_file_node.extension = split[2].lstrip('.').lower()
    new_file_node.width, new_file_node.height = (None, None)

    new_file_node.media_type = FileNode.mimetype_to_media_type(new_file_node.name)

    new_file_node.slug = slugify(new_file_node.name)
    new_file_node.has_metadata = new_file_node.check_minimal_metadata()

    new_file_node.title = obj.title

    new_file_node.file = str(obj.file)

    super(FileNode, new_file_node).save()

    obj.file_node = new_file_node
    obj.save()
예제 #2
0
    def save(self, *args, **kwargs):

        if getattr(self, 'save_prevented', False):
            raise ValidationError(
                'Saving was presented for this FileNode object.')

        if self.node_type == FileNode.FOLDER:
            self.media_type = FileNode.FOLDER
            # Admin asserts that folder name is unique under parent. For other inserts:
            self.make_name_unique_numbered(self.name)
        else:
            if not self.file:
                raise ValidationError(
                    'FileNode object with node_type `FILE` is missing a value for the `file` attribute.'
                )
            # TODO: If file was not changed, this field will nevertheless be changed to
            # the name of the renamed file on disk. Do not do this unless a new file is being saved.
            file_changed = True
            saved_instance = None
            if self.pk:
                try:
                    saved_instance = FileNode.objects.get(pk=self.pk)
                    if saved_instance.file == self.file:
                        file_changed = False
                except FileNode.DoesNotExist:
                    pass
            if file_changed:
                self._set_name_from_filename()
                # Determine various file parameters
                self.size = self.file.size
                split = multi_splitext(self.name)
                self.extension = split[2].lstrip('.').lower()
                self.width, self.height = (None, None)

                self.file.name = self.name
                # TODO: A hash (created by storage class!) would be great because it would obscure file
                # names, but it would be inconvenient for downloadable files
                # self.file.name = str(uuid.uuid4()) + '.' + self.extension

                # Determine whether file is a supported image:
                try:
                    self.media_type = None
                    self.pre_save_image()
                except IOError:
                    pass
                if not self.media_type:
                    self.media_type = FileNode.mimetype_to_media_type(
                        self.name)

                if app_settings.MEDIA_TREE_DELETE_FROM_STORAGE_ON_OVERWRITE:
                    if saved_instance:
                        saved_instance.file.delete(save=False)

        self.slug = slugify(self.name)
        self.has_metadata = self.check_minimal_metadata()

        super(FileNode, self).save(*args, **kwargs)
예제 #3
0
    def save(self, *args, **kwargs):

        if getattr(self, 'save_prevented', False):
            raise ValidationError('Saving was presented for this FileNode object.')

        if self.node_type == FileNode.FOLDER:
            self.media_type = FileNode.FOLDER
            # Admin asserts that folder name is unique under parent. For other inserts:
            self.make_name_unique_numbered(self.name)
        else:
            if not self.file:
                raise ValidationError('FileNode object with node_type `FILE` is missing a value for the `file` attribute.')
            # TODO: If file was not changed, this field will nevertheless be changed to
            # the name of the renamed file on disk. Do not do this unless a new file is being saved.
            file_changed = True
            saved_instance = None
            if self.pk:
                try:
                    saved_instance = FileNode.objects.get(pk=self.pk)
                    if saved_instance.file == self.file:
                        file_changed = False
                except FileNode.DoesNotExist:
                    pass
            if file_changed:
                self._set_name_from_filename()
                # Determine various file parameters
                self.size = self.file.size
                split = multi_splitext(self.name)
                self.extension = split[2].lstrip('.').lower()
                self.width, self.height = (None, None)

                self.file.name = self.name
                # TODO: A hash (created by storage class!) would be great because it would obscure file
                # names, but it would be inconvenient for downloadable files
                # self.file.name = str(uuid.uuid4()) + '.' + self.extension

                # Determine whether file is a supported image:
                try:
                    self.media_type = None
                    self.pre_save_image()
                except IOError:
                    pass
                if not self.media_type:
                    self.media_type = FileNode.mimetype_to_media_type(self.name)

                if app_settings.MEDIA_TREE_DELETE_FROM_STORAGE_ON_OVERWRITE:
                    if saved_instance:
                        saved_instance.file.delete(save=False)

        self.slug = slugify(self.name)
        self.has_metadata = self.check_minimal_metadata()

        super(FileNode, self).save(*args, **kwargs)
예제 #4
0
    def save(self, *args, **kwargs):

        if getattr(self, 'save_prevented', False):
            raise ValidationError(
                'Saving was presented for this FileNode object.')

        if self.node_type == FileNode.FOLDER:
            self.media_type = FileNode.FOLDER
            # Admin asserts that folder name is unique under parent. For other inserts:
            self.make_name_unique_numbered(self.name)
        else:
            # TODO: If file was not changed, this field will nevertheless be changed to
            # the name of the renamed file on disk. Do not do this unless a new file is being saved.
            file_changed = True
            if self.pk:
                try:
                    saved_instance = FileNode.objects.get(pk=self.pk)
                    if saved_instance.file == self.file:
                        file_changed = False
                except FileNode.DoesNotExist:
                    pass
            if file_changed:
                self.name = os.path.basename(self.file.name)
                # using os.path.splitext(), foo.tar.gz would become foo.tar_2.gz instead of foo_2.tar.gz
                split = multi_splitext(self.name)
                self.make_name_unique_numbered(split[0], split[1])

                # Determine various file parameters
                self.size = self.file.size
                self.extension = split[2].lstrip('.').lower()
                self.width, self.height = (None, None)

                self.file.name = self.name
                # TODO: A hash (created by storage class!) would be great because it would obscure file
                # names, but it would be inconvenient for downloadable files
                # self.file.name = str(uuid.uuid4()) + '.' + self.extension

                # Determine whether file is a supported image:
                try:
                    self.media_type = None
                    self.pre_save_image()
                except IOError:
                    pass
                if not self.media_type:
                    self.media_type = FileNode.mimetype_to_media_type(
                        self.name)

        self.slug = slugify(self.name)
        self.has_metadata = self.check_minimal_metadata()

        super(FileNode, self).save(*args, **kwargs)
예제 #5
0
    def save(self, *args, **kwargs):

        if getattr(self, 'save_prevented', False):
            raise ValidationError('Saving was presented for this FileNode object.')

        if self.node_type == FileNode.FOLDER:
            self.media_type = FileNode.FOLDER
            # Admin asserts that folder name is unique under parent. For other inserts:
            self.make_name_unique_numbered(self.name)
        else:
            # TODO: If file was not changed, this field will nevertheless be changed to
            # the name of the renamed file on disk. Do not do this unless a new file is being saved.
            file_changed = True
            if self.pk:
                try:
                    saved_instance = FileNode.objects.get(pk=self.pk)
                    if saved_instance.file == self.file:
                        file_changed = False
                except FileNode.DoesNotExist:
                    pass
            if file_changed:
                self.name = os.path.basename(self.file.name)
                # using os.path.splitext(), foo.tar.gz would become foo.tar_2.gz instead of foo_2.tar.gz
                split = multi_splitext(self.name)
                self.make_name_unique_numbered(split[0], split[1])

                # Determine various file parameters
                self.size = self.file.size
                self.extension = split[2].lstrip('.').lower()
                self.width, self.height = (None, None)

                self.file.name = self.name
                # TODO: A hash (created by storage class!) would be great because it would obscure file
                # names, but it would be inconvenient for downloadable files
                # self.file.name = str(uuid.uuid4()) + '.' + self.extension

                # Determine whether file is a supported image:
                try:
                    self.media_type = None
                    self.pre_save_image()
                except IOError:
                    pass
                if not self.media_type:
                    self.media_type = FileNode.mimetype_to_media_type(self.name)

        self.slug = slugify(self.name)
        self.has_metadata = self.check_minimal_metadata()

        super(FileNode, self).save(*args, **kwargs)
예제 #6
0
    def pre_save(self):
        if self.has_changed():
            self.name = os.path.basename(self.file.name)

            # using os.path.splitext(), foo.tar.gz would become
            # foo.tar_2.gz instead of foo_2.tar.gz
            split = multi_splitext(self.name)
            self.make_name_unique_numbered(split[0], split[1])

            # Determine various file parameters
            self.size = self.file.size
            self.extension = split[2].lstrip('.').lower()
            
            self.file.name = self.name
            # TODO: A hash (created by storage class!) would be great
            # because it would obscure file names, but it would be
            # inconvenient for downloadable files
            self.file.name = str(uuid.uuid4()) + '.' + self.extension

        super(FileInfoMixin, self).pre_save()
예제 #7
0
 def _set_name_from_filename(self):
     self.name = os.path.basename(self.file.name)
     # using os.path.splitext(), foo.tar.gz would become foo.tar_2.gz instead of foo_2.tar.gz
     split = multi_splitext(self.name)
     self.make_name_unique_numbered(split[0], split[1])
예제 #8
0
 def _set_name_from_filename(self):
     self.name = os.path.basename(self.file.name)
     # using os.path.splitext(), foo.tar.gz would become foo.tar_2.gz instead of foo_2.tar.gz
     split = multi_splitext(self.name)
     self.make_name_unique_numbered(split[0], split[1])