Files
dokogen187/dokogen/api_settings.py
T

71 lines
2.5 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.
# -*- coding: utf-8 -*-
"""DokoGen — настройки API для внешних сервисов проверки.
Хранятся в JSON рядом с программой (api_settings.json).
Поля:
- dadata_token — API-ключ DaData (проверка организации по ИНН)
- ai_api_key — API-ключ ИИ (OpenAI-совместимый: DeepSeek, ChatGPT и др.)
- ai_model — модель ИИ (deepseek-chat, gpt-4o-mini, gpt-4o и т.п.)
- ai_base_url — адрес API ИИ (по умолчанию DeepSeek)
"""
import os
import sys
import json
DEFAULT_SETTINGS = {
'dadata_token': '',
'ai_api_key': '',
'ai_model': 'deepseek-chat',
'ai_base_url': 'https://api.deepseek.com',
}
# Старые ключи (для совместимости со старым файлом api_settings.json)
_LEGACY_KEYS = {
'deepseek_api_key': 'ai_api_key',
'deepseek_model': 'ai_model',
}
def default_api_settings_path():
"""Путь к файлу настроек: рядом с exe (frozen) или рядом с модулем."""
if getattr(sys, 'frozen', False):
base = os.path.dirname(sys.executable)
else:
base = os.path.dirname(os.path.abspath(__file__))
return os.path.join(base, 'api_settings.json')
def load_api_settings(path=None):
"""Загрузка настроек API из JSON-файла. Если файла нет — дефолт."""
if path is None:
path = default_api_settings_path()
if not path or not os.path.exists(path):
return dict(DEFAULT_SETTINGS)
try:
with open(path, encoding='utf-8-sig') as f:
loaded = json.load(f)
merged = dict(DEFAULT_SETTINGS)
for k, v in loaded.items():
# переносим старые ключи в новые
if k in _LEGACY_KEYS and not loaded.get(_LEGACY_KEYS[k]):
merged[_LEGACY_KEYS[k]] = v
elif k in merged:
merged[k] = v
return merged
except Exception:
return dict(DEFAULT_SETTINGS)
def save_api_settings(settings, path=None):
"""Сохранение настроек API. Возвращает True/False."""
if path is None:
path = default_api_settings_path()
try:
os.makedirs(os.path.dirname(path), exist_ok=True)
with open(path, 'w', encoding='utf-8') as f:
json.dump(settings, f, ensure_ascii=False, indent=2)
return True
except Exception:
return False