Metadata-Version: 2.4
Name: python-rac
Version: 0.4.5
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: Documentation, https://gitlab.com/platform42/python-rac/-/blob/beta/README.md
Keywords: 1c,ras,rac,administration,mcp
Classifier: Development Status :: 3 - Alpha
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
Provides-Extra: desktop
Requires-Dist: PySide6<7,>=6.8; extra == "desktop"
Requires-Dist: keyring>=25; extra == "desktop"
Provides-Extra: secrets
Requires-Dist: keyring>=25; extra == "secrets"
Provides-Extra: mcp
Requires-Dist: mcp<3,>=2; extra == "mcp"
Requires-Dist: pydantic<3,>=2; extra == "mcp"
Provides-Extra: build-exe
Requires-Dist: pyinstaller>=6; extra == "build-exe"
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>

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

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

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

- Протокол `16.0` (1С 8.5.1) — основной; узкий набор чтений для `10.0` (1С 8.3.11) и режим `auto` (только чтение).
- Чтение кластеров, серверов, процессов, ИБ, сеансов, соединений, блокировок, профилей безопасности, счётчиков, ограничений, правил и настроек сервисов.
- Защищённые изменения: каждое с повторным чтением и сверкой результата.
- Интерфейсы: библиотека `asyncio`, CLI, веб-консоль, настольная консоль, MCP-сервер.
- Несколько RAS в одной консоли (до 64); серверы, добавленные вручную, сохраняются в [файле настроек](docs/settings.md).
- [Автопоиск серверов RAS](docs/discovery.md) по диапазонам адресов (IP, CIDR, имена с числовым суффиксом).
- Вход по логину и паролю администратора для любых чтений и изменений; отдельные учётные данные администратора информационной базы (не проверены на живом RAS); пароли хранятся в связке ключей ОС (или в файле настроек).
- Веб-консоль с мастер-паролем, [образ Docker](docs/docker.md) и exe настольной консоли для Windows.

## Установка

Python 3.11+.

```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: пароли в связке ключей ОС (для web)
```

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

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

```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
```

**Веб-консоль** (Vue SPA, Node.js не нужен; `--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
```

Для Windows есть готовый exe без Python (артефакты CI, [docs/desktop.md](docs/desktop.md#готовый-exe-для-windows); exe не подписан).

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

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

**MCP-сервер** (stdio)

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

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

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

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

| Документ | О чём |
| --- | --- |
| [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)
