mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-04-09 09:58:20 -05:00
Add "Created" as additional (optional) parameter for post_documents (#965)
* Added "created" as optional parameter for post_documents. * Fixed Conflict * After Black Reformatting * Run "add-trailing-comma" * The right order between black and trailing comma is important.... * Added required=False * Adds unit test for optional created in document api POST * Fixes adding of settings override * And a mis-added print, sigh Co-authored-by: Philipp <philipp@invalid.invalid> Co-authored-by: Trenton Holmes <holmes.trenton@gmail.com>
This commit is contained in:
parent
f1e99de59a
commit
bb15b744c8
@ -240,11 +240,13 @@ be instructed to consume the document from there.
|
|||||||
The endpoint supports the following optional form fields:
|
The endpoint supports the following optional form fields:
|
||||||
|
|
||||||
* ``title``: Specify a title that the consumer should use for the document.
|
* ``title``: Specify a title that the consumer should use for the document.
|
||||||
|
* ``created``: Specify a DateTime where the document was created (e.g. "2016-04-19" or "2016-04-19 06:15:00+02:00").
|
||||||
* ``correspondent``: Specify the ID of a correspondent that the consumer should use for the document.
|
* ``correspondent``: Specify the ID of a correspondent that the consumer should use for the document.
|
||||||
* ``document_type``: Similar to correspondent.
|
* ``document_type``: Similar to correspondent.
|
||||||
* ``tags``: Similar to correspondent. Specify this multiple times to have multiple tags added
|
* ``tags``: Similar to correspondent. Specify this multiple times to have multiple tags added
|
||||||
to the document.
|
to the document.
|
||||||
|
|
||||||
|
|
||||||
The endpoint will immediately return "OK" if the document consumption process
|
The endpoint will immediately return "OK" if the document consumption process
|
||||||
was started successfully. No additional status information about the consumption
|
was started successfully. No additional status information about the consumption
|
||||||
process itself is available, since that happens in a different process.
|
process itself is available, since that happens in a different process.
|
||||||
|
@ -189,6 +189,7 @@ class Consumer(LoggingMixin):
|
|||||||
override_document_type_id=None,
|
override_document_type_id=None,
|
||||||
override_tag_ids=None,
|
override_tag_ids=None,
|
||||||
task_id=None,
|
task_id=None,
|
||||||
|
override_created=None,
|
||||||
) -> Document:
|
) -> Document:
|
||||||
"""
|
"""
|
||||||
Return the document object if it was successfully created.
|
Return the document object if it was successfully created.
|
||||||
@ -201,6 +202,7 @@ class Consumer(LoggingMixin):
|
|||||||
self.override_document_type_id = override_document_type_id
|
self.override_document_type_id = override_document_type_id
|
||||||
self.override_tag_ids = override_tag_ids
|
self.override_tag_ids = override_tag_ids
|
||||||
self.task_id = task_id or str(uuid.uuid4())
|
self.task_id = task_id or str(uuid.uuid4())
|
||||||
|
self.override_created = override_created
|
||||||
|
|
||||||
self._send_progress(0, 100, "STARTING", MESSAGE_NEW_FILE)
|
self._send_progress(0, 100, "STARTING", MESSAGE_NEW_FILE)
|
||||||
|
|
||||||
@ -394,7 +396,13 @@ class Consumer(LoggingMixin):
|
|||||||
|
|
||||||
self.log("debug", "Saving record to database")
|
self.log("debug", "Saving record to database")
|
||||||
|
|
||||||
if file_info.created is not None:
|
if self.override_created is not None:
|
||||||
|
create_date = self.override_created
|
||||||
|
self.log(
|
||||||
|
"debug",
|
||||||
|
f"Creation date from post_documents parameter: {create_date}",
|
||||||
|
)
|
||||||
|
elif file_info.created is not None:
|
||||||
create_date = file_info.created
|
create_date = file_info.created
|
||||||
self.log("debug", f"Creation date from FileInfo: {create_date}")
|
self.log("debug", f"Creation date from FileInfo: {create_date}")
|
||||||
elif date is not None:
|
elif date is not None:
|
||||||
|
@ -412,6 +412,13 @@ class BulkEditSerializer(DocumentListSerializer):
|
|||||||
|
|
||||||
class PostDocumentSerializer(serializers.Serializer):
|
class PostDocumentSerializer(serializers.Serializer):
|
||||||
|
|
||||||
|
created = serializers.DateTimeField(
|
||||||
|
label="Created",
|
||||||
|
allow_null=True,
|
||||||
|
write_only=True,
|
||||||
|
required=False,
|
||||||
|
)
|
||||||
|
|
||||||
document = serializers.FileField(
|
document = serializers.FileField(
|
||||||
label="Document",
|
label="Document",
|
||||||
write_only=True,
|
write_only=True,
|
||||||
|
@ -238,6 +238,7 @@ def consume_file(
|
|||||||
override_document_type_id=None,
|
override_document_type_id=None,
|
||||||
override_tag_ids=None,
|
override_tag_ids=None,
|
||||||
task_id=None,
|
task_id=None,
|
||||||
|
override_created=None,
|
||||||
):
|
):
|
||||||
|
|
||||||
# check for separators in current document
|
# check for separators in current document
|
||||||
@ -318,6 +319,7 @@ def consume_file(
|
|||||||
override_document_type_id=override_document_type_id,
|
override_document_type_id=override_document_type_id,
|
||||||
override_tag_ids=override_tag_ids,
|
override_tag_ids=override_tag_ids,
|
||||||
task_id=task_id,
|
task_id=task_id,
|
||||||
|
override_created=override_created,
|
||||||
)
|
)
|
||||||
|
|
||||||
if document:
|
if document:
|
||||||
|
@ -9,6 +9,11 @@ import zipfile
|
|||||||
from unittest import mock
|
from unittest import mock
|
||||||
from unittest.mock import MagicMock
|
from unittest.mock import MagicMock
|
||||||
|
|
||||||
|
try:
|
||||||
|
import zoneinfo
|
||||||
|
except ImportError:
|
||||||
|
import backports.zoneinfo as zoneinfo
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
@ -955,6 +960,34 @@ class TestDocumentApi(DirectoriesMixin, APITestCase):
|
|||||||
|
|
||||||
async_task.assert_not_called()
|
async_task.assert_not_called()
|
||||||
|
|
||||||
|
@mock.patch("documents.views.async_task")
|
||||||
|
def test_upload_with_created(self, async_task):
|
||||||
|
created = datetime.datetime(
|
||||||
|
2022,
|
||||||
|
5,
|
||||||
|
12,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
tzinfo=zoneinfo.ZoneInfo("America/Los_Angeles"),
|
||||||
|
)
|
||||||
|
with open(
|
||||||
|
os.path.join(os.path.dirname(__file__), "samples", "simple.pdf"),
|
||||||
|
"rb",
|
||||||
|
) as f:
|
||||||
|
response = self.client.post(
|
||||||
|
"/api/documents/post_document/",
|
||||||
|
{"document": f, "created": created},
|
||||||
|
)
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
|
async_task.assert_called_once()
|
||||||
|
|
||||||
|
args, kwargs = async_task.call_args
|
||||||
|
|
||||||
|
self.assertEqual(kwargs["override_created"], created)
|
||||||
|
|
||||||
def test_get_metadata(self):
|
def test_get_metadata(self):
|
||||||
doc = Document.objects.create(
|
doc = Document.objects.create(
|
||||||
title="test",
|
title="test",
|
||||||
|
@ -504,6 +504,7 @@ class PostDocumentView(GenericAPIView):
|
|||||||
document_type_id = serializer.validated_data.get("document_type")
|
document_type_id = serializer.validated_data.get("document_type")
|
||||||
tag_ids = serializer.validated_data.get("tags")
|
tag_ids = serializer.validated_data.get("tags")
|
||||||
title = serializer.validated_data.get("title")
|
title = serializer.validated_data.get("title")
|
||||||
|
created = serializer.validated_data.get("created")
|
||||||
|
|
||||||
t = int(mktime(datetime.now().timetuple()))
|
t = int(mktime(datetime.now().timetuple()))
|
||||||
|
|
||||||
@ -530,6 +531,7 @@ class PostDocumentView(GenericAPIView):
|
|||||||
override_tag_ids=tag_ids,
|
override_tag_ids=tag_ids,
|
||||||
task_id=task_id,
|
task_id=task_id,
|
||||||
task_name=os.path.basename(doc_name)[:100],
|
task_name=os.path.basename(doc_name)[:100],
|
||||||
|
override_created=created,
|
||||||
)
|
)
|
||||||
|
|
||||||
return Response("OK")
|
return Response("OK")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user