edu-rdm-integration 0.5.9__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.
Files changed (125) hide show
  1. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/CHANGELOG.md +22 -0
  2. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/PKG-INFO +39 -2
  3. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/README.md +15 -0
  4. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/requirements/dependencies/system_packages.txt +1 -1
  5. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/setup.py +1 -1
  6. edu-rdm-integration-0.6.0/src/edu_rdm_integration/collect_data/helpers.py +96 -0
  7. edu-rdm-integration-0.6.0/src/edu_rdm_integration/export_data/helpers.py +95 -0
  8. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration.egg-info/PKG-INFO +39 -2
  9. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration.egg-info/SOURCES.txt +2 -0
  10. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration.egg-info/requires.txt +1 -1
  11. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/CONDUCT.md +0 -0
  12. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/LICENSE +0 -0
  13. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/MANIFEST.in +0 -0
  14. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/pyproject.toml +0 -0
  15. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/requirements/dependencies/development_packages.txt +0 -0
  16. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/requirements/dependencies/external_packages.txt +0 -0
  17. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/requirements/dependencies/internal_packages.txt +0 -0
  18. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/requirements/dependencies/internal_sources.txt +0 -0
  19. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/requirements/dependencies/production_packages.txt +0 -0
  20. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/requirements/dependencies/testing_packages.txt +0 -0
  21. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/requirements/development.txt +0 -0
  22. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/requirements/production.txt +0 -0
  23. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/requirements/stage.txt +0 -0
  24. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/setup.cfg +0 -0
  25. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/__init__.py +0 -0
  26. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/__init__.py +0 -0
  27. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/apps.py +0 -0
  28. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/caches.py +0 -0
  29. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/consts.py +0 -0
  30. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/enums.py +0 -0
  31. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/errors.py +0 -0
  32. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/functions.py +0 -0
  33. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/helpers.py +0 -0
  34. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/managers.py +0 -0
  35. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/presenters.py +0 -0
  36. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/receivers.py +0 -0
  37. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/results.py +0 -0
  38. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/runners.py +0 -0
  39. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/strategies.py +0 -0
  40. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/strings.py +0 -0
  41. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/tests.py +0 -0
  42. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/adapters/validators.py +0 -0
  43. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/app_settings.py +0 -0
  44. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/apps.py +0 -0
  45. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/__init__.py +0 -0
  46. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/base/__init__.py +0 -0
  47. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/base/caches.py +0 -0
  48. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/base/functions.py +0 -0
  49. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/base/managers.py +0 -0
  50. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/base/mixins.py +0 -0
  51. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/base/runners.py +0 -0
  52. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/__init__.py +0 -0
  53. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/__init__.py +0 -0
  54. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/caches.py +0 -0
  55. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/consts.py +0 -0
  56. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/enums.py +0 -0
  57. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/errors.py +0 -0
  58. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/functions.py +0 -0
  59. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/helpers.py +0 -0
  60. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/managers.py +0 -0
  61. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/presenters.py +0 -0
  62. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/results.py +0 -0
  63. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/runners.py +0 -0
  64. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/strings.py +0 -0
  65. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/tests.py +0 -0
  66. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/base/validators.py +0 -0
  67. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/calculated/strategies.py +0 -0
  68. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/collect.py +0 -0
  69. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/generators.py +0 -0
  70. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/__init__.py +0 -0
  71. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/__init__.py +0 -0
  72. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/caches.py +0 -0
  73. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/consts.py +0 -0
  74. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/enums.py +0 -0
  75. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/errors.py +0 -0
  76. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/functions.py +0 -0
  77. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/helpers.py +0 -0
  78. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/managers.py +0 -0
  79. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/presenters.py +0 -0
  80. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/results.py +0 -0
  81. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/runners.py +0 -0
  82. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/strings.py +0 -0
  83. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/tests.py +0 -0
  84. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/base/validators.py +0 -0
  85. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/collect_data/non_calculated/strategies.py +0 -0
  86. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/consts.py +0 -0
  87. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/entities.py +0 -0
  88. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/enums.py +0 -0
  89. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/__init__.py +0 -0
  90. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/__init__.py +0 -0
  91. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/caches.py +0 -0
  92. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/consts.py +0 -0
  93. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/enums.py +0 -0
  94. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/errors.py +0 -0
  95. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/functions.py +0 -0
  96. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/helpers.py +0 -0
  97. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/managers.py +0 -0
  98. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/presenters.py +0 -0
  99. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/requests.py +0 -0
  100. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/results.py +0 -0
  101. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/runners.py +0 -0
  102. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/strings.py +0 -0
  103. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/tests.py +0 -0
  104. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/base/validators.py +0 -0
  105. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/consts.py +0 -0
  106. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/export.py +0 -0
  107. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/generators.py +0 -0
  108. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/export_data/strategies.py +0 -0
  109. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/management/__init__.py +0 -0
  110. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/management/commands/__init__.py +0 -0
  111. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/management/commands/collect_models_data.py +0 -0
  112. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/management/commands/export_entities_data.py +0 -0
  113. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/management/general.py +0 -0
  114. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/mapping.py +0 -0
  115. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/migrations/0001_initial.py +0 -0
  116. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/migrations/0002_init_data_uploadstatus.py +0 -0
  117. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/migrations/__init__.py +0 -0
  118. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/models.py +0 -0
  119. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/signals.py +0 -0
  120. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/storages.py +0 -0
  121. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration/utils.py +0 -0
  122. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration.egg-info/dependency_links.txt +0 -0
  123. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration.egg-info/namespace_packages.txt +0 -0
  124. {edu-rdm-integration-0.5.9 → edu-rdm-integration-0.6.0}/src/edu_rdm_integration.egg-info/not-zip-safe +0 -0
  125. {edu-rdm-integration-0.5.9 → 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.5.9
3
+ Version: 0.6.0
4
4
  Summary: Интеграция с Региональной витриной данных
5
5
  Home-page:
6
6
  Download-URL:
@@ -21,7 +21,7 @@ License-File: LICENSE
21
21
  Requires-Dist: packaging<24,>=21.3
22
22
  Requires-Dist: pip<24,>=20.1.1
23
23
  Requires-Dist: setuptools<69,>=47.3.1
24
- Requires-Dist: wheel<0.41,>=0.37.1
24
+ Requires-Dist: wheel<0.42,>=0.37.1
25
25
  Requires-Dist: transliterate<2
26
26
  Requires-Dist: educommon<4,>=3.0.0
27
27
  Requires-Dist: function-tools<1,>=0.5.0
@@ -96,6 +96,12 @@ Requires-Dist: uploader-client<1,>=0.1.12
96
96
  RDM_UPLOAD_STATUS_TASK_MINUTE = conf.get('rdm_upload_status_task', 'MINUTE')
97
97
  RDM_UPLOAD_STATUS_TASK_HOUR = conf.get('rdm_upload_status_task', 'HOUR')
98
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')
99
105
 
100
106
  # Загрузка данных в Региональную витрину данных (РВД)
101
107
  # Адрес витрины (schema://host:port)
@@ -142,6 +148,14 @@ MINUTE=*/2
142
148
  HOUR=*
143
149
  DAY_OF_WEEK=*
144
150
 
151
+ # Настройка запуска периодической задачи поиска зависших этапов экспорта
152
+ [rdm_check_suspend_task]
153
+ MINUTE=*/10
154
+ HOUR=*
155
+ DAY_OF_WEEK=*
156
+ # Дельта для определения зависшего подэтапа, мин
157
+ STAGE_TIMEOUT=120
158
+
145
159
  [uploader_client]
146
160
  # Адрес витрины
147
161
  URL = http://localhost:8090
@@ -176,6 +190,7 @@ ENABLE_REQUEST_EMULATION = True
176
190
  | RDM_UPLOAD_STATUS_TASK_MINUTE | Настройка запуска периодической задачи статуса загрузки данных в витрину. Минута | '*/30' |
177
191
  | RDM_UPLOAD_STATUS_TASK_HOUR | Настройка запуска периодической задачи статуса загрузки данных в витрину. Час | '*' |
178
192
  | RDM_UPLOAD_STATUS_TASK_DAY_OF_WEEK | Настройка запуска периодической задачи статуса загрузки данных в витрину. День недели | '*' |
193
+ | RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT | Дельта для определения зависшего подэтапа. Минута | 120 |
179
194
 
180
195
 
181
196
  ## Сборка и распространение
@@ -220,6 +235,28 @@ ENABLE_REQUEST_EMULATION = True
220
235
  ### Удалено
221
236
 
222
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
+
223
260
  ## [0.5.8] - 2023-09-13
224
261
 
225
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
  ## Сборка и распространение
@@ -1,4 +1,4 @@
1
1
  packaging>=21.3,<24
2
2
  pip>=20.1.1,<24
3
3
  setuptools>=47.3.1,<69
4
- wheel>=0.37.1,<0.41
4
+ wheel>=0.37.1,<0.42
@@ -17,7 +17,7 @@ from setuptools import (
17
17
 
18
18
  PROJECT = 'edu_rdm_integration'
19
19
 
20
- VERSION = '0.5.9'
20
+ VERSION = '0.6.0'
21
21
 
22
22
  current_dir_path = Path().resolve()
23
23
 
@@ -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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: edu-rdm-integration
3
- Version: 0.5.9
3
+ Version: 0.6.0
4
4
  Summary: Интеграция с Региональной витриной данных
5
5
  Home-page:
6
6
  Download-URL:
@@ -21,7 +21,7 @@ License-File: LICENSE
21
21
  Requires-Dist: packaging<24,>=21.3
22
22
  Requires-Dist: pip<24,>=20.1.1
23
23
  Requires-Dist: setuptools<69,>=47.3.1
24
- Requires-Dist: wheel<0.41,>=0.37.1
24
+ Requires-Dist: wheel<0.42,>=0.37.1
25
25
  Requires-Dist: transliterate<2
26
26
  Requires-Dist: educommon<4,>=3.0.0
27
27
  Requires-Dist: function-tools<1,>=0.5.0
@@ -96,6 +96,12 @@ Requires-Dist: uploader-client<1,>=0.1.12
96
96
  RDM_UPLOAD_STATUS_TASK_MINUTE = conf.get('rdm_upload_status_task', 'MINUTE')
97
97
  RDM_UPLOAD_STATUS_TASK_HOUR = conf.get('rdm_upload_status_task', 'HOUR')
98
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')
99
105
 
100
106
  # Загрузка данных в Региональную витрину данных (РВД)
101
107
  # Адрес витрины (schema://host:port)
@@ -142,6 +148,14 @@ MINUTE=*/2
142
148
  HOUR=*
143
149
  DAY_OF_WEEK=*
144
150
 
151
+ # Настройка запуска периодической задачи поиска зависших этапов экспорта
152
+ [rdm_check_suspend_task]
153
+ MINUTE=*/10
154
+ HOUR=*
155
+ DAY_OF_WEEK=*
156
+ # Дельта для определения зависшего подэтапа, мин
157
+ STAGE_TIMEOUT=120
158
+
145
159
  [uploader_client]
146
160
  # Адрес витрины
147
161
  URL = http://localhost:8090
@@ -176,6 +190,7 @@ ENABLE_REQUEST_EMULATION = True
176
190
  | RDM_UPLOAD_STATUS_TASK_MINUTE | Настройка запуска периодической задачи статуса загрузки данных в витрину. Минута | '*/30' |
177
191
  | RDM_UPLOAD_STATUS_TASK_HOUR | Настройка запуска периодической задачи статуса загрузки данных в витрину. Час | '*' |
178
192
  | RDM_UPLOAD_STATUS_TASK_DAY_OF_WEEK | Настройка запуска периодической задачи статуса загрузки данных в витрину. День недели | '*' |
193
+ | RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT | Дельта для определения зависшего подэтапа. Минута | 120 |
179
194
 
180
195
 
181
196
  ## Сборка и распространение
@@ -220,6 +235,28 @@ ENABLE_REQUEST_EMULATION = True
220
235
  ### Удалено
221
236
 
222
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
+
223
260
  ## [0.5.8] - 2023-09-13
224
261
 
225
262
  Исправлена ошибка добавления в описание асинхронной задачи списка выгруженных сущностей
@@ -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
@@ -1,7 +1,7 @@
1
1
  packaging<24,>=21.3
2
2
  pip<24,>=20.1.1
3
3
  setuptools<69,>=47.3.1
4
- wheel<0.41,>=0.37.1
4
+ wheel<0.42,>=0.37.1
5
5
  transliterate<2
6
6
  educommon<4,>=3.0.0
7
7
  function-tools<1,>=0.5.0