""" Contains AT audit related sheets. """ from abc import ABC from ...... import logger from ......constants import AuditTypes from ......constants import FlagResolutions as Resolutions from ......constants import Flags from ......constants import RowReportCols as Cols from ......constants import RowReportColsHuman as ColsHuman from ......constants import RowReportTabs as Tabs from ......constants import RowReportTexts as Texts from ......typings import Rows from .base import BaseSheet, Column from .sr import AudioAudit, AudioDeletedCarvedOut logger = logger.new_logger(__name__) YES = Texts.YES NO = Texts.NO class BaseSheetAT(BaseSheet, ABC): filterAuditTypes = {AuditTypes.AT} def _deduplicate_rows_by_isrc( self, rows: Rows, skip_if_ownership_conflict: bool = False ) -> Rows: """Override the method to deduplicate rows by ISRC, which is NOT applicable for the Art Track audit. Rows are returned as is. """ return rows class ArtTrackAudit(BaseSheetAT, AudioAudit): """Sheet for the Art Track audit. The logic leverages the AudioAudit sheet, which is then partially overridden to accommodate the specific requirements of the Art Track audit. """ title = Tabs.ART_TRACK_AUDIT columns = [ *BaseSheet.columns, Column( key=Cols.IS_DELIVERED_TO_YOUTUBE, label=ColsHuman.IS_DELIVERED_TO_YOUTUBE, ), Column( key=Cols.IS_LINKED_TO_CORRECT_TOPIC_CHANNEL, label=ColsHuman.IS_LINKED_TO_CORRECT_TOPIC_CHANNEL, ), Column( key=Cols.IS_OWNERSHIP_CORRECT, label=ColsHuman.IS_OWNERSHIP_CORRECT, ), Column( key=Cols.ACTIONS_TAKEN_BY_ORCHARD, label=ColsHuman.ACTIONS_TAKEN_BY_ORCHARD, ), Column( # Placeholder for future use key=Cols.ISSUE, label=ColsHuman.ISSUE, ), Column( # Placeholder for future use key=Cols.ADDITIONAL_NOTES, label=ColsHuman.ADDITIONAL_NOTES, ), ] # These are flag columns that will be set to YES or NO based on the audit flags. flag_columns: list[Cols] = [ Cols.IS_DELIVERED_TO_YOUTUBE, Cols.IS_LINKED_TO_CORRECT_TOPIC_CHANNEL, Cols.IS_OWNERSHIP_CORRECT, ] _all_flag_columns_no: dict[Cols, str] = {col: NO for col in flag_columns} _no_topic_channel = { Resolutions.LINK_ART_TRACK_TO_CORRECT_TOPIC_CHANNEL: { None: { Cols.IS_LINKED_TO_CORRECT_TOPIC_CHANNEL: NO, Cols.ACTIONS_TAKEN_BY_ORCHARD: Texts.ART_TRACK_LINKED_TO_CORRECT_TOPIC_CHANNEL, } }, Resolutions.DELIVER_ART_TRACK: { None: _all_flag_columns_no | {Cols.ACTIONS_TAKEN_BY_ORCHARD: Texts.ART_TRACK_DELIVERED} }, Resolutions.IGNORE: {Resolutions.ART_TRACK_LINKED_TO_CORRECT_TOPIC_CHANNEL: {}}, } _ownership_incomplete = { Resolutions.UPDATE_OWNERSHIP: { None: { Cols.IS_OWNERSHIP_CORRECT: NO, Cols.ACTIONS_TAKEN_BY_ORCHARD: Texts.OWNERSHIP_UPDATED, }, }, Resolutions.IGNORE: { Resolutions.TERRITORY_RIGHTS_CORRECT: {}, }, } audit_columns = { Flags.NOT_ACTIVE_RELEASE: { Resolutions.DELIVER_ART_TRACK: { None: _all_flag_columns_no | {Cols.ACTIONS_TAKEN_BY_ORCHARD: Texts.ART_TRACK_DELIVERED} }, }, Flags.NO_TOPIC_CHANNEL: _no_topic_channel, Flags.BAD_TOPIC_CHANNEL: _no_topic_channel, Flags.TERRITORIES_MISSING: _ownership_incomplete, Flags.OWNERSHIP_INCOMPLETE: _ownership_incomplete, } class ArtTrackDeletedCarvedOut(BaseSheetAT, AudioDeletedCarvedOut): """Sheet for the Art Track audit deleted and carved out releases. The logic leverages the AudioDeletedCarvedOut sheet, which is then partially overridden to accommodate the specific requirements of the Art Track audit. """ title = Tabs.ART_TRACK_DELETED_CARVED_OUT