50 lines
1.9 KiB
Python
50 lines
1.9 KiB
Python
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()
|