2.5.0: las grabaciones bajan hasta el día de rodaje

El año y el mes salían de la fecha de cada archivo desde 2.2.0, pero dentro
del mes iba todo junto: en Camilo, 13 días de rodaje y 907 archivos en la
misma carpeta.

- Nueva variable {dia} («15- Viernes», como los meses) en las plantillas de
  grabación de los cuatro tipos de trabajo, con migración de las guardadas.
- Plan._dias_de_rodaje() cuenta los días distintos por mes y dia_de()
  devuelve "" cuando el mes tuvo un solo rodaje: la carpeta del día solo
  aparece donde hace falta. David Reyes la necesita en 1 de 8 meses,
  Danney en 36 de 57, Camilo en 12 de 26. 186 grupos, cero colisiones.
- Un archivo de cámara suelto también se archiva por su propia fecha:
  plan_archivo hacía «if mes: fm = mes» y se saltaba la regla de 2.2.0.
- «¿Dónde va a parar este archivo?» dice también el día.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Este commit está contenido en:
Labstream
2026-09-16 23:06:17 -05:00
padre 1ae7a1bb38
commit 9d4d1e9cc2
Se han modificado 6 ficheros con 122 adiciones y 25 borrados

Ver fichero

@@ -11,6 +11,7 @@ se guarda en datos/diccionario.json, donde la app va aprendiendo.
"""
import os
import re
import datetime
import unicodedata
import datetime
@@ -70,6 +71,19 @@ def detectar_mes(nombre: str):
return None, False
DIAS = ["Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"]
def nombre_dia(fecha: str) -> str:
"""«2026-05-15» -> «15- Viernes». Misma forma que los meses: número delante para que ordene, y el
nombre detrás para saber de un vistazo si aquello fue entre semana o un sábado de rodaje."""
try:
a, m, d = (int(x) for x in fecha.split("-")[:3])
return f"{d:02d}- {DIAS[datetime.date(a, m, d).weekday()]}"
except (ValueError, IndexError):
return ""
def nombre_mes(mes: int) -> str:
"""convención de la casa: «MM- Mes» (la forma más usada en las carpetas actuales)"""
return f"{mes:02d}- {MESES_TITULO[mes - 1]}"
@@ -509,15 +523,17 @@ TIPOS_CLIENTE = {
"interno": "Es material de Labstream · se ordena por tipo de recurso",
}
# Destinos relativos a la raíz del cliente. Variables: {anio} {mes} ("08- Agosto") {nombre} {sub}
# {fuente} (la cámara) {app} (el programa del proyecto) {rel} (la ruta tal cual venía).
# Destinos relativos a la raíz del cliente. Variables: {anio} {mes} ("08- Agosto") {dia} ("15- Viernes")
# {nombre} {sub} {fuente} (la cámara) {app} (el programa del proyecto) {rel} (la ruta tal cual venía).
# {dia} solo se rellena cuando en ese mes se grabó en más de un día: si todo el mes es un solo rodaje,
# la carpeta del día sobraría y desaparece sola.
# Una variable vacía se lleva consigo su segmento: «01_Proyectos/{app}/{nombre}» sin programa queda
# en «01_Proyectos/Reel botox».
PLANTILLAS = {
"contenido": {
"MARCA": "00_Marca/{sub}",
"PROYECTOS": "01_Proyectos/{app}/{nombre}",
"GRABACION": "{anio}/{mes}/00_Grabacion/{sub}",
"GRABACION": "{anio}/{mes}/00_Grabacion/{dia}/{sub}",
"PIEZA": "{anio}/{mes}/{nombre}",
"CAMPANA": "Campañas/{anio}_{nombre}",
"EXPORTADOS": "{anio}/{mes}/_Exportados/{sub}",
@@ -531,7 +547,7 @@ PLANTILLAS = {
"GUION": "{anio}/{mes}/_Guiones/{sub}",
"FOTOS": "{anio}/{mes}/_Fotos/{sub}",
"DOCUMENTOS": "_Documentos/{sub}",
"CELULAR": "{anio}/{mes}/00_Grabacion/CELULAR/{sub}",
"CELULAR": "{anio}/{mes}/00_Grabacion/{dia}/CELULAR/{sub}",
"PROXY": "_Para borrar/proxies/{rel}",
"BASURA": "_Para borrar/basura/{rel}",
"REVISAR": "_Revisar/{nombre}",
@@ -539,7 +555,7 @@ PLANTILLAS = {
"pauta": {
"MARCA": "00_Marca/{sub}",
"PROYECTOS": "01_Proyectos/{app}/{nombre}",
"GRABACION": "Material/Grabaciones/{anio}/{mes}/{sub}",
"GRABACION": "Material/Grabaciones/{anio}/{mes}/{dia}/{sub}",
"PIEZA": "Campañas/{anio}_{nombre}",
"CAMPANA": "Campañas/{anio}_{nombre}",
"EXPORTADOS": "_Exportados/{anio}/{sub}",
@@ -561,7 +577,7 @@ PLANTILLAS = {
"proyecto": {
"MARCA": "00_Marca/{sub}",
"PROYECTOS": "03_Proyecto/{app}/{nombre}",
"GRABACION": "02_Grabacion/{anio}/{mes}/{sub}",
"GRABACION": "02_Grabacion/{anio}/{mes}/{dia}/{sub}",
"PIEZA": "04_Exportados/{nombre}",
"CAMPANA": "{anio}_{nombre}",
"EXPORTADOS": "04_Exportados/{sub}",
@@ -583,7 +599,7 @@ PLANTILLAS = {
"interno": {
"MARCA": "Marca/{sub}",
"PROYECTOS": "Proyectos/{app}/{nombre}",
"GRABACION": "Grabaciones/{anio}/{mes}/{sub}",
"GRABACION": "Grabaciones/{anio}/{mes}/{dia}/{sub}",
"PIEZA": "Piezas/{anio}/{nombre}",
"CAMPANA": "Campañas/{anio}_{nombre}",
"EXPORTADOS": "Exportados/{anio}/{sub}",