schfs (SCH File System) Pytigon abstrakcyjnie ukrywa składowanie plików za jednolitym interfejsem. Niezależnie od tego, czy pliki znajdują się na dysku, w bazie danych, w pamięci czy na serwerze zdalnym, kod aplikacji traktuje je w ten sam sposób.
W systemie wielowdrożeniowym, w którym ta sama aplikacja może działać jako aplikacja desktopowa (z plikami na dysku), serwer WWW (z plikami w chmurze) lub hybryda (z plikami podzielonymi między lokalne i zdalne), zakodowanie na stałe ścieżek plików to przepis na problemy we wdrożeniu. schfs rozwiązuje to poprzez:
vfstools.VfsDisk)Pliki przechowywane w lokalnym systemie plików. Używany przez aplikacje desktopowe i serwery developerskie.
from pytigon_lib.schfs.vfstools import VfsDisk
vfs = VfsDisk("/path/to/storage/root")
vfs.open("documents/report.pdf", "rb")
vfstools.VfsDatabase)Pliki przechowywane jako pola BLOB w tabeli bazy danych. Używany, gdy pliki muszą być uwzględnione w kopiach zapasowych bazy lub gdy wiele serwerów współdzieli bazę.
vfstools.VfsMemory)Pliki przechowywane w RAM. Używany dla plików tymczasowych i testów.
vfstools.VfsRemote)Pliki przechowywane na serwerze zdalnym dostępnym przez HTTP.
Wszystkie backendy obsługują te same operacje:
# Otwarcie pliku
with vfs.open("path/to/file.txt", "r") as f:
content = f.read()
# Zapis pliku
with vfs.open("path/to/new_file.txt", "w") as f:
f.write("Hello, virtual world!")
# Listowanie zawartości katalogu
files = vfs.listdir("path/to/directory/")
# Sprawdzenie, czy plik istnieje
if vfs.exists("path/to/file.txt"):
...
# Pobranie metadanych pliku
info = vfs.stat("path/to/file.txt")
# info.size, info.modified_time, info.is_directory
# Usunięcie pliku
vfs.delete("path/to/file.txt")
# Utworzenie katalogu
vfs.mkdir("path/to/new_directory/")
Ścieżki wirtualnego systemu plików wyglądają jak zwykłe ścieżki systemowe, ale używają ukośników:
/documents/reports/2025/summary.pdf
/images/logos/company.png
/templates/custom/header.ihtml
Ścieżka główna zależy od konfiguracji backendu. Wdrożenia wielodostępne mogą używać różnych głównych katalogów składowania dla każdego najemcy.
Skonfiguruj wirtualny system plików w settings_app.py:
VFS_BACKEND = 'disk' # lub 'database', 'memory', 'remote'
VFS_ROOT = '/var/data/pytigon'
VFS_CACHE_ENABLED = True
VFS_CACHE_SIZE_MB = 256
schfs zawiera obsługę zadań dla operacji na plikach, które powinny wykonywać się asynchronicznie — duże importy plików, przetwarzanie wsadowe, synchronizacja zdalna.