def create_document_revision(thread, form_data, request): """ helpers fx for edit document in thread edit form """ file_data = form_data["file_data"] remove = form_data["remove"] document = thread.get_document(with_deleted=True) if document is None: document = Document.objects.create(author=request.user, thread=thread) if remove: document.is_deleted = True document.save() return if document.is_deleted: document.is_deleted = False document.save() # create document revision parsed_file_name = os.path.splitext(file_data.name) file_name = parsed_file_name[0].lower() suffix = parsed_file_name[1].replace(".", "").lower() return document.revisions.create( file_data=file_data, original_filename=file_name, suffix=suffix, filename_slug=sanitize_file_name(file_name), author=request.user, )
def save(self, *args, **kwargs): """ TODO """ user = self.request.user if not self.document: thread = Thread.objects.create_new( self.cleaned_data["title"], user, datetime.datetime.now(), "", # text tagnames="", thread_type=THREAD_TYPE_DOCUMENT, node=self.cleaned_data["node"], ) thread.category = self.cleaned_data["thread_category"] thread.save() self.document = Document.objects.create( author=user, thread=thread ) else: thread = self.instance.document.thread if thread.title != self.cleaned_data["title"]: thread.title = self.cleaned_data["title"] thread.save() # save document revision file_data = self.cleaned_data["file_data"] or self.instance.file_data # TODO document revision parsed_file_name = os.path.splitext(file_data.name) file_name = parsed_file_name[0].lower() suffix = parsed_file_name[1].replace(".", "").lower() self.instance.pk = None self.instance.uuid = None self.instance.revision = None self.instance.original_filename = file_name self.instance.suffix = suffix self.instance.filename_slug = sanitize_file_name(file_name) self.instance.document = self.document self.instance.author = user return super(DocumentRevisionModelForm, self).save(*args, **kwargs)
def _create_doc(user, post, file_data): document = Document.objects.create(author=user, thread=post.thread) parsed_file_name = os.path.splitext( force_unicode(file_data.name, strings_only=True, errors="ignore")) file_name = parsed_file_name[0].lower() suffix = parsed_file_name[1].replace(".", "").lower() return document.revisions.create( file_data=file_data, original_filename=file_name, suffix=suffix, filename_slug=sanitize_file_name(file_name), author=user, )
def _create_doc(user, post, file_data): document = Document.objects.create( author=user, thread=post.thread ) parsed_file_name = os.path.splitext( force_unicode(file_data.name, strings_only=True, errors="ignore") ) file_name = parsed_file_name[0].lower() suffix = parsed_file_name[1].replace(".", "").lower() return document.revisions.create( file_data=file_data, original_filename=file_name, suffix=suffix, filename_slug=sanitize_file_name(file_name), author=user, )
def create_document_revision(thread, form_data, request): """ helpers fx for edit document in thread edit form """ file_data = form_data["file_data"] remove = form_data["remove"] document = thread.get_document(with_deleted=True) if document is None: document = Document.objects.create( author=request.user, thread=thread ) if remove: document.is_deleted = True document.save() return if document.is_deleted: document.is_deleted = False document.save() # create document revision parsed_file_name = os.path.splitext(file_data.name) file_name = parsed_file_name[0].lower() suffix = parsed_file_name[1].replace(".", "").lower() return document.revisions.create( file_data=file_data, original_filename=file_name, suffix=suffix, filename_slug=sanitize_file_name(file_name), author=request.user, )
def upload_to_fx(self, original_name): return "/".join([ self.get_path(), sanitize_file_name(original_name), ])
def upload_to_fx(self, original_name): return os.path.join("organization_logos", sanitize_file_name(original_name))
def upload_to_fx(self, original_name): return os.path.join( "organization_logos", sanitize_file_name(original_name) )
def upload(request): # ajax upload file to a question or answer """view that handles file upload via Ajax """ # check upload permission result = '' error = '' new_file_name = '' try: #may raise exceptions.PermissionDenied if request.user.is_anonymous(): msg = _('Sorry, anonymous users cannot upload files') raise exceptions.PermissionDenied(msg) request.user.assert_can_upload_file() #todo: build proper form validation file_name_prefix = request.POST.get('file_name_prefix', '') if file_name_prefix not in ('', 'organization_logo_'): raise exceptions.PermissionDenied('invalid upload file name prefix') #todo: check file type f = request.FILES['file-upload'] # take first file #todo: extension checking should be replaced with mimetype checking #and this must be part of the form validation file_extension = os.path.splitext(f.name)[1].lower() if not file_extension in settings.OPENODE_ALLOWED_UPLOAD_FILE_TYPES: file_types = "', '".join(settings.OPENODE_ALLOWED_UPLOAD_FILE_TYPES) msg = _("allowed file types are '%(file_types)s'") % \ {'file_types': file_types} raise exceptions.PermissionDenied(msg) # generate new file name and storage object file_storage, new_file_name, file_url = store_file( f, file_name_prefix ) # create document to document storage document = Document.objects.create( author=request.user, ) dr = document.revisions.create( author=request.user, file_data=f, original_filename=new_file_name.replace(file_extension, ""), suffix=file_extension.replace(".", ""), filename_slug=sanitize_file_name(new_file_name), ) file_url = dr.file_data.url file_storage.delete(new_file_name) # # check file size # # byte # size = file_storage.size(new_file_name) # if size > settings.OPENODE_MAX_UPLOAD_FILE_SIZE: # file_storage.delete(new_file_name) # msg = _("maximum upload file size is %(file_size)sK") % \ # {'file_size': settings.OPENODE_MAX_UPLOAD_FILE_SIZE} # raise exceptions.PermissionDenied(msg) except exceptions.PermissionDenied, e: error = unicode(e)