diff --git a/sigal/gallery.py b/sigal/gallery.py index e4126cd..ad61bcd 100644 --- a/sigal/gallery.py +++ b/sigal/gallery.py @@ -293,7 +293,8 @@ def process_image(filepath, outpath, settings): options = {} if settings['keep_orig']: - shutil.copy(filepath, join(outpath, settings['orig_dir'], filename)) + copy(filepath, join(outpath, settings['orig_dir'], filename), + symlink=settings['orig_link']) image.generate_image(filepath, outname, settings, options=options) @@ -312,7 +313,8 @@ def process_video(filepath, outpath, settings): outname = join(outpath, base + '.webm') if settings['keep_orig']: - shutil.copy(filepath, join(outpath, settings['orig_dir'], filename)) + copy(filepath, join(outpath, settings['orig_dir'], filename), + symlink=settings['orig_link']) # TODO: Add specific video size settings video.generate_video(filepath, outname, settings['img_size'], @@ -325,6 +327,12 @@ def process_video(filepath, outpath, settings): fit=settings['thumb_fit'], options=settings['jpg_options']) +def copy(src, dst, symlink=False): + """Copy or symlink the file.""" + func = os.symlink if symlink else shutil.copy2 + func(src, dst) + + def get_metadata(path): """ Get album metadata from DESCRIPTION_FILE: diff --git a/sigal/settings.py b/sigal/settings.py index b3af3e2..7e0eea2 100644 --- a/sigal/settings.py +++ b/sigal/settings.py @@ -39,6 +39,7 @@ _DEFAULT_CONFIG = { 'thumb_fit': True, 'keep_orig': False, 'orig_dir': 'original', + 'orig_link': False, 'jpg_options': {'quality': 85, 'optimize': True, 'progressive': True}, 'webm_options': {'crf': '10', 'bitrate': '1.6M', 'qmin': '4', 'qmax': '63'}, diff --git a/sigal/templates/sigal.conf.py b/sigal/templates/sigal.conf.py index 090ed4c..ef06ec0 100644 --- a/sigal/templates/sigal.conf.py +++ b/sigal/templates/sigal.conf.py @@ -58,6 +58,9 @@ thumb_size = (280, 210) # Subdirectory for original images # orig_dir = 'original' +# Use symbolic links instead of copying the original images +# orig_link = False + # Jpeg options # jpg_options = {'quality': 85, # 'optimize': True, diff --git a/tests/test_gallery.py b/tests/test_gallery.py index 53f2b79..3d1e85a 100644 --- a/tests/test_gallery.py +++ b/tests/test_gallery.py @@ -3,7 +3,7 @@ import os import pytest -from sigal.gallery import Gallery, PathsDb, get_metadata +from sigal.gallery import Gallery, PathsDb, get_metadata, copy from sigal.settings import read_settings CURRENT_DIR = os.path.dirname(__file__) @@ -126,3 +126,17 @@ def test_gallery(tmpdir): html = f.read() assert 'Sigal test gallery' in html + + +def test_copy(tmpdir): + src = os.path.join(SAMPLE_DIR, 'pictures', 'dir2', + REF['dir2']['medias'][0]) + dst = str(tmpdir.join(REF['dir2']['medias'][0])) + copy(src, dst) + assert os.path.isfile(dst) + + src = os.path.join(SAMPLE_DIR, 'pictures', 'dir2', + REF['dir2']['medias'][1]) + dst = str(tmpdir.join(REF['dir2']['medias'][1])) + copy(src, dst, symlink=True) + assert os.path.islink(dst)