Skip to main content

Declarative JSON-to-JSON transformation engine with a built-in template language

Project description

catnose

Motor de transformación declarativa de JSON con lenguaje de plantillas integrado.

Instalación

pip install catnose

Uso rápido

API

from catnose import transform

items = [{"id": 1, "first_name": "Ana", "role": "admin"}]

mapper = {
  "id":   "id",
  "name": "first_name",
  "role": {
    "_cases": {
      "admin": "Administrador",
      "user":  "Usuario",
      "_default": "Otro"
    }
  },
  "label": {"_value": "{{ name }} ({{ role }})"}
}

result = transform(items, mapper)
# [{"id": 1, "name": "Ana", "role": "Administrador", "label": "Ana (Administrador)"}]

CLI

catnose input.json transform.json
catnose input.json transform.json -o output.json

La entrada puede ser un array JSON o un objeto JSON. Si es un objeto, se trata como una lista de un único elemento y recibe _rownum = 1.

Formato del mapeador

El JSON transformado parte de un objeto vacío; sólo se incluyen los campos declarados explícitamente. El JSON original actúa como contexto de evaluación junto con los campos ya calculados (en orden de definición).

{
  "<campo_destino>": "<campo_origen>",
  "<campo_destino>": {
    "_name":   "<campo_origen>",
    "_cases":  {"v1": "nuevo_v1", "_default": "<por_defecto>"},
    "_value":  "cadena con {{ expr }}"
  },
  "<campo_lista>": {
    "<sub_campo>": {
      "_name":  "<campo_origen>",
      "_cases": {"v1": "nv1"},
      "_value": "{{ expr }}"
    }
  }
}
Clave Descripción
"<campo>": "<origen>" Shorthand — copia el valor de <origen> del JSON original
_name Campo fuente en el JSON original (por defecto: la clave del mapper)
_cases Tabla de sustitución de valores; _default se usa si no hay coincidencia
_value Plantilla evaluada con el motor de expresiones

Un mapping dict sin ninguna clave de control (_name, _cases, _value) se trata como lista de objetos, aplicando los sub-mapeos a cada elemento.

Motor de plantillas

Las expresiones _value usan la sintaxis {{ expr }} con evaluación Python completa. También se soportan bloques {% for %}, {% if %} / {% else %} / {% endif %}:

{
  "summary": {"_value": "{{ title.upper() }} — {{ cwss_score }} puntos"},
  "tags":    {"_value": "{% for t in tags %}[{{ t }}]{% endfor %}"}
}

El contexto de evaluación incluye:

  • Todos los campos del JSON original
  • Los campos ya calculados por mappings anteriores (en orden)
  • _rownum (1..N, posición del elemento en el array; si la entrada es un objeto único, vale 1)

Para campos de tipo lista, el contexto incluye además los campos de cada elemento de la lista.

Historial de cambios

1.1.0

  • transform acepta ahora un objeto JSON (dict) además de un array. Si la entrada es un objeto, devuelve un objeto en lugar de una lista.
  • CLI actualizado para admitir ficheros de entrada que sean un objeto JSON único, asignándole _rownum = 1.

1.0.1

  • Añadido logotipo del proyecto.

1.0.0

  • rownum renombrado a _rownum en el contexto de evaluación para evitar colisiones con campos del JSON original.
  • _parse_list eliminada del API pública (era un detalle de implementación interno).

0.0.1

  • Versión inicial: motor de transformación declarativa, motor de plantillas {{ expr }} / {% for %} / {% if %}, y CLI.

Licencia

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

catnose-1.1.0.tar.gz (273.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

catnose-1.1.0-py3-none-any.whl (8.5 kB view details)

Uploaded Python 3

File details

Details for the file catnose-1.1.0.tar.gz.

File metadata

  • Download URL: catnose-1.1.0.tar.gz
  • Upload date:
  • Size: 273.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for catnose-1.1.0.tar.gz
Algorithm Hash digest
SHA256 48cd9f6fa01a381b1a4dba37033629908034f2d08f4c524db8477828b63a08e7
MD5 c81770ec84bc206e528c8043125bd9a4
BLAKE2b-256 873e3a6619aaa7888ed5224254e2023b36633a87c8b23cc4c7ff0f395729d2b7

See more details on using hashes here.

File details

Details for the file catnose-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: catnose-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 8.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for catnose-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f03522b9dd3588cc158a7423b710b1fc933c311f840c712578334d537aad1ac8
MD5 b229310160d5423f43292e9e5978bf79
BLAKE2b-256 822a1714b85088945c2c0b14fe0dcbfedc4f598c3caded18c2b1add2ba57ef5f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page