diff --git a/deskutils/py-paperless-ngx/Makefile b/deskutils/py-paperless-ngx/Makefile index 577d434f193d..f8f9f1d7e468 100644 --- a/deskutils/py-paperless-ngx/Makefile +++ b/deskutils/py-paperless-ngx/Makefile @@ -1,177 +1,172 @@ PORTNAME= paperless-ngx -PORTVERSION= 2.11.6 -PORTREVISION= 2 +PORTVERSION= 2.15.3 DISTVERSIONPREFIX= v -PORTREVISION= 1 CATEGORIES= deskutils python MASTER_SITES= https://github.com/${PORTNAME}/${PORTNAME}/releases/download/${DISTVERSIONPREFIX}${DISTVERSION}/:webui \ GH:gh PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} DISTFILES= ${PORTNAME}-${DISTVERSIONPREFIX}${DISTVERSION}${EXTRACT_SUFX}:webui MAINTAINER= grembo@FreeBSD.org COMMENT= Community-supported supercharged version of paperless WWW= https://docs.paperless-ngx.com LICENSE= GPLv3 LICENSE_FILE= ${WRKSRC}/LICENSE -BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}bleach>=6.1.0:www/py-bleach@${PY_FLAVOR} \ +BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}Jinja2>=3.1.6:devel/py-Jinja2@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}bleach>=6.2.0:www/py-bleach@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}concurrent-log-handler>=0.9.19:sysutils/py-concurrent-log-handler@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}dateparser>=1.1.4:devel/py-dateparser@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}channels-redis>=4.2.0:www/py-channels-redis@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}django-allauth>=0.59.0:www/py-django-allauth@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}django-auditlog>=2.3.0:www/py-django-auditlog@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}django-celery-results>=2.5.1:www/py-django-celery-results@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}django-compression-middleware>=0.5.0:www/py-django-compression-middleware@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}django-cors-headers>=4.3.1:www/py-django-cors-headers@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}django-extensions>=3.2.3:www/py-django-extensions@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}django-filter>=23.5:www/py-django-filter@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}django-multiselectfield>=0.1.12:www/py-django-multiselectfield@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}django-soft-delete>=1.0.15:www/py-django-soft-delete@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}djangorestframework-guardian>=0.3.0:www/py-djangorestframework-guardian@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}drf-writable-nested>=0.7.0:www/py-drf-writable-nested@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}filelock>=3.13.1:sysutils/py-filelock@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}dateparser>=1.2.1:devel/py-dateparser@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}dj51-channels-redis>=4.2.1:www/py-dj51-channels-redis@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}dj51-django-allauth>=65.7.0_1:www/py-dj51-django-allauth@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}dj51-django-auditlog>=3.0.0:www/py-dj51-django-auditlog@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}dj51-django-celery-results>=2.6.0:www/py-dj51-django-celery-results@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}dj51-django-compression-middleware>=0.5.0:www/py-dj51-django-compression-middleware@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}dj51-django-cors-headers>=4.7.0:www/py-dj51-django-cors-headers@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}dj51-django-extensions>=3.2.3:www/py-dj51-django-extensions@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}dj51-django-filter>=25.1:www/py-dj51-django-filter@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}dj51-django-multiselectfield>=0.1.13:www/py-dj51-django-multiselectfield@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}dj51-django-soft-delete>=1.0.16:www/py-dj51-django-soft-delete@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}dj51-djangorestframework-guardian>=0.3.0:www/py-dj51-djangorestframework-guardian@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}dj51-drf-spectacular>=0.28.0:www/py-dj51-drf-spectacular@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}dj51-drf-writable-nested>=0.7.2:www/py-dj51-drf-writable-nested@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}filelock>=3.17.0:sysutils/py-filelock@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}flower>=2.0.1:www/py-flower@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}gotenberg-client>=0.10.0:converters/py-gotenberg-client@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}gunicorn>=21.2.0:www/py-gunicorn@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}granian>=2.2.5:www/py-granian@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}h2>=4.1.0:www/py-h2@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}hiredis>=2.0.0:databases/py-hiredis@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}httptools>=0.6.1:www/py-httptools@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}imap-tools>=1.5.0:mail/py-imap-tools@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}inotifyrecursive>=0.3.5_1:devel/py-inotifyrecursive@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}hiredis>=3.0.0:databases/py-hiredis@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}httptools>=0.6.4:www/py-httptools@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}httpx-oauth>=0.10.1:www/py-httpx-oauth@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}imap-tools>=1.10.0:mail/py-imap-tools@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}inotifyrecursive>=0.3.5_2:devel/py-inotifyrecursive@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}langdetect>=1.0.9:textproc/py-langdetect@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}mysqlclient>=2.2.1:databases/py-mysqlclient@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}mysqlclient>=2.2.7:databases/py-mysqlclient@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}nltk>=3.8.1:textproc/py-nltk@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}ocrmypdf>=15.4.4:textproc/py-ocrmypdf@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}pathvalidate>=3.2.0:devel/py-pathvalidate@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}ocrmypdf>=16.10.0:textproc/py-ocrmypdf@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}pathvalidate>=3.2.3:devel/py-pathvalidate@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}pdf2image>=1.17.0:graphics/py-pdf2image@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}pdftotext>=2.2.2:textproc/py-pdftotext@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}psycopg2>=2.9.9:databases/py-psycopg2@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}python-dotenv>=1.0.0:www/py-python-dotenv@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}pdftotext>=3.0.0:textproc/py-pdftotext@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}psycopg2>=2.9.10:databases/py-psycopg2@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}python-dotenv>=1.1.0:www/py-python-dotenv@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}python-gnupg>=0.5.1:security/py-python-gnupg@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}python-ipware>=2.0.1:net/py-python-ipware@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}python-ipware>=2.0.3:net/py-python-ipware@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}python-magic>=0.4.27:devel/py-python-magic@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}pyzbar>=0.1.9:graphics/py-pyzbar@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}rapidfuzz>=3.6.1:devel/py-rapidfuzz@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}rapidfuzz>=3.13.0:devel/py-rapidfuzz@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}scikit-learn>=1.4.0:science/py-scikit-learn@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}setproctitle>=1.3.2:devel/py-setproctitle@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}setproctitle>=1.3.3:devel/py-setproctitle@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}tika-client>=0.5.0:textproc/py-tika-client@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}uvicorn>=0.25.0:www/py-uvicorn@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}uvloop>=0.17.0:devel/py-uvloop@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}watchdog>=4.0.0:devel/py-watchdog@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}watchfiles>=0.21.0:devel/py-watchfiles@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}websockets>=12.0:devel/py-websockets@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}tika-client>=0.7.0:textproc/py-tika-client@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}uvloop>=0.21.0:devel/py-uvloop@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}watchdog>=6.0.0:devel/py-watchdog@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}watchfiles>=0.24.0:devel/py-watchfiles@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}websockets>=15.0.1:devel/py-websockets@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}whitenoise>=6.2.0:www/py-whitenoise@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}whoosh>=2.7.4:textproc/py-whoosh@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}pyyaml>=6.0.1:devel/py-pyyaml@${PY_FLAVOR} RUN_DEPENDS:= ${BUILD_DEPENDS} RUN_DEPENDS+= gpg2:security/gnupg \ liberation-fonts-ttf>=2.1.3:x11-fonts/liberation-fonts-ttf \ optipng:graphics/optipng \ tesseract:graphics/tesseract \ unpaper:graphics/unpaper USES= python shebangfix tar:xz USE_GITHUB= yes GH_ACCOUNT= paperless-ngx USE_RC_SUBR= paperless-beat paperless-consumer paperless-flower \ paperless-migrate paperless-webui paperless-worker SHEBANG_FILES= ${WRKSRC}/src/manage.py CONFLICTS_INSTALL= ${PYTHON_PKGNAMEPREFIX}*paperless NO_ARCH= yes SUB_FILES= nginx.conf paperless paperless-ngx.7 pkg-message README sshd_config SUB_LIST= CHOWN=${CHOWN} \ ECHO=${ECHO} \ EGREP=${EGREP} \ PKGBASE=${PKGBASE} \ PYTHON_CMD=${PYTHON_CMD} \ PYTHONPREFIX_SITELIBDIR=${PYTHONPREFIX_SITELIBDIR} \ RM=${RM:Q} \ TOUCH=${TOUCH} USERS= paperless GROUPS= paperless PORTDOCS= * OPTIONS_DEFINE= DOCS EXAMPLES OPTIONS_DEFAULT= IMAGICK7_X11 OPTIONS_SINGLE= IMAGICK OPTIONS_SINGLE_IMAGICK= IMAGICK6_NOX11 IMAGICK6_X11 IMAGICK7_NOX11 IMAGICK7_X11 IMAGICK6_NOX11_DESC= ImageMagick6 without X11 support IMAGICK6_X11_DESC= ImageMagick6 with X11 support IMAGICK7_NOX11_DESC= ImageMagick7 without X11 support IMAGICK7_X11_DESC= ImageMagick7 with X11 support IMAGICK_DESC= ${IMAGEMAGICK_DESC} IMAGICK6_NOX11_USES= magick:6,run,nox11 IMAGICK6_X11_USES= magick:6,run IMAGICK7_NOX11_USES= magick:7,run,nox11 IMAGICK7_X11_USES= magick:7,run PAPERLESS_STATICDIR= ${WRKSRC}/static post-patch: @${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|g' \ ${WRKSRC}/src/paperless/settings.py do-build: @${PYTHON_CMD} ${PYTHON_LIBDIR}/compileall.py \ -d ${PYTHONPREFIX_SITELIBDIR} \ -x ".*/tests/" \ -f ${WRKSRC}/src @${PYTHON_CMD} -O ${PYTHON_LIBDIR}/compileall.py \ -d ${PYTHONPREFIX_SITELIBDIR} \ -x ".*/tests/" \ -f ${WRKSRC}/src - @${PYTHON_CMD} -O ${PYTHON_LIBDIR}/compileall.py \ - -d ${PYTHONPREFIX_SITELIBDIR} \ - -f ${WRKSRC}/gunicorn.conf.py @${RM} -r ${PAPERLESS_STATICDIR} @${SETENV} \ PAPERLESS_STATICDIR=${PAPERLESS_STATICDIR} \ ${PYTHON_CMD} ${WRKSRC}/src/manage.py collectstatic -i tests do-install: @${MKDIR} ${STAGEDIR}${PYTHON_SITELIBDIR}/paperless @cd ${WRKSRC}/resources && \ ${COPYTREE_SHARE} . ${STAGEDIR}${DATADIR} @cd ${WRKSRC}/src && \ ${COPYTREE_SHARE} . ${STAGEDIR}${PYTHON_SITELIBDIR}/paperless - @cd ${WRKSRC} && ${COPYTREE_SHARE} gunicorn.conf.py \ - ${STAGEDIR}${PYTHON_SITELIBDIR}/paperless @${FIND} ${STAGEDIR}${PYTHON_SITELIBDIR} -name '*.orig' -delete @cd ${WRKDIR} && ${INSTALL_SCRIPT} paperless ${STAGEDIR}${PREFIX}/bin @${SED} -e 's|%%WWWDIR%%|${WWWDIR}|g;' \ ${WRKSRC}/paperless.conf.example \ > ${STAGEDIR}${PREFIX}/etc/paperless.conf.sample @${MKDIR} ${STAGEDIR}/var/db/paperless/consume/input \ ${STAGEDIR}/var/db/paperless/data/log \ ${STAGEDIR}/var/db/paperless/media \ ${STAGEDIR}/var/db/paperless/nltkdata ${INSTALL_MAN} ${WRKDIR}/paperless-ngx.7 ${STAGEDIR}${PREFIX}/share/man/man7 ${MKDIR} ${STAGEDIR}${WWWDIR} @cd ${WRKDIR}/${PORTNAME} && ${COPYTREE_SHARE} static ${STAGEDIR}${WWWDIR} @${MKDIR} ${STAGEDIR}/var/run/paperless post-install-DOCS-on: @${MKDIR} ${STAGEDIR}${DOCSDIR}/ @cd ${WRKSRC}/docs && \ ${COPYTREE_SHARE} . ${STAGEDIR}${DOCSDIR} post-install-EXAMPLES-on: @${MKDIR} ${STAGEDIR}${EXAMPLESDIR} ${INSTALL_DATA} \ ${WRKDIR}/README \ ${WRKDIR}/nginx.conf \ ${WRKDIR}/sshd_config \ ${STAGEDIR}${EXAMPLESDIR} .include diff --git a/deskutils/py-paperless-ngx/distinfo b/deskutils/py-paperless-ngx/distinfo index c5534161743b..346cca0f3972 100644 --- a/deskutils/py-paperless-ngx/distinfo +++ b/deskutils/py-paperless-ngx/distinfo @@ -1,5 +1,5 @@ -TIMESTAMP = 1732099623 -SHA256 (paperless-ngx-v2.11.6.tar.xz) = 50b57e95d5e5d84f676f361f15d972866f4d3ad98d2aed81a433b31ee4e3e7ca -SIZE (paperless-ngx-v2.11.6.tar.xz) = 63969744 -SHA256 (paperless-ngx-paperless-ngx-v2.11.6_GH0.tar.gz) = a12c30f8630f79d1e548f2e4f419cc443b7b99b396e1dff907c36a39e88e867a -SIZE (paperless-ngx-paperless-ngx-v2.11.6_GH0.tar.gz) = 48771241 +TIMESTAMP = 1746350043 +SHA256 (paperless-ngx-v2.15.3.tar.xz) = 20cd5961b1f91bde5cb6743ae8eb7f8fd98d66ba67d49d5ab030d87c998ac2d1 +SIZE (paperless-ngx-v2.15.3.tar.xz) = 78329260 +SHA256 (paperless-ngx-paperless-ngx-v2.15.3_GH0.tar.gz) = 0c471d082ee03e94bf2b139bfadb98e758f94d17850e56966ef1793b1f1b7ee0 +SIZE (paperless-ngx-paperless-ngx-v2.15.3_GH0.tar.gz) = 49573227 diff --git a/deskutils/py-paperless-ngx/files/paperless-webui.in b/deskutils/py-paperless-ngx/files/paperless-webui.in index 5dc08ee981c6..490fe3200364 100755 --- a/deskutils/py-paperless-ngx/files/paperless-webui.in +++ b/deskutils/py-paperless-ngx/files/paperless-webui.in @@ -1,104 +1,103 @@ #!/bin/sh # PROVIDE: paperless-webui # REQUIRE: LOGIN # BEFORE: paperless-worker # KEYWORD: shutdown # # Add the following line(s) to /etc/rc.conf to enable the paperless # celery webui process: # # paperless_webui_enable (bool): Set to "NO" by default. # Set it to "YES" to enable # paperless_webui # paperless_webui_user (str): Set to "paperless" by default. # User to run webui. # paperless_webui_log_facility (str): Set to "daemon" by default. # WebUI logging syslog facility. # paperless_webui_log_priority (str): Set to "notice" by default. # WebUI logging syslog priority. # paperless_webui_log_tag (str): Set to "paperless-webui" by default. # WebUI logging syslog tag. # paperless_webui_listen_address (str): Set to "127.0.0.1" by default. # IP address to listen on. # paperless_webui_listen_port (int): Set to "8000" by default. # Port to listen on. # paperless_webui_restart_delay (int): Set to "5" by default. # WebUI automatic restart delay in # seconds. # paperless_webui_secret_key (str): Set to # "%%PREFIX%%/etc/paperless_secret_key" # by default. Load PAPERLESS_SECRET_KEY # from this file from start, in case it # is not in the environment already. # Will be created on start in case it # does not exist. # Content of PAPERLESS_SECRET_KEY can be # overridden in # %%PREFIX%%/etc/paperless.conf. # paperless_webui_tmpdir (str): If set, overrides TMPDIR . /etc/rc.subr name="paperless_webui" rcvar="${name}_enable" # read configuration and set defaults load_rc_config "$name" paperless_webui_enable=${paperless_webui_enable:-"NO"} paperless_webui_daemon_user=${paperless_webui_user:-"paperless"} paperless_webui_log_facility=${paperless_webui_log_facility:-"daemon"} paperless_webui_log_priority=${paperless_webui_log_priority:-"notice"} paperless_webui_log_tag=${paperless_webui_log_tag:-"paperless-webui"} paperless_webui_listen_address=${paperless_webui_listen_address:-"127.0.0.1"} paperless_webui_listen_port=${paperless_webui_listen_port:-"8000"} paperless_webui_restart_delay=${paperless_webui_restart_delay:-"5"} paperless_webui_secret_key=${\ paperless_webui_secret_key:-"%%PREFIX%%/etc/paperless_secret_key"} paperless_webui_tmpdir=${paperless_webui_tmpdir:-"$TMPDIR"} paperless_webui_env="LANG=en_US.UTF-8 PATH=$PATH:%%PREFIX%%/bin\ PYTHONPATH=%%PYTHONPREFIX_SITELIBDIR%%/paperless \ PAPERLESS_BIND_ADDR=${paperless_webui_listen_address} \ PAPERLESS_PORT=${paperless_webui_listen_port}" if [ -n "$paperless_webui_tmpdir" ]; then paperless_webui_env="$paperless_webui_env TMPDIR=\ $paperless_webui_tmpdir" fi start_precmd="paperless_webui_prestart" pidfile="/var/run/paperless/webui.pid" command="/usr/sbin/daemon" command_args="-cS -u ${paperless_webui_daemon_user} \ -P ${pidfile} \ -t paperless-webui \ -l ${paperless_webui_log_facility} \ -s ${paperless_webui_log_priority} \ -T ${paperless_webui_log_tag} \ -R ${paperless_webui_restart_delay} \ - %%PREFIX%%/bin/gunicorn \ - -c %%PYTHONPREFIX_SITELIBDIR%%/paperless/gunicorn.conf.py \ - paperless.asgi:application" + %%PREFIX%%/bin/granian --interface asginl \ + --ws --loop uvloop paperless.asgi:application" paperless_webui_prestart() { if [ -z "$PAPERLESS_SECRET_KEY" ]; then if [ ! -s "$paperless_webui_secret_key" ]; then echo "Creating $paperless_webui_secret_key" ( set -eo pipefail; umask 077 uuidgen -crn 10 | xargs | tr ' ' 'x' \ >"$paperless_webui_secret_key" ) || return 1 fi PAPERLESS_SECRET_KEY=$(cat "$paperless_webui_secret_key") export PAPERLESS_SECRET_KEY fi if [ "${#PAPERLESS_SECRET_KEY}" -lt "128" ]; then >&2 echo "PAPERLESS_SECRET_KEY is shorter than 128 chars" return 1 fi } run_rc_command "$1" diff --git a/deskutils/py-paperless-ngx/files/patch-gunicorn.conf.py b/deskutils/py-paperless-ngx/files/patch-gunicorn.conf.py deleted file mode 100644 index e9cf70f82259..000000000000 --- a/deskutils/py-paperless-ngx/files/patch-gunicorn.conf.py +++ /dev/null @@ -1,11 +0,0 @@ ---- gunicorn.conf.py.orig 2024-02-18 20:13:15 UTC -+++ gunicorn.conf.py -@@ -11,7 +11,7 @@ timeout = 120 - preload_app = True - - # https://docs.gunicorn.org/en/stable/faq.html#blocking-os-fchmod --worker_tmp_dir = "/dev/shm" -+worker_tmp_dir = "/tmp" - - - def pre_fork(server, worker): diff --git a/deskutils/py-paperless-ngx/files/patch-src_documents_management_commands_document__consumer.py b/deskutils/py-paperless-ngx/files/patch-src_documents_management_commands_document__consumer.py index 6d42eced1f3c..7ce264a9831f 100644 --- a/deskutils/py-paperless-ngx/files/patch-src_documents_management_commands_document__consumer.py +++ b/deskutils/py-paperless-ngx/files/patch-src_documents_management_commands_document__consumer.py @@ -1,11 +1,11 @@ ---- src/documents/management/commands/document_consumer.py.orig 2024-03-18 03:45:09 UTC +--- src/documents/management/commands/document_consumer.py.orig 2025-04-19 22:34:42 UTC +++ src/documents/management/commands/document_consumer.py @@ -292,7 +292,7 @@ class Command(BaseCommand): logger.debug(f"Configuring timeout to {timeout_ms}ms") inotify = INotify() - inotify_flags = flags.CLOSE_WRITE | flags.MOVED_TO | flags.MODIFY + inotify_flags = flags.CLOSE_WRITE | flags.MOVED_TO | flags.MODIFY | flags.CREATE if recursive: - descriptor = inotify.add_watch_recursive(directory, inotify_flags) + inotify.add_watch_recursive(directory, inotify_flags) else: diff --git a/deskutils/py-paperless-ngx/files/patch-src_paperless__mail_parsers.py b/deskutils/py-paperless-ngx/files/patch-src_paperless__mail_parsers.py index 5a985505286a..d10bc4241194 100644 --- a/deskutils/py-paperless-ngx/files/patch-src_paperless__mail_parsers.py +++ b/deskutils/py-paperless-ngx/files/patch-src_paperless__mail_parsers.py @@ -1,43 +1,43 @@ ---- src/paperless_mail/parsers.py.orig 2024-08-23 03:40:13 UTC +--- src/paperless_mail/parsers.py.orig 2025-04-19 22:34:42 UTC +++ src/paperless_mail/parsers.py -@@ -9,8 +9,8 @@ from django.conf import settings +@@ -8,8 +8,8 @@ from django.conf import settings from django.utils.timezone import is_naive from django.utils.timezone import make_aware from gotenberg_client import GotenbergClient -from gotenberg_client.options import MarginType -from gotenberg_client.options import MarginUnitType +from gotenberg_client.options import Measurement +from gotenberg_client.options import MeasurementUnitType from gotenberg_client.options import PageMarginsType from gotenberg_client.options import PageSize from gotenberg_client.options import PdfAFormat -@@ -344,10 +344,10 @@ class MailDocumentParser(DocumentParser): +@@ -370,10 +370,10 @@ class MailDocumentParser(DocumentParser): .resource(css_file) .margins( PageMarginsType( - top=MarginType(0.1, MarginUnitType.Inches), - bottom=MarginType(0.1, MarginUnitType.Inches), - left=MarginType(0.1, MarginUnitType.Inches), - right=MarginType(0.1, MarginUnitType.Inches), + top=Measurement(0.1, MeasurementUnitType.Inches), + bottom=Measurement(0.1, MeasurementUnitType.Inches), + left=Measurement(0.1, MeasurementUnitType.Inches), + right=Measurement(0.1, MeasurementUnitType.Inches), ), ) .size(PageSize(height=11.7, width=8.27)) -@@ -426,10 +426,10 @@ class MailDocumentParser(DocumentParser): +@@ -452,10 +452,10 @@ class MailDocumentParser(DocumentParser): # Set page size, margins route.margins( PageMarginsType( - top=MarginType(0.1, MarginUnitType.Inches), - bottom=MarginType(0.1, MarginUnitType.Inches), - left=MarginType(0.1, MarginUnitType.Inches), - right=MarginType(0.1, MarginUnitType.Inches), + top=Measurement(0.1, MeasurementUnitType.Inches), + bottom=Measurement(0.1, MeasurementUnitType.Inches), + left=Measurement(0.1, MeasurementUnitType.Inches), + right=Measurement(0.1, MeasurementUnitType.Inches), ), ).size( PageSize(height=11.7, width=8.27), diff --git a/deskutils/py-paperless-ngx/files/patch-src_paperless_settings.py b/deskutils/py-paperless-ngx/files/patch-src_paperless_settings.py index cb5180ea81a2..0631a458caf6 100644 --- a/deskutils/py-paperless-ngx/files/patch-src_paperless_settings.py +++ b/deskutils/py-paperless-ngx/files/patch-src_paperless_settings.py @@ -1,29 +1,29 @@ ---- src/paperless/settings.py.orig 2024-03-18 03:45:09 UTC +--- src/paperless/settings.py.orig 2025-04-19 22:34:42 UTC +++ src/paperless/settings.py -@@ -24,8 +24,6 @@ if configuration_path and os.path.exists(configuration +@@ -21,8 +21,6 @@ if configuration_path and os.path.exists(configuration load_dotenv(configuration_path) elif os.path.exists("../paperless.conf"): load_dotenv("../paperless.conf") -elif os.path.exists("/etc/paperless.conf"): - load_dotenv("/etc/paperless.conf") elif os.path.exists("/usr/local/etc/paperless.conf"): load_dotenv("/usr/local/etc/paperless.conf") -@@ -254,7 +252,7 @@ THUMBNAIL_DIR = MEDIA_ROOT / "documents" / "thumbnails +@@ -267,7 +265,7 @@ THUMBNAIL_DIR = MEDIA_ROOT / "documents" / "thumbnails DATA_DIR = __get_path("PAPERLESS_DATA_DIR", BASE_DIR.parent / "data") -NLTK_DIR = __get_path("PAPERLESS_NLTK_DIR", "/usr/share/nltk_data") +NLTK_DIR = __get_path("PAPERLESS_NLTK_DIR", "/usr/local/share/nltk_data") - TRASH_DIR = os.getenv("PAPERLESS_TRASH_DIR") - -@@ -1031,7 +1029,7 @@ FILENAME_FORMAT_REMOVE_NONE = __get_boolean( + # Check deprecated setting first + EMPTY_TRASH_DIR = os.getenv( +@@ -1106,7 +1104,7 @@ FILENAME_FORMAT_REMOVE_NONE = __get_boolean( THUMBNAIL_FONT_NAME = os.getenv( "PAPERLESS_THUMBNAIL_FONT_NAME", - "/usr/share/fonts/liberation/LiberationSerif-Regular.ttf", + "/usr/local/share/fonts/Liberation/LiberationSerif-Regular.ttf", ) # Tika settings diff --git a/deskutils/py-paperless-ngx/files/pkg-message.in b/deskutils/py-paperless-ngx/files/pkg-message.in index d76964202b9a..2abb73ca7ab0 100644 --- a/deskutils/py-paperless-ngx/files/pkg-message.in +++ b/deskutils/py-paperless-ngx/files/pkg-message.in @@ -1,28 +1,34 @@ [ { type: install message: <