Skip to main content

Your package description

Project description

pyRegRep

Бібліотека Python для парсування та обробки XML документів у форматі RIM (Registry Information Model) / ebXML.

Опис

pyRegRep — інструмент для роботи з XML документами стандарту Registry Information Model (RIM), що застосовується в системах eGovernment та обміну даними (зокрема, OOTS/EDM). Бібліотека дозволяє легко витягувати, аналізувати та серіалізувати дані з RIM/ebXML документів, а також програмно створювати коректні RIM-слоти різних типів.

Можливості

  • ✅ Парсування RIM/ebXML XML документів (bytes або str)
  • ✅ Автоматична обробка просторів імен (namespaces)
  • ✅ Витягування запитів (Query), винятків (Exception) та об'єктів реєстру (RegistryObject)
  • ✅ Обробка всіх типів значень: Boolean, String, Integer, DateTime, Collection, InternationalString, AnyValue
  • ✅ Серіалізація даних у зручний Python-формат (dict)
  • ✅ Фабрика слотів get_slot() — програмне створення RIM-слотів за типом
  • ✅ Серіалізація AnyValueType через xmltodict (параметр any_type=True)
  • ✅ Підтримка вкладених колекцій та складних структур

Вимоги

  • Python: >= 3.10
  • Залежності:
    • lxml >= 5.2.1 — робота з XML
    • xmltodict >= 0.13.0 — серіалізація AnyValueType

Установка

# З PyPI (якщо опубліковано)
pip install pyRegRep

# З локального джерела (editable)
pip install -e .

# Залежності вручну
pip install -r requirements.txt

Швидкий старт

Парсування XML документу

from pyRegRep4.RIMParsing import Parsing

with open("document.xml", "rb") as f:
    parser = Parsing(f.read())

# Усі слоти у вигляді {category: {name: (type, value)}}
print(parser.slots)

# Серіалізовані дані (без типової інформації)
print(parser.serialize())

# Серіалізація з обробкою AnyValueType в dict
print(parser.serialize(any_type=True))

Програмне створення RIM-слотів

import datetime
from lxml import etree
from pyRegRep4.RIMElement import get_slot

# Текстовий слот
slot = get_slot("SpecificationIdentifier", "StringValueType", "oots-edm:v1.2")
print(slot.name)   # 'SpecificationIdentifier'
print(slot.value)  # 'oots-edm:v1.2'
print(slot.text)   # XML як bytes

# Логічний слот
slot = get_slot("PossibilityForPreview", "BooleanValueType", True)

# Слот дата/час
slot = get_slot("IssueDateTime", "DateTimeValueType", datetime.datetime.now())

# Багатомовний слот через dict-список
slot = get_slot(
    "Title",
    "InternationalStringValueType",
    [
        {"lang": "en", "text": "Birth Certificate"},
        {"lang": "uk", "text": "Свідоцтво про народження"},
    ],
)

# Довільний XML (AnyValueType)
elem = etree.Element("CustomData")
elem.text = "Payload"
slot = get_slot("CustomPayload", "AnyValueType", elem)

API Довідник

Клас Parsing (pyRegRep4.RIMParsing)

Конструктор

Parsing(doc: bytes | str)
Параметр Тип Опис
doc bytes | str XML документ

Атрибути

Атрибут Тип Опис
xml str XML як рядок
doc etree._Element Розібраний XML документ
query etree._Element | None Елемент Query (якщо є)
exception etree._Element | None Елемент Exception (якщо є)
objects list Список RegistryObject елементів
slots dict Всі слоти у форматі {category: {name: (type, value)}}

Категорії slots: "doc", "query", "exception", "object".

Метод serialize(any_type: bool = False) -> dict

Серіалізує слоти в чистий Python-формат, видаляючи типову інформацію.

Тип значення Python-результат
BooleanValueType bool
StringValueType str
DateTimeValueType str (ISO format)
IntegerValueType int
CollectionValueType list
InternationalStringValueType list[dict] з ключами lang/text
AnyValueType (за замовчуванням) etree._Element
AnyValueTypeany_type=True) dict (через xmltodict)

Функція get_slot() (pyRegRep4.RIMElement)

get_slot(name: str, slot_type: str, value: Any) -> Xml

Фабрика для програмного створення RIM-слотів.

Параметр Тип Опис
name str Ім'я слота
slot_type str Тип слота (див. таблицю нижче)
value Any Значення слота

Підтримані типи:

slot_type Тип value Опис
"StringValueType" str Текстовий рядок
"BooleanValueType" bool Логічне значення
"DateTimeValueType" datetime.datetime або str Дата/час
"CollectionValueType" etree._Element Колекція елементів
"AnyValueType" etree._Element Довільний XML елемент
"InternationalStringValueType" etree._Element, list[etree._Element] або list[dict] Багатомовний текст

Повертає об'єкт Xml з властивостями:

  • name — ім'я слота
  • value — значення
  • element — XML елемент (etree._Element)
  • text — серіалізований XML (bytes)

Викидає ValueError при невідомому типі слота.

try:
    slot = get_slot("Bad", "UnknownType", "value")
except ValueError as e:
    print(e)  # Невідомий тип слота: UnknownType. Підтримувані типи: [...]

Клас NS (pyRegRep4.NS)

Базовий клас для управління RIM namespace. Надає метод _tname(prefix, localname) для генерування кваліфікованих імен тегів у нотації Clark.


Виняток ParsingError (pyRegRep4.RIMParsing)

Базовий клас для помилок парсування. Кидається при некоректному XML або відсутньому namespace.

Структура проекту

pyRegRep/
├── pyRegRep4/
│   ├── __init__.py          # Експорт: get_slot та типи слотів
│   ├── RIMElement.py        # Класи слотів + фабрика get_slot()
│   ├── RIMParsing.py        # Парсер Parsing + serialize()
│   └── NS.py                # Базовий клас для namespace
├── tests/
│   ├── conftest.py          # sys.path для CI
│   ├── test_rim_parsing.py  # Тести парсера
│   ├── test_rim_element.py  # Тести get_slot() та типів слотів
│   ├── EDM_Ferst_Request.xml
│   ├── EDM_Ferst_Response.xml
│   ├── EDM_Second_Request.xml
│   └── EDM_Second_Response.xml
├── example/
│   ├── Example_1.py
│   ├── example_anyvaluetype_usage.py
│   └── example_get_slot_usage.py
├── setup.py
├── pyproject.toml
├── requirements.txt
└── README.md

Запуск тестів

# Встановлення залежностей
pip install lxml xmltodict pytest

# Усі тести
python -m pytest --disable-warnings -q

# Тільки тести парсера
python -m pytest tests/test_rim_parsing.py -v

# Тільки тести слотів
python -m pytest tests/test_rim_element.py -v

Логування

Бібліотека використовує стандартний logging. Для увімкнення:

import logging
logging.basicConfig(level=logging.DEBUG)

Технічні деталі

Обробка просторів імен

Namespace витягуються автоматично з кореневого елемента документа та зберігаються у parser._ns у форматі {prefix: uri}.

Формат slots

{
    "doc": {
        "SpecificationIdentifier": ("StringValueType", "oots-edm:v1.2"),
        "IssueDateTime": ("DateTimeValueType", "2024-03-15T10:30:00"),
        "PossibilityForPreview": ("BooleanValueType", "false"),
    },
    "query": {},
    "exception": {},
    "object": {}
}

Автор

Andrey Shapovalovmt.andrey@gmail.com

Ліцензія

MIT License — див. файл LICENSE

Посилання


Версія: 10 · Оновлено: 2026-03-11

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

pyregrep-10.tar.gz (18.7 kB view details)

Uploaded Source

Built Distribution

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

pyregrep-10-py3-none-any.whl (13.1 kB view details)

Uploaded Python 3

File details

Details for the file pyregrep-10.tar.gz.

File metadata

  • Download URL: pyregrep-10.tar.gz
  • Upload date:
  • Size: 18.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyregrep-10.tar.gz
Algorithm Hash digest
SHA256 b89a31f9c6cc30c023206285e3beefc9a5d5385454fa5ddae3171fb4385e4e02
MD5 0e9e6205c40384a0976384e6fd1ab8d2
BLAKE2b-256 a67412ebf354df6a7b6c67917e9111479ac54cbb81a6ecb7d6ee91f7f7029bbd

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyregrep-10.tar.gz:

Publisher: python-publish.yml on AndreyShapovalovVN/pyRegRep

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyregrep-10-py3-none-any.whl.

File metadata

  • Download URL: pyregrep-10-py3-none-any.whl
  • Upload date:
  • Size: 13.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyregrep-10-py3-none-any.whl
Algorithm Hash digest
SHA256 cf50f5cb10d3fdcf7acc43d0ee56af4cda48b0b973c56fe47e343197519ea88a
MD5 6fe249cef9147dc9cd68c98b366a1a11
BLAKE2b-256 7990bd24f5637ac60881815834a9862d3adb30675c47edd317e399277b6cf019

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyregrep-10-py3-none-any.whl:

Publisher: python-publish.yml on AndreyShapovalovVN/pyRegRep

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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