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)[מקור]

Bases: object

מידע על גיבוי

פרמטרים:
__init__(backup_id, user_id, created_at, file_count, total_size, backup_type, status, file_path, repo, path, metadata)[מקור]
פרמטרים:
class file_manager.BackupManager[מקור]

Bases: object

מנהל גיבויים

__init__()[מקור]
cleanup_expired_backups(retention_days=None, *, max_per_user=None, budget_seconds=None)[מקור]

ניקוי גיבויים ישנים ממערכת הקבצים ומ‑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

פרמטרים:
  • retention_days (int | None)

  • max_per_user (int | None)

  • budget_seconds (float | None)

save_backup_bytes(data, metadata)[מקור]

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

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

Return type:

Optional[str]

פרמטרים:
save_backup_file(file_path)[מקור]

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

Return type:

Optional[str]

פרמטרים:

file_path (str)

list_backups(user_id)[מקור]

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

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

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

Return type:

List[BackupInfo]

פרמטרים:

user_id (int)

restore_from_backup(user_id, backup_path, overwrite=True, purge=False, extra_tags=None)[מקור]

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

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

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

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

Return type:

Dict[str, Any]

פרמטרים:
delete_backups(user_id, backup_ids)[מקור]

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

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

Return type:

Dict[str, Any]

פרמטרים:
delete_backup(backup_id, user_id)[מקור]

מחיקת גיבוי

Return type:

bool

פרמטרים:
  • 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)[מקור]

Bases: object

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

פרמטרים:
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)
פרמטרים:
Return type:

None

class file_manager.SkillManager[מקור]

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)[מקור]

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

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

Return type:

Optional[str]

פרמטרים:
list_skills(user_id)[מקור]

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

Return type:

List[SkillInfo]

פרמטרים:

user_id (int)

get_skill_info(user_id, skill_id)[מקור]

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

Return type:

Optional[SkillInfo]

פרמטרים:
  • user_id (int)

  • skill_id (str)

get_skill_bytes(user_id, skill_id)[מקור]

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

Return type:

Optional[bytes]

פרמטרים:
  • user_id (int)

  • skill_id (str)

delete_skills(user_id, skill_ids)[מקור]

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

Return type:

Dict[str, Any]

פרמטרים: