Metadata-Version: 2.4
Name: esb1c-app
Version: 0.1.3
Summary: Connect-builder for 1C:ESB
Author-email: Vladimir Nadulich <g240596448@gmail.com>
License-Expression: MIT
Project-URL: Homepage, https://gitlab.com/240596448/esb1c_app
Project-URL: Documentation, https://gitlab.com/240596448/esb1c_app/-/blob/master/README.md
Project-URL: Repository, https://gitlab.com/240596448/esb1c_app.git
Project-URL: Bug Tracker, https://gitlab.com/240596448/esb1c_app/issues
Keywords: 1c,onec
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests>=2.31
Provides-Extra: dev
Requires-Dist: pytest>=8.0; extra == "dev"
Dynamic: license-file

# esb1c-app

Клиентская библиотека для интеграции с 1C:ESB (1С:Шина), которая помогает получать метаданные каналов, их актуальные назначения и формировать AMQP-подключение для приложений, опубликованных в 1С:Шине.

## Возможности
- `Application` автоматически получает `id_token` по протоколу OAuth 2.0 (`client_credentials`) и переиспользует его во всех запросах.
- Загрузка метаданных каналов (`/sys/esb/metadata/channels`) с разбором описаний и прав доступа.
- Получение актуальных назначений каналов (`/sys/esb/runtime/channels`) и определение активных каналов отправки/получения.
- Формирование AMQP URL вида `amqp://<token>:<token>@<host>:<port>/applications/<application>` на основе данных ESB.

## Установка
```bash
pip install esb1c-app
```

Либо установите из исходников:
```bash
pip install .
```

## Быстрый старт
```python
import os
from esb1c import Application

application = Application(
    url=os.environ["APPLICATION_URL"],
    client_id=os.environ["CLIENT_ID"],
    client_secret=os.environ["CLIENT_SECRET"],
)

print(application.id_token)
print(application.sender)
print(application.receiver)
print(application.amqp_url)

print("Исходящие каналы:")
for channel in application.channels.senders:
    print(
        channel.channel,
        channel.process,
        channel.destination,
        channel.channel_description,
        sep=" | ",
    )

print("Входящие каналы:")
for channel in application.channels.receivers:
    print(
        channel.channel,
        channel.process,
        channel.destination,
        channel.process_description,
        sep=" | ",
    )
```

## Переменные окружения
- `APPLICATION_URL` — полный URL вида `http(s)://host(:port)/applications/<имя>` для нужного приложения в 1C:ESB.
- `CLIENT_ID` и `CLIENT_SECRET` — учетные данные пользователя (информационной базы).

Если переменные окружения заданы - библиотека готова к использованию.

## Тестирование
Установите зависимости для разработки:
```bash
pip install .[dev]
```

Запустите тесты:
```bash
pytest
```

По умолчанию запросы к API 1C:ESB подменяются моками. Чтобы прогнать тесты на реальном окружении, задайте переменные `APPLICATION_URL`, `CLIENT_ID`, `CLIENT_SECRET` - это дополнит тестовые наборы (или удалите/отключите фикстуру `mock_requests`).

## Требования
- Python 3.9+
- `requests`

## Лицензия
Проект распространяется по лицензии MIT.

