44
55# built-in
66import argparse
7+ from copy import deepcopy
8+ from logging import getLogger
79from pathlib import Path
810from sys import path
911from typing import Iterable , cast
1012
1113# third-party
12- from vcorelib .dict import GenericStrDict
14+ from vcorelib .dict import GenericStrDict , merge_dicts
1315from vcorelib .dict .config import Config
1416from vcorelib .io import DEFAULT_INCLUDES_KEY
1517
2022from svgen .generation .images import generate_images
2123from svgen .script import invoke_script
2224
25+ LOG = getLogger (__name__ )
26+
2327
2428def generate (
2529 config : Config ,
@@ -48,8 +52,7 @@ def generate(
4852 # Write the composed document to the output file.
4953 with output .open ("w" , encoding = "utf-8" ) as output_fd :
5054 doc .encode (output_fd )
51-
52- print (f"Generated '{ output } '." )
55+ LOG .info ("Wrote '%s'." , output )
5356
5457 # Generate image outputs.
5558 if images :
@@ -82,7 +85,7 @@ def entry(args: argparse.Namespace) -> int:
8285 initialize_config (config , args .height , args .width )
8386
8487 # Save the initial configuration data.
85- original = config .data . copy ( )
88+ original = deepcopy ( config .data )
8689
8790 scripts = set (x .resolve () for x in args .scripts )
8891
@@ -92,8 +95,12 @@ def entry(args: argparse.Namespace) -> int:
9295 # Generate any document variants.
9396 for idx , variant in enumerate (config .get ("variants" , [])):
9497 # Load the variant's data.
95- config = Config (original .copy ())
96- config .update (variant .get ("data" , {}))
98+ config = Config (
99+ merge_dicts (
100+ [deepcopy (original ), variant .get ("data" , {})],
101+ expect_overwrite = True ,
102+ )
103+ )
97104 initialize_config (config , args .height , args .width )
98105
99106 # Set the output name for this variant.
0 commit comments