- carregamento automático da análise do Scanner ao abrir a aba Refinar - simplificada a aba Editar vídeo para exibir análises disponíveis sem carregamento manual - movida a visualização do tipo de vídeo para a guia Projeto com leitura do banco Resumo: - 10 arquivos alterados - 2 novos - 8 modificados - 0 removidos 8 files changed, 114 insertions(+), 11 deletions(-) Arquivos: - .jhonny/analises.db - code/cep-plugin/abas/projeto/projeto.js - code/cep-plugin/index.html - code/cep-plugin/main.js - code/engine/integracoes/audio/__init__.py - code/engine/integracoes/audio/modelos_de_analise_musical.py - code/engine/integracoes/audio/provider_de_analise_musical_essentia.py - code/engine/testes/test_analisador_de_musica_essentia.py - code/engine/consultar_edicao_concluida.py - code/engine/integracoes/audio/classificador_de_musica_essentia.py
57 lines
2.0 KiB
Python
57 lines
2.0 KiB
Python
"""Consulta a configuração editorial concluída mais recente de um vídeo."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import json
|
|
from pathlib import Path
|
|
import sqlite3
|
|
import sys
|
|
|
|
CAMINHO_DO_CODIGO = Path(__file__).resolve().parent.parent
|
|
if str(CAMINHO_DO_CODIGO) not in sys.path:
|
|
sys.path.insert(0, str(CAMINHO_DO_CODIGO))
|
|
|
|
from engine.persistencia.conexao import abrir_banco
|
|
|
|
|
|
def consultar(caminho_do_banco: Path, video_id: str) -> dict[str, object] | None:
|
|
"""Retorna a edição mais recente sem alterar o banco."""
|
|
conexao = abrir_banco(caminho_do_banco)
|
|
try:
|
|
linha = conexao.execute(
|
|
"""SELECT id, video_id, sequencia, tipo_de_video, configuracao, concluida_em
|
|
FROM edicoes_de_video WHERE video_id = ?
|
|
ORDER BY concluida_em DESC, id DESC LIMIT 1""", (video_id,),
|
|
).fetchone()
|
|
if linha is None:
|
|
return None
|
|
return {
|
|
"id": linha["id"], "video_id": linha["video_id"],
|
|
"sequencia": linha["sequencia"], "tipo_de_video": linha["tipo_de_video"],
|
|
"configuracao": json.loads(linha["configuracao"]),
|
|
"concluida_em": linha["concluida_em"],
|
|
}
|
|
finally:
|
|
conexao.close()
|
|
|
|
|
|
def principal() -> None:
|
|
"""Executa a consulta pela linha de comando."""
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("video_id")
|
|
parser.add_argument("--banco", type=Path, default=Path(".jhonny/analises.db"))
|
|
opcoes = parser.parse_args()
|
|
try:
|
|
edicao = consultar(opcoes.banco, opcoes.video_id)
|
|
if edicao is None:
|
|
raise ValueError("Nenhuma edição concluída encontrada para este vídeo.")
|
|
print(json.dumps({"ok": True, "edicao": edicao}, ensure_ascii=False))
|
|
except (OSError, ValueError, sqlite3.Error, json.JSONDecodeError) as erro:
|
|
print(json.dumps({"ok": False, "erro": str(erro)}, ensure_ascii=False))
|
|
raise SystemExit(1) from erro
|
|
|
|
|
|
if __name__ == "__main__":
|
|
principal()
|