pyreqif
Librería Python para leer, editar y reempaquetar documentos ReqIF (.reqif / .reqifz), el estándar OMG usado habitualmente para intercambiar requisitos entre fabricante y proveedor (p.ej. lastenheft de automoción).
Dos clases:
Reqif: un único fichero.reqif. Lee cada requisito (SPEC-OBJECT) con su texto, y dos campos configurables pensados para el flujo proveedor: comentario (Kommentar Lieferant M, XHTML) y estado (Status Lieferant M, enumerado). Permite editarlos, exportar/importar por Excel (con desplegable de validación para el estado, e imágenes embebidas en la celda si se le pasa un resolutor) y detecta las imágenes embebidas en el texto de cada requisito.Reqifz: un.reqifz(zip con uno o varios.reqifmás sus adjuntos). Extrae a un directorio de trabajo, expone cada.reqifcomo unReqif, y reempaqueta todo de vuelta conservando los adjuntos intactos.
Instalación
pip install pyreqifz
(el nombre del paquete en PyPI es pyreqifz — pyreqif ya estaba cogido — pero el módulo se sigue importando como pyreqif.)
Uso básico
from pyreqif import Reqifz
with Reqifz("lastenheft.reqifz") as pack:
for doc in pack:
print(doc, "->", len(doc), "requisitos")
doc = pack.get(0) # o pack.get("nombre_del_fichero.reqif")
# leer
req = doc.get("_a1b2c3...")
print(req.text, req.comment, req.status, req.images)
# editar (None deja el campo igual, "" lo vacía)
doc.update("_a1b2c3...", comment="Aceptado, sin cambios.", status="akzeptiert")
# exportar a Excel, con la primera imagen de cada requisito
# incrustada en su celda (columna "Imagen")
doc.to_excel("requisitos.xlsx", image_resolver=pack.image_path)
# importar de vuelta (solo toca comentario y estado)
doc.update_from_excel("requisitos_revisado.xlsx")
# volver a empaquetar con los cambios
pack.save("lastenheft_editado.reqifz")
Un .reqif suelto (sin comprimir) se usa igual, sin pasar por Reqifz (pero entonces to_excel() no puede incrustar imágenes, ya que no sabe dónde están los adjuntos — pásale tu propio image_resolver si los tienes en otro sitio):
from pyreqif import Reqif
doc = Reqif("documento.reqif")
doc.update("_a1b2c3...", status="Klärungsbedarf")
doc.save("documento_editado.reqif")
Nombres de atributo
Por defecto se usan los nombres estándar de ReqIF para el texto (ReqIF.Text / ReqIF.ChapterName como respaldo) y los nombres de campo de este flujo concreto de proveedor (Kommentar Lieferant M / Status Lieferant M). Si tu documento usa otros nombres, crea una subclase:
from pyreqif import Reqif
class MiReqif(Reqif):
COMMENT_ATTR = "Supplier Comment"
STATUS_ATTR = "Supplier Status"
Desarrollo
uv venv
uv pip install -e ".[dev]"
uv run pytest
Licencia
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyreqifz-0.1.1.tar.gz.
File metadata
- Download URL: pyreqifz-0.1.1.tar.gz
- Upload date:
- Size: 13.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
232c63dab71e02c3846319b08ec7de8e252d9bdcb72c8a4e82ca1eb651b92537
|
|
| MD5 |
fbeab517c7a326202b63bad5e31ae961
|
|
| BLAKE2b-256 |
18be508c2a02a90dd3dee495c5e90e22143e2c1327e52e2c4622e2a9daa3a64b
|
File details
Details for the file pyreqifz-0.1.1-py3-none-any.whl.
File metadata
- Download URL: pyreqifz-0.1.1-py3-none-any.whl
- Upload date:
- Size: 10.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
43e753c276c22106a42d61c353ff875309c54925b6d2057948e00f0617186e52
|
|
| MD5 |
f54700d9695ca6e9ed0bc26f953c2e78
|
|
| BLAKE2b-256 |
750f1bd0e8a9fb43b783e9dfc79118fb32f1525a396880ae15bb3d7f4dd801bc
|