| ----------------------- | ------------------------------------------------------------ |
| `DOCUMENT_SOURCE_PATH` | Original path of the consumed document |
| `DOCUMENT_WORKING_PATH` | Path to a copy of the original that consumption will work on |
+| `TASK_ID` | UUID of the task used to process the new document (if any) |
!!! note
has moved it into paperless. It receives the following environment
variables:
-| Environment Variable | Description |
-| ---------------------------- | --------------------------------------------- |
-| `DOCUMENT_ID` | Database primary key of the document |
-| `DOCUMENT_FILE_NAME` | Formatted filename, not including paths |
-| `DOCUMENT_CREATED` | Date & time when document created |
-| `DOCUMENT_MODIFIED` | Date & time when document was last modified |
-| `DOCUMENT_ADDED` | Date & time when document was added |
-| `DOCUMENT_SOURCE_PATH` | Path to the original document file |
-| `DOCUMENT_ARCHIVE_PATH` | Path to the generate archive file (if any) |
-| `DOCUMENT_THUMBNAIL_PATH` | Path to the generated thumbnail |
-| `DOCUMENT_DOWNLOAD_URL` | URL for document download |
-| `DOCUMENT_THUMBNAIL_URL` | URL for the document thumbnail |
-| `DOCUMENT_CORRESPONDENT` | Assigned correspondent (if any) |
-| `DOCUMENT_TAGS` | Comma separated list of tags applied (if any) |
-| `DOCUMENT_ORIGINAL_FILENAME` | Filename of original document |
+| Environment Variable | Description |
+| ---------------------------- | ---------------------------------------------- |
+| `DOCUMENT_ID` | Database primary key of the document |
+| `DOCUMENT_FILE_NAME` | Formatted filename, not including paths |
+| `DOCUMENT_CREATED` | Date & time when document created |
+| `DOCUMENT_MODIFIED` | Date & time when document was last modified |
+| `DOCUMENT_ADDED` | Date & time when document was added |
+| `DOCUMENT_SOURCE_PATH` | Path to the original document file |
+| `DOCUMENT_ARCHIVE_PATH` | Path to the generate archive file (if any) |
+| `DOCUMENT_THUMBNAIL_PATH` | Path to the generated thumbnail |
+| `DOCUMENT_DOWNLOAD_URL` | URL for document download |
+| `DOCUMENT_THUMBNAIL_URL` | URL for the document thumbnail |
+| `DOCUMENT_CORRESPONDENT` | Assigned correspondent (if any) |
+| `DOCUMENT_TAGS` | Comma separated list of tags applied (if any) |
+| `DOCUMENT_ORIGINAL_FILENAME` | Filename of original document |
+| `TASK_ID` | Task UUID used to import the document (if any) |
The script can be in any language, A simple shell script example:
f"Not consuming {self.filename}: Given ASN already exists!",
)
- def run_pre_consume_script(self, task_id):
+ def run_pre_consume_script(self):
"""
If one is configured and exists, run the pre-consume script and
handle its output and/or errors
script_env = os.environ.copy()
script_env["DOCUMENT_SOURCE_PATH"] = original_file_path
script_env["DOCUMENT_WORKING_PATH"] = working_file_path
- script_env["TASK_ID"] = task_id
+ script_env["TASK_ID"] = self.task_id or ""
try:
completed_proc = run(
exception=e,
)
- def run_post_consume_script(self, document: Document, task_id):
+ def run_post_consume_script(self, document: Document):
"""
If one is configured and exists, run the pre-consume script and
handle its output and/or errors
",".join(document.tags.all().values_list("name", flat=True)),
)
script_env["DOCUMENT_ORIGINAL_FILENAME"] = str(document.original_filename)
- script_env["TASK_ID"] = task_id
+ script_env["TASK_ID"] = self.task_id or ""
try:
completed_proc = run(
logging_group=self.logging_group,
)
- self.run_pre_consume_script(task_id=self.task_id)
+ self.run_pre_consume_script()
def progress_callback(current_progress, max_progress): # pragma: no cover
# recalculate progress to be within 20 and 80
document_parser.cleanup()
tempdir.cleanup()
- self.run_post_consume_script(document, task_id=self.task_id)
+ self.run_post_consume_script(document)
self.log.info(f"Document {document} consumption finished")
def test_no_pre_consume_script(self, m):
c = Consumer()
c.path = "path-to-file"
- c.run_pre_consume_script(str(uuid.uuid4()))
+ c.run_pre_consume_script()
m.assert_not_called()
@mock.patch("documents.consumer.run")
c = Consumer()
c.filename = "somefile.pdf"
c.path = "path-to-file"
- self.assertRaises(ConsumerError, c.run_pre_consume_script, str(uuid.uuid4()))
+ self.assertRaises(ConsumerError, c.run_pre_consume_script)
@mock.patch("documents.consumer.run")
def test_pre_consume_script(self, m):
c = Consumer()
c.original_path = "path-to-file"
c.path = "/tmp/somewhere/path-to-file"
- task_id = str(uuid.uuid4())
- c.run_pre_consume_script(task_id)
+ c.task_id = str(uuid.uuid4())
+ c.run_pre_consume_script()
m.assert_called_once()
subset = {
"DOCUMENT_SOURCE_PATH": c.original_path,
"DOCUMENT_WORKING_PATH": c.path,
- "TASK_ID": task_id,
+ "TASK_ID": c.task_id,
}
self.assertDictEqual(environment, {**environment, **subset})
c = Consumer()
c.path = "path-to-file"
- c.run_pre_consume_script(str(uuid.uuid4()))
+ c.run_pre_consume_script()
self.assertIn(
"INFO:paperless.consumer:This message goes to stdout",
cm.output,
self.assertRaises(
ConsumerError,
c.run_pre_consume_script,
- str(uuid.uuid4()),
)
doc.tags.add(tag1)
doc.tags.add(tag2)
- Consumer().run_post_consume_script(doc, str(uuid.uuid4()))
+ Consumer().run_post_consume_script(doc)
m.assert_not_called()
ConsumerError,
c.run_post_consume_script,
doc,
- str(uuid.uuid4()),
)
@mock.patch("documents.consumer.run")
with override_settings(POST_CONSUME_SCRIPT=script.name):
doc = Document.objects.create(title="Test", mime_type="application/pdf")
- Consumer().run_post_consume_script(doc, str(uuid.uuid4()))
+ Consumer().run_post_consume_script(doc)
m.assert_called_once()
tag2 = Tag.objects.create(name="b")
doc.tags.add(tag1)
doc.tags.add(tag2)
- task_id = str(uuid.uuid4())
- Consumer().run_post_consume_script(doc, task_id)
+ consumer = Consumer()
+ consumer.task_id = str(uuid.uuid4())
+ consumer.run_post_consume_script(doc)
m.assert_called_once()
"DOCUMENT_THUMBNAIL_URL": f"/api/documents/{doc.pk}/thumb/",
"DOCUMENT_CORRESPONDENT": "my_bank",
"DOCUMENT_TAGS": "a,b",
- "TASK_ID": task_id,
+ "TASK_ID": consumer.task_id,
}
self.assertDictEqual(environment, {**environment, **subset})
doc = Document.objects.create(title="Test", mime_type="application/pdf")
c.path = "path-to-file"
with self.assertRaises(ConsumerError):
- c.run_post_consume_script(doc, str(uuid.uuid4()))
+ c.run_post_consume_script(doc)