file_manager module

class file_manager.BackupInfo(backup_id, user_id, created_at, file_count, total_size, backup_type, status, file_path, repo, path, metadata)[source]

Bases: object

מידע על גיבוי

Parameters:
__init__(backup_id, user_id, created_at, file_count, total_size, backup_type, status, file_path, repo, path, metadata)[source]
Parameters:
class file_manager.BackupManager[source]

Bases: object

מנהל גיבויים

__init__()[source]
cleanup_expired_backups(retention_days=None, *, max_per_user=None, budget_seconds=None)[source]

ניקוי גיבויים ישנים ממערכת הקבצים ומ‑GridFS באופן מבוקר.

פרמטרים: - retention_days: ימים לשמירת גיבוי לפני מחיקה (ברירת מחדל: BACKUPS_RETENTION_DAYS או 30) - max_per_user: כמות מקסימלית של גיבויים לשמירה לכל משתמש (ברירת מחדל: BACKUPS_MAX_PER_USER או None) - budget_seconds: תקציב זמן לניקוי כדי לא לחסום את ה־worker (ברירת מחדל: BACKUPS_CLEANUP_BUDGET_SECONDS או 3)

החזרה: dict עם counters לסריקה/מחיקות ושגיאות.

Return type:

dict

Parameters:
  • retention_days (int | None)

  • max_per_user (int | None)

  • budget_seconds (float | None)

save_backup_bytes(data, metadata)[source]

שומר ZIP של גיבוי בהתאם למצב האחסון ומחזיר backup_id או None במקרה כשל.

אם storage==mongo: שומר ל-GridFS עם המטאדטה. אם storage==fs: שומר לקובץ תחת backup_dir.

Return type:

Optional[str]

Parameters:
save_backup_file(file_path)[source]

שומר קובץ ZIP קיים לאחסון היעד (Mongo/FS) ומחזיר backup_id אם הצליח.

Return type:

Optional[str]

Parameters:

file_path (str)

list_backups(user_id)[source]

מחזירה רשימת קבצי ZIP ששייכים למשתמש המבקש בלבד.

כל פריט חייב להיות מסווג כשייך ל-user_id דרך אחד מהבאים: - metadata.json בתוך ה-ZIP עם שדה user_id תואם - דפוס מזהה בשם: backup_<user_id>_*

ZIPים ללא שיוך ברור למשתמש לא ייכללו כדי למנוע זליגת מידע.

Return type:

List[BackupInfo]

Parameters:

user_id (int)

restore_from_backup(user_id, backup_path, overwrite=True, purge=False, extra_tags=None)[source]

משחזר קבצים מ-ZIP למסד הנתונים.

  • purge=True: מסמן את כל הקבצים הקיימים של המשתמש כלא פעילים לפני השחזור

  • overwrite=True: שמירה תמיד כגרסה חדשה עבור אותו שם (כברירת מחדל)

החזרה: dict עם restored_files ו-errors

Return type:

Dict[str, Any]

Parameters:
delete_backups(user_id, backup_ids)[source]

מוחק מספר גיבויי ZIP לפי backup_id ממערכת הקבצים ומ-GridFS (אם בשימוש).

החזרה: {“deleted”: int, “errors”: [str, …]}

Return type:

Dict[str, Any]

Parameters:
delete_backup(backup_id, user_id)[source]

מחיקת גיבוי

Return type:

bool

Parameters:
  • backup_id (str)

  • user_id (int)

class file_manager.SkillInfo(skill_id, user_id, created_at, file_count, total_size, original_name, file_name, metadata)[source]

Bases: object

מידע על סקיל שמור (ארכיון קוד לטווח ארוך, נפרד לגמרי מגיבויים)

Parameters:
skill_id: str
user_id: int
created_at: datetime
file_count: int
total_size: int
original_name: str
file_name: str
metadata: Optional[Dict[str, Any]]
__init__(skill_id, user_id, created_at, file_count, total_size, original_name, file_name, metadata)
Parameters:
Return type:

None

class file_manager.SkillManager[source]

Bases: object

מנהל אחסון סקילים — קולקציית GridFS נפרדת (“skills”), ללא retention/cleanup/restore.

בניגוד ל-BackupManager: - שומר את ה-bytes as-is (fs.put ישיר) בלי לפתוח/לדחוס מחדש את ה-ZIP ובלי הזרקת metadata.json. - תמיד מונגו (GridFS), ללא תלות ב-BACKUPS_STORAGE וללא משתנה סביבה מקביל. - אין מחיקת retention ואין restore — סקיל לא נמחק לבד לעולם.

save_skill_bytes(data, metadata)[source]

שומר סקיל (ZIP) as-is ב-GridFS “skills” ומחזיר skill_id, או None בכשל.

לא פותח/דוחס מחדש את ה-ZIP ולא מזריק metadata.json — ה-bytes נשמרים בדיוק כפי שהתקבלו, כך שהורדה מחזירה את הקובץ byte-for-byte.

Return type:

Optional[str]

Parameters:
list_skills(user_id)[source]

מחזיר את כל הסקילים של המשתמש (מטא-דאטה בלבד — Smart Projection, בלי משיכת bytes).

Return type:

List[SkillInfo]

Parameters:

user_id (int)

get_skill_info(user_id, skill_id)[source]

מטא-דאטה של סקיל בודד בשאילתה ממוקדת (בלי סריקת כל הסקילים ובלי משיכת bytes).

Return type:

Optional[SkillInfo]

Parameters:
  • user_id (int)

  • skill_id (str)

get_skill_bytes(user_id, skill_id)[source]

מחזיר את ה-bytes המדויקים של הסקיל (אחרי אימות בעלות), או None אם לא נמצא/לא שייך.

Return type:

Optional[bytes]

Parameters:
  • user_id (int)

  • skill_id (str)

delete_skills(user_id, skill_ids)[source]

מוחק סקילים לפי skill_id (רק של המשתמש הנוכחי). מחזיר {deleted, errors}.

Return type:

Dict[str, Any]

Parameters: