+33
-21
@@ -2,12 +2,14 @@ from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import shutil
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
from generator.arrange.generate import generate_performance_scores
|
||||
from generator.practice.generate import generate_practice_scores
|
||||
from generator.score import count_json_files, validate_generated_tree
|
||||
from generator.summary import validate_expected_performance_summary, validate_practice_variants
|
||||
from generator.musicxml import load_musicxml
|
||||
|
||||
RUNTIME_FONT_FILES = ("Petaluma.otf", "PetalumaScript.otf", "OFL.txt")
|
||||
|
||||
@@ -30,33 +32,43 @@ def parse_args() -> argparse.Namespace:
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def main() -> int:
|
||||
args = parse_args()
|
||||
def generate_assets(args: argparse.Namespace) -> None:
|
||||
data_dir = args.data_dir.resolve()
|
||||
output_dir = args.output_dir.resolve()
|
||||
static_assets_dir = args.static_assets_dir.resolve()
|
||||
|
||||
if args.clean and output_dir.exists():
|
||||
shutil.rmtree(output_dir)
|
||||
output_dir.mkdir(parents=True, exist_ok=True)
|
||||
for source in sorted(data_dir.rglob('*.musicxml')):
|
||||
load_musicxml(source)
|
||||
|
||||
copy_runtime_fonts(static_assets_dir, output_dir)
|
||||
output_dir.parent.mkdir(parents=True, exist_ok=True)
|
||||
with tempfile.TemporaryDirectory(prefix='.vamp-assets-', dir=output_dir.parent) as temporary:
|
||||
staged = Path(temporary) / 'assets'
|
||||
if not args.clean and output_dir.exists():
|
||||
shutil.copytree(output_dir, staged)
|
||||
staged.mkdir(parents=True, exist_ok=True)
|
||||
copy_runtime_fonts(static_assets_dir, staged)
|
||||
performance_count = generate_performance_scores(data_dir / 'songs', staged / 'songs')
|
||||
practice_count = generate_practice_scores(data_dir / 'practice', staged / 'practice')
|
||||
validate_generated_tree(staged)
|
||||
if args.check:
|
||||
validate_expected_performance_summary(data_dir / 'expected' / 'performance_summary.json', staged / 'songs')
|
||||
validate_practice_variants(staged / 'practice')
|
||||
backup = Path(temporary) / 'previous'
|
||||
if output_dir.exists():
|
||||
output_dir.rename(backup)
|
||||
try:
|
||||
staged.rename(output_dir)
|
||||
except OSError:
|
||||
if backup.exists():
|
||||
backup.rename(output_dir)
|
||||
raise
|
||||
print(f'Generated Product Vamp assets: {performance_count} performance scores, '
|
||||
f'{practice_count} practice score variants, {count_json_files(output_dir)} total JSON files.')
|
||||
if args.check:
|
||||
print('Generator check passed.')
|
||||
|
||||
performance_count = generate_performance_scores(data_dir / "songs", output_dir / "songs")
|
||||
practice_count = generate_practice_scores(data_dir / "practice", output_dir / "practice")
|
||||
|
||||
validate_generated_tree(output_dir)
|
||||
print(
|
||||
"Generated Product Vamp assets: "
|
||||
f"{performance_count} performance scores, "
|
||||
f"{practice_count} practice score variants, "
|
||||
f"{count_json_files(output_dir)} total JSON files."
|
||||
)
|
||||
|
||||
if args.check:
|
||||
validate_expected_performance_summary(data_dir / "expected" / "performance_summary.json", output_dir / "songs")
|
||||
validate_practice_variants(output_dir / "practice")
|
||||
print("Generator check passed.")
|
||||
def main() -> int:
|
||||
generate_assets(parse_args())
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user