Update README for clarity and consistency
- Simplified the description of the OxiAPI entry point. - Improved formatting of parameter and property tables for better readability. - Updated example outputs to reflect changes in node names and configurations.
This commit is contained in:
64
README.md
64
README.md
@@ -21,7 +21,7 @@ Python-клиент для работы с Oxidized API — системой у
|
|||||||
> Пакет распространяется через Gitea Package Registry и исходники репозитория.
|
> Пакет распространяется через Gitea Package Registry и исходники репозитория.
|
||||||
> В PyPI пакет не публикуется.
|
> В PyPI пакет не публикуется.
|
||||||
|
|
||||||
**Требования:** Python 3.13+
|
**Требования:** Python 3.11+
|
||||||
|
|
||||||
### Из Gitea Package Registry
|
### Из Gitea Package Registry
|
||||||
|
|
||||||
@@ -121,7 +121,7 @@ print(node.config.vlans.json())
|
|||||||
|
|
||||||
### OxiAPI
|
### OxiAPI
|
||||||
|
|
||||||
Точка входа в библиотеку. Управляет HTTP-сессией и предоставляет доступ к узлам.
|
Точка входа. Управляет HTTP-сессией и предоставляет доступ к узлам.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
OxiAPI(
|
OxiAPI(
|
||||||
@@ -132,12 +132,14 @@ OxiAPI(
|
|||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
| Параметр | Тип | Описание |
|
| Параметр | Тип | Описание |
|
||||||
|------------|--------|----------------------------------------------------------------|
|
| ---------- | ------ | --------------------------------------------------------- |
|
||||||
| `url` | `str` | Базовый URL Oxi API, например `https://oxi.example.com` |
|
| `url` | `str` | Базовый URL Oxi API, например `https://oxi.example.com` |
|
||||||
| `username` | `str` | Имя пользователя для базовой аутентификации (опционально) |
|
| `username` | `str` | Имя пользователя для базовой аутентификации (опционально) |
|
||||||
| `password` | `str` | Пароль для базовой аутентификации (опционально) |
|
| `password` | `str` | Пароль для базовой аутентификации (опционально) |
|
||||||
| `verify` | `bool` | Проверять SSL-сертификат. `False` — отключить проверку |
|
| `verify` | `bool` | Проверять SSL-сертификат. `True` по умолчанию |
|
||||||
|
|
||||||
|
|
||||||
**Пример:**
|
**Пример:**
|
||||||
|
|
||||||
@@ -154,16 +156,18 @@ api = OxiAPI(
|
|||||||
|
|
||||||
# Использование как контекстного менеджера (автоматически закрывает сессию)
|
# Использование как контекстного менеджера (автоматически закрывает сессию)
|
||||||
with OxiAPI(url="https://oxi.example.com") as api:
|
with OxiAPI(url="https://oxi.example.com") as api:
|
||||||
node = api.node("Router_HOME")
|
node = api.node("HQ")
|
||||||
print(node.ip)
|
print(node.ip)
|
||||||
|
|
||||||
|
>>> 192.168.1.1
|
||||||
```
|
```
|
||||||
|
|
||||||
#### `api.node(name)`
|
#### `api.node(name)`
|
||||||
|
|
||||||
Возвращает [`NodeView`](#nodeview) для указанного узла.
|
Возвращает `[NodeView](#nodeview)` для указанного узла.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
node = api.node("Router_HOME")
|
node = api.node("HQ")
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -172,25 +176,28 @@ node = api.node("Router_HOME")
|
|||||||
|
|
||||||
Представление узла сети. Содержит метаданные и ленивый доступ к конфигурации.
|
Представление узла сети. Содержит метаданные и ленивый доступ к конфигурации.
|
||||||
|
|
||||||
|
|
||||||
| Свойство | Тип | Описание |
|
| Свойство | Тип | Описание |
|
||||||
|-------------|--------------|-----------------------------------------------|
|
| ----------- | ------------ | ---------------------------------------------------- |
|
||||||
| `ip` | `str` | IP-адрес узла |
|
| `ip` | `str` | IP-адрес узла |
|
||||||
| `full_name` | `str` | Полное имя узла в Oxi |
|
| `full_name` | `str` | Полное имя узла в Oxi |
|
||||||
| `group` | `str` | Группа, к которой принадлежит узел |
|
| `group` | `str` | Группа, к которой принадлежит узел |
|
||||||
| `model` | `str` | Модель устройства (используется для парсинга) |
|
| `model` | `str` | Модель устройства (используется для парсинга) |
|
||||||
| `config` | `NodeConfig` | Конфигурация узла (загружается при первом обращении) |
|
| `config` | `NodeConfig` | Конфигурация узла (загружается при первом обращении) |
|
||||||
|
|
||||||
|
|
||||||
**Пример:**
|
**Пример:**
|
||||||
|
|
||||||
```python
|
```python
|
||||||
node = api.node("Router_HOME")
|
node = api.node("HQ")
|
||||||
|
|
||||||
print(node.ip) # '10.0.0.1'
|
print(node.ip)
|
||||||
print(node.group) # 'branch-office'
|
print(node.group)
|
||||||
print(node.model) # 'keenetic'
|
print(node.model)
|
||||||
|
|
||||||
# Конфигурация загружается один раз (cached_property)
|
>>> 192.168.1.1
|
||||||
cfg = node.config
|
>>> branch-office
|
||||||
|
>>> keenetic
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -199,24 +206,30 @@ cfg = node.config
|
|||||||
|
|
||||||
Загружает и парсит конфигурацию устройства. Использует TTP-шаблоны, соответствующие модели устройства.
|
Загружает и парсит конфигурацию устройства. Использует TTP-шаблоны, соответствующие модели устройства.
|
||||||
|
|
||||||
Доступ к секциям конфигурации осуществляется через свойства, возвращающие [`ModelView`](#modelview).
|
Доступ к секциям конфигурации осуществляется через свойства, возвращающие `[ModelView](#modelview)`.
|
||||||
|
|
||||||
|
|
||||||
| Свойство | Возвращает | Описание |
|
| Свойство | Возвращает | Описание |
|
||||||
|--------------|-------------------------|-----------------------------------|
|
| ------------ | ----------------------------- | ---------------------------------- |
|
||||||
| `system` | `ModelView[System]` | Системная информация об устройстве |
|
| `system` | `ModelView[System]` | Системная информация об устройстве |
|
||||||
| `interfaces` | `ModelView[list[Interfaces]]` | Список интерфейсов |
|
| `interfaces` | `ModelView[list[Interfaces]]` | Список интерфейсов |
|
||||||
| `vlans` | `ModelView[list[Vlans]]` | Список VLAN (если есть) |
|
| `vlans` | `ModelView[list[Vlans]]` | Список VLAN (если есть) |
|
||||||
| `text` | `str` | Сырой текст конфигурации |
|
| `text` | `str` | Сырой текст конфигурации |
|
||||||
|
|
||||||
|
|
||||||
**Пример:**
|
**Пример:**
|
||||||
|
|
||||||
```python
|
```python
|
||||||
cfg = node.config
|
cfg = node.config
|
||||||
|
|
||||||
# Системная информация
|
# Системная информация
|
||||||
print(cfg.system.model) # 'RB951Ui-2nD'
|
print(cfg.system.model)
|
||||||
print(cfg.system.serial_number) # 'B88C0B31117B'
|
print(cfg.system.serial_number)
|
||||||
print(cfg.system.version) # '7.12.1'
|
print(cfg.system.version)
|
||||||
|
|
||||||
|
>>> Mikrotik RB951Ui-2nD
|
||||||
|
>>> B88C0B31117B
|
||||||
|
>>> 7.16.1
|
||||||
|
|
||||||
# Итерация по интерфейсам
|
# Итерация по интерфейсам
|
||||||
for iface in cfg.interfaces:
|
for iface in cfg.interfaces:
|
||||||
@@ -244,14 +257,16 @@ print(cfg.text)
|
|||||||
|
|
||||||
Обёртка над Pydantic-моделью или списком моделей. Обеспечивает сериализацию, итерацию и прозрачный доступ к атрибутам.
|
Обёртка над Pydantic-моделью или списком моделей. Обеспечивает сериализацию, итерацию и прозрачный доступ к атрибутам.
|
||||||
|
|
||||||
|
|
||||||
| Метод / свойство | Применимо к | Описание |
|
| Метод / свойство | Применимо к | Описание |
|
||||||
|------------------|----------------|---------------------------------------------------------------|
|
| ---------------- | ------------ | ------------------------------------------------- |
|
||||||
| `.json()` | оба варианта | Возвращает JSON-строку (с `by_alias=True`) |
|
| `.json()` | оба варианта | Возвращает JSON-строку (с `by_alias=True`) |
|
||||||
| `.<attr>` | оба варианта | Проксирует обращение к атрибутам вложенной модели |
|
| `.<attr>` | оба варианта | Проксирует обращение к атрибутам вложенной модели |
|
||||||
| `iter(view)` | список | Итерация по элементам списка моделей |
|
| `iter(view)` | список | Итерация по элементам списка моделей |
|
||||||
| `len(view)` | список | Количество элементов в списке |
|
| `len(view)` | список | Количество элементов в списке |
|
||||||
| `view[i]` | список | Получение элемента по индексу или срез |
|
| `view[i]` | список | Получение элемента по индексу или срез |
|
||||||
|
|
||||||
|
|
||||||
> `__iter__`, `__len__` и `__getitem__` доступны только для `interfaces` и `vlans` (они оборачивают список). Вызов этих методов на `system` (одиночная модель) вызовет `TypeError`.
|
> `__iter__`, `__len__` и `__getitem__` доступны только для `interfaces` и `vlans` (они оборачивают список). Вызов этих методов на `system` (одиночная модель) вызовет `TypeError`.
|
||||||
|
|
||||||
**Примеры:**
|
**Примеры:**
|
||||||
@@ -260,10 +275,12 @@ print(cfg.text)
|
|||||||
# Одиночная модель — system
|
# Одиночная модель — system
|
||||||
view = node.config.system
|
view = node.config.system
|
||||||
print(view.json())
|
print(view.json())
|
||||||
# '{"model":"RB951Ui-2nD","serial_number":"B88C0B31117B","version":"7.12.1"}'
|
>>> '{"model":"RB951Ui-2nD","serial_number":"B88C0B31117B","version":"7.12.1"}'
|
||||||
print(view.model) # 'RB951Ui-2nD'
|
print(view.model) # 'RB951Ui-2nD'
|
||||||
print(view.serial_number) # 'B88C0B31117B'
|
print(view.serial_number) # 'B88C0B31117B'
|
||||||
|
|
||||||
|
>>> RB951Ui-2nD
|
||||||
|
>>> B88C0B31117B
|
||||||
# Список — interfaces
|
# Список — interfaces
|
||||||
interfaces = node.config.interfaces
|
interfaces = node.config.interfaces
|
||||||
|
|
||||||
@@ -286,11 +303,13 @@ print(interfaces.json())
|
|||||||
|
|
||||||
## Поддерживаемые устройства
|
## Поддерживаемые устройства
|
||||||
|
|
||||||
|
|
||||||
| Устройство | Ключи реестра |
|
| Устройство | Ключи реестра |
|
||||||
|-------------|----------------------------------------|
|
| ---------- | -------------------------------- |
|
||||||
| Keenetic | `ndms`, `keenetic`, `keeneticos` |
|
| Keenetic | `ndms`, `keenetic`, `keeneticos` |
|
||||||
| MikroTik | `routeros`, `ros`, `mikrotik` |
|
| MikroTik | `routeros`, `ros`, `mikrotik` |
|
||||||
|
|
||||||
|
|
||||||
Ключи реестра — это значения поля `model`, возвращаемого API для узла. Регистр не учитывается.
|
Ключи реестра — это значения поля `model`, возвращаемого API для узла. Регистр не учитывается.
|
||||||
|
|
||||||
Добавить поддержку нового устройства можно самостоятельно — подробнее в разделе [Расширение моделей](docs/extending-models.md).
|
Добавить поддержку нового устройства можно самостоятельно — подробнее в разделе [Расширение моделей](docs/extending-models.md).
|
||||||
@@ -301,3 +320,4 @@ print(interfaces.json())
|
|||||||
|
|
||||||
- [Написание TTP-шаблонов](docs/templates.md)
|
- [Написание TTP-шаблонов](docs/templates.md)
|
||||||
- [Расширение и переопределение моделей устройств](docs/extending-models.md)
|
- [Расширение и переопределение моделей устройств](docs/extending-models.md)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user