feat: intégration TikTak #197-200 + scoped tokens, webhooks filtrés, listes mtime/size ; fix e2e-server BUG-112
CI / lint (push) Successful in 3m17s
CI / security (push) Failing after 1m51s
CI / test (push) Successful in 5m14s
CI / build (push) Successful in 1m50s
CI / e2e (push) Successful in 18m18s

This commit is contained in:
2026-10-14 11:42:53 -04:00
parent 2be0b15bcf
commit f783394f09
59 changed files with 3233 additions and 77 deletions
+34 -6
View File
@@ -198,23 +198,51 @@ def list_paths(vault: str, limit: int = 5000) -> dict[str, Any]:
once lets the client filter files/directories instantly instead of issuing
a request per keystroke.
#197 (synchro TikTak) : chaque entrée fichier expose aussi ``size``,
``mtime`` (epoch) et ``mtime_iso`` — un client externe peut détecter les
fichiers modifiés depuis un horodatage en **un seul appel**, sans relire
chaque fichier. Les valeurs viennent de l'index (source unique, même
contrat que ``list_all_files``) ; les répertoires portent ``None``.
Args:
vault: Vault name.
limit: Maximum number of entries returned.
Returns:
``{"vault", "count", "results": [{vault, path, name, type}]}``.
``{"vault", "count", "results": [{vault, path, name, type, size?,
mtime?, mtime_iso?}]}``.
"""
from backend.indexer import path_index
from datetime import datetime
from backend.indexer import get_vault_data, path_index
entries = path_index.get(vault, [])
results = [
{
meta: dict[str, dict[str, Any]] = {}
data = get_vault_data(vault)
if data:
for info in data.get("files", []):
meta[info["path"]] = info
results = []
for entry in entries[: max(0, limit)]:
item: dict[str, Any] = {
"vault": vault,
"path": entry["path"],
"name": entry["name"],
"type": entry["type"],
"size": None,
"mtime": None,
"mtime_iso": None,
}
for entry in entries[: max(0, limit)]
]
info = meta.get(entry["path"])
if info is not None:
item["size"] = info.get("size")
iso = info.get("modified")
item["mtime_iso"] = iso
if iso:
try:
item["mtime"] = datetime.fromisoformat(iso).timestamp()
except (ValueError, TypeError):
item["mtime"] = None
results.append(item)
return {"vault": vault, "count": len(results), "results": results}
+6 -1
View File
@@ -49,6 +49,8 @@ def get_vault_root(vault_name: str) -> Path:
def browse_directory(vault_name: str, path: str = "") -> dict[str, Any]:
"""Return the direct children of a vault directory (directories first)."""
from datetime import datetime, timezone
from backend.indexer import SUPPORTED_EXTENSIONS
from backend.vault_settings import get_vault_setting
@@ -89,11 +91,14 @@ def browse_directory(vault_name: str, path: str = "") -> dict[str, Any]:
"children_count": file_count,
})
elif entry.suffix.lower() in SUPPORTED_EXTENSIONS or entry.name.lower() in ("dockerfile", "makefile"):
stat = entry.stat()
items.append({
"name": entry.name,
"path": rel,
"type": "file",
"size": entry.stat().st_size,
"size": stat.st_size,
"modified": stat.st_mtime,
"modified_iso": datetime.fromtimestamp(stat.st_mtime, tz=timezone.utc).isoformat(),
"extension": entry.suffix.lower(),
})
except PermissionError: