Files
fn_registry/functions/infra/vault_inventory_scan.md
T
egutierrez a802f59f55 chore: auto-commit (95 archivos)
- cmd/fn/doctor.go
- cmd/fn/main.go
- cpp/apps/primitives_gallery/playground/tables/CMakeLists.txt
- cpp/apps/primitives_gallery/playground/tables/data_table.cpp
- cpp/apps/primitives_gallery/playground/tables/data_table_logic.cpp
- cpp/apps/primitives_gallery/playground/tables/data_table_logic.h
- cpp/apps/primitives_gallery/playground/tables/self_test.cpp
- cpp/apps/primitives_gallery/playground/tables/tql.cpp
- cpp/apps/primitives_gallery/playground/tables/viz.cpp
- cpp/apps/primitives_gallery/playground/tables/viz.h
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 00:50:34 +02:00

3.0 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
vault_inventory_scan function go infra 1.0.0 impure func VaultInventoryScan(vaultPath, vaultID, vaultName string) ([]VaultFile, error) Recorre vaultPath con filepath.WalkDir y retorna un slice de VaultFile ordenado por RelPath para cada archivo regular, computando sha256 por streaming, MIME por extension/magic y bucket/sub-bucket por posicion en el arbol.
vault
inventory
scan
filesystem
sha256
mime
infra
vault_file_go_infra
false error_go_core
crypto/sha256
encoding/hex
fmt
io
net/http
os
path/filepath
sort
strings
name desc
vaultPath ruta absoluta o relativa al directorio raiz del vault
name desc
vaultID identificador del vault (ej: turismo_spain_app_turismo) — se copia a cada VaultFile
name desc
vaultName nombre legible del vault (ej: turismo_spain) — se copia a cada VaultFile
slice de VaultFile ordenado lexicograficamente por RelPath; slice vacio (no nil) si el vault esta vacio true
tmpdir vacio retorna slice vacio
data layout — bucket y sub_bucket correctos
knowledge layout — bucket y sub_bucket correctos
omite vault_index.db y .git
sha256 determinista para mismo contenido
orden lexicografico del resultado
functions/infra/vault_inventory_scan_test.go functions/infra/vault_inventory_scan.go

Ejemplo

files, err := VaultInventoryScan("/data/vaults/turismo_spain", "turismo_spain_v1", "turismo_spain")
if err != nil {
    log.Fatal(err)
}
for _, f := range files {
    fmt.Printf("%s  %s  %s/%s\n", f.RelPath, f.Mime, f.Bucket, f.SubBucket)
}

Notas

Archivos omitidos

  • vault_index.db, vault_index.db-shm, vault_index.db-wal (siempre)
  • .git/ en cualquier profundidad (SkipDir)
  • Entradas cuyo nombre empieza por . solo en la raiz del vault (nivel 0)

Deteccion de MIME

file_validate_type_go_infra (FileValidateType) no se usa porque su firma requiere una lista blanca de tipos permitidos y retorna (mime, bool) — esta disenada para validacion de uploads, no para escaneo inventarial donde cualquier MIME es valido. Se usan en su lugar:

  1. Override por extension (prioridad alta): .csvtext/csv, .mdtext/markdown, .parquetapplication/parquet. Necesario porque http.DetectContentType clasifica CSV como text/plain y no conoce Parquet.
  2. http.DetectContentType sobre primeros 512 bytes (magic bytes, stdlib) para el resto.

SHA-256

Calculado por streaming con io.Copy a sha256.New() — no carga el archivo completo a memoria. Valido para archivos de cualquier tamano.

Bucket / SubBucket

Derivados de la posicion en el arbol:

  • bucket = primer segmento del RelPath (tipicamente "data" o "knowledge")
  • subBucket = segundo segmento si existe; vacio si el archivo esta en la raiz del bucket