edu-rdm-integration 0.4.4__tar.gz → 0.4.6__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 (123) hide show
  1. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/CHANGELOG.md +24 -0
  2. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/PKG-INFO +25 -1
  3. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/setup.py +1 -1
  4. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/base/caches.py +26 -0
  5. edu-rdm-integration-0.4.6/src/edu_rdm_integration/collect_data/base/mixins.py +78 -0
  6. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/calculated/base/caches.py +8 -9
  7. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/non_calculated/base/caches.py +16 -3
  8. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration.egg-info/PKG-INFO +25 -1
  9. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration.egg-info/SOURCES.txt +1 -0
  10. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/CONDUCT.md +0 -0
  11. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/LICENSE +0 -0
  12. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/MANIFEST.in +0 -0
  13. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/README.md +0 -0
  14. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/pyproject.toml +0 -0
  15. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/requirements/dependencies/development_packages.txt +0 -0
  16. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/requirements/dependencies/external_packages.txt +0 -0
  17. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/requirements/dependencies/internal_packages.txt +0 -0
  18. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/requirements/dependencies/internal_sources.txt +0 -0
  19. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/requirements/dependencies/production_packages.txt +0 -0
  20. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/requirements/dependencies/system_packages.txt +0 -0
  21. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/requirements/dependencies/testing_packages.txt +0 -0
  22. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/requirements/development.txt +0 -0
  23. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/requirements/production.txt +0 -0
  24. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/requirements/stage.txt +0 -0
  25. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/setup.cfg +0 -0
  26. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/__init__.py +0 -0
  27. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/adapters/__init__.py +0 -0
  28. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/adapters/apps.py +0 -0
  29. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/adapters/caches.py +0 -0
  30. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/adapters/consts.py +0 -0
  31. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/adapters/enums.py +0 -0
  32. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/adapters/errors.py +0 -0
  33. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/adapters/functions.py +0 -0
  34. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/adapters/helpers.py +0 -0
  35. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/adapters/managers.py +0 -0
  36. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/adapters/presenters.py +0 -0
  37. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/adapters/receivers.py +0 -0
  38. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/adapters/results.py +0 -0
  39. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/adapters/runners.py +0 -0
  40. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/adapters/strategies.py +0 -0
  41. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/adapters/strings.py +0 -0
  42. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/adapters/tests.py +0 -0
  43. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/adapters/validators.py +0 -0
  44. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/app_settings.py +0 -0
  45. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/apps.py +0 -0
  46. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/__init__.py +0 -0
  47. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/base/__init__.py +0 -0
  48. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/base/functions.py +0 -0
  49. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/base/managers.py +0 -0
  50. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/base/runners.py +0 -0
  51. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/calculated/__init__.py +0 -0
  52. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/calculated/base/__init__.py +0 -0
  53. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/calculated/base/consts.py +0 -0
  54. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/calculated/base/enums.py +0 -0
  55. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/calculated/base/errors.py +0 -0
  56. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/calculated/base/functions.py +0 -0
  57. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/calculated/base/helpers.py +0 -0
  58. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/calculated/base/managers.py +0 -0
  59. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/calculated/base/presenters.py +0 -0
  60. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/calculated/base/results.py +0 -0
  61. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/calculated/base/runners.py +0 -0
  62. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/calculated/base/strings.py +0 -0
  63. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/calculated/base/tests.py +0 -0
  64. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/calculated/base/validators.py +0 -0
  65. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/calculated/strategies.py +0 -0
  66. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/collect.py +0 -0
  67. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/generators.py +0 -0
  68. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/non_calculated/__init__.py +0 -0
  69. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/non_calculated/base/__init__.py +0 -0
  70. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/non_calculated/base/consts.py +0 -0
  71. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/non_calculated/base/enums.py +0 -0
  72. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/non_calculated/base/errors.py +0 -0
  73. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/non_calculated/base/functions.py +0 -0
  74. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/non_calculated/base/helpers.py +0 -0
  75. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/non_calculated/base/managers.py +0 -0
  76. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/non_calculated/base/presenters.py +0 -0
  77. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/non_calculated/base/results.py +0 -0
  78. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/non_calculated/base/runners.py +0 -0
  79. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/non_calculated/base/strings.py +0 -0
  80. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/non_calculated/base/tests.py +0 -0
  81. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/non_calculated/base/validators.py +0 -0
  82. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/collect_data/non_calculated/strategies.py +0 -0
  83. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/consts.py +0 -0
  84. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/entities.py +0 -0
  85. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/enums.py +0 -0
  86. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/export_data/__init__.py +0 -0
  87. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/export_data/base/__init__.py +0 -0
  88. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/export_data/base/caches.py +0 -0
  89. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/export_data/base/consts.py +0 -0
  90. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/export_data/base/enums.py +0 -0
  91. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/export_data/base/errors.py +0 -0
  92. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/export_data/base/functions.py +0 -0
  93. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/export_data/base/helpers.py +0 -0
  94. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/export_data/base/managers.py +0 -0
  95. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/export_data/base/presenters.py +0 -0
  96. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/export_data/base/requests.py +0 -0
  97. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/export_data/base/results.py +0 -0
  98. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/export_data/base/runners.py +0 -0
  99. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/export_data/base/strings.py +0 -0
  100. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/export_data/base/tests.py +0 -0
  101. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/export_data/base/validators.py +0 -0
  102. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/export_data/consts.py +0 -0
  103. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/export_data/export.py +0 -0
  104. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/export_data/generators.py +0 -0
  105. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/export_data/strategies.py +0 -0
  106. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/management/__init__.py +0 -0
  107. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/management/commands/__init__.py +0 -0
  108. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/management/commands/collect_models_data.py +0 -0
  109. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/management/commands/export_entities_data.py +0 -0
  110. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/management/general.py +0 -0
  111. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/mapping.py +0 -0
  112. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/migrations/0001_initial.py +0 -0
  113. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/migrations/0002_init_data_uploadstatus.py +0 -0
  114. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/migrations/__init__.py +0 -0
  115. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/models.py +0 -0
  116. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/signals.py +0 -0
  117. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/storages.py +0 -0
  118. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration/utils.py +0 -0
  119. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration.egg-info/dependency_links.txt +0 -0
  120. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration.egg-info/namespace_packages.txt +0 -0
  121. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration.egg-info/not-zip-safe +0 -0
  122. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration.egg-info/requires.txt +0 -0
  123. {edu-rdm-integration-0.4.4 → edu-rdm-integration-0.4.6}/src/edu_rdm_integration.egg-info/top_level.txt +0 -0
@@ -24,6 +24,30 @@
24
24
 
25
25
  ### Исправлено
26
26
 
27
+ ## [0.4.6] - 2023-08-16
28
+
29
+ Удален лишний вызов метода _prepare_logs
30
+
31
+ ### Добавлено
32
+
33
+ ### Изменено
34
+
35
+ ### Исправлено
36
+ - [EDUSCHL-19991](https://jira.bars.group/browse/EDUSCHL-19991)
37
+ PATCH удален лишний вызов метода ```_prepare_logs``` в методе ```__init__``` класса ```BaseCollectingCalculatedExportedDataFunctionCacheStorage```
38
+
39
+ ## [0.4.5] - 2023-08-09
40
+
41
+ Объединение обрабатываемых логов относящихся к одному объекту
42
+
43
+ ### Добавлено
44
+
45
+ - [EDUSCHL-19991](https://jira.bars.group/browse/EDUSCHL-19991)
46
+ PATCH Новый миксин ```ReformatLogsMixin``` , новое поле is_merge_logs и новый метод _merge_logs у класса ```BaseCollectingExportedDataFunctionCacheStorage```
47
+
48
+ ### Изменено
49
+
50
+ ### Исправлено
27
51
 
28
52
  ## [0.4.4] - 2023-08-12
29
53
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: edu-rdm-integration
3
- Version: 0.4.4
3
+ Version: 0.4.6
4
4
  Summary: Интеграция с Региональной витриной данных
5
5
  Home-page:
6
6
  Download-URL:
@@ -206,6 +206,30 @@ ENABLE_REQUEST_EMULATION = True
206
206
 
207
207
  ### Исправлено
208
208
 
209
+ ## [0.4.6] - 2023-08-16
210
+
211
+ Удален лишний вызов метода _prepare_logs
212
+
213
+ ### Добавлено
214
+
215
+ ### Изменено
216
+
217
+ ### Исправлено
218
+ - [EDUSCHL-19991](https://jira.bars.group/browse/EDUSCHL-19991)
219
+ PATCH удален лишний вызов метода ```_prepare_logs``` в методе ```__init__``` класса ```BaseCollectingCalculatedExportedDataFunctionCacheStorage```
220
+
221
+ ## [0.4.5] - 2023-08-09
222
+
223
+ Объединение обрабатываемых логов относящихся к одному объекту
224
+
225
+ ### Добавлено
226
+
227
+ - [EDUSCHL-19991](https://jira.bars.group/browse/EDUSCHL-19991)
228
+ PATCH Новый миксин ```ReformatLogsMixin``` , новое поле is_merge_logs и новый метод _merge_logs у класса ```BaseCollectingExportedDataFunctionCacheStorage```
229
+
230
+ ### Изменено
231
+
232
+ ### Исправлено
209
233
 
210
234
  ## [0.4.4] - 2023-08-12
211
235
 
@@ -17,7 +17,7 @@ from setuptools import (
17
17
 
18
18
  PROJECT = 'edu_rdm_integration'
19
19
 
20
- VERSION = '0.4.4'
20
+ VERSION = '0.4.6'
21
21
 
22
22
  current_dir_path = Path().resolve()
23
23
 
@@ -2,12 +2,16 @@ from typing import (
2
2
  Any,
3
3
  Dict,
4
4
  Optional,
5
+ NamedTuple,
5
6
  )
6
7
 
7
8
  from edu_rdm_integration.adapters.caches import (
8
9
  WebEduEntityCache,
9
10
  )
10
11
 
12
+ from educommon.integration_entities.enums import (
13
+ EntityLogOperation,
14
+ )
11
15
 
12
16
  class WebEduEntityCacheExtended(WebEduEntityCache):
13
17
  """
@@ -43,3 +47,25 @@ class WebEduEntityCacheExtended(WebEduEntityCache):
43
47
  self._entities = self._entities.only(*self._only_fields)
44
48
 
45
49
  self._entities = self._entities.distinct()
50
+
51
+
52
+ class LogChange(NamedTuple):
53
+ """Операция и значения измененных полей из лога."""
54
+
55
+ operation: EntityLogOperation
56
+ fields: Dict[str, Any]
57
+
58
+ @property
59
+ def is_create(self) -> bool:
60
+ """Лог создания."""
61
+ return self.operation == EntityLogOperation.CREATE
62
+
63
+ @property
64
+ def is_update(self) -> bool:
65
+ """Лог изменения."""
66
+ return self.operation == EntityLogOperation.UPDATE
67
+
68
+ @property
69
+ def is_delete(self) -> bool:
70
+ """Лог удаления."""
71
+ return self.operation == EntityLogOperation.DELETE
@@ -0,0 +1,78 @@
1
+ from edu_rdm_integration.collect_data.base.caches import (
2
+ LogChange,
3
+ )
4
+ from edu_rdm_integration.mapping import (
5
+ MODEL_FIELDS_LOG_FILTER,
6
+ )
7
+
8
+ from educommon.audit_log.utils import (
9
+ get_model_by_table,
10
+ )
11
+ from educommon.integration_entities.consts import (
12
+ LOG_OPERATION_MAP,
13
+ )
14
+ from educommon.integration_entities.enums import (
15
+ EntityLogOperation,
16
+ )
17
+
18
+
19
+ class ReformatLogsMixin:
20
+ """Миксин для преобразования логов к удобному для работы виду в кешах помощников функций."""
21
+
22
+ def _reformat_logs(self):
23
+ """
24
+ Производится преобразование логов к удобному для работы виду.
25
+
26
+ Предполагается вложенные словари. На первом уровне ключом будет название
27
+ модели, на втором идентификатор записи.
28
+ """
29
+ for log in self.raw_logs:
30
+ model = get_model_by_table(log.table)._meta.label
31
+
32
+ if getattr(self, '_log_only_models', None) and (model not in self._log_only_models):
33
+ # Пропускаем, если модель не входит в список отслеживаемых
34
+ continue
35
+
36
+ operation = LOG_OPERATION_MAP[log.operation]
37
+
38
+ if operation in EntityLogOperation.values:
39
+ fields = log.data
40
+ else:
41
+ fields = {}
42
+
43
+ log_change = LogChange(
44
+ operation=operation,
45
+ fields=fields,
46
+ )
47
+
48
+ if not self._filter_log(model, log_change):
49
+ # Если модель не отслеживается, то запись лога не сохраняем
50
+ continue
51
+
52
+ if log_change.operation == EntityLogOperation.DELETE:
53
+ self.logs[model][log.object_id] = [log_change, ]
54
+ else:
55
+ self.logs[model][log.object_id].append(log_change)
56
+
57
+ @staticmethod
58
+ def _filter_log(model: str, log_change: LogChange) -> bool:
59
+ """
60
+ Производится проверка изменений на отслеживаемые поля.
61
+ """
62
+ is_filtered = False
63
+
64
+ if model in MODEL_FIELDS_LOG_FILTER[log_change.operation]:
65
+ filter_fields = MODEL_FIELDS_LOG_FILTER[log_change.operation][model]
66
+ if filter_fields:
67
+ # Если заданы конкретные поля, которые должны отслеживать
68
+ for field in log_change.fields:
69
+ if field in filter_fields:
70
+ # Достаточно, чтобы хотя бы одно поле попало под фильтр
71
+ is_filtered = True
72
+ break
73
+ else:
74
+ # Модель отслеживается, но перечень фильтруемых полей не задан,
75
+ # значит фильтруем все поля модели
76
+ is_filtered = True
77
+
78
+ return is_filtered
@@ -28,6 +28,13 @@ from edu_rdm_integration.adapters.caches import (
28
28
  from edu_rdm_integration.collect_data.calculated.base.consts import (
29
29
  LOOKUP_SEP,
30
30
  )
31
+ from educommon.utils.conversion import (
32
+ int_or_none,
33
+ )
34
+
35
+ from edu_rdm_integration.collect_data.base.mixins import (
36
+ ReformatLogsMixin,
37
+ )
31
38
 
32
39
 
33
40
  class BaseCollectingCalculatedExportedDataRunnerCacheStorage(WebEduRunnerCacheStorage):
@@ -36,7 +43,7 @@ class BaseCollectingCalculatedExportedDataRunnerCacheStorage(WebEduRunnerCacheSt
36
43
  """
37
44
 
38
45
 
39
- class BaseCollectingCalculatedExportedDataFunctionCacheStorage(WebEduFunctionCacheStorage):
46
+ class BaseCollectingCalculatedExportedDataFunctionCacheStorage(ReformatLogsMixin, WebEduFunctionCacheStorage):
40
47
  """
41
48
  Базовый кеш помощников функций сбора расчетных данных для интеграции с "Региональная витрина данных".
42
49
  """
@@ -60,14 +67,6 @@ class BaseCollectingCalculatedExportedDataFunctionCacheStorage(WebEduFunctionCac
60
67
  # }
61
68
  self.logs = defaultdict(lambda: defaultdict(list))
62
69
 
63
- def _reformat_logs(self):
64
- """
65
- Производится преобразование логов к удобному для работы виду.
66
-
67
- Предполагается вложенные словари. На первом уровне ключом будет название
68
- модели, на втором идентификатор записи.
69
- """
70
-
71
70
  def _prepare_logs(self):
72
71
  """
73
72
  Подготовка логов для дальнейшей работы.
@@ -67,7 +67,7 @@ class BaseCollectingExportedDataFunctionCacheStorage(WebEduFunctionCacheStorage)
67
67
  Базовый кеш помощников функций сбора данных для интеграции с "Региональная витрина данных".
68
68
  """
69
69
 
70
- def __init__(self, raw_logs, *args, **kwargs):
70
+ def __init__(self, raw_logs, is_merge_logs=False, *args, **kwargs):
71
71
  super().__init__(*args, **kwargs)
72
72
 
73
73
  # Необработанные логи как есть.
@@ -75,7 +75,7 @@ class BaseCollectingExportedDataFunctionCacheStorage(WebEduFunctionCacheStorage)
75
75
 
76
76
  # TODO Перенести в базовый класс (https://jira.bars.group/browse/EDUSCHL-19991)
77
77
  # Необходимость объединения логов относящихся к одному объекту
78
- self.is_merge_logs = True
78
+ self.is_merge_logs = is_merge_logs
79
79
 
80
80
  # Подготовленные логи в виде:
81
81
  # {
@@ -149,7 +149,20 @@ class BaseCollectingExportedDataFunctionCacheStorage(WebEduFunctionCacheStorage)
149
149
  if log_change.operation == EntityLogOperation.DELETE:
150
150
  self.logs[model][log.object_id] = [log_change, ]
151
151
  else:
152
- self.logs[model][log.object_id].append(log_change)
152
+ if self.is_merge_logs:
153
+ self._merge_logs(self.logs[model][log.object_id], log_change)
154
+ else:
155
+ self.logs[model][log.object_id].append(log_change)
156
+
157
+ @staticmethod
158
+ def _merge_logs(log_changes: List[LogChange], log_change: LogChange):
159
+ """
160
+ Производит объединение (накопление) изменений полей в рамках одного объекта.
161
+ """
162
+ if log_changes:
163
+ log_changes[0].fields.update(log_change.fields)
164
+ else:
165
+ log_changes.append(log_change)
153
166
 
154
167
  def _prepare_logs(self):
155
168
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: edu-rdm-integration
3
- Version: 0.4.4
3
+ Version: 0.4.6
4
4
  Summary: Интеграция с Региональной витриной данных
5
5
  Home-page:
6
6
  Download-URL:
@@ -206,6 +206,30 @@ ENABLE_REQUEST_EMULATION = True
206
206
 
207
207
  ### Исправлено
208
208
 
209
+ ## [0.4.6] - 2023-08-16
210
+
211
+ Удален лишний вызов метода _prepare_logs
212
+
213
+ ### Добавлено
214
+
215
+ ### Изменено
216
+
217
+ ### Исправлено
218
+ - [EDUSCHL-19991](https://jira.bars.group/browse/EDUSCHL-19991)
219
+ PATCH удален лишний вызов метода ```_prepare_logs``` в методе ```__init__``` класса ```BaseCollectingCalculatedExportedDataFunctionCacheStorage```
220
+
221
+ ## [0.4.5] - 2023-08-09
222
+
223
+ Объединение обрабатываемых логов относящихся к одному объекту
224
+
225
+ ### Добавлено
226
+
227
+ - [EDUSCHL-19991](https://jira.bars.group/browse/EDUSCHL-19991)
228
+ PATCH Новый миксин ```ReformatLogsMixin``` , новое поле is_merge_logs и новый метод _merge_logs у класса ```BaseCollectingExportedDataFunctionCacheStorage```
229
+
230
+ ### Изменено
231
+
232
+ ### Исправлено
209
233
 
210
234
  ## [0.4.4] - 2023-08-12
211
235
 
@@ -58,6 +58,7 @@ src/edu_rdm_integration/collect_data/base/__init__.py
58
58
  src/edu_rdm_integration/collect_data/base/caches.py
59
59
  src/edu_rdm_integration/collect_data/base/functions.py
60
60
  src/edu_rdm_integration/collect_data/base/managers.py
61
+ src/edu_rdm_integration/collect_data/base/mixins.py
61
62
  src/edu_rdm_integration/collect_data/base/runners.py
62
63
  src/edu_rdm_integration/collect_data/calculated/__init__.py
63
64
  src/edu_rdm_integration/collect_data/calculated/strategies.py