mirror of
https://github.com/sissbruecker/linkding.git
synced 2025-09-22 00:49:34 +02:00
Add option for customizing single-file timeout (#688)
* Promoting singlefile timeout to env variable * Promoting singlefile timeout to env variable * add tests --------- Co-authored-by: Sascha Ißbrücker <sascha.issbruecker@gmail.com>
This commit is contained in:
@@ -24,7 +24,7 @@ def create_snapshot(url: str, filepath: str):
|
|||||||
try:
|
try:
|
||||||
# Use start_new_session=True to create a new process group
|
# Use start_new_session=True to create a new process group
|
||||||
process = subprocess.Popen(args, start_new_session=True)
|
process = subprocess.Popen(args, start_new_session=True)
|
||||||
process.wait(timeout=60)
|
process.wait(timeout=settings.LD_SINGLEFILE_TIMEOUT_SEC)
|
||||||
|
|
||||||
# check if the file was created
|
# check if the file was created
|
||||||
if not os.path.exists(temp_filepath):
|
if not os.path.exists(temp_filepath):
|
||||||
|
@@ -3,7 +3,7 @@ import os
|
|||||||
import subprocess
|
import subprocess
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase, override_settings
|
||||||
|
|
||||||
from bookmarks.services import singlefile
|
from bookmarks.services import singlefile
|
||||||
|
|
||||||
@@ -50,3 +50,24 @@ class SingleFileServiceTestCase(TestCase):
|
|||||||
with mock.patch("subprocess.Popen"):
|
with mock.patch("subprocess.Popen"):
|
||||||
with self.assertRaises(singlefile.SingeFileError):
|
with self.assertRaises(singlefile.SingeFileError):
|
||||||
singlefile.create_snapshot("http://example.com", self.html_filepath)
|
singlefile.create_snapshot("http://example.com", self.html_filepath)
|
||||||
|
|
||||||
|
def test_create_snapshot_default_timeout_setting(self):
|
||||||
|
mock_process = mock.Mock()
|
||||||
|
mock_process.wait.return_value = 0
|
||||||
|
self.create_test_file()
|
||||||
|
|
||||||
|
with mock.patch("subprocess.Popen", return_value=mock_process):
|
||||||
|
singlefile.create_snapshot("http://example.com", self.html_filepath)
|
||||||
|
|
||||||
|
mock_process.wait.assert_called_with(timeout=60)
|
||||||
|
|
||||||
|
@override_settings(LD_SINGLEFILE_TIMEOUT_SEC=120)
|
||||||
|
def test_create_snapshot_custom_timeout_setting(self):
|
||||||
|
mock_process = mock.Mock()
|
||||||
|
mock_process.wait.return_value = 0
|
||||||
|
self.create_test_file()
|
||||||
|
|
||||||
|
with mock.patch("subprocess.Popen", return_value=mock_process):
|
||||||
|
singlefile.create_snapshot("http://example.com", self.html_filepath)
|
||||||
|
|
||||||
|
mock_process.wait.assert_called_with(timeout=120)
|
||||||
|
@@ -246,3 +246,10 @@ See the default URL for how to insert the placeholder to the favicon provider UR
|
|||||||
|
|
||||||
Alternative favicon providers:
|
Alternative favicon providers:
|
||||||
- DuckDuckGo: `https://icons.duckduckgo.com/ip3/{domain}.ico`
|
- DuckDuckGo: `https://icons.duckduckgo.com/ip3/{domain}.ico`
|
||||||
|
|
||||||
|
|
||||||
|
### `LD_SINGLEFILE_TIMEOUT_SEC`
|
||||||
|
|
||||||
|
Values: `Float` | Default = 60.0
|
||||||
|
|
||||||
|
When creating archive snapshots, control the timeout for how long to wait for `single-file` to complete, in `seconds`. Defaults to 60 seconds; on lower-powered hardware you may need to increase this value.
|
@@ -295,6 +295,7 @@ LD_ENABLE_SNAPSHOTS = os.getenv("LD_ENABLE_SNAPSHOTS", False) in (
|
|||||||
)
|
)
|
||||||
LD_SINGLEFILE_PATH = os.getenv("LD_SINGLEFILE_PATH", "single-file")
|
LD_SINGLEFILE_PATH = os.getenv("LD_SINGLEFILE_PATH", "single-file")
|
||||||
LD_SINGLEFILE_OPTIONS = os.getenv("LD_SINGLEFILE_OPTIONS", "")
|
LD_SINGLEFILE_OPTIONS = os.getenv("LD_SINGLEFILE_OPTIONS", "")
|
||||||
|
LD_SINGLEFILE_TIMEOUT_SEC = float(os.getenv("LD_SINGLEFILE_TIMEOUT_SEC", 60))
|
||||||
|
|
||||||
# Monolith isn't used at the moment, as the local snapshot implementation
|
# Monolith isn't used at the moment, as the local snapshot implementation
|
||||||
# switched to single-file after the prototype. Keeping this around in case
|
# switched to single-file after the prototype. Keeping this around in case
|
||||||
|
Reference in New Issue
Block a user