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-слотів за типом - ✅ Builder-класи для елементів
RegistryObject,RepositoryItemRef,QueryResponse,Classification - ✅ Серіалізація
AnyValueTypeчерезxmltodict(параметрany_type=True) - ✅ Підтримка вкладених колекцій та складних структур
- ✅ Безпечний доступ до вкладених даних через
deep_get()
Вимоги
- Python: >= 3.10
- Залежності:
lxml >= 5.2.1— робота з XMLxmltodict >= 0.13.0— серіалізаціяAnyValueType
Установка
# З PyPI (якщо опубліковано)
pip install pyRegRep
# З локального джерела (editable)
pip install -e .
Під час встановлення через pip install pyRegRep або pip install -e . runtime-залежності (lxml, xmltodict) встановлюються автоматично.
Швидкий старт
Парсування 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))
from pyRegRep4 import deep_get
# Безпечний доступ до вкладених ключів
spec_id = deep_get(parser.serialize(), "doc", "SpecificationIdentifier", default="unknown")
print(spec_id)
Програмне створення 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. Підтримувані типи: [...]
Builder-класи XML елементів (pyRegRep4.RIMElement)
Публічні класи для побудови типових елементів RIM/query:
RegistryObjectRepositoryItemRefQueryResponseClassification
Усі класи мають однаковий базовий контракт:
element— повертаєetree._Element(абоValueError, якщо елемент ще не створено)text— серіалізований XML (bytes)create_element(...)— будує XML елемент і повертаєself(chain-style)
from pyRegRep4.RIMElement import RepositoryItemRef, QueryResponse
ref = RepositoryItemRef().create_element(
"https://example.org/document.xml",
"Document",
)
print(ref.text)
response = QueryResponse().create_element(
"urn:oasis:names:tc:ebxml-regrep:ResponseStatusType:Success",
"req-1",
)
print(response.element.tag)
Функція deep_get() (pyRegRep4.utils)
deep_get(data: dict, *keys, default=None)
Безпечно дістає значення з вкладеного dict за послідовністю ключів.
| Параметр | Тип | Опис |
|---|---|---|
data |
dict |
Джерело даних |
*keys |
Any |
Шлях ключів для проходу по вкладеному словнику |
default |
Any |
Значення за замовчуванням, якщо шлях не знайдено |
Поведінка:
- якщо на будь-якому кроці значення не є
dict— повертаєтьсяdefault - якщо кінцеве значення
None— повертаєтьсяdefault - якщо
keysне передані — повертаєтьсяdata
from pyRegRep4 import deep_get
data = {
"doc": {
"Procedure": [{"lang": "en", "value": "GetBirthCertificate"}]
}
}
value = deep_get(data, "doc", "Procedure", 0, "value", default="n/a")
print(value) # n/a (бо deep_get працює тільки з dict-ланцюжком)
procedure = deep_get(data, "doc", "Procedure", default=[])
print(procedure) # [{"lang": "en", "value": "GetBirthCertificate"}]
Клас NS (pyRegRep4.NS)
Базовий клас для управління RIM namespace. Надає метод _tname(prefix, localname) для генерування кваліфікованих імен тегів у нотації Clark.
Виняток ParsingError (pyRegRep4.RIMParsing)
Базовий клас для помилок парсування. Кидається при некоректному XML або відсутньому namespace.
Структура проекту
pyRegRep/
├── pyRegRep4/
│ ├── __init__.py # Експорт: get_slot, deep_get, Parsing, serialize_any_value_type
│ ├── RIMElement.py # Класи слотів + фабрика get_slot()
│ ├── RIMParsing.py # Парсер Parsing + serialize()
│ ├── utils.py # deep_get() для вкладених словників
│ └── NS.py # Базовий клас для namespace
├── tests/
│ ├── conftest.py # sys.path для CI
│ ├── test_rim_parsing.py # Тести парсера
│ ├── test_rim_element.py # Тести get_slot() та типів слотів
│ ├── test_utils.py # Тести deep_get()
│ ├── 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
Посилання
Версія: 13 · Оновлено: 2026-04-14
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-13.tar.gz.
File metadata
- Download URL: pyregrep-13.tar.gz
- Upload date:
- Size: 21.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
afce7dc24828928f4647d472df9224cf7b2c52e6ddcf17a84857de05c56b78ac
|
|
| MD5 |
71eadd18b4101b38f9fba5f5d6938ae1
|
|
| BLAKE2b-256 |
3a45aa1773c30d94575ee74fdb6d3c7e92c7d322f07bc00e8e9f2423ce2398a1
|
Provenance
The following attestation bundles were made for pyregrep-13.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-13.tar.gz -
Subject digest:
afce7dc24828928f4647d472df9224cf7b2c52e6ddcf17a84857de05c56b78ac - Sigstore transparency entry: 1293631977
- Sigstore integration time:
-
Permalink:
AndreyShapovalovVN/pyRegRep@3c74215afc14ff48a24cbc133b75a0c7b52a19af -
Branch / Tag:
refs/tags/v13 - Owner: https://github.com/AndreyShapovalovVN
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@3c74215afc14ff48a24cbc133b75a0c7b52a19af -
Trigger Event:
release
-
Statement type:
File details
Details for the file pyregrep-13-py3-none-any.whl.
File metadata
- Download URL: pyregrep-13-py3-none-any.whl
- Upload date:
- Size: 15.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca29ac3079d0ab2b7c621a6d62f1e607490f57b4be418b41fe8d955f760828cf
|
|
| MD5 |
a22c4be9fc24c3e0e229e3de882fec67
|
|
| BLAKE2b-256 |
ff29872a0f9a2338fc9ba139185fc858094a1a8fa8f51d47bcff35065e511ded
|
Provenance
The following attestation bundles were made for pyregrep-13-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-13-py3-none-any.whl -
Subject digest:
ca29ac3079d0ab2b7c621a6d62f1e607490f57b4be418b41fe8d955f760828cf - Sigstore transparency entry: 1293631980
- Sigstore integration time:
-
Permalink:
AndreyShapovalovVN/pyRegRep@3c74215afc14ff48a24cbc133b75a0c7b52a19af -
Branch / Tag:
refs/tags/v13 - Owner: https://github.com/AndreyShapovalovVN
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@3c74215afc14ff48a24cbc133b75a0c7b52a19af -
Trigger Event:
release
-
Statement type: