from typing import Protocol from ..integracoes.midia.extracao_de_metadados import ( ExtracaoDeMetadados as ExtratorDeMetadados, MetadadosDoArquivo, ) from .coordenacao import ContextoDeAnalise class ExtratorDeMetadadosProtocol(Protocol): def extrair(self, arquivo: str) -> MetadadosDoArquivo: ... class ExtracaoDeMetadados: """Enriquece cada clipe com os metadados técnicos do seu arquivo.""" nome = "extracao_de_metadados" def __init__(self, extrator: ExtratorDeMetadadosProtocol | None = None) -> None: self.extrator = extrator or ExtratorDeMetadados() def executar(self, contexto: ContextoDeAnalise) -> ContextoDeAnalise: for identificador, arquivo in contexto.arquivos.items(): if arquivo.offline: continue try: metadados = self.extrator.extrair(str(arquivo.caminho)) contexto.metadados_dos_arquivos[identificador] = metadados for faixa in contexto.timeline.faixas if contexto.timeline else []: for clipe in faixa.clipes: if clipe.identificador == identificador: clipe.metadados["arquivo"] = metadados break except Exception as exc: # Uma mídia inválida não deve descartar os resultados dos demais clipes. contexto.erros.append(f"metadados_indisponiveis: {arquivo.caminho}: {exc}") return contexto __all__ = ["ExtracaoDeMetadados", "MetadadosDoArquivo"]