Skip to content

FreshLend/NeuroCore

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧩 NeuroCore

Python Flask License

NeuroCore — это ядро проекта NeuroVT: модульный веб-фреймворк на Flask + WebSocket + Event Bus.
Позволяет создавать расширяемые системы с динамической загрузкой модулей.

  • 📌 Регистрируй вкладку на главной
  • 📌 Регистрируй вкладку в настройках
  • 📌 Добавляй любые HTTP эндпоинты (Flask)
  • 📌 Обменивайся событиями через Event Bus
  • 📌 Используй WebSocket для real-time обновлений

🚀 Быстрый старт

git clone https://github.com/FreshLend/NeuroCore.git
cd NeuroCore

Windows — дважды кликните run.bat
Linux:

chmod +x run.sh
./run.sh

Открывай браузер → http://localhost:5000


📁 Структура проекта (ядро)

NeuroCore/
├── main.py                 # Точка входа (Flask + модули)
├── run.bat / run.sh        # CLI-менеджер (установка, запуск)
├── requirements.txt        # Основные зависимости
├── config.py               # Отключение модулей (DISABLED_MODULES)
├── core/
│   ├── event_bus.py        # Шина событий между модулями
│   └── module_loader.py    # Загрузчик модулей (ищет main.py в папках)
├── modules/
│   └── base_module.py      # Базовый класс для модулей
└── templates/              # Общие шаблоны (base.html, index.html, settings.html)

🔧 Конфигурация отключения модулей

В файле config.py можно отключить любые модули, указав имена папок:

DISABLED_MODULES = ["МодульКоторыйНеНужен", "AnotherModule"]

📦 Создание своего модуля

Минимальная структура

modules/
└── MyModule/               # любое имя папки
    ├── main.py             # обязательно!
    ├── settings.json       # (опционально) настройки модуля
    └── templates/          # (опционально) свои HTML-шаблоны
        ├── main_tab.html
        └── settings.html

Пример модуля

from modules.base_module import BaseModule
from flask import request, jsonify

class MyModule(BaseModule):
    name = "my_module"
    display_name = "Мой модуль"

    def __init__(self, app, event_bus, socketio):
        super().__init__(app, event_bus, socketio)
        self.status = self.load_module_settings().get('status', 'off')

    # 1. HTTP маршруты
    def register_routes(self):
        @self.app.route('/api/my_module/status')
        def get_status():
            return jsonify({"status": self.status})

        @self.app.route('/api/my_module/toggle', methods=['POST'])
        def toggle():
            self.status = 'on' if self.status == 'off' else 'off'
            self.save_module_settings({'status': self.status})
            self.event_bus.emit("my_module_toggled", {"status": self.status})
            self.socketio.emit('status_update', {'status': self.status})
            return jsonify({"status": self.status})

    # 2. WebSocket обработчики
    def register_socketio_handlers(self, sio):
        @sio.on('subscribe_my_module')
        def on_subscribe():
            sio.emit('status_update', {'status': self.status}, room=request.sid)

    # 3. Вкладка на главной странице
    def register_main_tab(self):
        return ("Мой модуль", self.get_template_content("main_tab.html"))

    # 4. Вкладка в настройках
    def register_settings_ui(self):
        return self.get_template_content("settings.html")

    # 5. Жизненный цикл модуля (вызывается после загрузки всех модулей)
    def on_load(self):
        # Подписка на события от других модулей
        self.event_bus.subscribe("some_event", self.handle_event)

    def handle_event(self, data):
        print(f"Получено событие: {data}")

Пояснения к примеру

  • Настройкиload_module_settings() / save_module_settings() работают с settings.json в папке модуля.
  • Шаблоны — метод get_template_content("main_tab.html") читает файл из папки templates/ модуля.
  • Event Busself.event_bus.emit() отправляет событие, self.event_bus.subscribe() подписывается.
  • WebSocketself.socketio.emit() отправляет событие всем клиентам (или в комнату).

🔌 Event Bus — события между модулями

Отправить событие:

self.event_bus.emit("my_event", {"key": "value"})

Подписаться на событие (лучше в on_load):

self.event_bus.subscribe("my_event", self.my_handler)

Декораторная форма:

@self.event_bus.on("my_event")
def my_handler(data):
    pass

🛠️ Установка зависимостей вручную

python -m venv venv
source venv/bin/activate      # Linux
venv\Scripts\activate         # Windows
pip install -r requirements.txt

🐛 Устранение неполадок

Проблема Решение
Модуль не загружается Проверь config.py — не отключён ли модуль. Убедись, что в папке есть main.py
Ошибка импорта модуля Установи зависимости через CLI-менеджер (./run.sh или run.bat, выбери установку)
Настройки не сохраняются Убедись, что папка модуля существует и в ней можно создать settings.json

📄 Лицензия

Проект распространяется под лицензией MIT. Подробнее см. в файле LICENSE.

About

NeuroCore - Это ядро проекта NeuroVT

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Contributors