pyRegRep 5__tar.gz → 7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
pyregrep-7/PKG-INFO ADDED
@@ -0,0 +1,283 @@
1
+ Metadata-Version: 2.4
2
+ Name: pyRegRep
3
+ Version: 7
4
+ Summary: Your package description
5
+ Author: Andrey Shapovalov
6
+ Author-email: mt.andrey@gmail.com
7
+ Requires-Python: >=3.10
8
+ Description-Content-Type: text/markdown
9
+ License-File: LICENSE
10
+ Dynamic: author-email
11
+ Dynamic: license-file
12
+
13
+ # pyRegRep
14
+
15
+ Бібліотека Python для парсування та обробки XML документів у форматі RIM (Registry Information Model) / ebXML.
16
+
17
+ ## Опис
18
+
19
+ **pyRegRep** — інструмент для роботи з XML документами стандарту Registry Information Model (RIM), що застосовується в системах eGovernment та обміну даними (зокрема, OOTS/EDM). Бібліотека дозволяє легко витягувати, аналізувати та серіалізувати дані з RIM/ebXML документів, а також програмно створювати коректні RIM-слоти різних типів.
20
+
21
+ ## Можливості
22
+
23
+ - ✅ Парсування RIM/ebXML XML документів (`bytes` або `str`)
24
+ - ✅ Автоматична обробка просторів імен (namespaces)
25
+ - ✅ Витягування запитів (Query), винятків (Exception) та об'єктів реєстру (RegistryObject)
26
+ - ✅ Обробка всіх типів значень: Boolean, String, Integer, DateTime, Collection, InternationalString, AnyValue
27
+ - ✅ Серіалізація даних у зручний Python-формат (`dict`)
28
+ - ✅ Фабрика слотів `get_slot()` — програмне створення RIM-слотів за типом
29
+ - ✅ Серіалізація `AnyValueType` через `xmltodict` (параметр `any_type=True`)
30
+ - ✅ Підтримка вкладених колекцій та складних структур
31
+
32
+ ## Вимоги
33
+
34
+ - **Python**: >= 3.10
35
+ - **Залежності**:
36
+ - `lxml >= 5.2.1` — робота з XML
37
+ - `xmltodict >= 0.13.0` — серіалізація `AnyValueType`
38
+
39
+ ## Установка
40
+
41
+ ```bash
42
+ # З PyPI (якщо опубліковано)
43
+ pip install pyRegRep
44
+
45
+ # З локального джерела (editable)
46
+ pip install -e .
47
+
48
+ # Залежності вручну
49
+ pip install -r requirements.txt
50
+ ```
51
+
52
+ ## Швидкий старт
53
+
54
+ ### Парсування XML документу
55
+
56
+ ```python
57
+ from pyRegRep4.RIMParsing import Parsing
58
+
59
+ with open("document.xml", "rb") as f:
60
+ parser = Parsing(f.read())
61
+
62
+ # Усі слоти у вигляді {category: {name: (type, value)}}
63
+ print(parser.slots)
64
+
65
+ # Серіалізовані дані (без типової інформації)
66
+ print(parser.serialize())
67
+
68
+ # Серіалізація з обробкою AnyValueType в dict
69
+ print(parser.serialize(any_type=True))
70
+ ```
71
+
72
+ ### Програмне створення RIM-слотів
73
+
74
+ ```python
75
+ import datetime
76
+ from lxml import etree
77
+ from pyRegRep4.RIMElement import get_slot
78
+
79
+ # Текстовий слот
80
+ slot = get_slot("SpecificationIdentifier", "StringValueType", "oots-edm:v1.2")
81
+ print(slot.name) # 'SpecificationIdentifier'
82
+ print(slot.value) # 'oots-edm:v1.2'
83
+ print(slot.text) # XML як bytes
84
+
85
+ # Логічний слот
86
+ slot = get_slot("PossibilityForPreview", "BooleanValueType", True)
87
+
88
+ # Слот дата/час
89
+ slot = get_slot("IssueDateTime", "DateTimeValueType", datetime.datetime.now())
90
+
91
+ # Слот довільного XML (AnyValueType)
92
+ elem = etree.Element("CustomData")
93
+ elem.text = "Payload"
94
+ slot = get_slot("CustomPayload", "AnyValueType", elem)
95
+ ```
96
+
97
+ ## API Довідник
98
+
99
+ ### Клас `Parsing` (`pyRegRep4.RIMParsing`)
100
+
101
+ #### Конструктор
102
+
103
+ ```python
104
+ Parsing(doc: bytes | str)
105
+ ```
106
+
107
+ | Параметр | Тип | Опис |
108
+ |----------|-----|------|
109
+ | `doc` | `bytes \| str` | XML документ |
110
+
111
+ #### Атрибути
112
+
113
+ | Атрибут | Тип | Опис |
114
+ |---------|-----|------|
115
+ | `xml` | `str` | XML як рядок |
116
+ | `doc` | `etree._Element` | Розібраний XML документ |
117
+ | `query` | `etree._Element \| None` | Елемент `Query` (якщо є) |
118
+ | `exception` | `etree._Element \| None` | Елемент `Exception` (якщо є) |
119
+ | `objects` | `list` | Список `RegistryObject` елементів |
120
+ | `slots` | `dict` | Всі слоти у форматі `{category: {name: (type, value)}}` |
121
+
122
+ Категорії `slots`: `"doc"`, `"query"`, `"exception"`, `"object"`.
123
+
124
+ #### Метод `serialize(any_type: bool = False) -> dict`
125
+
126
+ Серіалізує слоти в чистий Python-формат, видаляючи типову інформацію.
127
+
128
+ | Тип значення | Python-результат |
129
+ |---|---|
130
+ | `BooleanValueType` | `bool` |
131
+ | `StringValueType` | `str` |
132
+ | `DateTimeValueType` | `str` (ISO format) |
133
+ | `IntegerValueType` | `int` |
134
+ | `CollectionValueType` | `list` |
135
+ | `InternationalStringValueType` | `list[dict]` |
136
+ | `AnyValueType` (за замовчуванням) | `etree._Element` |
137
+ | `AnyValueType` (з `any_type=True`) | `dict` (через `xmltodict`) |
138
+
139
+ ---
140
+
141
+ ### Функція `get_slot()` (`pyRegRep4.RIMElement`)
142
+
143
+ ```python
144
+ get_slot(name: str, slot_type: str, value: Any) -> Xml
145
+ ```
146
+
147
+ Фабрика для програмного створення RIM-слотів.
148
+
149
+ | Параметр | Тип | Опис |
150
+ |----------|-----|------|
151
+ | `name` | `str` | Ім'я слота |
152
+ | `slot_type` | `str` | Тип слота (див. таблицю нижче) |
153
+ | `value` | `Any` | Значення слота |
154
+
155
+ **Підтримані типи:**
156
+
157
+ | `slot_type` | Тип `value` | Опис |
158
+ |---|---|---|
159
+ | `"StringValueType"` | `str` | Текстовий рядок |
160
+ | `"BooleanValueType"` | `bool` | Логічне значення |
161
+ | `"DateTimeValueType"` | `datetime.datetime` або `str` | Дата/час |
162
+ | `"CollectionValueType"` | `etree._Element` | Колекція елементів |
163
+ | `"AnyValueType"` | `etree._Element` | Довільний XML елемент |
164
+ | `"InternationalStringValueType"` | `etree._Element` або `list[etree._Element]` | Багатомовний текст |
165
+
166
+ **Повертає** об'єкт `Xml` з властивостями:
167
+ - `name` — ім'я слота
168
+ - `value` — значення
169
+ - `element` — XML елемент (`etree._Element`)
170
+ - `text` — серіалізований XML (`bytes`)
171
+
172
+ **Викидає** `ValueError` при невідомому типі слота.
173
+
174
+ ```python
175
+ try:
176
+ slot = get_slot("Bad", "UnknownType", "value")
177
+ except ValueError as e:
178
+ print(e) # Невідомий тип слота: UnknownType. Підтримувані типи: [...]
179
+ ```
180
+
181
+ ---
182
+
183
+ ### Клас `NS` (`pyRegRep4.NS`)
184
+
185
+ Базовий клас для управління RIM namespace. Надає метод `_tname(prefix, localname)` для генерування кваліфікованих імен тегів у нотації Clark.
186
+
187
+ ---
188
+
189
+ ### Виняток `ParsingError` (`pyRegRep4.RIMParsing`)
190
+
191
+ Базовий клас для помилок парсування. Кидається при некоректному XML або відсутньому namespace.
192
+
193
+ ## Структура проекту
194
+
195
+ ```
196
+ pyRegRep/
197
+ ├── pyRegRep4/
198
+ │ ├── __init__.py # Експорт: get_slot та типи слотів
199
+ │ ├── RIMElement.py # Класи слотів + фабрика get_slot()
200
+ │ ├── RIMParsing.py # Парсер Parsing + serialize()
201
+ │ └── NS.py # Базовий клас для namespace
202
+ ├── tests/
203
+ │ ├── conftest.py # sys.path для CI
204
+ │ ├── test_rim_parsing.py # Тести парсера
205
+ │ ├── test_rim_element.py # Тести get_slot() та типів слотів
206
+ │ ├── EDM_Ferst_Request.xml
207
+ │ ├── EDM_Ferst_Response.xml
208
+ │ ├── EDM_Second_Request.xml
209
+ │ └── EDM_Second_Response.xml
210
+ ├── example/
211
+ │ ├── Example_1.py
212
+ │ ├── example_anyvaluetype_usage.py
213
+ │ └── example_get_slot_usage.py
214
+ ├── setup.py
215
+ ├── pyproject.toml
216
+ ├── requirements.txt
217
+ └── README.md
218
+ ```
219
+
220
+ ## Запуск тестів
221
+
222
+ ```bash
223
+ # Встановлення залежностей
224
+ pip install lxml xmltodict pytest
225
+
226
+ # Усі тести
227
+ python -m pytest --disable-warnings -q
228
+
229
+ # Тільки тести парсера
230
+ python -m pytest tests/test_rim_parsing.py -v
231
+
232
+ # Тільки тести слотів
233
+ python -m pytest tests/test_rim_element.py -v
234
+ ```
235
+
236
+ ## Логування
237
+
238
+ Бібліотека використовує стандартний `logging`. Для увімкнення:
239
+
240
+ ```python
241
+ import logging
242
+ logging.basicConfig(level=logging.DEBUG)
243
+ ```
244
+
245
+ ## Технічні деталі
246
+
247
+ ### Обробка просторів імен
248
+
249
+ Namespace витягуються автоматично з кореневого елемента документа та зберігаються у `parser._ns` у форматі `{prefix: uri}`.
250
+
251
+ ### Формат `slots`
252
+
253
+ ```python
254
+ {
255
+ "doc": {
256
+ "SpecificationIdentifier": ("StringValueType", "oots-edm:v1.2"),
257
+ "IssueDateTime": ("DateTimeValueType", "2024-03-15T10:30:00"),
258
+ "PossibilityForPreview": ("BooleanValueType", "false"),
259
+ },
260
+ "query": {},
261
+ "exception": {},
262
+ "object": {}
263
+ }
264
+ ```
265
+
266
+ ## Автор
267
+
268
+ **Andrey Shapovalov** — mt.andrey@gmail.com
269
+
270
+ ## Ліцензія
271
+
272
+ MIT License — див. файл [LICENSE](LICENSE)
273
+
274
+ ## Посилання
275
+
276
+ - [ebXML / Registry Information Model](https://en.wikipedia.org/wiki/ebXML)
277
+ - [OOTS EDM Specification](https://ec.europa.eu/digital-building-blocks/sites/display/DIGITAL/OOTS)
278
+ - [lxml Documentation](https://lxml.de/)
279
+ - [xmltodict](https://github.com/martinblech/xmltodict)
280
+
281
+ ---
282
+
283
+ **Версія:** 7 · **Оновлено:** 2026-03-11
pyregrep-7/README.md ADDED
@@ -0,0 +1,271 @@
1
+ # pyRegRep
2
+
3
+ Бібліотека Python для парсування та обробки XML документів у форматі RIM (Registry Information Model) / ebXML.
4
+
5
+ ## Опис
6
+
7
+ **pyRegRep** — інструмент для роботи з XML документами стандарту Registry Information Model (RIM), що застосовується в системах eGovernment та обміну даними (зокрема, OOTS/EDM). Бібліотека дозволяє легко витягувати, аналізувати та серіалізувати дані з RIM/ebXML документів, а також програмно створювати коректні RIM-слоти різних типів.
8
+
9
+ ## Можливості
10
+
11
+ - ✅ Парсування RIM/ebXML XML документів (`bytes` або `str`)
12
+ - ✅ Автоматична обробка просторів імен (namespaces)
13
+ - ✅ Витягування запитів (Query), винятків (Exception) та об'єктів реєстру (RegistryObject)
14
+ - ✅ Обробка всіх типів значень: Boolean, String, Integer, DateTime, Collection, InternationalString, AnyValue
15
+ - ✅ Серіалізація даних у зручний Python-формат (`dict`)
16
+ - ✅ Фабрика слотів `get_slot()` — програмне створення RIM-слотів за типом
17
+ - ✅ Серіалізація `AnyValueType` через `xmltodict` (параметр `any_type=True`)
18
+ - ✅ Підтримка вкладених колекцій та складних структур
19
+
20
+ ## Вимоги
21
+
22
+ - **Python**: >= 3.10
23
+ - **Залежності**:
24
+ - `lxml >= 5.2.1` — робота з XML
25
+ - `xmltodict >= 0.13.0` — серіалізація `AnyValueType`
26
+
27
+ ## Установка
28
+
29
+ ```bash
30
+ # З PyPI (якщо опубліковано)
31
+ pip install pyRegRep
32
+
33
+ # З локального джерела (editable)
34
+ pip install -e .
35
+
36
+ # Залежності вручну
37
+ pip install -r requirements.txt
38
+ ```
39
+
40
+ ## Швидкий старт
41
+
42
+ ### Парсування XML документу
43
+
44
+ ```python
45
+ from pyRegRep4.RIMParsing import Parsing
46
+
47
+ with open("document.xml", "rb") as f:
48
+ parser = Parsing(f.read())
49
+
50
+ # Усі слоти у вигляді {category: {name: (type, value)}}
51
+ print(parser.slots)
52
+
53
+ # Серіалізовані дані (без типової інформації)
54
+ print(parser.serialize())
55
+
56
+ # Серіалізація з обробкою AnyValueType в dict
57
+ print(parser.serialize(any_type=True))
58
+ ```
59
+
60
+ ### Програмне створення RIM-слотів
61
+
62
+ ```python
63
+ import datetime
64
+ from lxml import etree
65
+ from pyRegRep4.RIMElement import get_slot
66
+
67
+ # Текстовий слот
68
+ slot = get_slot("SpecificationIdentifier", "StringValueType", "oots-edm:v1.2")
69
+ print(slot.name) # 'SpecificationIdentifier'
70
+ print(slot.value) # 'oots-edm:v1.2'
71
+ print(slot.text) # XML як bytes
72
+
73
+ # Логічний слот
74
+ slot = get_slot("PossibilityForPreview", "BooleanValueType", True)
75
+
76
+ # Слот дата/час
77
+ slot = get_slot("IssueDateTime", "DateTimeValueType", datetime.datetime.now())
78
+
79
+ # Слот довільного XML (AnyValueType)
80
+ elem = etree.Element("CustomData")
81
+ elem.text = "Payload"
82
+ slot = get_slot("CustomPayload", "AnyValueType", elem)
83
+ ```
84
+
85
+ ## API Довідник
86
+
87
+ ### Клас `Parsing` (`pyRegRep4.RIMParsing`)
88
+
89
+ #### Конструктор
90
+
91
+ ```python
92
+ Parsing(doc: bytes | str)
93
+ ```
94
+
95
+ | Параметр | Тип | Опис |
96
+ |----------|-----|------|
97
+ | `doc` | `bytes \| str` | XML документ |
98
+
99
+ #### Атрибути
100
+
101
+ | Атрибут | Тип | Опис |
102
+ |---------|-----|------|
103
+ | `xml` | `str` | XML як рядок |
104
+ | `doc` | `etree._Element` | Розібраний XML документ |
105
+ | `query` | `etree._Element \| None` | Елемент `Query` (якщо є) |
106
+ | `exception` | `etree._Element \| None` | Елемент `Exception` (якщо є) |
107
+ | `objects` | `list` | Список `RegistryObject` елементів |
108
+ | `slots` | `dict` | Всі слоти у форматі `{category: {name: (type, value)}}` |
109
+
110
+ Категорії `slots`: `"doc"`, `"query"`, `"exception"`, `"object"`.
111
+
112
+ #### Метод `serialize(any_type: bool = False) -> dict`
113
+
114
+ Серіалізує слоти в чистий Python-формат, видаляючи типову інформацію.
115
+
116
+ | Тип значення | Python-результат |
117
+ |---|---|
118
+ | `BooleanValueType` | `bool` |
119
+ | `StringValueType` | `str` |
120
+ | `DateTimeValueType` | `str` (ISO format) |
121
+ | `IntegerValueType` | `int` |
122
+ | `CollectionValueType` | `list` |
123
+ | `InternationalStringValueType` | `list[dict]` |
124
+ | `AnyValueType` (за замовчуванням) | `etree._Element` |
125
+ | `AnyValueType` (з `any_type=True`) | `dict` (через `xmltodict`) |
126
+
127
+ ---
128
+
129
+ ### Функція `get_slot()` (`pyRegRep4.RIMElement`)
130
+
131
+ ```python
132
+ get_slot(name: str, slot_type: str, value: Any) -> Xml
133
+ ```
134
+
135
+ Фабрика для програмного створення RIM-слотів.
136
+
137
+ | Параметр | Тип | Опис |
138
+ |----------|-----|------|
139
+ | `name` | `str` | Ім'я слота |
140
+ | `slot_type` | `str` | Тип слота (див. таблицю нижче) |
141
+ | `value` | `Any` | Значення слота |
142
+
143
+ **Підтримані типи:**
144
+
145
+ | `slot_type` | Тип `value` | Опис |
146
+ |---|---|---|
147
+ | `"StringValueType"` | `str` | Текстовий рядок |
148
+ | `"BooleanValueType"` | `bool` | Логічне значення |
149
+ | `"DateTimeValueType"` | `datetime.datetime` або `str` | Дата/час |
150
+ | `"CollectionValueType"` | `etree._Element` | Колекція елементів |
151
+ | `"AnyValueType"` | `etree._Element` | Довільний XML елемент |
152
+ | `"InternationalStringValueType"` | `etree._Element` або `list[etree._Element]` | Багатомовний текст |
153
+
154
+ **Повертає** об'єкт `Xml` з властивостями:
155
+ - `name` — ім'я слота
156
+ - `value` — значення
157
+ - `element` — XML елемент (`etree._Element`)
158
+ - `text` — серіалізований XML (`bytes`)
159
+
160
+ **Викидає** `ValueError` при невідомому типі слота.
161
+
162
+ ```python
163
+ try:
164
+ slot = get_slot("Bad", "UnknownType", "value")
165
+ except ValueError as e:
166
+ print(e) # Невідомий тип слота: UnknownType. Підтримувані типи: [...]
167
+ ```
168
+
169
+ ---
170
+
171
+ ### Клас `NS` (`pyRegRep4.NS`)
172
+
173
+ Базовий клас для управління RIM namespace. Надає метод `_tname(prefix, localname)` для генерування кваліфікованих імен тегів у нотації Clark.
174
+
175
+ ---
176
+
177
+ ### Виняток `ParsingError` (`pyRegRep4.RIMParsing`)
178
+
179
+ Базовий клас для помилок парсування. Кидається при некоректному XML або відсутньому namespace.
180
+
181
+ ## Структура проекту
182
+
183
+ ```
184
+ pyRegRep/
185
+ ├── pyRegRep4/
186
+ │ ├── __init__.py # Експорт: get_slot та типи слотів
187
+ │ ├── RIMElement.py # Класи слотів + фабрика get_slot()
188
+ │ ├── RIMParsing.py # Парсер Parsing + serialize()
189
+ │ └── NS.py # Базовий клас для namespace
190
+ ├── tests/
191
+ │ ├── conftest.py # sys.path для CI
192
+ │ ├── test_rim_parsing.py # Тести парсера
193
+ │ ├── test_rim_element.py # Тести get_slot() та типів слотів
194
+ │ ├── EDM_Ferst_Request.xml
195
+ │ ├── EDM_Ferst_Response.xml
196
+ │ ├── EDM_Second_Request.xml
197
+ │ └── EDM_Second_Response.xml
198
+ ├── example/
199
+ │ ├── Example_1.py
200
+ │ ├── example_anyvaluetype_usage.py
201
+ │ └── example_get_slot_usage.py
202
+ ├── setup.py
203
+ ├── pyproject.toml
204
+ ├── requirements.txt
205
+ └── README.md
206
+ ```
207
+
208
+ ## Запуск тестів
209
+
210
+ ```bash
211
+ # Встановлення залежностей
212
+ pip install lxml xmltodict pytest
213
+
214
+ # Усі тести
215
+ python -m pytest --disable-warnings -q
216
+
217
+ # Тільки тести парсера
218
+ python -m pytest tests/test_rim_parsing.py -v
219
+
220
+ # Тільки тести слотів
221
+ python -m pytest tests/test_rim_element.py -v
222
+ ```
223
+
224
+ ## Логування
225
+
226
+ Бібліотека використовує стандартний `logging`. Для увімкнення:
227
+
228
+ ```python
229
+ import logging
230
+ logging.basicConfig(level=logging.DEBUG)
231
+ ```
232
+
233
+ ## Технічні деталі
234
+
235
+ ### Обробка просторів імен
236
+
237
+ Namespace витягуються автоматично з кореневого елемента документа та зберігаються у `parser._ns` у форматі `{prefix: uri}`.
238
+
239
+ ### Формат `slots`
240
+
241
+ ```python
242
+ {
243
+ "doc": {
244
+ "SpecificationIdentifier": ("StringValueType", "oots-edm:v1.2"),
245
+ "IssueDateTime": ("DateTimeValueType", "2024-03-15T10:30:00"),
246
+ "PossibilityForPreview": ("BooleanValueType", "false"),
247
+ },
248
+ "query": {},
249
+ "exception": {},
250
+ "object": {}
251
+ }
252
+ ```
253
+
254
+ ## Автор
255
+
256
+ **Andrey Shapovalov** — mt.andrey@gmail.com
257
+
258
+ ## Ліцензія
259
+
260
+ MIT License — див. файл [LICENSE](LICENSE)
261
+
262
+ ## Посилання
263
+
264
+ - [ebXML / Registry Information Model](https://en.wikipedia.org/wiki/ebXML)
265
+ - [OOTS EDM Specification](https://ec.europa.eu/digital-building-blocks/sites/display/DIGITAL/OOTS)
266
+ - [lxml Documentation](https://lxml.de/)
267
+ - [xmltodict](https://github.com/martinblech/xmltodict)
268
+
269
+ ---
270
+
271
+ **Версія:** 7 · **Оновлено:** 2026-03-11