53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
import json
|
||
from pathlib import Path
|
||
from typing import Dict
|
||
|
||
|
||
# Путь к файлу счётчика (в корне проекта)
|
||
COUNTER_FILE_PATH = Path(__file__).parent.parent.parent / "node_counter.json"
|
||
|
||
|
||
def get_node_counter() -> int:
|
||
"""
|
||
Открывает JSON файл и возвращает значение node_counter.
|
||
Если файл не существует, создаёт его со значением по умолчанию 0.
|
||
|
||
Returns:
|
||
int: Текущее значение счётчика узлов
|
||
"""
|
||
|
||
if not COUNTER_FILE_PATH.exists():
|
||
initial_data: Dict[str, int] = {"node_counter": 0}
|
||
with open(COUNTER_FILE_PATH, "w", encoding="utf-8") as f:
|
||
json.dump(initial_data, f, indent=2, ensure_ascii=False)
|
||
return 0
|
||
|
||
try:
|
||
with open(COUNTER_FILE_PATH, "r", encoding="utf-8") as f:
|
||
data = json.load(f)
|
||
return data.get("node_counter", 0)
|
||
except (json.JSONDecodeError, IOError):
|
||
initial_data = {"node_counter": 0}
|
||
with open(COUNTER_FILE_PATH, "w", encoding="utf-8") as f:
|
||
json.dump(initial_data, f, indent=2, ensure_ascii=False)
|
||
return 0
|
||
|
||
|
||
def increment_node_counter() -> int:
|
||
"""
|
||
Увеличивает значение node_counter на 1, сохраняет в файл и возвращает новое значение.
|
||
|
||
Returns:
|
||
int: Новое значение счётчика (старое значение + 1)
|
||
"""
|
||
|
||
current_value = get_node_counter()
|
||
|
||
new_value = current_value + 1
|
||
|
||
data: Dict[str, int] = {"node_counter": new_value}
|
||
with open(COUNTER_FILE_PATH, "w", encoding="utf-8") as f:
|
||
json.dump(data, f, indent=2, ensure_ascii=False)
|
||
|
||
return new_value
|