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()
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)
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)
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)
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)
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()
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])
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])