Fase 0 do roteiro de reestruturação (Engine/docs/10_MAPA_REESTRUTURACAO.md): move code/WHISPERX (2,6 GB de backups órfãos, sem uso ativo, sem .gitmodules) para ~/Archives/G-ART-WHISPERX-backup fora do workspace git; traz admin/ para o gate de lint de run_after_fix.sh; corrige fcpxml/writer/adjustment.py, que gerava um wrapper <adjustment> inexistente no DTD 1.13 (filtros agora vão direto no <clip>, na ordem exigida), com teste de regressão novo. Achado à parte: .gitignore tinha uma regra solta "models/" (pensada só para o cache do Whisper em code/models/) que também escondia do git todo o pacote fcpxml/models/ — nunca commitado, sem proteção nenhuma. Corrigida para /code/models/, ancorada na raiz. Docs atualizados no mesmo commit (02_MODULES, 09_MANUTENCAO, 10_MAPA_REESTRUTURACAO, 05_EXPERIENCIAS #34 e #36), conforme a regra do CLAUDE.md. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
61 lines
2.1 KiB
Python
61 lines
2.1 KiB
Python
"""ClipDeAjuste deve gerar filtros como filhos diretos do <clip>.
|
|
|
|
O DTD 1.13 não define nenhum elemento <adjustment> — filter-video/
|
|
filter-audio vêm direto no <clip>, depois de audio-channel-source* e antes
|
|
de metadata?. Ver Engine/docs/09_MANUTENCAO.md §2.6 e 05_EXPERIENCIAS.md.
|
|
"""
|
|
|
|
import xml.etree.ElementTree as ET
|
|
|
|
from fcpxml.models.timeline import EfeitoAjuste, ParametroEfeito
|
|
from fcpxml.models.timing import TimeValue
|
|
from fcpxml.writer.adjustment import ClipDeAjuste
|
|
|
|
|
|
def test_criar_nao_usa_wrapper_adjustment():
|
|
resources = ET.Element("resources")
|
|
efeito = EfeitoAjuste(
|
|
nome="Color Curves",
|
|
uid="FFFF0000-0000-0000-0000-000000000000",
|
|
tipo="video",
|
|
parametros=[ParametroEfeito(nome="Amount", valor="0.5", chave=".../9999")],
|
|
)
|
|
clip = ClipDeAjuste(
|
|
nome="Ajuste de cor", duracao=TimeValue(300, 30), efeitos=[efeito]
|
|
).criar(resources)
|
|
|
|
assert clip.find("adjustment") is None
|
|
filtro = clip.find("filter-video")
|
|
assert filtro is not None
|
|
assert filtro.get("name") == "Color Curves"
|
|
assert filtro in list(clip)
|
|
|
|
|
|
def test_filter_video_vem_antes_de_filter_audio():
|
|
resources = ET.Element("resources")
|
|
efeito_audio = EfeitoAjuste(
|
|
nome="Gain", uid="AAAA0000-0000-0000-0000-000000000000", tipo="audio"
|
|
)
|
|
efeito_video = EfeitoAjuste(
|
|
nome="Blur", uid="BBBB0000-0000-0000-0000-000000000000", tipo="video"
|
|
)
|
|
clip = ClipDeAjuste(
|
|
nome="Ajuste misto",
|
|
duracao=TimeValue(300, 30),
|
|
efeitos=[efeito_audio, efeito_video],
|
|
).criar(resources)
|
|
|
|
tags = [child.tag for child in clip]
|
|
assert tags == ["filter-video", "filter-audio"]
|
|
|
|
|
|
def test_criar_registra_recurso_effect_uma_vez_por_uid():
|
|
resources = ET.Element("resources")
|
|
efeito = EfeitoAjuste(
|
|
nome="Color Curves", uid="FFFF0000-0000-0000-0000-000000000000", tipo="video"
|
|
)
|
|
ClipDeAjuste(nome="A", duracao=TimeValue(300, 30), efeitos=[efeito]).criar(resources)
|
|
ClipDeAjuste(nome="B", duracao=TimeValue(300, 30), efeitos=[efeito]).criar(resources)
|
|
|
|
assert len(resources.findall("effect")) == 1
|