File config_tool.py of Package fint-bot

#!/usr/bin/env python3
"""
Утилита для управления конфигурацией торгового робота
"""

import sys
from config_manager import config_manager, ConfigManager


def main():
    """Основная функция утилиты"""
    print("=" * 50)
    print("УТИЛИТА УПРАВЛЕНИЯ КОНФИГУРАЦИЕЙ")
    print("=" * 50)
    
    if len(sys.argv) < 2:
        print("Использование:")
        print("  python config_tool.py show        - показать текущую конфигурацию")
        print("  python config_tool.py wizard      - запустить мастер настройки")
        print("  python config_tool.py set <section> <key> <value> - установить параметр")
        print("  python config_tool.py reset       - сбросить к настройкам по умолчанию")
        print("  python config_tool.py validate    - проверить конфигурацию")
        return
    
    command = sys.argv[1]
    
    if command == "show":
        config_manager.show_config()
    
    elif command == "wizard":
        ConfigManager.create_config_wizard()
    
    elif command == "set":
        if len(sys.argv) != 5:
            print("Ошибка: для set нужны section, key и value")
            print("Пример: python config_tool.py set strategy fast_window 12")
            return
        
        section = sys.argv[2]
        key = sys.argv[3]
        value = sys.argv[4]
        
        # Преобразование типов
        try:
            # Пробуем преобразовать в число
            if value.lower() in ['true', 'false']:
                value = value.lower() == 'true'
            else:
                try:
                    if '.' in value:
                        value = float(value)
                    else:
                        value = int(value)
                except ValueError:
                    pass  # Оставляем как строку
            
            config_manager.update_config(section, key, value)
        except Exception as e:
            print(f"Ошибка установки параметра: {e}")
    
    elif command == "reset":
        confirm = input("Вы уверены, что хотите сбросить конфигурацию к настройкам по умолчанию? (да/нет): ")
        if confirm.lower() in ['да', 'yes', 'y']:
            default_config = config_manager.get_default_config()
            config_manager.save_config(default_config)
            print("Конфигурация сброшена к настройкам по умолчанию")
    
    elif command == "validate":
        print("Проверка конфигурации...")
        
        # Проверяем обязательные параметры
        errors = []
        
        if not config_manager.config.trading.ticker:
            errors.append("Тикер не указан")
        
        if not config_manager.config.trading.class_code:
            errors.append("Код класса не указан")
        
        if config_manager.config.strategy.risk_per_trade > 0.1:
            errors.append(f"Риск на сделку ({config_manager.config.strategy.risk_per_trade}) слишком высок")
        
        if config_manager.config.strategy.daily_loss_limit > 0.2:
            errors.append(f"Дневной лимит убытков ({config_manager.config.strategy.daily_loss_limit}) слишком высок")
        
        if errors:
            print("Обнаружены ошибки:")
            for error in errors:
                print(f"  - {error}")
        else:
            print("Конфигурация валидна")
    
    else:
        print(f"Неизвестная команда: {command}")


if __name__ == '__main__':
    main()
openSUSE Build Service is sponsored by