NeuroCore — это ядро проекта NeuroVT: модульный веб-фреймворк на Flask + WebSocket + Event Bus.
Позволяет создавать расширяемые системы с динамической загрузкой модулей.
- 📌 Регистрируй вкладку на главной
- 📌 Регистрируй вкладку в настройках
- 📌 Добавляй любые HTTP эндпоинты (Flask)
- 📌 Обменивайся событиями через Event Bus
- 📌 Используй WebSocket для real-time обновлений
git clone https://github.com/FreshLend/NeuroCore.git
cd NeuroCoreWindows — дважды кликните 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 Bus —
self.event_bus.emit()отправляет событие,self.event_bus.subscribe()подписывается. - WebSocket —
self.socketio.emit()отправляет событие всем клиентам (или в комнату).
Отправить событие:
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):
passpython -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.