"""HTML report generation for missing albums""" from html import escape from typing import Dict, List def generate_html_report(albums_to_add: List[Dict], albums_to_update: List[Dict]): """Generate an HTML report with clickable submission links""" html_content = """ MusicBrainz Albums - Add & Update

🎵 MusicBrainz Albums - Add & Update

Albums to ADD: {add_count} | Albums to UPDATE: {update_count}
{artist_buttons}
""" album_html = """
{title}
by {artist}
{mb_info} {issues_info}
""" def format_album(album: Dict, is_update: bool = False) -> str: submission_links = album.get("submission_links", {}) mb_info = "" issues_info = "" if is_update: mb_url = album.get("mb_url", "") if mb_url: mb_info = f'' issues = album.get("album_issues", []) if issues: issues_info = f'
Issues: {", ".join(issues)}
' title = album.get("title", "Unknown Title") artist = album.get("artist_name", "Unknown Artist") artist_escaped = escape(artist) atisket_link = submission_links.get("atisket_link", "#") harmony_link = submission_links.get("harmony_link", "#") deezer_url = submission_links.get("deezer_url", "#") return album_html.format( title=escape(title), artist=artist, artist_escaped=artist_escaped, mb_info=mb_info, issues_info=issues_info, atisket_link=atisket_link, harmony_link=harmony_link, deezer_url=deezer_url, ) all_albums = albums_to_add + albums_to_update unique_artists = sorted( set(album.get("artist_name", "Unknown") for album in all_albums) ) artist_buttons_html = "".join( f'' for artist in unique_artists ) albums_html = "" if albums_to_add: albums_html += '
' albums_html += "

📥 Albums to ADD (Not in MusicBrainz)

" formatted_add = map(lambda album: format_album(album, False), albums_to_add) albums_html += "".join(formatted_add) albums_html += "
" if albums_to_update: albums_html += '
' albums_html += "

🔄 Albums to UPDATE (Need Linking/Updates)

" formatted_update = map( lambda album: format_album(album, True), albums_to_update ) albums_html += "".join(formatted_update) albums_html += "
" add_count = len(albums_to_add) update_count = len(albums_to_update) html_header = html_content.format( add_count=add_count, update_count=update_count, artist_buttons=artist_buttons_html, ) html_footer = "\n\n\n" html_content = html_header + albums_html + html_footer with open("missing_albums.html", "w", encoding="utf-8") as f: f.write(html_content) print(f"📄 HTML report saved to missing_albums.html")