mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2026-11-05 14:29:22 +00:00
Fix: surface the database error when refreshing a document before moving its files
This commit is contained in:
1 parent
3bc1ee5826
commit
e5bb3f7dbb
2 files changed
+29
-6
No files matched your search
@@ -476,13 +476,13 @@ def update_filename_and_move_files(
|
|||||||
return
|
return
|
||||||
|
|
||||||
with FileLock(settings.MEDIA_LOCK):
|
with FileLock(settings.MEDIA_LOCK):
|
||||||
try:
|
# If this was waiting for the lock, the filename or archive_filename
|
||||||
# If this was waiting for the lock, the filename or archive_filename
|
# of this document may have been updated. This happens if multiple updates
|
||||||
# of this document may have been updated. This happens if multiple updates
|
# get queued from the UI for the same document
|
||||||
# get queued from the UI for the same document
|
# So freshen up the data before doing anything
|
||||||
# So freshen up the data before doing anything
|
instance.refresh_from_db()
|
||||||
instance.refresh_from_db()
|
|
||||||
|
|
||||||
|
try:
|
||||||
old_filename = instance.filename
|
old_filename = instance.filename
|
||||||
old_source_path = instance.source_path
|
old_source_path = instance.source_path
|
||||||
move_original = False
|
move_original = False
|
||||||
|
|||||||
@@ -2134,3 +2134,26 @@ class TestPathDateLocalization:
|
|||||||
with override_settings(FILENAME_FORMAT=filename_format):
|
with override_settings(FILENAME_FORMAT=filename_format):
|
||||||
filename = generate_filename(document)
|
filename = generate_filename(document)
|
||||||
assert filename == Path(expected_filename)
|
assert filename == Path(expected_filename)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_refresh_failure_surfaces_database_error(paperless_dirs) -> None:
|
||||||
|
"""
|
||||||
|
GIVEN:
|
||||||
|
- A document with a stored filename
|
||||||
|
WHEN:
|
||||||
|
- Saving it triggers a filename update and refreshing it from the database fails
|
||||||
|
THEN:
|
||||||
|
- The database error is raised, not an unbound variable error from the rollback
|
||||||
|
"""
|
||||||
|
document = DocumentFactory(filename="some.pdf")
|
||||||
|
|
||||||
|
with (
|
||||||
|
mock.patch.object(
|
||||||
|
Document,
|
||||||
|
"refresh_from_db",
|
||||||
|
side_effect=DatabaseError("database is locked"),
|
||||||
|
),
|
||||||
|
pytest.raises(DatabaseError, match="database is locked"),
|
||||||
|
):
|
||||||
|
document.save()
|
||||||
Reference in new issue
Block a user