Esempio n. 1
0
    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
Esempio n. 2
0
    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']), )
Esempio n. 3
0
 def _initialize(cls):
     Document.register_pre_create_hook(
         func=hook_factory_document_check_quota(klass=cls)
     )