Files
basethon/basethon/base_session.py
2025-01-26 17:17:25 +03:00

50 lines
1.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from pathlib import Path
from typing import Generator
from jsoner import json_read_sync
class BaseSession:
def __init__(self, base_dir: Path, errors_dir: Path, banned_dir: Path):
self.base_dir = base_dir
self.base_dir.mkdir(parents=True, exist_ok=True)
self.errors_dir = errors_dir
self.errors_dir.mkdir(parents=True, exist_ok=True)
self.banned_dir = banned_dir
self.banned_dir.mkdir(parents=True, exist_ok=True)
self.json_errors: set[Path] = set()
def iter_sessions(self) -> Generator[tuple[Path, Path, dict]]:
"""
Поиск сессий в base_dir
Возвращает генератор с кортежами (item, json_path, json_data)
Если json_file не найден, то добавляет его (не существующий) в self.json_errors
Если json_data не найден, то добавляет его (не существующий) в self.json_errors
"""
for item in self.base_dir.glob("*.session"):
json_file = item.with_suffix(".json")
if not json_file.is_file():
self.json_errors.add(json_file)
continue
if not (json_data := json_read_sync(json_file)):
self.json_errors.add(json_file)
continue
yield item, json_file, json_data
def __del__(self):
"""
Удаление пустых директорий в errors_dir и banned_dir
"""
if self.errors_dir.is_dir():
items = []
for item in self.errors_dir.iterdir():
items.append(item)
if not items:
self.errors_dir.rmdir()
if self.banned_dir.is_dir():
items = []
for item in self.banned_dir.iterdir():
items.append(item)
if not items:
self.banned_dir.rmdir()