diff --git a/osxphotos/phototemplate.py b/osxphotos/phototemplate.py index 8fe7793be..5e2798499 100644 --- a/osxphotos/phototemplate.py +++ b/osxphotos/phototemplate.py @@ -621,6 +621,8 @@ def _render_template_string( raise SyntaxError( "var must have a subfield and value in form {var:subfield,value}" ) + # strip empty string from default, #1318, #512 + default = [d for d in default if d != ""] self.variables[subfield] = default vals = [] else: @@ -740,7 +742,7 @@ def comparison_test(test_function): pre = ts.pre or "" post = ts.post or "" - rendered = [pre + str(val) + post for val in vals] + rendered = [pre + str(val) + post for val in vals] if vals else [pre + post] results_new = [] for ren in rendered: for res in results: diff --git a/tests/test_template.py b/tests/test_template.py index f1737b8f9..2abf84801 100644 --- a/tests/test_template.py +++ b/tests/test_template.py @@ -1406,3 +1406,24 @@ def test_float_concatenation(photosdb): rendered, _ = photo.render_template("{,+photo.location}") assert len(rendered) == 1 assert rendered[0] == f"{photo.location[0]},{photo.location[1]}" + + +def test_var_eval(photosdb): + """Test {%varname?True,False} #1318""" + photo = [p for p in photosdb.photos() if not p.title][0] + template = "{var:test,{title,}}{%test?True,False}" + rendered, _ = photo.render_template(template) + assert rendered[0] == "False" + + photo = [p for p in photosdb.photos() if p.title][0] + template = "{var:test,{title,}}{%test?True,False}" + rendered, _ = photo.render_template(template) + assert rendered[0] == "True" + + +def test_null_template(photosdb): + """Test that template with null value renders correctly, #1319""" + photo = [p for p in photosdb.photos() if not p.title][0] + template = "{var:test,{title,}}Foo-{%test,}-Bar" + rendered, _ = photo.render_template(template) + assert rendered[0] == "Foo--Bar"