mirror of
https://github.com/sissbruecker/linkding
synced 2024-11-22 19:33:05 +00:00
4280ab40c6
* Add basic HTML snapshots * Implement asset list * Add snapshot creation tests * Add deletion tests * Show file size * Remove snapshots * Create new snapshots * Switch to single-file * CSS tweak * Remove auto refresh * Show delete link when there is no file yet * Add current date to display name * Add flag for snapshot support * Add option for disabling automatic snapshots * Make snapshots sharable * Document image variants * Update README.md * Add migrations * Fix tests
33 lines
999 B
Python
33 lines
999 B
Python
import gzip
|
|
import os
|
|
import shutil
|
|
import subprocess
|
|
|
|
from django.conf import settings
|
|
|
|
|
|
class SingeFileError(Exception):
|
|
pass
|
|
|
|
|
|
def create_snapshot(url: str, filepath: str):
|
|
singlefile_path = settings.LD_SINGLEFILE_PATH
|
|
singlefile_options = settings.LD_SINGLEFILE_OPTIONS
|
|
temp_filepath = filepath + ".tmp"
|
|
|
|
try:
|
|
command = f"{singlefile_path} '{url}' {singlefile_options} {temp_filepath}"
|
|
subprocess.run(command, check=True, shell=True)
|
|
|
|
# single-file doesn't return exit codes apparently, so check if the file was created
|
|
if not os.path.exists(temp_filepath):
|
|
raise SingeFileError("Failed to create snapshot")
|
|
|
|
with open(temp_filepath, "rb") as raw_file, gzip.open(
|
|
filepath, "wb"
|
|
) as gz_file:
|
|
shutil.copyfileobj(raw_file, gz_file)
|
|
|
|
os.remove(temp_filepath)
|
|
except subprocess.CalledProcessError as error:
|
|
raise SingeFileError(f"Failed to create snapshot: {error.stderr}")
|