def upload_document(self, file_object, document_type, description=None, label=None, language=None, querystring=None, user=None): """ Upload an individual document """ try: with transaction.atomic(): document = Document(description=description or '', document_type=document_type, label=label or file_object.name, language=language or setting_language.value) document.save(_user=user) except Exception as exception: logger.critical( 'Unexpected exception while trying to create new document ' '"%s" from source "%s"; %s', label or file_object.name, self, exception) raise else: try: document_version = document.new_version( file_object=file_object, _user=user, ) if user: document.add_as_recent_document_for_user(user=user) layer_saved_transformations.copy_transformations( source=self, targets=document_version.pages.all()) except Exception as exception: logger.critical( 'Unexpected exception while trying to create version for ' 'new document "%s" from source "%s"; %s', label or file_object.name, self, exception, exc_info=True) document.delete(to_trash=False) raise else: WizardStep.post_upload_process(document=document, querystring=querystring) return document
def forms_valid(self, forms): if self.source.can_compress: if self.source.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK: expand = forms['source_form'].cleaned_data.get('expand') else: if self.source.uncompress == SOURCE_UNCOMPRESS_CHOICE_Y: expand = True else: expand = False else: expand = False try: uploaded_file = self.source.get_upload_file_object( forms['source_form'].cleaned_data) except SourceException as exception: messages.error(message=exception, request=self.request) else: shared_uploaded_file = SharedUploadedFile.objects.create( file=uploaded_file.file) if not self.request.user.is_anonymous: user = self.request.user user_id = self.request.user.pk else: user = None user_id = None try: self.source.clean_up_upload_file(uploaded_file) except Exception as exception: messages.error(message=exception, request=self.request) querystring = self.request.GET.copy() querystring.update(self.request.POST) try: Document.execute_pre_create_hooks(kwargs={ 'document_type': self.document_type, 'user': user }) DocumentVersion.execute_pre_create_hooks( kwargs={ 'document_type': self.document_type, 'shared_uploaded_file': shared_uploaded_file, 'user': user }) task_source_handle_upload.apply_async(kwargs=dict( description=forms['document_form'].cleaned_data.get( 'description'), document_type_id=self.document_type.pk, expand=expand, label=forms['document_form'].get_final_label( filename=force_text(shared_uploaded_file)), language=forms['document_form'].cleaned_data.get( 'language'), querystring=querystring.urlencode(), shared_uploaded_file_id=shared_uploaded_file.pk, source_id=self.source.pk, user_id=user_id, )) except Exception as exception: message = _('Error executing document upload task; ' '%(exception)s') % { 'exception': exception, } logger.critical(msg=message, exc_info=True) raise type(exception)(message) else: messages.success(message=_( 'New document queued for upload and will be available ' 'shortly.'), request=self.request) return HttpResponseRedirect(redirect_to='{}?{}'.format( reverse(viewname=self.request.resolver_match.view_name, kwargs=self.request.resolver_match.kwargs), self.request.META['QUERY_STRING']), )
def _initialize(cls): Document.register_pre_create_hook( func=hook_factory_document_check_quota(klass=cls) )