コード例 #1
0
    def test_filter_node_id(self):
        # invalid values of node id will be
        # filtered out (return None)
        self.assertFalse(
            filter_node_id("sdf")
        )

        self.assertFalse(
            filter_node_id("sdf12")
        )

        self.assertFalse(
            filter_node_id(-1)
        )

        self.assertFalse(
            filter_node_id("-1")
        )

        # valid values for node id will pass
        # and will be returned as integers
        self.assertEqual(
            filter_node_id("12"),
            12
        )

        self.assertEqual(
            filter_node_id(100),
            100
        )
コード例 #2
0
def upload(request):
    """
    To understand returned value, have a look at
    papermerge.core.views.decorators.json_reponse decorator
    """
    files = request.FILES.getlist('file')
    if not files:
        logger.warning(
            "POST request.FILES is empty. Forgot adding file?"
        )
        return "Missing input file", 400

    if len(files) > 1:
        msg = "More then one files per ajax? how come?"
        logger.warning(msg)

        return msg, 400

    f = files[0]

    logger.debug("upload for f=%s user=%s", f, request.user)

    user = request.user
    size = os.path.getsize(f.temporary_file_path())
    parent_id = request.POST.get('parent', "-1")
    parent_id = filter_node_id(parent_id)

    lang = request.POST.get('language')
    notes = request.POST.get('notes')
    try:
        page_count = get_pagecount(f.temporary_file_path())
    except exceptions.FileTypeNotSupported:
        status = 400
        msg = _(
            "File type not supported."
            " Only pdf, tiff, png, jpeg files are supported"
        )
        return msg, status

    logger.debug("creating document {}".format(f.name))

    doc = Document.create_document(
        user=user,
        title=f.name,
        size=size,
        lang=lang,
        file_name=f.name,
        parent_id=parent_id,
        notes=notes,
        page_count=page_count
    )
    logger.debug(
        "uploading to {}".format(doc.path.url())
    )

    default_storage.copy_doc(
        src=f.temporary_file_path(),
        dst=doc.path.url()
    )
    for page_num in range(1, page_count + 1):
        ocr_page.apply_async(kwargs={
            'user_id': user.id,
            'document_id': doc.id,
            'file_name': f.name,
            'page_num': page_num,
            'lang': lang}
        )

    # upload only one file at time.
    # after each upload return a json object with
    # following fields:
    #
    # - title
    # - preview_url
    # - doc_id
    # - action_url  -> needed for renaming/deleting selected item
    #
    # with that info a new thumbnail will be created.
    preview_url = reverse(
        'core:preview', args=(doc.id, 200, 1)
    )

    result = {
        'title': doc.title,
        'doc_id': doc.id,
        'action_url': "",
        'preview_url': preview_url
    }

    return result
コード例 #3
0
def upload(request):
    """
    To understand returned value, have a look at
    papermerge.core.views.decorators.json_reponse decorator
    """
    files = request.FILES.getlist('file')
    if not files:
        logger.warning(
            "POST request.FILES is empty. Forgot adding file?"
        )
        return "Missing input file", 400

    if len(files) > 1:
        msg = "More then one files per ajax? how come?"
        logger.warning(msg)

        return msg, 400

    f = files[0]

    logger.debug("upload for f=%s user=%s", f, request.user)

    user = request.user
    parent_id = request.POST.get('parent', "-1")
    parent_id = filter_node_id(parent_id)

    lang = request.POST.get('language')
    notes = request.POST.get('notes')
    pipelines = settings.PAPERMERGE_PIPELINES
    init_kwargs = {'payload': f, 'processor': WEB}
    apply_kwargs = {
        'user': user,
        'parent': parent_id,
        'lang': lang,
        'notes': notes,
        'apply_async': True
    }
    # this code is 100% similar to local.py
    # and imap.py
    for pipeline in pipelines:
        pipeline_class = module_loading.import_string(pipeline)
        try:
            importer = pipeline_class(**init_kwargs)
        except Exception as e:
            importer = None
            # please use fstrings
            logger.debug("{} importer: {}".format("WEB", e))
        if importer is not None:
            try:
                # please document/comment
                # apply
                # get_init_kwargs
                # get_apply_kwargs
                result_dict = importer.apply(**apply_kwargs)
                init_kwargs_temp = importer.get_init_kwargs()
                apply_kwargs_temp = importer.get_apply_kwargs()
                if init_kwargs_temp:
                    init_kwargs = {**init_kwargs, **init_kwargs_temp}
                if apply_kwargs_temp:
                    apply_kwargs = {**apply_kwargs, **apply_kwargs_temp}
            except Exception as e:
                result_dict = None
                # please use fstrings
                logger.error("{} importer: {}".format("WEB", e))
        else:
            result_dict = None
    if result_dict is not None:
        doc = result_dict.get('doc', None)
    else:
        doc = None
    if not doc:
        status = 400
        msg = _(
            "File type not supported."
            " Only pdf, tiff, png, jpeg files are supported"
        )
        return msg, status

    # after each upload return a json object with
    # following fields:
    #
    # - title
    # - preview_url
    # - doc_id
    # - action_url  -> needed for renaming/deleting selected item
    #
    # with that info a new thumbnail will be created.
    preview_url = reverse(
        'core:preview', args=(doc.id, 200, 1)
    )

    result = {
        'title': doc.title,
        'doc_id': doc.id,
        'action_url': "",
        'preview_url': preview_url
    }

    return result
コード例 #4
0
def upload(request):
    """
    To understand returned value, have a look at
    papermerge.core.views.decorators.json_reponse decorator
    """
    files = request.FILES.getlist('file')
    if not files:
        logger.warning("POST request.FILES is empty. Forgot adding file?")
        return "Missing input file", 400

    if len(files) > 1:
        msg = "More then one files per ajax? how come?"
        logger.warning(msg)

        return msg, 400

    f = files[0]

    logger.debug("upload for f=%s user=%s", f, request.user)

    user = request.user
    parent_id = request.POST.get('parent', "-1")
    parent_id = filter_node_id(parent_id)

    lang = request.POST.get('language')
    notes = request.POST.get('notes')

    init_kwargs = {'payload': f, 'processor': WEB}

    apply_kwargs = {
        'user': user,
        'name': f.name,
        'parent': parent_id,
        'lang': lang,
        'notes': notes,
        'apply_async': True
    }

    doc = go_through_pipelines(init_kwargs, apply_kwargs)

    if not doc:
        status = 400
        msg = _("File type not supported."
                " Only pdf, tiff, png, jpeg files are supported")
        return msg, status

    # after each upload return a json object with
    # following fields:
    #
    # - title
    # - preview_url
    # - doc_id
    # - action_url  -> needed for renaming/deleting selected item
    #
    # with that info a new thumbnail will be created.
    preview_url = reverse('core:preview', args=(doc.id, 200, 1))

    result = {
        'title': doc.title,
        'doc_id': doc.id,
        'action_url': "",
        'preview_url': preview_url
    }

    return result