Compare commits

...

7 Commits

Author SHA1 Message Date
Adriano 1a5e98f072 vendor visionsuite adf7a26: ricette robuste ai PermissionError di Windows (#69)
Da dbd1a55 a adf7a26 (visionsuite#279): vs-task server/recipes.py ritenta lettura e scrittura su PermissionError. uv.lock invariato (uv lock --check ok). Suite visione 3.13: 34 passati.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQqGYniFfkpHEfZiSqBfnW
2026-10-10 16:44:03 +02:00
Adriano fdfcf05951 Merge lavoro/daitarn-tmf68: vendor visionsuite riallineato a main dbd1a55 (Fixes #68)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQqGYniFfkpHEfZiSqBfnW
2026-10-10 14:07:03 +02:00
Adriano 26884ebf4f vendor visionsuite dbd1a55: riallineato a main (#68)
Da 1e45b33 a dbd1a55 (87 commit): vs-dxf, vs-pm2d, vs-tools, vs-task aggiornati; uv.lock invariato (uv lock --check ok).
Suite visione 3.13: prima 29 passati, dopo 34 passati (con test_vision_boundary).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQqGYniFfkpHEfZiSqBfnW
2026-10-10 14:06:50 +02:00
Adriano 8b3d3a8424 vendor visionsuite 1e45b33: Ricette a griglia con azioni in riga (visionsuite#262) (#67)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VNVrf2wZAmMAkgmwEuBB36
2026-10-07 22:08:56 +02:00
Adriano 153fafd1b4 vendor/visionsuite a main 8d5ac89: quote, Misure, tolleranza, tab, SORGENTE (#67)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VNVrf2wZAmMAkgmwEuBB36
2026-10-07 21:35:31 +02:00
Adriano cf8fab4c08 vendor/visionsuite a main 9e25714 (#67)
GUI vs-gui riprogettata, choices nel catalogo, enum feature_layout in inglese con alias.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VNVrf2wZAmMAkgmwEuBB36
2026-10-07 18:41:16 +02:00
Adriano b7cb061fee Suite: test PIN, cornice e worker PDF allineati all'integrazione (#65)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 13:46:27 +02:00
5 changed files with 19 additions and 4 deletions
+8
View File
@@ -6,6 +6,7 @@ from fastapi import HTTPException
from httpx import AsyncClient from httpx import AsyncClient
from sqlalchemy import select from sqlalchemy import select
from src.backend.config import settings
from src.backend.models.orm.user import User from src.backend.models.orm.user import User
from src.backend.services import auth_service from src.backend.services import auth_service
from src.backend.tests.conftest import _create_user, auth_headers from src.backend.tests.conftest import _create_user, auth_headers
@@ -15,6 +16,13 @@ from src.backend.tests.test_production_runs import (
from src.backend.utils.tempo import utcnow from src.backend.utils.tempo import utcnow
@pytest.fixture(autouse=True)
def _alza_limite_login(monkeypatch):
# #65: login-pin conta nel bucket del login (limite al minuto); i test del blocco PIN
# fanno piu tentativi di fila, quindi qui il limite si alza. Il middleware resta com'e.
monkeypatch.setattr(settings, "rate_limit_login", 1000)
async def _pin_user(db_session, username="operaio", pin="1234", **kw) -> User: async def _pin_user(db_session, username="operaio", pin="1234", **kw) -> User:
user = await _create_user(db_session, username=username, **kw) user = await _create_user(db_session, username=username, **kw)
await auth_service.set_user_pin(db_session, user, pin) await auth_service.set_user_pin(db_session, user, pin)
@@ -25,7 +25,8 @@
{% include "admin/_users_panel.html" %} {% include "admin/_users_panel.html" %}
</div> </div>
<div x-show="tab === 'generale'" class="max-w-4xl mx-auto" x-data="systemSettings()"> {# #65: niente larghezza propria, la scheda sta nella cornice .tmf-page #}
<div x-show="tab === 'generale'" x-data="systemSettings()">
<!-- Settings Card --> <!-- Settings Card -->
<div class="tmf-card mb-6"> <div class="tmf-card mb-6">
<div class="tmf-card-header flex items-center gap-2"> <div class="tmf-card-header flex items-center gap-2">
@@ -32,6 +32,10 @@ def _views():
rel = path.relative_to(TEMPLATES).as_posix() rel = path.relative_to(TEMPLATES).as_posix()
if rel.startswith("components/") or rel == "base.html": if rel.startswith("components/") or rel == "base.html":
continue continue
# #65: i parziali (nome che comincia per "_") sono inclusi da un'altra vista
# e stanno dentro la sua cornice .tmf-page: da soli non ne hanno una.
if path.name.startswith("_"):
continue
yield rel, path yield rel, path
+4 -2
View File
@@ -128,9 +128,11 @@ def test_the_pdf_worker_is_local_everywhere_it_is_set():
assert "vendor/pdf.worker" in line, ( assert "vendor/pdf.worker" in line, (
f"{path.relative_to(APP_ROOT)}:{n} punta il worker fuori casa" f"{path.relative_to(APP_ROOT)}:{n} punta il worker fuori casa"
) )
# Four templates render PDFs; if that number changes the new one needs the # Five templates render PDFs; if that number changes the new one needs the
# worker set too, and this is where you find out. # worker set too, and this is where you find out.
assert len(setters) == 4, f"template che impostano il worker: {setters}" # #65: da quattro a cinque, task_execute.html mostra PDF nelle note e negli
# allegati dell'esecuzione (#55).
assert len(setters) == 5,f"template che impostano il worker: {setters}"
def test_the_shipped_libraries_are_the_ones_that_were_checked(): def test_the_shipped_libraries_are_the_ones_that_were_checked():