Compare commits

..

6 Commits

Author SHA1 Message Date
Crowdin Bot
1d7443f646 New Crowdin translations by GitHub Action 2025-03-26 12:13:07 +00:00
shamoon
7a07f1e81d Remove unnecessary check 2025-03-21 10:28:20 -07:00
shamoon
92524ae97a Chore: remove a couple of console logs 2025-03-21 10:24:59 -07:00
shamoon
1c89f6da24 More narrow device tweaks 2025-03-21 10:24:59 -07:00
shamoon
d1a3e3b859 Fix: top nav layout with custom title on very narrow screens 2025-03-21 10:24:58 -07:00
shamoon
79ae594d54 Fix: fix saving docs with notes 2025-03-21 10:24:58 -07:00
14 changed files with 44 additions and 112 deletions

View File

@@ -32,7 +32,7 @@ RUN set -eux \
# Purpose: Installs s6-overlay and rootfs
# Comments:
# - Don't leave anything extra in here either
FROM ghcr.io/astral-sh/uv:0.6.9-python3.12-bookworm-slim AS s6-overlay-base
FROM ghcr.io/astral-sh/uv:0.6.5-python3.12-bookworm-slim AS s6-overlay-base
WORKDIR /usr/src/s6

View File

@@ -565,15 +565,19 @@ document.
### Managing encryption {#encryption}
Documents can be stored in Paperless using GnuPG encryption.
!!! warning
Encryption was removed in [paperless-ng 0.9](changelog.md#paperless-ng-090)
because it did not really provide any additional security, the passphrase
was stored in a configuration file on the same system as the documents.
Furthermore, the entire text content of the documents is stored plain in
the database, even if your documents are encrypted. Filenames are not
encrypted as well. Finally, the web server provides transparent access to
your encrypted documents.
Encryption is deprecated since [paperless-ng 0.9](changelog.md#paperless-ng-090) and doesn't really
provide any additional security, since you have to store the passphrase
in a configuration file on the same system as the encrypted documents
for paperless to work. Furthermore, the entire text content of the
documents is stored plain in the database, even if your documents are
encrypted. Filenames are not encrypted as well.
Also, the web server provides transparent access to your encrypted
documents.
Consider running paperless on an encrypted filesystem instead, which
will then at least provide security against physical hardware theft.

View File

@@ -270,7 +270,7 @@ The following methods are supported:
- `remove_tag`
- Requires `parameters`: `{ "tag": TAG_ID }`
- `modify_tags`
- Requires `parameters`: `{ "add_tags": [LIST_OF_TAG_IDS] }` and `{ "remove_tags": [LIST_OF_TAG_IDS] }`
- Requires `parameters`: `{ "add_tags": [LIST_OF_TAG_IDS] }` and / or `{ "remove_tags": [LIST_OF_TAG_IDS] }`
- `delete`
- No `parameters` required
- `reprocess`

View File

@@ -708,8 +708,7 @@ Paperless runs on Raspberry Pi. However, some things are rather slow on
the Pi and configuring some options in paperless can help improve
performance immensely:
- Stick with SQLite to save some resources. See [troubleshooting](troubleshooting.md#log-reports-creating-paperlesstask-failed)
if you encounter issues with SQLite locking.
- Stick with SQLite to save some resources.
- If you do not need the filesystem-based consumer, consider disabling it
entirely by setting [`PAPERLESS_CONSUMER_DISABLE`](configuration.md#PAPERLESS_CONSUMER_DISABLE) to `true`.
- Consider setting [`PAPERLESS_OCR_PAGES`](configuration.md#PAPERLESS_OCR_PAGES) to 1, so that paperless will

View File

@@ -292,9 +292,7 @@ many workers attempting to access the database simultaneously.
Consider changing to the PostgreSQL database if you will be processing
many documents at once often. Otherwise, try tweaking the
[`PAPERLESS_DB_TIMEOUT`](configuration.md#PAPERLESS_DB_TIMEOUT) setting to allow more time for the database to
unlock. Additionally, you can change your SQLite database to use ["Write-Ahead Logging"](https://sqlite.org/wal.html).
These changes may have minor performance implications but can help
prevent database locking issues.
unlock. This may have minor performance implications.
## granian fails to start with "is not a valid port number"

View File

@@ -1,6 +1,6 @@
[project]
name = "paperless-ngx"
version = "2.15.0"
version = "2.14.7"
description = "A community-supported supercharged version of paperless: scan, index and archive all your physical documents"
readme = "README.md"
requires-python = ">=3.10"

View File

@@ -156,72 +156,6 @@ describe(`Additional service tests for SavedViewService`, () => {
httpTestingController.verify() // no reload
})
it('should reload after create, delete, patch and patchMany', () => {
const reloadSpy = jest.spyOn(service, 'reload')
service
.create({
name: 'New Saved View',
show_on_dashboard: true,
show_in_sidebar: true,
sort_field: 'name',
sort_reverse: true,
filter_rules: [],
})
.subscribe()
httpTestingController
.expectOne(`${environment.apiBaseUrl}${endpoint}/`)
.flush({})
expect(reloadSpy).toHaveBeenCalled()
reloadSpy.mockClear()
httpTestingController
.expectOne(
`${environment.apiBaseUrl}${endpoint}/?page=1&page_size=100000`
)
.flush({
results: saved_views,
})
service.delete(saved_views[0]).subscribe()
httpTestingController
.expectOne(`${environment.apiBaseUrl}${endpoint}/1/`)
.flush({})
expect(reloadSpy).toHaveBeenCalled()
reloadSpy.mockClear()
httpTestingController
.expectOne(
`${environment.apiBaseUrl}${endpoint}/?page=1&page_size=100000`
)
.flush({
results: saved_views,
})
service.patch(saved_views[0], true).subscribe()
httpTestingController
.expectOne(`${environment.apiBaseUrl}${endpoint}/1/`)
.flush({})
expect(reloadSpy).toHaveBeenCalled()
httpTestingController
.expectOne(
`${environment.apiBaseUrl}${endpoint}/?page=1&page_size=100000`
)
.flush({
results: saved_views,
})
service.patchMany(saved_views).subscribe()
saved_views.forEach((saved_view) => {
const req = httpTestingController.expectOne(
`${environment.apiBaseUrl}${endpoint}/${saved_view.id}/`
)
req.flush({})
})
expect(reloadSpy).toHaveBeenCalled()
httpTestingController
.expectOne(
`${environment.apiBaseUrl}${endpoint}/?page=1&page_size=100000`
)
.flush({
results: saved_views,
})
})
beforeEach(() => {
// Dont need to setup again

View File

@@ -5,7 +5,7 @@ export const environment = {
apiBaseUrl: document.baseURI + 'api/',
apiVersion: '7',
appTitle: 'Paperless-ngx',
version: '2.15.0',
version: '2.14.7',
webSocketHost: window.location.host,
webSocketProtocol: window.location.protocol == 'https:' ? 'wss:' : 'ws:',
webSocketBaseUrl: base_url.pathname + 'ws/',

View File

@@ -784,10 +784,10 @@ def run_workflows(
field=field,
document=document,
).first()
if instance and args[value_field_name] is not None:
if instance:
setattr(instance, value_field_name, args[value_field_name])
instance.save()
elif not instance:
else:
CustomFieldInstance.objects.create(
**args,
field=field,

View File

@@ -211,7 +211,7 @@ class TestBulkEditAPI(DirectoriesMixin, APITestCase):
def test_api_modify_tags_not_provided(self, m):
"""
GIVEN:
- API data to modify tags is missing remove_tags field
- API data to modify tags is missing modify_tags field
WHEN:
- API to edit tags is called
THEN:

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-11 13:33-0700\n"
"PO-Revision-Date: 2025-03-18 12:12\n"
"PO-Revision-Date: 2025-03-26 12:12\n"
"Last-Translator: \n"
"Language-Team: German\n"
"Language: de_DE\n"
@@ -1184,7 +1184,7 @@ msgstr "Ungültige Variable erkannt."
#: documents/templates/account/account_inactive.html:5
msgid "Paperless-ngx account inactive"
msgstr "Papierlos-ngx-Konto inaktiv"
msgstr "Paperless-ngx Konto inaktiv"
#: documents/templates/account/account_inactive.html:9
msgid "Account inactive."

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-11 13:33-0700\n"
"PO-Revision-Date: 2025-03-11 20:35\n"
"PO-Revision-Date: 2025-03-24 12:13\n"
"Last-Translator: \n"
"Language-Team: Norwegian\n"
"Language: no_NO\n"
@@ -55,7 +55,7 @@ msgstr ""
#: documents/filters.py:827
msgid "Custom field not found"
msgstr ""
msgstr "Egendefinert felt ble ikke funnet"
#: documents/models.py:36 documents/models.py:710
msgid "owner"
@@ -196,11 +196,11 @@ msgstr "Sjekksummen av det arkiverte dokumentet."
#: documents/models.py:205
msgid "page count"
msgstr ""
msgstr "antall sider"
#: documents/models.py:212
msgid "The number of pages of the document."
msgstr ""
msgstr "Antall sider i dokumentet."
#: documents/models.py:216 documents/models.py:630 documents/models.py:668
#: documents/models.py:739 documents/models.py:797
@@ -318,7 +318,7 @@ msgstr "ASN"
#: documents/models.py:395
msgid "Pages"
msgstr ""
msgstr "Sider"
#: documents/models.py:401
msgid "show on dashboard"
@@ -526,7 +526,7 @@ msgstr "har ikke egendefinert felt"
#: documents/models.py:489
msgid "custom fields query"
msgstr ""
msgstr "egendefinerte felt spørring"
#: documents/models.py:490
msgid "created to"
@@ -566,15 +566,15 @@ msgstr "filtrer regler"
#: documents/models.py:534
msgid "Auto Task"
msgstr ""
msgstr "Automatisk oppgave"
#: documents/models.py:535
msgid "Scheduled Task"
msgstr ""
msgstr "Planlagt oppgave"
#: documents/models.py:536
msgid "Manual Task"
msgstr ""
msgstr "Manuell oppgave"
#: documents/models.py:539
msgid "Consume File"
@@ -590,7 +590,7 @@ msgstr ""
#: documents/models.py:542
msgid "Index Optimize"
msgstr ""
msgstr "index optimalisering"
#: documents/models.py:547
msgid "Task ID"
@@ -622,7 +622,7 @@ msgstr "Oppgavenavn"
#: documents/models.py:569
msgid "Name of the task that was run"
msgstr ""
msgstr "Navn på oppgaven som ble kjørt"
#: documents/models.py:576
msgid "Task State"
@@ -666,11 +666,11 @@ msgstr "Dataene returnert av oppgaven"
#: documents/models.py:614
msgid "Task Type"
msgstr ""
msgstr "Oppgave type"
#: documents/models.py:615
msgid "The type of task that was run"
msgstr ""
msgstr "Type oppgave som ble utført"
#: documents/models.py:626
msgid "Note for the document"
@@ -722,7 +722,7 @@ msgstr "URL"
#: documents/models.py:730
msgid "Date"
msgstr ""
msgstr "Dato"
#: documents/models.py:731
msgid "Boolean"
@@ -746,7 +746,7 @@ msgstr "Dokument lenke"
#: documents/models.py:736
msgid "Select"
msgstr ""
msgstr "Velg"
#: documents/models.py:748
msgid "data type"
@@ -790,7 +790,7 @@ msgstr "Dokument oppdatert"
#: documents/models.py:932
msgid "Scheduled"
msgstr ""
msgstr "Planlagt"
#: documents/models.py:935
msgid "Consume Folder"
@@ -806,15 +806,15 @@ msgstr "Epost-henting"
#: documents/models.py:938
msgid "Web UI"
msgstr ""
msgstr "Web UI"
#: documents/models.py:943
msgid "Modified"
msgstr ""
msgstr "Endret"
#: documents/models.py:944
msgid "Custom Field"
msgstr ""
msgstr "Egendefinerte felt"
#: documents/models.py:947
msgid "Workflow Trigger Type"
@@ -898,7 +898,7 @@ msgstr ""
#: documents/models.py:1075
msgid "email subject"
msgstr ""
msgstr "e-post emne"
#: documents/models.py:1079
msgid "The subject of the email, can include some placeholders, see documentation."
@@ -906,7 +906,7 @@ msgstr ""
#: documents/models.py:1085
msgid "email body"
msgstr ""
msgstr "epost innhold"
#: documents/models.py:1088
msgid "The body (message) of the email, can include some placeholders, see documentation."

View File

@@ -549,9 +549,6 @@ def _parse_remote_user_settings() -> str:
HTTP_REMOTE_USER_HEADER_NAME = _parse_remote_user_settings()
# X-Frame options for embedded PDF display:
X_FRAME_OPTIONS = "SAMEORIGIN"
# The next 3 settings can also be set using just PAPERLESS_URL
CSRF_TRUSTED_ORIGINS = __get_list("PAPERLESS_CSRF_TRUSTED_ORIGINS")

View File

@@ -1,6 +1,6 @@
from typing import Final
__version__: Final[tuple[int, int, int]] = (2, 15, 0)
__version__: Final[tuple[int, int, int]] = (2, 14, 7)
# Version string like X.Y.Z
__full_version_str__: Final[str] = ".".join(map(str, __version__))
# Version string like X.Y