48 lines
2.1 KiB
Python
48 lines
2.1 KiB
Python
from __future__ import annotations
|
|
from pathlib import Path
|
|
import argparse
|
|
from .provenance import load_sources, write_provenance_manifest
|
|
|
|
def render_attribution_markdown(sources_path: str | Path) -> str:
|
|
inventory = load_sources(sources_path)
|
|
lines = ["# Attribution", ""]
|
|
for src in inventory.sources:
|
|
lines.append(f"## {src.title}")
|
|
lines.append(f"- Source ID: {src.source_id}")
|
|
lines.append(f"- URL: {src.url}")
|
|
if src.creator:
|
|
lines.append(f"- Creator: {src.creator}")
|
|
if src.publisher:
|
|
lines.append(f"- Publisher: {src.publisher}")
|
|
if src.license_id:
|
|
lines.append(f"- License: {src.license_id}")
|
|
if src.license_url:
|
|
lines.append(f"- License URL: {src.license_url}")
|
|
lines.append(f"- Adapted: {'yes' if src.adapted else 'no'}")
|
|
if src.adaptation_notes:
|
|
lines.append(f"- Adaptation notes: {src.adaptation_notes}")
|
|
if src.attribution_text:
|
|
lines.append(f"- Attribution text: {src.attribution_text}")
|
|
if src.excluded_from_upstream_license:
|
|
lines.append(f"- Excluded from upstream course license: yes")
|
|
if src.exclusion_notes:
|
|
lines.append(f"- Exclusion notes: {src.exclusion_notes}")
|
|
lines.append("")
|
|
return "\n".join(lines)
|
|
|
|
def build_artifacts(sources_path: str | Path, attribution_out: str | Path, manifest_out: str | Path) -> None:
|
|
Path(attribution_out).write_text(render_attribution_markdown(sources_path), encoding="utf-8")
|
|
inventory = load_sources(sources_path)
|
|
write_provenance_manifest(inventory, manifest_out)
|
|
|
|
def main() -> None:
|
|
parser = argparse.ArgumentParser(description="Build Didactopus attribution artifacts from sources.yaml")
|
|
parser.add_argument("sources")
|
|
parser.add_argument("--attribution-out", default="ATTRIBUTION.md")
|
|
parser.add_argument("--manifest-out", default="provenance_manifest.json")
|
|
args = parser.parse_args()
|
|
build_artifacts(args.sources, args.attribution_out, args.manifest_out)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|