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)
В файле config.py можно отключить любые модули, указав имена папок:
DISABLED_MODULES= ["МодульКоторыйНеНужен", "AnotherModule"]modules/
└── MyModule/ # любое имя папки
├── main.py # обязательно!
├── settings.json # (опционально) настройки модуля
└── templates/ # (опционально) свои HTML-шаблоны
├── main_tab.html
└── settings.html
frommodules.base_moduleimportBaseModulefromflaskimportrequest, jsonifyclassMyModule(BaseModule):
name="my_module"display_name="Мой модуль"category="Категория"icon="fa-box"# Иконкаdef__init__(self, app, event_bus, socketio):
super().__init__(app, event_bus, socketio)
self.status=self.load_module_settings().get('status', 'off')
# 1. HTTP маршрутыdefregister_routes(self):
@self.app.route('/api/my_module/status')defget_status():
returnjsonify({"status": self.status})
@self.app.route('/api/my_module/toggle', methods=['POST'])deftoggle():
self.status='on'ifself.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})
returnjsonify({"status": self.status})
# 2. WebSocket обработчикиdefregister_socketio_handlers(self, sio):
@sio.on('subscribe_my_module')defon_subscribe():
sio.emit('status_update', {'status': self.status}, room=request.sid)
# 3. Вкладка на главной страницеdefregister_main_tab(self):
return ("Мой модуль", self.get_template_content("main_tab.html"))
# 4. Вкладка в настройкахdefregister_settings_ui(self):
returnself.get_template_content("settings.html")
# 5. Жизненный цикл модуля (вызывается после загрузки всех модулей)defon_load(self):
# Подписка на события от других модулейself.event_bus.subscribe("some_event", self.handle_event)
defhandle_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")defmy_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.