Metadata-Version: 2.4
Name: kiwi-tcms-api
Version: 0.0.1
Summary: Python client for Kiwi TCMS JSON-RPC API
License-Expression: MIT
Project-URL: Repository, https://github.com/alekseyvm/kiwi-tcms-api
Keywords: kiwi,tcms,test management,json-rpc,api,client
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Testing
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests>=2.20
Requires-Dist: beautifulsoup4>=4.9
Dynamic: license-file

# kiwi-tcms-api

Python-клиент для работы с [Kiwi TCMS](https://kiwitcms.org/) через JSON-RPC API.

## Установка

```bash
pip install kiwi-tcms-api
```

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

- Подключение с авторизацией через сессию (CSRF + Cookie)
- 4 способа инициализации клиента
- Конфигурация через переменные окружения
- Полное покрытие официального API: TestCase, TestRun, TestPlan, TestExecution, Product, Build, User и др.
- Два стиля вызова: именованные методы и dot-нотация (`rpc.Product.filter()`)
- Поддержка самоподписанных SSL-сертификатов

## Установка зависимостей

```bash
pip install requests beautifulsoup4
```

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

```python
from kiwi_tcms_api import KiwiTCMSApi

rpc = KiwiTCMSApi(url='https://tcms.example.com', username='admin', password='secret')

# Получить список продуктов
products = rpc.Product_filter()

# Создать тест-ран
run = rpc.TestRun_create({
    'summary': 'Smoke Tests',
    'plan': 1,
    'build': 1,
    'manager': 1,
})
```

## Способы инициализации

```python
# 1. Из переменных окружения
rpc = KiwiTCMSApi()

# 2. Явные параметры
rpc = KiwiTCMSApi(url='https://tcms.example.com', username='admin', password='secret')

# 3. Отложенное подключение
rpc = KiwiTCMSApi.configure(url='https://tcms.example.com', username='admin', password='secret')
rpc.connect()

# 4. Из словаря конфигурации
cfg = {'url': 'https://tcms.example.com', 'username': 'admin', 'password': 'secret'}
rpc = KiwiTCMSApi.from_config(cfg)
```

## Переменные окружения

| Переменная                  | По умолчанию            | Описание                          |
|-----------------------------|-------------------------|-----------------------------------|
| `KIWI_TCMS_API_URL`         | `http://localhost:8000` | URL сервера Kiwi TCMS             |
| `KIWI_TCMS_API_USERNAME`    | —                       | Имя пользователя                  |
| `KIWI_TCMS_API_PASSWORD`    | —                       | Пароль                            |
| `KIWI_TCMS_API_VERIFY_SSL`  | `true`                  | Проверка SSL-сертификата (`false` для самоподписанных) |

## Стили вызова методов

```python
# Именованный метод
rpc.TestCase_filter({'product': 1})

# Dot-нотация (модуль.метод)
rpc.TestCase.filter({'product': 1})

# Прямой вызов exec
rpc.exec('TestCase.filter', [{'product': 1}])
```

## Покрытие API

| Модуль               | Методы                                                                                      |
|----------------------|---------------------------------------------------------------------------------------------|
| `Auth`               | login, logout                                                                               |
| `TestCase`           | create, filter, update, remove, add/remove tag/component/attachment/comment/property и др. |
| `TestPlan`           | create, filter, update, add/remove case/tag/attachment, tree                                |
| `TestRun`            | create, filter, update, add/remove case/tag/cc/attachment/property                         |
| `TestExecution`      | create, filter, update, add/remove comment/link/attachment/property                         |
| `TestCaseStatus`     | create, filter                                                                              |
| `TestExecutionStatus`| create, filter                                                                              |
| `Product`            | create, filter                                                                              |
| `Build`              | create, filter, update                                                                      |
| `Version`            | create, filter                                                                              |
| `Component`          | create, filter, update                                                                      |
| `Category`           | create, filter                                                                              |
| `Environment`        | create, filter, add/remove property                                                         |
| `User`               | filter, update, deactivate, join_group, add_attachment                                      |
| `Group`              | filter, permissions, users                                                                  |
| `Bug`                | details, report                                                                             |
| `BugTracker`         | create, filter                                                                              |
| `Tag`                | create, filter                                                                              |
| `Template`           | create, filter                                                                              |
| `PlanType`           | create, filter                                                                              |
| `Priority`           | create, filter                                                                              |
| `Classification`     | create, filter                                                                              |
| `Attachment`         | remove_attachment                                                                           |
| `Markdown`           | render                                                                                      |
| `Kiwitcms`           | version                                                                                     |
| `Utils`              | tracker_from_url                                                                            |

## Примеры

### Создание тест-кейса и добавление в план

```python
rpc = KiwiTCMSApi()

case = rpc.TestCase_create({
    'summary': 'Проверка авторизации',
    'product': 1,
    'category': 1,
    'priority': 1,
    'case_status': 2,
})

rpc.TestPlan_add_case(plan_id=5, case_id=case['id'])
```

### Обновление статуса выполнения

```python
rpc.TestExecution_update(execution_id=42, values={'status': 4})
```

### Добавление ссылки к выполнению

```python
rpc.TestExecution_add_link({
    'execution': 42,
    'url': 'https://jira.example.com/browse/BUG-123',
    'name': 'BUG-123',
})
```

### Отключение проверки SSL (самоподписанный сертификат)

```python
rpc = KiwiTCMSApi(url='https://tcms.internal', username='admin', password='secret', verify_ssl=False)
# или через переменную окружения:
# KIWI_TCMS_API_VERIFY_SSL=false
```

### Диагностика доступных методов

```python
rpc.discover_methods()
```
