edu-rdm-integration 0.5.8__tar.gz → 0.6.0__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.
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/CHANGELOG.md +22 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/PKG-INFO +47 -1
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/README.md +15 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/pyproject.toml +1 -1
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/requirements/dependencies/system_packages.txt +1 -1
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/setup.py +1 -1
- edu-rdm-integration-0.6.0/src/edu_rdm_integration/collect_data/helpers.py +96 -0
- edu-rdm-integration-0.6.0/src/edu_rdm_integration/export_data/helpers.py +95 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration.egg-info/PKG-INFO +47 -1
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration.egg-info/SOURCES.txt +2 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration.egg-info/requires.txt +1 -1
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/CONDUCT.md +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/LICENSE +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/MANIFEST.in +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/requirements/dependencies/development_packages.txt +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/requirements/dependencies/external_packages.txt +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/requirements/dependencies/internal_packages.txt +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/requirements/dependencies/internal_sources.txt +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/requirements/dependencies/production_packages.txt +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/requirements/dependencies/testing_packages.txt +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/requirements/development.txt +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/requirements/production.txt +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/requirements/stage.txt +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/setup.cfg +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/__init__.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/__init__.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/apps.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/caches.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/consts.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/enums.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/errors.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/functions.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/helpers.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/managers.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/presenters.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/receivers.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/results.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/runners.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/strategies.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/strings.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/tests.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/validators.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/app_settings.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/apps.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/__init__.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/base/__init__.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/base/caches.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/base/functions.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/base/managers.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/base/mixins.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/base/runners.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/__init__.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/__init__.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/caches.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/consts.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/enums.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/errors.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/functions.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/helpers.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/managers.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/presenters.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/results.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/runners.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/strings.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/tests.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/validators.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/strategies.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/collect.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/generators.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/__init__.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/__init__.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/caches.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/consts.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/enums.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/errors.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/functions.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/helpers.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/managers.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/presenters.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/results.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/runners.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/strings.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/tests.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/validators.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/strategies.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/consts.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/entities.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/enums.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/__init__.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/__init__.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/caches.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/consts.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/enums.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/errors.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/functions.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/helpers.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/managers.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/presenters.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/requests.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/results.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/runners.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/strings.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/tests.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/validators.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/consts.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/export.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/generators.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/strategies.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/management/__init__.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/management/commands/__init__.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/management/commands/collect_models_data.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/management/commands/export_entities_data.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/management/general.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/mapping.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/migrations/0001_initial.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/migrations/0002_init_data_uploadstatus.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/migrations/__init__.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/models.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/signals.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/storages.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/utils.py +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration.egg-info/dependency_links.txt +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration.egg-info/namespace_packages.txt +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration.egg-info/not-zip-safe +0 -0
- {edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration.egg-info/top_level.txt +0 -0
@@ -29,6 +29,28 @@
|
|
29
29
|
### Удалено
|
30
30
|
|
31
31
|
|
32
|
+
## [0.6.0] - 2023-09-29
|
33
|
+
|
34
|
+
Добавлена функция set_failed_status_suspended_exporting_data_stages для определения и перевода зависших этапов/подэтапов экспорта в статус (FAILED).
|
35
|
+
Добавлена функция set_failed_status_suspended_collecting_data_stages для определения и перевода зависших этапов/подэтапов сбора в статус (FAILED).
|
36
|
+
|
37
|
+
### Добавлено
|
38
|
+
|
39
|
+
- [EDUSCHL-20487](https://jira.bars.group/browse/EDUSCHL-20487)
|
40
|
+
MINOR Добавлена функция ```set_failed_status_suspended_exporting_data_stages```.
|
41
|
+
|
42
|
+
- [EDUSCHL-20487](https://jira.bars.group/browse/EDUSCHL-20487)
|
43
|
+
MINOR Добавлена функция ```set_failed_status_suspended_collecting_data_stages```.
|
44
|
+
|
45
|
+
## [0.5.9] - 2023-09-25
|
46
|
+
|
47
|
+
Повышена версия wheel
|
48
|
+
|
49
|
+
### Изменено
|
50
|
+
|
51
|
+
- [EDUCLLG-7939](https://jira.bars.group/browse/EDUCLLG-7939)
|
52
|
+
PATCH - Повышена версия wheel
|
53
|
+
|
32
54
|
## [0.5.8] - 2023-09-13
|
33
55
|
|
34
56
|
Исправлена ошибка добавления в описание асинхронной задачи списка выгруженных сущностей
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: edu-rdm-integration
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.6.0
|
4
4
|
Summary: Интеграция с Региональной витриной данных
|
5
5
|
Home-page:
|
6
6
|
Download-URL:
|
@@ -18,6 +18,15 @@ Classifier: Intended Audience :: Developers
|
|
18
18
|
Classifier: Environment :: Console
|
19
19
|
Description-Content-Type: text/markdown
|
20
20
|
License-File: LICENSE
|
21
|
+
Requires-Dist: packaging<24,>=21.3
|
22
|
+
Requires-Dist: pip<24,>=20.1.1
|
23
|
+
Requires-Dist: setuptools<69,>=47.3.1
|
24
|
+
Requires-Dist: wheel<0.42,>=0.37.1
|
25
|
+
Requires-Dist: transliterate<2
|
26
|
+
Requires-Dist: educommon<4,>=3.0.0
|
27
|
+
Requires-Dist: function-tools<1,>=0.5.0
|
28
|
+
Requires-Dist: m3-db-utils<1,>=0.3.4
|
29
|
+
Requires-Dist: uploader-client<1,>=0.1.12
|
21
30
|
|
22
31
|
# Проект "Интеграция с Региональной витриной данных"
|
23
32
|
|
@@ -87,6 +96,12 @@ License-File: LICENSE
|
|
87
96
|
RDM_UPLOAD_STATUS_TASK_MINUTE = conf.get('rdm_upload_status_task', 'MINUTE')
|
88
97
|
RDM_UPLOAD_STATUS_TASK_HOUR = conf.get('rdm_upload_status_task', 'HOUR')
|
89
98
|
RDM_UPLOAD_STATUS_TASK_DAY_OF_WEEK = conf.get('rdm_upload_status_task', 'DAY_OF_WEEK')
|
99
|
+
|
100
|
+
# Настройка запуска периодической задачи поиска зависших этапов экспорта:
|
101
|
+
RDM_CHECK_SUSPEND_TASK_MINUTE = conf.get('rdm_check_suspend_task', 'MINUTE')
|
102
|
+
RDM_CHECK_SUSPEND_TASK_HOUR = conf.get('rdm_check_suspend_task', 'HOUR')
|
103
|
+
RDM_CHECK_SUSPEND_TASK_DAY_OF_WEEK = conf.get('rdm_check_suspend_task', 'DAY_OF_WEEK')
|
104
|
+
RDM_CHECK_SUSPEND_TASK_TIMEDELTA = conf.get_int('rdm_check_suspend_task', 'TIMEDELTA')
|
90
105
|
|
91
106
|
# Загрузка данных в Региональную витрину данных (РВД)
|
92
107
|
# Адрес витрины (schema://host:port)
|
@@ -133,6 +148,14 @@ MINUTE=*/2
|
|
133
148
|
HOUR=*
|
134
149
|
DAY_OF_WEEK=*
|
135
150
|
|
151
|
+
# Настройка запуска периодической задачи поиска зависших этапов экспорта
|
152
|
+
[rdm_check_suspend_task]
|
153
|
+
MINUTE=*/10
|
154
|
+
HOUR=*
|
155
|
+
DAY_OF_WEEK=*
|
156
|
+
# Дельта для определения зависшего подэтапа, мин
|
157
|
+
STAGE_TIMEOUT=120
|
158
|
+
|
136
159
|
[uploader_client]
|
137
160
|
# Адрес витрины
|
138
161
|
URL = http://localhost:8090
|
@@ -167,6 +190,7 @@ ENABLE_REQUEST_EMULATION = True
|
|
167
190
|
| RDM_UPLOAD_STATUS_TASK_MINUTE | Настройка запуска периодической задачи статуса загрузки данных в витрину. Минута | '*/30' |
|
168
191
|
| RDM_UPLOAD_STATUS_TASK_HOUR | Настройка запуска периодической задачи статуса загрузки данных в витрину. Час | '*' |
|
169
192
|
| RDM_UPLOAD_STATUS_TASK_DAY_OF_WEEK | Настройка запуска периодической задачи статуса загрузки данных в витрину. День недели | '*' |
|
193
|
+
| RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT | Дельта для определения зависшего подэтапа. Минута | 120 |
|
170
194
|
|
171
195
|
|
172
196
|
## Сборка и распространение
|
@@ -211,6 +235,28 @@ ENABLE_REQUEST_EMULATION = True
|
|
211
235
|
### Удалено
|
212
236
|
|
213
237
|
|
238
|
+
## [0.6.0] - 2023-09-29
|
239
|
+
|
240
|
+
Добавлена функция set_failed_status_suspended_exporting_data_stages для определения и перевода зависших этапов/подэтапов экспорта в статус (FAILED).
|
241
|
+
Добавлена функция set_failed_status_suspended_collecting_data_stages для определения и перевода зависших этапов/подэтапов сбора в статус (FAILED).
|
242
|
+
|
243
|
+
### Добавлено
|
244
|
+
|
245
|
+
- [EDUSCHL-20487](https://jira.bars.group/browse/EDUSCHL-20487)
|
246
|
+
MINOR Добавлена функция ```set_failed_status_suspended_exporting_data_stages```.
|
247
|
+
|
248
|
+
- [EDUSCHL-20487](https://jira.bars.group/browse/EDUSCHL-20487)
|
249
|
+
MINOR Добавлена функция ```set_failed_status_suspended_collecting_data_stages```.
|
250
|
+
|
251
|
+
## [0.5.9] - 2023-09-25
|
252
|
+
|
253
|
+
Повышена версия wheel
|
254
|
+
|
255
|
+
### Изменено
|
256
|
+
|
257
|
+
- [EDUCLLG-7939](https://jira.bars.group/browse/EDUCLLG-7939)
|
258
|
+
PATCH - Повышена версия wheel
|
259
|
+
|
214
260
|
## [0.5.8] - 2023-09-13
|
215
261
|
|
216
262
|
Исправлена ошибка добавления в описание асинхронной задачи списка выгруженных сущностей
|
@@ -66,6 +66,12 @@
|
|
66
66
|
RDM_UPLOAD_STATUS_TASK_MINUTE = conf.get('rdm_upload_status_task', 'MINUTE')
|
67
67
|
RDM_UPLOAD_STATUS_TASK_HOUR = conf.get('rdm_upload_status_task', 'HOUR')
|
68
68
|
RDM_UPLOAD_STATUS_TASK_DAY_OF_WEEK = conf.get('rdm_upload_status_task', 'DAY_OF_WEEK')
|
69
|
+
|
70
|
+
# Настройка запуска периодической задачи поиска зависших этапов экспорта:
|
71
|
+
RDM_CHECK_SUSPEND_TASK_MINUTE = conf.get('rdm_check_suspend_task', 'MINUTE')
|
72
|
+
RDM_CHECK_SUSPEND_TASK_HOUR = conf.get('rdm_check_suspend_task', 'HOUR')
|
73
|
+
RDM_CHECK_SUSPEND_TASK_DAY_OF_WEEK = conf.get('rdm_check_suspend_task', 'DAY_OF_WEEK')
|
74
|
+
RDM_CHECK_SUSPEND_TASK_TIMEDELTA = conf.get_int('rdm_check_suspend_task', 'TIMEDELTA')
|
69
75
|
|
70
76
|
# Загрузка данных в Региональную витрину данных (РВД)
|
71
77
|
# Адрес витрины (schema://host:port)
|
@@ -112,6 +118,14 @@ MINUTE=*/2
|
|
112
118
|
HOUR=*
|
113
119
|
DAY_OF_WEEK=*
|
114
120
|
|
121
|
+
# Настройка запуска периодической задачи поиска зависших этапов экспорта
|
122
|
+
[rdm_check_suspend_task]
|
123
|
+
MINUTE=*/10
|
124
|
+
HOUR=*
|
125
|
+
DAY_OF_WEEK=*
|
126
|
+
# Дельта для определения зависшего подэтапа, мин
|
127
|
+
STAGE_TIMEOUT=120
|
128
|
+
|
115
129
|
[uploader_client]
|
116
130
|
# Адрес витрины
|
117
131
|
URL = http://localhost:8090
|
@@ -146,6 +160,7 @@ ENABLE_REQUEST_EMULATION = True
|
|
146
160
|
| RDM_UPLOAD_STATUS_TASK_MINUTE | Настройка запуска периодической задачи статуса загрузки данных в витрину. Минута | '*/30' |
|
147
161
|
| RDM_UPLOAD_STATUS_TASK_HOUR | Настройка запуска периодической задачи статуса загрузки данных в витрину. Час | '*' |
|
148
162
|
| RDM_UPLOAD_STATUS_TASK_DAY_OF_WEEK | Настройка запуска периодической задачи статуса загрузки данных в витрину. День недели | '*' |
|
163
|
+
| RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT | Дельта для определения зависшего подэтапа. Минута | 120 |
|
149
164
|
|
150
165
|
|
151
166
|
## Сборка и распространение
|
@@ -0,0 +1,96 @@
|
|
1
|
+
from datetime import (
|
2
|
+
date,
|
3
|
+
datetime,
|
4
|
+
time,
|
5
|
+
timedelta,
|
6
|
+
)
|
7
|
+
from typing import (
|
8
|
+
Dict,
|
9
|
+
Optional,
|
10
|
+
)
|
11
|
+
|
12
|
+
from django.conf import (
|
13
|
+
settings,
|
14
|
+
)
|
15
|
+
from django.db.models import (
|
16
|
+
OuterRef,
|
17
|
+
Subquery,
|
18
|
+
Value,
|
19
|
+
)
|
20
|
+
from django.db.models.functions import (
|
21
|
+
Coalesce,
|
22
|
+
)
|
23
|
+
from django.db.transaction import (
|
24
|
+
atomic,
|
25
|
+
)
|
26
|
+
|
27
|
+
from educommon import (
|
28
|
+
logger,
|
29
|
+
)
|
30
|
+
|
31
|
+
from edu_rdm_integration.models import (
|
32
|
+
CollectingDataStageStatus,
|
33
|
+
CollectingExportedDataStage,
|
34
|
+
CollectingDataSubStageStatus,
|
35
|
+
CollectingExportedDataSubStage,
|
36
|
+
)
|
37
|
+
|
38
|
+
|
39
|
+
@atomic
|
40
|
+
def set_failed_status_suspended_collecting_data_stages() -> Dict[str, int]:
|
41
|
+
"""Установить статус 'Завершено с ошибками' для зависших этапов и подэтапов сбора.
|
42
|
+
|
43
|
+
Сборка считается зависшей в случае если за определенное в параметре RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT время,
|
44
|
+
отсутствуют изменения в связанных подэтапах. Параметр RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT определяется
|
45
|
+
в настройках приложения.
|
46
|
+
"""
|
47
|
+
changed_status_result = {
|
48
|
+
'change_stage_count': 0,
|
49
|
+
'change_sub_stage_count': 0,
|
50
|
+
}
|
51
|
+
|
52
|
+
current_datetime = datetime.now()
|
53
|
+
suspended_time_at = current_datetime - timedelta(minutes=settings.RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT)
|
54
|
+
|
55
|
+
suspended_stage_ids = set(
|
56
|
+
CollectingExportedDataStage.objects.annotate(
|
57
|
+
last_sub_stage_started_at=Coalesce(
|
58
|
+
Subquery(
|
59
|
+
CollectingExportedDataSubStage.objects.filter(
|
60
|
+
stage_id=OuterRef('pk')
|
61
|
+
).values('started_at').order_by('-started_at')[:1]
|
62
|
+
),
|
63
|
+
Value(datetime.combine(date.min, time.min))
|
64
|
+
)
|
65
|
+
).filter(
|
66
|
+
last_sub_stage_started_at__lt=suspended_time_at,
|
67
|
+
status__in=(
|
68
|
+
CollectingDataStageStatus.CREATED.key,
|
69
|
+
CollectingDataStageStatus.IN_PROGRESS.key,
|
70
|
+
),
|
71
|
+
).values_list('pk', flat=True)
|
72
|
+
)
|
73
|
+
|
74
|
+
if suspended_stage_ids:
|
75
|
+
logger.info(f'find suspended CollectingExportedDataStage: {", ".join(map(str, suspended_stage_ids))}..')
|
76
|
+
|
77
|
+
change_stage_count = CollectingExportedDataStage.objects.filter(
|
78
|
+
pk__in=suspended_stage_ids,
|
79
|
+
).update(
|
80
|
+
status=CollectingDataStageStatus.FAILED.key,
|
81
|
+
ended_at=current_datetime,
|
82
|
+
)
|
83
|
+
|
84
|
+
change_sub_stage_count = CollectingExportedDataSubStage.objects.filter(
|
85
|
+
stage_id__in=suspended_stage_ids,
|
86
|
+
).update(
|
87
|
+
status=CollectingDataSubStageStatus.FAILED.key,
|
88
|
+
ended_at=current_datetime,
|
89
|
+
)
|
90
|
+
|
91
|
+
changed_status_result.update({
|
92
|
+
'change_stage_count': change_stage_count,
|
93
|
+
'change_sub_stage_count': change_sub_stage_count,
|
94
|
+
})
|
95
|
+
|
96
|
+
return changed_status_result
|
@@ -0,0 +1,95 @@
|
|
1
|
+
from datetime import (
|
2
|
+
date,
|
3
|
+
datetime,
|
4
|
+
time,
|
5
|
+
timedelta,
|
6
|
+
)
|
7
|
+
from typing import (
|
8
|
+
Dict,
|
9
|
+
)
|
10
|
+
|
11
|
+
from django.conf import (
|
12
|
+
settings,
|
13
|
+
)
|
14
|
+
from django.db.models import (
|
15
|
+
OuterRef,
|
16
|
+
Subquery,
|
17
|
+
Value,
|
18
|
+
)
|
19
|
+
from django.db.models.functions import (
|
20
|
+
Coalesce,
|
21
|
+
)
|
22
|
+
from django.db.transaction import (
|
23
|
+
atomic,
|
24
|
+
)
|
25
|
+
|
26
|
+
from educommon import (
|
27
|
+
logger,
|
28
|
+
)
|
29
|
+
|
30
|
+
from edu_rdm_integration.models import (
|
31
|
+
ExportingDataStage,
|
32
|
+
ExportingDataStageStatus,
|
33
|
+
ExportingDataSubStage,
|
34
|
+
ExportingDataSubStageStatus,
|
35
|
+
)
|
36
|
+
|
37
|
+
|
38
|
+
@atomic
|
39
|
+
def set_failed_status_suspended_exporting_data_stages() -> Dict[str, int]:
|
40
|
+
"""Установить статус 'Завершено с ошибками' для зависших этапов и подэтапов экспорта.
|
41
|
+
|
42
|
+
Экспорт считается зависшим в случае если за определенное в параметре RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT время,
|
43
|
+
отсутствуют изменения в связанных подэтапах. Параметр RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT определяется
|
44
|
+
в настройках приложения.
|
45
|
+
"""
|
46
|
+
changed_status_result = {
|
47
|
+
'change_stage_count': 0,
|
48
|
+
'change_sub_stage_count': 0,
|
49
|
+
}
|
50
|
+
|
51
|
+
current_datetime = datetime.now()
|
52
|
+
suspended_time_at = current_datetime - timedelta(minutes=settings.RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT)
|
53
|
+
|
54
|
+
suspended_stage_ids = set(
|
55
|
+
ExportingDataStage.objects.annotate(
|
56
|
+
last_sub_stage_started_at=Coalesce(
|
57
|
+
Subquery(
|
58
|
+
ExportingDataSubStage.objects.filter(
|
59
|
+
stage_id=OuterRef('pk')
|
60
|
+
).values('started_at').order_by('-started_at')[:1]
|
61
|
+
),
|
62
|
+
Value(datetime.combine(date.min, time.min))
|
63
|
+
)
|
64
|
+
).filter(
|
65
|
+
last_sub_stage_started_at__lt=suspended_time_at,
|
66
|
+
status__in=(
|
67
|
+
ExportingDataStageStatus.CREATED.key,
|
68
|
+
ExportingDataStageStatus.IN_PROGRESS.key,
|
69
|
+
),
|
70
|
+
).values_list('pk', flat=True)
|
71
|
+
)
|
72
|
+
|
73
|
+
if suspended_stage_ids:
|
74
|
+
logger.info(f'find suspended ExportingDataStage: {", ".join(map(str, suspended_stage_ids))}..')
|
75
|
+
|
76
|
+
change_stage_count = ExportingDataStage.objects.filter(
|
77
|
+
pk__in=suspended_stage_ids,
|
78
|
+
).update(
|
79
|
+
status=ExportingDataStageStatus.FAILED.key,
|
80
|
+
ended_at=current_datetime,
|
81
|
+
)
|
82
|
+
|
83
|
+
change_sub_stage_count = ExportingDataSubStage.objects.filter(
|
84
|
+
stage_id__in=suspended_stage_ids,
|
85
|
+
).update(
|
86
|
+
status=ExportingDataSubStageStatus.FAILED.key,
|
87
|
+
ended_at=current_datetime,
|
88
|
+
)
|
89
|
+
|
90
|
+
changed_status_result.update({
|
91
|
+
'change_stage_count': change_stage_count,
|
92
|
+
'change_sub_stage_count': change_sub_stage_count,
|
93
|
+
})
|
94
|
+
|
95
|
+
return changed_status_result
|
{edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration.egg-info/PKG-INFO
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: edu-rdm-integration
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.6.0
|
4
4
|
Summary: Интеграция с Региональной витриной данных
|
5
5
|
Home-page:
|
6
6
|
Download-URL:
|
@@ -18,6 +18,15 @@ Classifier: Intended Audience :: Developers
|
|
18
18
|
Classifier: Environment :: Console
|
19
19
|
Description-Content-Type: text/markdown
|
20
20
|
License-File: LICENSE
|
21
|
+
Requires-Dist: packaging<24,>=21.3
|
22
|
+
Requires-Dist: pip<24,>=20.1.1
|
23
|
+
Requires-Dist: setuptools<69,>=47.3.1
|
24
|
+
Requires-Dist: wheel<0.42,>=0.37.1
|
25
|
+
Requires-Dist: transliterate<2
|
26
|
+
Requires-Dist: educommon<4,>=3.0.0
|
27
|
+
Requires-Dist: function-tools<1,>=0.5.0
|
28
|
+
Requires-Dist: m3-db-utils<1,>=0.3.4
|
29
|
+
Requires-Dist: uploader-client<1,>=0.1.12
|
21
30
|
|
22
31
|
# Проект "Интеграция с Региональной витриной данных"
|
23
32
|
|
@@ -87,6 +96,12 @@ License-File: LICENSE
|
|
87
96
|
RDM_UPLOAD_STATUS_TASK_MINUTE = conf.get('rdm_upload_status_task', 'MINUTE')
|
88
97
|
RDM_UPLOAD_STATUS_TASK_HOUR = conf.get('rdm_upload_status_task', 'HOUR')
|
89
98
|
RDM_UPLOAD_STATUS_TASK_DAY_OF_WEEK = conf.get('rdm_upload_status_task', 'DAY_OF_WEEK')
|
99
|
+
|
100
|
+
# Настройка запуска периодической задачи поиска зависших этапов экспорта:
|
101
|
+
RDM_CHECK_SUSPEND_TASK_MINUTE = conf.get('rdm_check_suspend_task', 'MINUTE')
|
102
|
+
RDM_CHECK_SUSPEND_TASK_HOUR = conf.get('rdm_check_suspend_task', 'HOUR')
|
103
|
+
RDM_CHECK_SUSPEND_TASK_DAY_OF_WEEK = conf.get('rdm_check_suspend_task', 'DAY_OF_WEEK')
|
104
|
+
RDM_CHECK_SUSPEND_TASK_TIMEDELTA = conf.get_int('rdm_check_suspend_task', 'TIMEDELTA')
|
90
105
|
|
91
106
|
# Загрузка данных в Региональную витрину данных (РВД)
|
92
107
|
# Адрес витрины (schema://host:port)
|
@@ -133,6 +148,14 @@ MINUTE=*/2
|
|
133
148
|
HOUR=*
|
134
149
|
DAY_OF_WEEK=*
|
135
150
|
|
151
|
+
# Настройка запуска периодической задачи поиска зависших этапов экспорта
|
152
|
+
[rdm_check_suspend_task]
|
153
|
+
MINUTE=*/10
|
154
|
+
HOUR=*
|
155
|
+
DAY_OF_WEEK=*
|
156
|
+
# Дельта для определения зависшего подэтапа, мин
|
157
|
+
STAGE_TIMEOUT=120
|
158
|
+
|
136
159
|
[uploader_client]
|
137
160
|
# Адрес витрины
|
138
161
|
URL = http://localhost:8090
|
@@ -167,6 +190,7 @@ ENABLE_REQUEST_EMULATION = True
|
|
167
190
|
| RDM_UPLOAD_STATUS_TASK_MINUTE | Настройка запуска периодической задачи статуса загрузки данных в витрину. Минута | '*/30' |
|
168
191
|
| RDM_UPLOAD_STATUS_TASK_HOUR | Настройка запуска периодической задачи статуса загрузки данных в витрину. Час | '*' |
|
169
192
|
| RDM_UPLOAD_STATUS_TASK_DAY_OF_WEEK | Настройка запуска периодической задачи статуса загрузки данных в витрину. День недели | '*' |
|
193
|
+
| RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT | Дельта для определения зависшего подэтапа. Минута | 120 |
|
170
194
|
|
171
195
|
|
172
196
|
## Сборка и распространение
|
@@ -211,6 +235,28 @@ ENABLE_REQUEST_EMULATION = True
|
|
211
235
|
### Удалено
|
212
236
|
|
213
237
|
|
238
|
+
## [0.6.0] - 2023-09-29
|
239
|
+
|
240
|
+
Добавлена функция set_failed_status_suspended_exporting_data_stages для определения и перевода зависших этапов/подэтапов экспорта в статус (FAILED).
|
241
|
+
Добавлена функция set_failed_status_suspended_collecting_data_stages для определения и перевода зависших этапов/подэтапов сбора в статус (FAILED).
|
242
|
+
|
243
|
+
### Добавлено
|
244
|
+
|
245
|
+
- [EDUSCHL-20487](https://jira.bars.group/browse/EDUSCHL-20487)
|
246
|
+
MINOR Добавлена функция ```set_failed_status_suspended_exporting_data_stages```.
|
247
|
+
|
248
|
+
- [EDUSCHL-20487](https://jira.bars.group/browse/EDUSCHL-20487)
|
249
|
+
MINOR Добавлена функция ```set_failed_status_suspended_collecting_data_stages```.
|
250
|
+
|
251
|
+
## [0.5.9] - 2023-09-25
|
252
|
+
|
253
|
+
Повышена версия wheel
|
254
|
+
|
255
|
+
### Изменено
|
256
|
+
|
257
|
+
- [EDUCLLG-7939](https://jira.bars.group/browse/EDUCLLG-7939)
|
258
|
+
PATCH - Повышена версия wheel
|
259
|
+
|
214
260
|
## [0.5.8] - 2023-09-13
|
215
261
|
|
216
262
|
Исправлена ошибка добавления в описание асинхронной задачи списка выгруженных сущностей
|
{edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration.egg-info/SOURCES.txt
RENAMED
@@ -54,6 +54,7 @@ src/edu_rdm_integration/adapters/validators.py
|
|
54
54
|
src/edu_rdm_integration/collect_data/__init__.py
|
55
55
|
src/edu_rdm_integration/collect_data/collect.py
|
56
56
|
src/edu_rdm_integration/collect_data/generators.py
|
57
|
+
src/edu_rdm_integration/collect_data/helpers.py
|
57
58
|
src/edu_rdm_integration/collect_data/base/__init__.py
|
58
59
|
src/edu_rdm_integration/collect_data/base/caches.py
|
59
60
|
src/edu_rdm_integration/collect_data/base/functions.py
|
@@ -96,6 +97,7 @@ src/edu_rdm_integration/export_data/__init__.py
|
|
96
97
|
src/edu_rdm_integration/export_data/consts.py
|
97
98
|
src/edu_rdm_integration/export_data/export.py
|
98
99
|
src/edu_rdm_integration/export_data/generators.py
|
100
|
+
src/edu_rdm_integration/export_data/helpers.py
|
99
101
|
src/edu_rdm_integration/export_data/strategies.py
|
100
102
|
src/edu_rdm_integration/export_data/base/__init__.py
|
101
103
|
src/edu_rdm_integration/export_data/base/caches.py
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/__init__.py
RENAMED
File without changes
|
{edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/apps.py
RENAMED
File without changes
|
{edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/caches.py
RENAMED
File without changes
|
{edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/consts.py
RENAMED
File without changes
|
{edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/enums.py
RENAMED
File without changes
|
{edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/errors.py
RENAMED
File without changes
|
File without changes
|
{edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/helpers.py
RENAMED
File without changes
|
{edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/managers.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/results.py
RENAMED
File without changes
|
{edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/runners.py
RENAMED
File without changes
|
File without changes
|
{edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/strings.py
RENAMED
File without changes
|
{edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/tests.py
RENAMED
File without changes
|
File without changes
|
{edu-rdm-integration-0.5.8 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/app_settings.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|