openwaf.py es un único módulo para Python 3.8 o posterior que solo usa la biblioteca estándar (urllib). Descárgalo de https://dash.openwaf.dev/v1/sdk/openwaf.py y ponlo junto a tu código o en tu PYTHONPATH.
from openwaf import OpenWAF, OpenWAFErrorOpenWAF(token=None, base_url=None, org=None, timeout=60.0)
| Argumento | Por defecto |
|---|---|
token | OPENWAF_TOKEN |
base_url | OPENWAF_API_URL; ponla a https://dash.openwaf.dev |
org | OPENWAF_ORG; si no, la organización del token |
timeout | 60 segundos por petición |
| Miembro | Significado |
|---|---|
base_url, token, timeout | Los valores en uso. |
org_id() -> str | La organización que usan los métodos por defecto (se pide una vez si no está configurada). |
request(method, path, *, …) | La llamada genérica que hay detrás de cada método (abajo). |
Métodos
Cada operación de la API es un método con el nombre de su id de operación en snake_case. Todos los argumentos van con nombre:
owf.list_zones(*, org=None, include=None)
owf.create_record(*, zone, body, reason, org=None, if_match=None, dry_run=None)
owf.revert_zone(*, zone, body, reason, if_match, org=None, dry_run=None)
owf.purge_cache(*, zone, body, org=None, reason=None, dry_run=None)
owf.get_zone_diff(*, zone, org=None, from_=None, to=None)- Los parámetros de ruta y de consulta son argumentos con el mismo nombre. Un parámetro cuyo nombre es una palabra reservada de Python lleva un guion bajo:
from_. bodyes undict(o una lista) que se envía como JSON.- Los métodos de escritura reciben
reason(X-Change-Reason),if_match(If-Match, una versiónintostr) ydry_run(?dry_run=1) cuando su operación los admite; los obligatorios no tienen valor por defecto. - Cada método devuelve el cuerpo decodificado: un
dicto unalistsi es JSON, unstrsi es texto yNonesi la respuesta está vacía.
Métodos de uso habitual:
| Tarea | Método |
|---|---|
| Zonas | list_zones, get_zone, create_zone, delete_zone |
| Registros DNS | list_records, create_record, update_record, delete_record, batch_records |
| Ajustes de borde y reglas | get_zone_edge, update_zone_edge, list_rules, create_rule, delete_rule |
| Historial | list_zone_versions, get_zone_version, get_zone_diff, revert_zone, get_zone_propagation |
| Caché | purge_cache, list_cache_purges |
| Auditoría | list_audit |
El docstring de cada método da el resumen de la operación y su método y ruta HTTP. La referencia de la API enumera todas las operaciones.
request(method, path, *, …)
res = owf.request("GET", "/v1/orgs/%s/zones" % owf.org_id(), query={"include": "merged"})| Argumento | Significado |
|---|---|
query | Parámetros de consulta; los None se omiten y los booleanos pasan a true/false. |
body, content_type | Valor JSON, o texto/bytes con otro content_type. |
reason, if_match, dry_run | Opciones de cambio. |
auth | False no envía el token (rutas públicas). |
headers | Cabeceras adicionales. |
OpenWAFError
| Atributo | Significado |
|---|---|
status | Estado HTTP; 0 si no hubo respuesta de la API. |
code | Código de error de la API, como not_found, invalid, version_conflict; o no_token, org_unresolved, unreachable en los fallos del cliente. |
message | El mensaje. |
field | El campo de un error de validación, cuando se indica. |
body | El cuerpo del error decodificado, como {"current_version": 9, …}. |
str(e) es código (HTTP estado): mensaje. Ver Gestión de errores.