edu-rdm-integration 0.6.6__py3-none-any.whl → 0.6.7__py3-none-any.whl
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.
- edu_rdm_integration/entities.py +36 -5
- edu_rdm_integration/enum_register/__init__.py +0 -0
- edu_rdm_integration/enum_register/mixins.py +87 -0
- edu_rdm_integration/enum_register/register.py +82 -0
- edu_rdm_integration/utils.py +39 -0
- {edu_rdm_integration-0.6.6.dist-info → edu_rdm_integration-0.6.7.dist-info}/METADATA +14 -2
- {edu_rdm_integration-0.6.6.dist-info → edu_rdm_integration-0.6.7.dist-info}/RECORD +11 -8
- {edu_rdm_integration-0.6.6.dist-info → edu_rdm_integration-0.6.7.dist-info}/LICENSE +0 -0
- {edu_rdm_integration-0.6.6.dist-info → edu_rdm_integration-0.6.7.dist-info}/WHEEL +0 -0
- {edu_rdm_integration-0.6.6.dist-info → edu_rdm_integration-0.6.7.dist-info}/namespace_packages.txt +0 -0
- {edu_rdm_integration-0.6.6.dist-info → edu_rdm_integration-0.6.7.dist-info}/top_level.txt +0 -0
edu_rdm_integration/entities.py
CHANGED
@@ -8,15 +8,27 @@ from typing import (
|
|
8
8
|
Tuple,
|
9
9
|
)
|
10
10
|
|
11
|
+
from edu_rdm_integration.enum_register.mixins import (
|
12
|
+
EntityEnumRegisterMixin,
|
13
|
+
)
|
14
|
+
from edu_rdm_integration.models import (
|
15
|
+
RegionalDataMartModelEnum,
|
16
|
+
)
|
11
17
|
from educommon.integration_entities.entities import (
|
12
18
|
BaseEntity,
|
13
19
|
)
|
14
20
|
|
15
21
|
|
16
22
|
@dataclass
|
17
|
-
class AddressEntity(BaseEntity):
|
23
|
+
class AddressEntity(EntityEnumRegisterMixin, BaseEntity):
|
18
24
|
"""Сущность РВД 'Адреса'."""
|
19
25
|
|
26
|
+
# Параметры регистрации в модель-перечисление РВД
|
27
|
+
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
28
|
+
title = 'Адреса'
|
29
|
+
main_model_enum = RegionalDataMartModelEnum.ADDRESS
|
30
|
+
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
31
|
+
|
20
32
|
# Имена полей объявляются как константы, чтобы можно было выводить списки полей
|
21
33
|
ID = 'id'
|
22
34
|
USE_ADDRESS = 'use_address'
|
@@ -88,9 +100,16 @@ class AddressEntity(BaseEntity):
|
|
88
100
|
|
89
101
|
|
90
102
|
@dataclass
|
91
|
-
class AddressOrganisationEntity(BaseEntity):
|
103
|
+
class AddressOrganisationEntity(EntityEnumRegisterMixin, BaseEntity):
|
92
104
|
"""Сущность РВД 'Адреса'."""
|
93
105
|
|
106
|
+
# Параметры регистрации в модель-перечисление РВД
|
107
|
+
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
108
|
+
title = 'Адреса организаций'
|
109
|
+
main_model_enum = RegionalDataMartModelEnum.ADDRESS_ORGANISATION
|
110
|
+
additional_model_enums = (RegionalDataMartModelEnum.ORGANISATION, )
|
111
|
+
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
112
|
+
|
94
113
|
# Имена полей объявляются как константы, чтобы можно было выводить списки полей
|
95
114
|
ADDRESS_ID = 'address_id'
|
96
115
|
ORGANISATION_ID = 'organisation_id'
|
@@ -132,9 +151,15 @@ class AddressOrganisationEntity(BaseEntity):
|
|
132
151
|
|
133
152
|
|
134
153
|
@dataclass
|
135
|
-
class TelecomEntity(BaseEntity):
|
154
|
+
class TelecomEntity(EntityEnumRegisterMixin, BaseEntity):
|
136
155
|
"""Сущность РВД "Контактные данные"."""
|
137
156
|
|
157
|
+
# Параметры регистрации в модель-перечисление РВД
|
158
|
+
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
159
|
+
title = 'Контактные данные'
|
160
|
+
main_model_enum = RegionalDataMartModelEnum.TELECOM
|
161
|
+
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
162
|
+
|
138
163
|
# Имена полей объявляются как константы, чтобы можно было выводить списки полей
|
139
164
|
ID = 'id'
|
140
165
|
TYPE_CONTACT = 'type_contact'
|
@@ -194,11 +219,17 @@ class TelecomEntity(BaseEntity):
|
|
194
219
|
|
195
220
|
|
196
221
|
@dataclass
|
197
|
-
class OrganisationsEntity(BaseEntity):
|
222
|
+
class OrganisationsEntity(EntityEnumRegisterMixin, BaseEntity):
|
198
223
|
"""
|
199
224
|
Сущность РВД "Организации".
|
200
225
|
"""
|
201
226
|
|
227
|
+
# Параметры регистрации в модель-перечисление РВД
|
228
|
+
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
229
|
+
title = 'Организации'
|
230
|
+
main_model_enum = RegionalDataMartModelEnum.ORGANISATION
|
231
|
+
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
232
|
+
|
202
233
|
ID = 'id'
|
203
234
|
ROSOBR_ID = 'rosobr_id'
|
204
235
|
OGRN = 'ogrn'
|
@@ -209,7 +240,7 @@ class OrganisationsEntity(BaseEntity):
|
|
209
240
|
OKPF = 'okpf'
|
210
241
|
OKFS = 'okfs'
|
211
242
|
OKOGU = 'okogu'
|
212
|
-
OKATO
|
243
|
+
OKATO = 'okato'
|
213
244
|
OKTMO = 'oktmo'
|
214
245
|
NAME = 'name'
|
215
246
|
PARTOF_ID = 'partof_id'
|
File without changes
|
@@ -0,0 +1,87 @@
|
|
1
|
+
from typing import (
|
2
|
+
Any,
|
3
|
+
Dict,
|
4
|
+
Tuple,
|
5
|
+
)
|
6
|
+
|
7
|
+
from django.db import (
|
8
|
+
models,
|
9
|
+
)
|
10
|
+
from django.utils.decorators import (
|
11
|
+
classproperty,
|
12
|
+
)
|
13
|
+
|
14
|
+
from edu_rdm_integration.models import (
|
15
|
+
RegionalDataMartEntityEnum,
|
16
|
+
RegionalDataMartModelEnum,
|
17
|
+
)
|
18
|
+
from edu_rdm_integration.utils import (
|
19
|
+
camel_to_underscore,
|
20
|
+
)
|
21
|
+
from m3_db_utils.mixins import (
|
22
|
+
BaseEnumRegisterMixin,
|
23
|
+
)
|
24
|
+
from m3_db_utils.models import (
|
25
|
+
ModelEnumValue,
|
26
|
+
)
|
27
|
+
|
28
|
+
|
29
|
+
class EntityEnumRegisterMixin(BaseEnumRegisterMixin):
|
30
|
+
"""Миксин, для регистрации сущности в RegionalDataMartEntityEnum."""
|
31
|
+
|
32
|
+
enum = RegionalDataMartEntityEnum
|
33
|
+
"""Модель-перечисление в которую регистрируется сущность."""
|
34
|
+
|
35
|
+
main_model_enum: ModelEnumValue
|
36
|
+
"""Значение RegionalDataMartModelEnum,
|
37
|
+
основной модели РВД для формирования сущности."""
|
38
|
+
|
39
|
+
additional_model_enums: Tuple[ModelEnumValue] = ()
|
40
|
+
"""Перечень дополнительных значений RegionalDataMartModelEnum,
|
41
|
+
которые участвуют в формировании записей сущностей"""
|
42
|
+
|
43
|
+
title: str
|
44
|
+
"""Расшифровка сущности модели-перечисления"""
|
45
|
+
|
46
|
+
@classproperty
|
47
|
+
def key(cls) -> str:
|
48
|
+
return camel_to_underscore(cls.__name__.rsplit('Entity', 1)[0], upper=True)
|
49
|
+
|
50
|
+
@classmethod
|
51
|
+
def get_register_params(cls) -> Dict[str, Any]:
|
52
|
+
register_params = super().get_register_params()
|
53
|
+
register_params['main_model_enum'] = cls.main_model_enum
|
54
|
+
register_params['entity'] = cls
|
55
|
+
register_params['additional_model_enums'] = cls.additional_model_enums
|
56
|
+
|
57
|
+
return register_params
|
58
|
+
|
59
|
+
|
60
|
+
class ModelEnumRegisterMixin(BaseEnumRegisterMixin):
|
61
|
+
"""Миксин, для регистрации модели в RegionalDataMartModelEnum."""
|
62
|
+
|
63
|
+
enum = RegionalDataMartModelEnum
|
64
|
+
"""Модель-перечисление в которую регистрируется модель."""
|
65
|
+
|
66
|
+
creating_trigger_models: Tuple[models.Model] = ()
|
67
|
+
"""Перечень моделей по которым генерируются логи."""
|
68
|
+
|
69
|
+
loggable_models: Tuple[models.Model] = ()
|
70
|
+
"""Перечень моделей по которым собираются логи."""
|
71
|
+
|
72
|
+
@classproperty
|
73
|
+
def key(cls) -> str:
|
74
|
+
return camel_to_underscore(cls.__name__).upper()
|
75
|
+
|
76
|
+
@classproperty
|
77
|
+
def title(cls):
|
78
|
+
return cls._meta.verbose_name
|
79
|
+
|
80
|
+
@classmethod
|
81
|
+
def get_register_params(cls) -> Dict[str, Any]:
|
82
|
+
register_params = super().get_register_params()
|
83
|
+
register_params['model'] = cls
|
84
|
+
register_params['creating_trigger_models'] = cls.creating_trigger_models
|
85
|
+
register_params['loggable_models'] = cls.loggable_models
|
86
|
+
|
87
|
+
return register_params
|
@@ -0,0 +1,82 @@
|
|
1
|
+
import inspect
|
2
|
+
import sys
|
3
|
+
from importlib import (
|
4
|
+
import_module,
|
5
|
+
)
|
6
|
+
from operator import (
|
7
|
+
attrgetter,
|
8
|
+
)
|
9
|
+
from typing import (
|
10
|
+
Iterable,
|
11
|
+
Type,
|
12
|
+
)
|
13
|
+
|
14
|
+
from django.apps import (
|
15
|
+
apps,
|
16
|
+
)
|
17
|
+
from django.db import (
|
18
|
+
models,
|
19
|
+
)
|
20
|
+
|
21
|
+
from edu_rdm_integration.enum_register.mixins import (
|
22
|
+
EntityEnumRegisterMixin,
|
23
|
+
ModelEnumRegisterMixin,
|
24
|
+
)
|
25
|
+
from edu_rdm_integration.models import (
|
26
|
+
BaseEntityModel,
|
27
|
+
)
|
28
|
+
from educommon.integration_entities.entities import (
|
29
|
+
BaseEntity,
|
30
|
+
)
|
31
|
+
from m3_db_utils.mixins import (
|
32
|
+
BaseEnumRegisterMixin,
|
33
|
+
)
|
34
|
+
|
35
|
+
|
36
|
+
def register_classes(classes: Iterable[Type[BaseEnumRegisterMixin]]) -> None:
|
37
|
+
"""Вызывает метод регистрации в модель-перечисление
|
38
|
+
у переданных классов.
|
39
|
+
|
40
|
+
Args:
|
41
|
+
classes: Классы, поддерживающие интерфейс регистрации.
|
42
|
+
"""
|
43
|
+
classes = sorted(classes, key=attrgetter('order_number'))
|
44
|
+
|
45
|
+
for enum_class in classes:
|
46
|
+
enum_class.register()
|
47
|
+
|
48
|
+
|
49
|
+
def is_register_model(model: models.Model) -> bool:
|
50
|
+
"""Проверяет, является ли класс регистрируемой моделью."""
|
51
|
+
return issubclass(model, ModelEnumRegisterMixin)
|
52
|
+
|
53
|
+
|
54
|
+
def is_register_entity(class_) -> bool:
|
55
|
+
"""Проверяет, является ли класс регистрируемой сущностью."""
|
56
|
+
return (
|
57
|
+
inspect.isclass(class_) and
|
58
|
+
issubclass(class_, BaseEntity) and
|
59
|
+
issubclass(class_, EntityEnumRegisterMixin)
|
60
|
+
)
|
61
|
+
|
62
|
+
|
63
|
+
def register_models() -> None:
|
64
|
+
"""Регистрирует модели в RegionalDataMartModelEnum."""
|
65
|
+
register_classes([
|
66
|
+
m for m in apps.get_models() if is_register_model(m)
|
67
|
+
])
|
68
|
+
|
69
|
+
|
70
|
+
def register_entities(import_path: str) -> None:
|
71
|
+
"""Находит регистрируемые сущности в модуле по переданному пути и
|
72
|
+
регистрирует в RegionalDataMartEntityEnum.
|
73
|
+
|
74
|
+
Args:
|
75
|
+
import_path: Путь до пакета, хранящего классы сущностей;
|
76
|
+
"""
|
77
|
+
import_module(import_path)
|
78
|
+
entities_module = sys.modules[import_path]
|
79
|
+
|
80
|
+
register_classes([
|
81
|
+
c[1] for c in inspect.getmembers(entities_module, is_register_entity)
|
82
|
+
])
|
edu_rdm_integration/utils.py
CHANGED
@@ -165,3 +165,42 @@ def split_interval_by_delta(start_date: datetime, end_date: datetime, days_delta
|
|
165
165
|
intervals = [*zip(iter_interval, iter_interval)]
|
166
166
|
|
167
167
|
return intervals
|
168
|
+
|
169
|
+
|
170
|
+
def camel_to_underscore(name: str, upper=False) -> str:
|
171
|
+
"""Переводит строку из верблюжьего в змеиный регистр.
|
172
|
+
По умолчанию строка приводится к нижнему регистру.
|
173
|
+
Несколько заглавных букв не будут разъединены, кроме последней.
|
174
|
+
|
175
|
+
Args:
|
176
|
+
name: форматируемая строка;
|
177
|
+
upper: флаг перевода в верхний регистр;
|
178
|
+
|
179
|
+
Returns:
|
180
|
+
Строка, приведенная к змеиному регистру.
|
181
|
+
|
182
|
+
>>> camel_to_underscore('ОдинДваТри')
|
183
|
+
'один_два_три'
|
184
|
+
>>> camel_to_underscore('Один_два_три')
|
185
|
+
'один_два_три'
|
186
|
+
>>> camel_to_underscore('Один_Два_Три')
|
187
|
+
'один_два_три'
|
188
|
+
>>> camel_to_underscore('__ОдинДваТри__')
|
189
|
+
'__один_два_три__'
|
190
|
+
>>> camel_to_underscore('__ОдинДВАТри__')
|
191
|
+
'__один_два_три__'
|
192
|
+
"""
|
193
|
+
output = []
|
194
|
+
for i, c in enumerate(name):
|
195
|
+
if i > 0:
|
196
|
+
pc = name[i - 1]
|
197
|
+
if c.isupper() and not pc.isupper() and pc != '_':
|
198
|
+
output.append('_')
|
199
|
+
elif i > 3 and not c.isupper():
|
200
|
+
previous = name[i - 3:i]
|
201
|
+
if previous.isalpha() and previous.isupper():
|
202
|
+
output.insert(len(output) - 1, '_')
|
203
|
+
|
204
|
+
output.append(c.upper() if upper else c.lower())
|
205
|
+
|
206
|
+
return ''.join(output)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: edu-rdm-integration
|
3
|
-
Version: 0.6.
|
3
|
+
Version: 0.6.7
|
4
4
|
Summary: Интеграция с Региональной витриной данных
|
5
5
|
Home-page:
|
6
6
|
Download-URL:
|
@@ -30,7 +30,7 @@ Requires-Dist: transliterate <2
|
|
30
30
|
Requires-Dist: Django <2.3,>=1.11
|
31
31
|
Requires-Dist: educommon <4,>=3.0.0
|
32
32
|
Requires-Dist: function-tools <1,>=0.5.0
|
33
|
-
Requires-Dist: m3-db-utils <1,>=0.3.
|
33
|
+
Requires-Dist: m3-db-utils <1,>=0.3.8
|
34
34
|
Requires-Dist: uploader-client <1,>=0.1.12
|
35
35
|
|
36
36
|
# Проект "Интеграция с Региональной витриной данных (РВД)"
|
@@ -290,6 +290,18 @@ Requires-Dist: uploader-client <1,>=0.1.12
|
|
290
290
|
### Удалено
|
291
291
|
|
292
292
|
|
293
|
+
## [0.6.7] - 2023-11-01
|
294
|
+
|
295
|
+
Добавлен миксин EntityEnumRegisterMixin для регистрации сущностей в RegionalDataMartEntityEnum.
|
296
|
+
Миксин ModelEnumRegisterMixin для регистрации моделей в RegionalDataMartModelEnum.
|
297
|
+
Добавлены методы для запуска регистрации моделей и сущностей.
|
298
|
+
|
299
|
+
### Добавлено
|
300
|
+
|
301
|
+
- [EDUCLLG-7632](https://jira.bars.group/browse/EDUCLLG-7632)
|
302
|
+
PATCH - Добавлен функционал регистрации моделей и сущностей в моделях-перечислениях.
|
303
|
+
|
304
|
+
|
293
305
|
## [0.6.6] - 2023-10-16
|
294
306
|
|
295
307
|
Добавлен базовый класс для тестирования Функций сбора, добавлена явная зависимость Django.
|
@@ -2,13 +2,13 @@ edu_rdm_integration/__init__.py,sha256=fVCvQ7QGI_iCyAeE8dMapyY8gOM617ye5GQqAVGPl
|
|
2
2
|
edu_rdm_integration/app_settings.py,sha256=kideEO9SvYU8RXPB-8hTVosL4bAspPHNHtyz-R0F7v4,1822
|
3
3
|
edu_rdm_integration/apps.py,sha256=Xcqck44MEvDFY6NryDTkkejI92Q_8Jgqv1oTHa87igg,2458
|
4
4
|
edu_rdm_integration/consts.py,sha256=chOsPOOY4_JLzN-8idg-VjbLWSlp6r3maFWqnvUsapg,806
|
5
|
-
edu_rdm_integration/entities.py,sha256=
|
5
|
+
edu_rdm_integration/entities.py,sha256=H_B3bF4uwM_xebhGZvgfxIOFHkzVb_7w8SaG3Bl3YUo,11200
|
6
6
|
edu_rdm_integration/enums.py,sha256=fnDPz6pwOYWS6vp65IAExbpDzn2q9U3_9GGyuf4B468,4876
|
7
7
|
edu_rdm_integration/mapping.py,sha256=bwa2fJCbV4YjQcAgRrgT3hgM6dJhr_uBtQgx3L3F2Ck,473
|
8
8
|
edu_rdm_integration/models.py,sha256=eUlR0DUIXcvr2yy_b0GZA6Jv__X9_iWyUsJhDMKwFDk,24976
|
9
9
|
edu_rdm_integration/signals.py,sha256=3eRlpkDcFCF6TN80-QM8yBYLcyozzcmoPjz6r4_ApWg,73
|
10
10
|
edu_rdm_integration/storages.py,sha256=o5WqUG7SnkeuMt-z8spUi-IraivST-7KHzfY-M3v7FA,6807
|
11
|
-
edu_rdm_integration/utils.py,sha256=
|
11
|
+
edu_rdm_integration/utils.py,sha256=vjme0N6tEXnHt6SaqjavZshjwc-mVv4X3Pz37a5YgTw,7092
|
12
12
|
edu_rdm_integration/adapters/__init__.py,sha256=cU0swn4Ny5ZQz5buWRcWsT1mpWuUFJaUlHf2l7TtEBo,83
|
13
13
|
edu_rdm_integration/adapters/apps.py,sha256=TyJTkSPs2qAHJ11fqbwLGk3Ea7ujtqWwbxqmvYNQxG8,363
|
14
14
|
edu_rdm_integration/adapters/caches.py,sha256=OxSqeXySUN42LxEeHBLtC1ZBt-7aicbRbmP1EJYTvV4,1505
|
@@ -69,6 +69,9 @@ edu_rdm_integration/collect_data/non_calculated/base/runners.py,sha256=03pWh9LgF
|
|
69
69
|
edu_rdm_integration/collect_data/non_calculated/base/strings.py,sha256=-k9dex8A7hCpkzUkudVkKRAbNRuuqog2hYl2xmibl8I,181
|
70
70
|
edu_rdm_integration/collect_data/non_calculated/base/tests.py,sha256=MoRY-a75Ow-7EjeQYxkXWunwqTGuBMaUyEkEV2oy05I,59
|
71
71
|
edu_rdm_integration/collect_data/non_calculated/base/validators.py,sha256=0YvnfrfK1iFcZVSB-M-Xv82tIjYxEU_BwLofAEuGVW4,973
|
72
|
+
edu_rdm_integration/enum_register/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
73
|
+
edu_rdm_integration/enum_register/mixins.py,sha256=fcq1pz4it0JJbgSMj4xEu8ALVQgy2zRLsWFtSmj-iEc,2881
|
74
|
+
edu_rdm_integration/enum_register/register.py,sha256=X7vCZZyzdwaFYBM-yfSkE11RWwBfTCLUKLVv_sDtYAg,2281
|
72
75
|
edu_rdm_integration/export_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
73
76
|
edu_rdm_integration/export_data/consts.py,sha256=Z6Uho8oViMc0t1tyQFZfrPFBwPx6KnhUf_iZ0qgob8o,16
|
74
77
|
edu_rdm_integration/export_data/export.py,sha256=xr3_oTnufS_NMgJLPIeL87fNkt7zOVA5rM44sB3QvEw,14946
|
@@ -129,9 +132,9 @@ edu_rdm_integration/management/commands/export_entities_data.py,sha256=Mas1zwsH-
|
|
129
132
|
edu_rdm_integration/migrations/0001_initial.py,sha256=toNuYoHZePe5wJ6AKEW9oPOdt2OefmxDEDDJGYQIrFk,18719
|
130
133
|
edu_rdm_integration/migrations/0002_init_data_uploadstatus.py,sha256=kht966YNuDbC3qTGrcWswJPsVuAtNO59Ck15G2eS2bU,944
|
131
134
|
edu_rdm_integration/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
132
|
-
edu_rdm_integration-0.6.
|
133
|
-
edu_rdm_integration-0.6.
|
134
|
-
edu_rdm_integration-0.6.
|
135
|
-
edu_rdm_integration-0.6.
|
136
|
-
edu_rdm_integration-0.6.
|
137
|
-
edu_rdm_integration-0.6.
|
135
|
+
edu_rdm_integration-0.6.7.dist-info/LICENSE,sha256=uw43Gjjj-1vXWCItfSrNDpbejnOwZMrNerUh8oWbq8Q,3458
|
136
|
+
edu_rdm_integration-0.6.7.dist-info/METADATA,sha256=6um_otgQ2Z06f_7Dw4GKMB8qz8CsKXKtlYACvsvVetw,38265
|
137
|
+
edu_rdm_integration-0.6.7.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
|
138
|
+
edu_rdm_integration-0.6.7.dist-info/namespace_packages.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
139
|
+
edu_rdm_integration-0.6.7.dist-info/top_level.txt,sha256=nRJV0O14UtNE-jGIYG03sohgFnZClvf57H5m6VBXe9Y,20
|
140
|
+
edu_rdm_integration-0.6.7.dist-info/RECORD,,
|
File without changes
|
File without changes
|
{edu_rdm_integration-0.6.6.dist-info → edu_rdm_integration-0.6.7.dist-info}/namespace_packages.txt
RENAMED
File without changes
|
File without changes
|