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— робота з XMLxmltodict >= 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 |
AnyValueType (з any_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 Shapovalov — mt.andrey@gmail.com
Ліцензія
MIT License — див. файл LICENSE
Посилання
Версія: 9 · Оновлено: 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
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 pyregrep-9.tar.gz.
File metadata
- Download URL: pyregrep-9.tar.gz
- Upload date:
- Size: 18.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f3b2adeee2999e8ded2f23e6f1cfa96853b0b8e976c97fe00479b15fc4e00d8
|
|
| MD5 |
72aa6b569d60941e8e01de944aa2a650
|
|
| BLAKE2b-256 |
1494fb13a5e71612edb42132c9db0af97b76ae6364246da4e19fd5171b0efde3
|
Provenance
The following attestation bundles were made for pyregrep-9.tar.gz:
Publisher:
python-publish.yml on AndreyShapovalovVN/pyRegRep
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyregrep-9.tar.gz -
Subject digest:
0f3b2adeee2999e8ded2f23e6f1cfa96853b0b8e976c97fe00479b15fc4e00d8 - Sigstore transparency entry: 1110076556
- Sigstore integration time:
-
Permalink:
AndreyShapovalovVN/pyRegRep@954e2ca32d5ac57a5deb6446e88cdd201a738b81 -
Branch / Tag:
refs/tags/v9 - Owner: https://github.com/AndreyShapovalovVN
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@954e2ca32d5ac57a5deb6446e88cdd201a738b81 -
Trigger Event:
release
-
Statement type:
File details
Details for the file pyregrep-9-py3-none-any.whl.
File metadata
- Download URL: pyregrep-9-py3-none-any.whl
- Upload date:
- Size: 13.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f8eee7afa439dd0adbc87be6c3b10dcf75fdaa62c9394707c6c59e9c0f9bee89
|
|
| MD5 |
4eb7adc88e4a350eaeb03fe3ecd99311
|
|
| BLAKE2b-256 |
20ce476a237de1bcacf3bcfc608d0539d19fd1f16d47f22924b39635a5f195d4
|
Provenance
The following attestation bundles were made for pyregrep-9-py3-none-any.whl:
Publisher:
python-publish.yml on AndreyShapovalovVN/pyRegRep
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyregrep-9-py3-none-any.whl -
Subject digest:
f8eee7afa439dd0adbc87be6c3b10dcf75fdaa62c9394707c6c59e9c0f9bee89 - Sigstore transparency entry: 1110076572
- Sigstore integration time:
-
Permalink:
AndreyShapovalovVN/pyRegRep@954e2ca32d5ac57a5deb6446e88cdd201a738b81 -
Branch / Tag:
refs/tags/v9 - Owner: https://github.com/AndreyShapovalovVN
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@954e2ca32d5ac57a5deb6446e88cdd201a738b81 -
Trigger Event:
release
-
Statement type: