Explorer
/tmp/patch_carousel_ui.py
← Zurück ↓ Download
from pathlib import Path
p=Path('/opt/struktur/social-media-agent/templates/publication_packages.html'); s=p.read_text()
needle='''{% if p.media_brief %}<details class="media-brief"><summary>Media Brief</summary><div class="pp-meta"><strong>Hauptmotiv:</strong> {{ p.media_brief.main_motif }}</div><div class="pp-meta"><strong>Technische Handlung:</strong> {{ p.media_brief.technical_action }}</div><div class="pp-meta"><strong>Ausschlüsse:</strong> {{ p.media_brief.avoid_technical_errors|join(', ') }}</div><div class="pp-meta"><strong>Referenzasset:</strong> {% if p.media_brief.reference_assets %}{{ p.media_brief.reference_assets[0].path }}{% else %}keines{% endif %}</div><div class="pp-meta"><strong>Feedbackregeln:</strong> {{ p.media_brief.feedback_rules|length }} passende Regeln</div></details>{% endif %}'''
add='''\n      {% if p.carousel %}<details class="carousel-box"><summary>Media Type: Carousel ({{ p.carousel.slide_count }} Slides)</summary><div class="pp-meta"><strong>Carousel-ID:</strong> {{ p.carousel.carousel_id }} · Human-Auswahl offen</div><div class="variant-grid">{% for slide in p.carousel.slides %}<div class="variant-card {% if slide.qa_status == 'passed' %}qa-passed{% elif slide.qa_status == 'failed' %}qa-failed{% endif %}"><a href="/bereit/{{ p.package_id }}/carousel/{{ p.carousel.carousel_id }}/slide/{{ slide.slide_number }}" target="_blank" rel="noopener"><img src="/bereit/{{ p.package_id }}/carousel/{{ p.carousel.carousel_id }}/slide/{{ slide.slide_number }}" alt="{{ p.alt_text }} – Slide {{ slide.slide_number }}"></a><div class="variant-label">Slide {{ slide.slide_number }}</div><div class="variant-status">QA: {% if slide.qa_status == 'passed' %}bestanden{% elif slide.qa_status == 'failed' %}abgelehnt{% else %}unklar{% endif %}</div><div class="variant-status">{{ slide.purpose }}</div>{% if slide.qa_failure_reasons %}<div class="variant-reason">{{ slide.qa_failure_reasons[:180] }}</div>{% endif %}{% if slide.human_rating %}<div class="variant-status">Carlo: {{ slide.human_rating }} — {{ slide.human_reason_verbatim[:120] }}</div>{% endif %}<form class="variant-feedback" method="post" action="/bereit/{{ p.package_id }}/carousel/{{ p.carousel.carousel_id }}/slide/{{ slide.slide_id }}/feedback"><input name="reason" placeholder="Begründung" required><div class="variant-actions"><button name="rating" value="good" type="submit">GUT</button><button name="rating" value="mediocre" type="submit">MITTELMÄSSIG</button><button name="rating" value="bad" type="submit">SCHLECHT</button></div></form><div class="variant-actions"><a href="/bereit/{{ p.package_id }}/carousel/{{ p.carousel.carousel_id }}/slide/{{ slide.slide_number }}/download">Download</a></div></div>{% endfor %}</div><div class="variant-actions"><a href="/bereit/{{ p.package_id }}/carousel/{{ p.carousel.carousel_id }}/download">Alle Slides herunterladen</a><form method="post" action="/bereit/{{ p.package_id }}/carousel/{{ p.carousel.carousel_id }}/feedback"><input name="reason" placeholder="Carousel-Begründung" required><button name="rating" value="good" type="submit">CAROUSEL GUT</button><button name="rating" value="mediocre" type="submit">CAROUSEL MITTELMÄSSIG</button><button name="rating" value="bad" type="submit">CAROUSEL SCHLECHT</button></form><form method="post" action="/bereit/{{ p.package_id }}/carousel/{{ p.carousel.carousel_id }}/auswaehlen"><button type="submit">ALS CAROUSEL VERWENDEN</button></form></div></details>{% endif %}'''
assert s.count(needle)==1; p.write_text(s.replace(needle,needle+add)); print('carousel UI block added')