use env variables in pre-|post-consume scripts

+ instead of positional arguments because it's easier to use in the
shell script and easier to read in the python code.
This commit is contained in:
ziprandom 2022-06-21 15:54:51 +00:00
parent 72ee904e67
commit 08ae3f8771
3 changed files with 38 additions and 34 deletions

View File

@ -121,10 +121,10 @@ Pre-consumption script
====================== ======================
Executed after the consumer sees a new document in the consumption folder, but Executed after the consumer sees a new document in the consumption folder, but
before any processing of the document is performed. This script receives exactly before any processing of the document is performed. This script can access the
one argument: following relevant environment variables set:
* Document file name * ``DOCUMENT_SOURCE_PATH``
A simple but common example for this would be creating a simple script like A simple but common example for this would be creating a simple script like
this: this:
@ -134,7 +134,7 @@ this:
.. code:: bash .. code:: bash
#!/usr/bin/env bash #!/usr/bin/env bash
pdf2pdfocr.py -i ${1} pdf2pdfocr.py -i ${DOCUMENT_SOURCE_PATH}
``/etc/paperless.conf`` ``/etc/paperless.conf``
@ -157,16 +157,16 @@ Post-consumption script
======================= =======================
Executed after the consumer has successfully processed a document and has moved it Executed after the consumer has successfully processed a document and has moved it
into paperless. It receives the following arguments: into paperless. It receives the following environment variables:
* Document id * ``DOCUMENT_ID``
* Generated file name * ``DOCUMENT_FILE_NAME``
* Source path * ``DOCUMENT_SOURCE_PATH``
* Thumbnail path * ``DOCUMENT_THUMBNAIL_PATH``
* Download URL * ``DOCUMENT_DOWNLOAD_URL``
* Thumbnail URL * ``DOCUMENT_THUMBNAIL_URL``
* Correspondent * ``DOCUMENT_CORRESPONDENT``
* Tags * ``DOCUMENT_TAGS``
The script can be in any language, but for a simple shell script The script can be in any language, but for a simple shell script
example, you can take a look at `post-consumption-example.sh`_ in this project. example, you can take a look at `post-consumption-example.sh`_ in this project.

View File

@ -1,14 +1,5 @@
#!/usr/bin/env bash #!/usr/bin/env bash
DOCUMENT_ID=${1}
DOCUMENT_FILE_NAME=${2}
DOCUMENT_SOURCE_PATH=${3}
DOCUMENT_THUMBNAIL_PATH=${4}
DOCUMENT_DOWNLOAD_URL=${5}
DOCUMENT_THUMBNAIL_URL=${6}
DOCUMENT_CORRESPONDENT=${7}
DOCUMENT_TAGS=${8}
echo " echo "
A document with an id of ${DOCUMENT_ID} was just consumed. I know the A document with an id of ${DOCUMENT_ID} was just consumed. I know the

View File

@ -134,8 +134,11 @@ class Consumer(LoggingMixin):
self.log("info", f"Executing pre-consume script {settings.PRE_CONSUME_SCRIPT}") self.log("info", f"Executing pre-consume script {settings.PRE_CONSUME_SCRIPT}")
script_env = os.environ.copy()
script_env["DOCUMENT_SOURCE_PATH"] = os.path.normpath(self.path)
try: try:
Popen((settings.PRE_CONSUME_SCRIPT, self.path)).wait() Popen(settings.PRE_CONSUME_SCRIPT, env=script_env).wait()
except Exception as e: except Exception as e:
self._fail( self._fail(
MESSAGE_PRE_CONSUME_SCRIPT_ERROR, MESSAGE_PRE_CONSUME_SCRIPT_ERROR,
@ -159,19 +162,29 @@ class Consumer(LoggingMixin):
f"Executing post-consume script {settings.POST_CONSUME_SCRIPT}", f"Executing post-consume script {settings.POST_CONSUME_SCRIPT}",
) )
script_env = os.environ.copy()
script_env["DOCUMENT_ID"] = str(document.pk)
script_env["DOCUMENT_FILE_NAME"] = document.get_public_filename()
script_env["DOCUMENT_SOURCE_PATH"] = os.path.normpath(document.source_path)
script_env["DOCUMENT_THUMBNAIL_PATH"] = os.path.normpath(
document.thumbnail_path
)
script_env["DOCUMENT_DOWNLOAD_URL"] = reverse(
"document-download", kwargs={"pk": document.pk}
)
script_env["DOCUMENT_THUMBNAIL_URL"] = reverse(
"document-thumb", kwargs={"pk": document.pk}
)
script_env["DOCUMENT_CORRESPONDENT"] = str(document.correspondent)
script_env["DOCUMENT_TAGS"] = str(
",".join(document.tags.all().values_list("name", flat=True))
)
try: try:
Popen( Popen(
( settings.POST_CONSUME_SCRIPT,
settings.POST_CONSUME_SCRIPT, env=script_env,
str(document.pk),
document.get_public_filename(),
os.path.normpath(document.source_path),
os.path.normpath(document.thumbnail_path),
reverse("document-download", kwargs={"pk": document.pk}),
reverse("document-thumb", kwargs={"pk": document.pk}),
str(document.correspondent),
str(",".join(document.tags.all().values_list("name", flat=True))),
),
).wait() ).wait()
except Exception as e: except Exception as e:
self._fail( self._fail(