Metadata-Version: 2.4
Name: python-rac
Version: 1.5.1
Summary: Клиент прямого протокола RAS 1С с интерфейсами CLI, веб-панели, настольной консоли и MCP
Author: Platform42
License-Expression: MIT
Project-URL: Repository, https://gitlab.com/platform42/python-rac
Project-URL: Issues, https://gitlab.com/platform42/python-rac/-/issues
Project-URL: Homepage, https://platform42.gitlab.io/python-rac/
Project-URL: Documentation, https://platform42.gitlab.io/python-rac/docs/
Keywords: 1c,ras,rac,administration,mcp
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: System :: Systems Administration
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: cryptography>=42
Provides-Extra: desktop
Requires-Dist: PySide6<7,>=6.8; extra == "desktop"
Requires-Dist: keyring>=25; extra == "desktop"
Requires-Dist: cryptography>=42; extra == "desktop"
Provides-Extra: secrets
Requires-Dist: keyring>=25; extra == "secrets"
Requires-Dist: cryptography>=42; extra == "secrets"
Provides-Extra: keys
Requires-Dist: cryptography>=42; extra == "keys"
Provides-Extra: mcp
Requires-Dist: mcp<3,>=2; extra == "mcp"
Requires-Dist: pydantic<3,>=2; extra == "mcp"
Requires-Dist: cryptography>=42; extra == "mcp"
Provides-Extra: build-exe
Requires-Dist: pyinstaller>=6; extra == "build-exe"
Provides-Extra: docs
Requires-Dist: sphinx<10,>=7.3; extra == "docs"
Requires-Dist: furo>=2024.8; extra == "docs"
Requires-Dist: myst-parser<6,>=3; extra == "docs"
Requires-Dist: sphinxcontrib-mermaid<3,>=1; extra == "docs"
Dynamic: license-file

<p align="center"><img src="docs/assets/logo.svg" alt="python-rac" width="128" height="128"></p>

<h1 align="center">python-rac</h1>

<p align="center"><b>Управляйте кластером 1С напрямую по протоколу RAS — без rac.exe.</b><br>
Библиотека на Python, CLI, веб-консоль, настольная консоль и MCP-сервер.</p>

<p align="center">
<code>Python 3.11+</code> · <code>RAS 10.0–22.0</code> · <code>платформы 8.3.x–8.5.4</code> · <code>лицензия MIT</code> · <code>PyPI: python-rac</code>
</p>

<p align="center">
<a href="https://platform42.gitlab.io/python-rac/">Сайт</a> ·
<a href="https://platform42.gitlab.io/python-rac/docs/">Документация</a> ·
<a href="https://gitlab.com/platform42/python-rac/-/releases">Релизы (exe для Windows)</a> ·
<a href="CHANGELOG.md">История изменений</a> ·
<a href="https://gitlab.com/platform42/python-rac/-/issues">Issues</a>
</p>

<p align="center"><img src="site/assets/shots/web-console-light.webp" alt="Веб-консоль: дерево групп серверов, таблица сеансов и свойства выбранного сеанса" width="900"></p>

Клиент говорит с сервером администрирования **напрямую по TCP на Python**: бинарный `rac` из платформы не нужен. Одна библиотека и четыре интерфейса над общим ядром.

> Дистрибутив на PyPI называется `python-rac`, а в коде импортируется как `pyrac` (имя `pyrac` на PyPI принадлежит другому проекту).

## Что где

| Интерфейс | Команда | Для чего |
| --- | --- | --- |
| Веб-консоль | `pyrac-web` | Дерево кластера в браузере (Vue SPA, Node.js не нужен), вход по учётным записям и ролям, [образ Docker](docs/docker.md), [мобильная версия (PWA)](docs/web.md#мобильная-версия) |
| Настольная консоль | `pyrac-desktop` | То же в окне (PySide6); для Windows есть готовый exe без Python |
| CLI | `pyrac` | Команды как у `rac` для скриптов; **изменяет кластер сразу, без подтверждений** |
| MCP-сервер | `pyrac-mcp` | Инструменты для ИИ-агентов; по умолчанию только чтение, изменения включают флаги `--allow-*` |
| Библиотека | `from pyrac import RacClient` | Асинхронный клиент `asyncio` |

## Возможности

- **Прямой протокол RAS 10.0–22.0** (платформы 8.3.x–8.5.4). По умолчанию `auto`: версия согласуется с сервером, запись идёт версией, равной максимуму сервера (RAS 8.5.1 — 16.0, RAS 8.5.4 — 22.0). Таблица «версия → платформа» — в [docs/protocol.md](docs/protocol.md).
- Чтение кластеров, серверов, процессов, информационных баз, сеансов, соединений, блокировок, профилей безопасности, счётчиков, ограничений, правил и настроек сервисов; защищённые изменения с повторным чтением и сверкой.
- Администрирование на месте: правка свойств в таблице, завершение сеансов, перезапуск рабочих процессов, блокировки информационных баз, запуск баз тонким или толстым клиентом и конфигуратором, показания счётчиков производительности.
- **Группы серверов** (вложенные: «Продакшен», «Бета», «Dev») и [автопоиск](docs/discovery.md) по диапазонам для каждой группы; группу можно указать прямо в строке диапазона: `area-sp-01 - area-sp-99 - Production`.
- **Учётные записи программы и роли** (web и desktop): «Администратор», «Оператор», «Наблюдатель» и свои; роль назначается на область — везде, группа, сервер или строка автопоиска.
- **Шифрованное хранилище паролей** (`secrets.enc`, AES-256-GCM); вход по открытому ключу на RAS 8.5.4.
- Число серверов RAS в одной консоли не ограничено; серверы, добавленные вручную, сохраняются в [файле настроек](docs/settings.md).

## Установка

Python 3.11+. Обязательная зависимость одна — `cryptography` (шифрование хранилища паролей и вход по ключу); остальное — по необходимости.

```bash
python -m pip install python-rac                 # библиотека, CLI, веб-консоль
python -m pip install 'python-rac[desktop]'      # + настольная консоль (PySide6, keyring)
python -m pip install 'python-rac[mcp]'          # + MCP-сервер
python -m pip install 'python-rac[secrets]'      # + keyring: пароли RAS в связке ключей ОС (для web без учётных записей)
```

Готовый exe настольной консоли для Windows — на странице [последнего релиза](https://gitlab.com/platform42/python-rac/-/releases/permalink/latest) (zip; exe не подписан, подробности — в [docs/desktop.md](docs/desktop.md#готовый-exe-для-windows)).

## Быстрый старт

**Веб-консоль** (`--ras-host` необязателен: адрес по умолчанию `localhost:1545` добавляется, только если параметр указан или в [настройках](docs/settings.md) нет серверов)

```bash
pyrac-web --ras-host=127.0.0.1                # http://127.0.0.1:8080/ (при первом запуске создайте администратора)
pyrac-web --ras-host=127.0.0.1 --read-only    # только чтение
```

**Настольная консоль**

```bash
pyrac-desktop --ras-host=127.0.0.1
```

**Библиотека**

```python
import asyncio
from pyrac import RacClient

async def main():
    async with RacClient('127.0.0.1', 1545) as rac:
        print(await rac.list_clusters())

asyncio.run(main())
```

**CLI** — команды как у `rac`

```bash
pyrac --ras-host=127.0.0.1 cluster list
pyrac --ras-host=127.0.0.1 infobase --cluster=UUID summary list
```

**MCP-сервер** (stdio): `pyrac-mcp --ras-host=127.0.0.1`.

**Docker** (веб-консоль с входом по учётным записям; подробности и HTTPS — в [docs/docker.md](docs/docker.md))

```bash
mkdir secrets && printf '%s' 'пароль-администратора' > secrets/master_password.txt   # пароль первого администратора admin
cp .env.example .env && docker compose up -d --build     # http://localhost:8080/
```

## Безопасность

- **Изменение поведения в 0.4.0:** веб-консоль и настольная консоль по умолчанию **разрешают все совместимые операции изменения** (раньше только читали). `--read-only` отключает изменения; явные `--allow-<операция>` включают только перечисленные. **MCP по умолчанию только читает** (82 флага `--allow-*`).
- Права определяют роли учётных записей (web и desktop). Перед выполнением нужно ввести точную строку подтверждения (например, UUID объекта); успех засчитывается после повторного чтения состояния.
- **Пароль администратора RAC идёт по сети открытым текстом** (ограничение протокола): подключайтесь через VPN или SSH-туннель. Встроенного TLS нет — для доступа по сети используйте прокси с HTTPS. Пароли только записываются: интерфейсы их не возвращают, CLI не принимает их в аргументах.
- **CLI и библиотека** не спрашивают подтверждений: команды изменяют RAS сразу. Проверяйте изменения на изолированном стенде, а не на производственном кластере.
- Покрытие команд `rac` неполное, многие операции проверены только на RAS 8.5.1 или тестами: [docs/limitations.md](docs/limitations.md). Модель безопасности — [docs/security.md](docs/security.md).

## Документация

Сайт: https://platform42.gitlab.io/python-rac/ — справка и описание API классов: https://platform42.gitlab.io/python-rac/docs/ (GitLab Pages; собирается из `site/` и `docs-site/`, локальная сборка — в [docs/development.md](docs/development.md#документация-sphinx)).

| Документ | О чём |
| --- | --- |
| [docs/index.md](docs/index.md) | Карта документации |
| [docs/getting-started.md](docs/getting-started.md) | Установка и первый запуск |
| [docs/troubleshooting.md](docs/troubleshooting.md) | Диагностика: журнал `pyrac.log`, что приложить к отчёту об ошибке |
| [docs/library.md](docs/library.md), [docs/cli.md](docs/cli.md) | Библиотека и командная строка |
| [docs/web.md](docs/web.md), [docs/desktop.md](docs/desktop.md), [docs/mcp.md](docs/mcp.md) | Веб-консоль, настольная консоль, MCP |
| [docs/operations.md](docs/operations.md) | Операции изменения, флаги `--allow-*` и `--read-only` |
| [docs/settings.md](docs/settings.md), [docs/discovery.md](docs/discovery.md) | Файл настроек, группы серверов и автопоиск |
| [docs/security.md](docs/security.md), [docs/limitations.md](docs/limitations.md) | Учётные записи и роли, модель безопасности, известные ограничения |
| [docs/docker.md](docs/docker.md) | Веб-консоль в контейнере |
| [docs/protocol.md](docs/protocol.md), [docs/rac-command-coverage.md](docs/rac-command-coverage.md) | Протоколы и покрытие команд |
| [docs/architecture.md](docs/architecture.md), [docs/development.md](docs/development.md) | Устройство и разработка |
| [CHANGELOG.md](CHANGELOG.md) | История изменений |

## Разработка

```bash
python -m pip install -e '.[desktop,mcp]' pytest
python -m pytest tests/ -q          # для Qt: QT_QPA_PLATFORM=offscreen
```

Исходники интерфейса веб-консоли — в `web-ui/` (см. [web-ui/README.md](web-ui/README.md)). Выпуск на PyPI выполняется вручную: [docs/pypi-release.md](docs/pypi-release.md).

## Лицензия

[MIT](LICENSE)
