edu-rdm-integration 0.7.2__py3-none-any.whl → 0.8.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- edu_rdm_integration/function_templates/function_export_data_template/managers.py-tpl +1 -1
- edu_rdm_integration/migrations/0004_uploaderclientlog.py +25 -0
- edu_rdm_integration/models.py +69 -0
- edu_rdm_integration/uploader_log/__init__.py +0 -0
- edu_rdm_integration/uploader_log/actions.py +229 -0
- edu_rdm_integration/uploader_log/apps.py +10 -0
- edu_rdm_integration/uploader_log/enums.py +15 -0
- edu_rdm_integration/uploader_log/managers.py +100 -0
- edu_rdm_integration/uploader_log/ui.py +64 -0
- {edu_rdm_integration-0.7.2.dist-info → edu_rdm_integration-0.8.0.dist-info}/METADATA +24 -2
- {edu_rdm_integration-0.7.2.dist-info → edu_rdm_integration-0.8.0.dist-info}/RECORD +15 -8
- {edu_rdm_integration-0.7.2.dist-info → edu_rdm_integration-0.8.0.dist-info}/LICENSE +0 -0
- {edu_rdm_integration-0.7.2.dist-info → edu_rdm_integration-0.8.0.dist-info}/WHEEL +0 -0
- {edu_rdm_integration-0.7.2.dist-info → edu_rdm_integration-0.8.0.dist-info}/namespace_packages.txt +0 -0
- {edu_rdm_integration-0.7.2.dist-info → edu_rdm_integration-0.8.0.dist-info}/top_level.txt +0 -0
@@ -59,7 +59,7 @@ class {{ camel_case_function_name }}RunnerManager({{ strategy.manager_class_name
|
|
59
59
|
"""Возвращает класс ранера."""
|
60
60
|
return {{ camel_case_function_name }}Runner
|
61
61
|
|
62
|
-
def _prepare_model_ids_map(self) -> Dict[ModelEnumValue, Iterator[int]]:
|
62
|
+
def _prepare_model_ids_map(self) -> Dict['ModelEnumValue', Iterator[int]]:
|
63
63
|
"""Осуществляется поиск записей моделей добавленных или обновленных за указанный период времени.
|
64
64
|
|
65
65
|
В выборках (QuerySet) необходимо использовать iterator().
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# Generated by Django 2.2.28 on 2023-12-01 20:58
|
2
|
+
from django.db import (
|
3
|
+
migrations,
|
4
|
+
)
|
5
|
+
|
6
|
+
|
7
|
+
class Migration(migrations.Migration):
|
8
|
+
|
9
|
+
dependencies = [
|
10
|
+
('uploader_client', '0001_initial'),
|
11
|
+
('edu_rdm_integration', '0003_create_index_file_upload_status'),
|
12
|
+
]
|
13
|
+
|
14
|
+
operations = [
|
15
|
+
migrations.CreateModel(
|
16
|
+
name='UploaderClientLog',
|
17
|
+
fields=[],
|
18
|
+
options={
|
19
|
+
'proxy': True,
|
20
|
+
'indexes': [],
|
21
|
+
'constraints': [],
|
22
|
+
},
|
23
|
+
bases=('edu_rdm_integration.exportingdatasubstageuploaderclientlog', ),
|
24
|
+
),
|
25
|
+
]
|
edu_rdm_integration/models.py
CHANGED
@@ -56,6 +56,28 @@ from edu_rdm_integration.enums import (
|
|
56
56
|
from edu_rdm_integration.utils import (
|
57
57
|
get_exporting_data_stage_attachment_path,
|
58
58
|
)
|
59
|
+
from io import (
|
60
|
+
StringIO,
|
61
|
+
)
|
62
|
+
from typing import (
|
63
|
+
Optional,
|
64
|
+
Tuple,
|
65
|
+
)
|
66
|
+
|
67
|
+
from django.db.models import (
|
68
|
+
Manager,
|
69
|
+
)
|
70
|
+
from django.utils.functional import (
|
71
|
+
cached_property,
|
72
|
+
)
|
73
|
+
|
74
|
+
from uploader_client.models import (
|
75
|
+
Entry,
|
76
|
+
)
|
77
|
+
|
78
|
+
from edu_rdm_integration.uploader_log.managers import (
|
79
|
+
UploaderClientLogManager,
|
80
|
+
)
|
59
81
|
|
60
82
|
|
61
83
|
class CollectingDataStageStatus(TitledModelEnum):
|
@@ -755,3 +777,50 @@ class AbstractCollectDataCommandProgress(ReprStrPreModelMixin, BaseObjectModel):
|
|
755
777
|
db_table = 'rdm_collecting_data_command_progress'
|
756
778
|
verbose_name = 'Задача по сбору данных'
|
757
779
|
verbose_name_plural = 'Задачи по сбору данных'
|
780
|
+
|
781
|
+
|
782
|
+
class UploaderClientLog(Entry):
|
783
|
+
"""Прокси модель Загрузчика данных в витрину."""
|
784
|
+
|
785
|
+
objects = UploaderClientLogManager()
|
786
|
+
base_objects = Manager()
|
787
|
+
|
788
|
+
@cached_property
|
789
|
+
def http_method_and_url(self) -> Tuple[str, str]:
|
790
|
+
"""Возвращает http-метод и url из поля запроса Entry.request."""
|
791
|
+
request = StringIO(self.request)
|
792
|
+
request_first_line = request.readline()
|
793
|
+
request.close()
|
794
|
+
|
795
|
+
method, url = request_first_line.split(' ')[:2]
|
796
|
+
if not (method and url.startswith('http')):
|
797
|
+
method = url = ''
|
798
|
+
|
799
|
+
return method.strip('[]'), url
|
800
|
+
|
801
|
+
@cached_property
|
802
|
+
def http_response_status(self) -> str:
|
803
|
+
"""Статус-код запроса к витрине."""
|
804
|
+
try:
|
805
|
+
http_status = self.response.split(' ')[0].strip('[]')
|
806
|
+
except IndexError:
|
807
|
+
http_status = None
|
808
|
+
return http_status
|
809
|
+
|
810
|
+
@property
|
811
|
+
def http_method(self) -> str:
|
812
|
+
"""Значение http-метода."""
|
813
|
+
return self.http_method_and_url[0]
|
814
|
+
|
815
|
+
@property
|
816
|
+
def request_url(self) -> str:
|
817
|
+
"""URL запроса."""
|
818
|
+
return self.http_method_and_url[1]
|
819
|
+
|
820
|
+
@property
|
821
|
+
def request_error(self) -> Optional[str]:
|
822
|
+
"""Ошибка запроса."""
|
823
|
+
return self.error
|
824
|
+
|
825
|
+
class Meta:
|
826
|
+
proxy = True
|
File without changes
|
@@ -0,0 +1,229 @@
|
|
1
|
+
from datetime import (
|
2
|
+
date,
|
3
|
+
datetime,
|
4
|
+
time,
|
5
|
+
timedelta,
|
6
|
+
)
|
7
|
+
from functools import (
|
8
|
+
partial,
|
9
|
+
)
|
10
|
+
from typing import (
|
11
|
+
Optional,
|
12
|
+
)
|
13
|
+
|
14
|
+
from django.db.models import (
|
15
|
+
Q,
|
16
|
+
)
|
17
|
+
from m3_ext.ui.icons import (
|
18
|
+
Icons,
|
19
|
+
)
|
20
|
+
from objectpack.actions import (
|
21
|
+
ObjectPack,
|
22
|
+
)
|
23
|
+
|
24
|
+
from educommon.objectpack.actions import (
|
25
|
+
ExtObjectRowsAction,
|
26
|
+
)
|
27
|
+
from educommon.objectpack.filters import (
|
28
|
+
BoolChoicesFilter,
|
29
|
+
ColumnFilterEngine,
|
30
|
+
DateFilterByAnnotatedField,
|
31
|
+
)
|
32
|
+
from educommon.utils.object_grid import (
|
33
|
+
add_one_row_button,
|
34
|
+
boolean_column_renderer,
|
35
|
+
)
|
36
|
+
from educommon.utils.ui import (
|
37
|
+
append_template_globals,
|
38
|
+
)
|
39
|
+
|
40
|
+
from edu_rdm_integration.models import (
|
41
|
+
UploaderClientLog,
|
42
|
+
)
|
43
|
+
from edu_rdm_integration.uploader_log.ui import (
|
44
|
+
UploaderLogInfoWindow,
|
45
|
+
)
|
46
|
+
|
47
|
+
|
48
|
+
class UploaderLogPack(ObjectPack):
|
49
|
+
"""
|
50
|
+
Пак журнала Загрузчика данных в витрину.
|
51
|
+
"""
|
52
|
+
|
53
|
+
title = 'Журнал логов РВД'
|
54
|
+
model = UploaderClientLog
|
55
|
+
|
56
|
+
edit_window = UploaderLogInfoWindow
|
57
|
+
|
58
|
+
_is_primary_for_model = False
|
59
|
+
can_delete = False
|
60
|
+
list_sort_order = ['-request_datetime']
|
61
|
+
_DEFAULT_PAGING_LIMIT = 35
|
62
|
+
|
63
|
+
filter_engine_clz = ColumnFilterEngine
|
64
|
+
_fd = partial(DateFilterByAnnotatedField, model)
|
65
|
+
|
66
|
+
need_check_permission = True
|
67
|
+
|
68
|
+
columns = [
|
69
|
+
{
|
70
|
+
'header': '№ п/п',
|
71
|
+
'data_index': 'row_number',
|
72
|
+
'sortable': False,
|
73
|
+
'width': 3,
|
74
|
+
},
|
75
|
+
{
|
76
|
+
'header': 'Метод',
|
77
|
+
'data_index': 'http_method',
|
78
|
+
'sortable': False,
|
79
|
+
'width': 3,
|
80
|
+
},
|
81
|
+
{
|
82
|
+
'header': 'URL',
|
83
|
+
'data_index': 'request_url',
|
84
|
+
'searchable': True,
|
85
|
+
'sortable': False,
|
86
|
+
'width': 21,
|
87
|
+
},
|
88
|
+
{
|
89
|
+
'header': 'Дата и время запроса',
|
90
|
+
'data_index': 'request_datetime',
|
91
|
+
'sortable': True,
|
92
|
+
'filter': _fd(
|
93
|
+
'request_datetime',
|
94
|
+
tooltip='C',
|
95
|
+
default_value=date.today() - timedelta(days=1),
|
96
|
+
editable=False,
|
97
|
+
lookup=lambda v: Q(request_datetime__gte=datetime.combine(v, time.min))
|
98
|
+
) & _fd(
|
99
|
+
'request_datetime',
|
100
|
+
tooltip='По',
|
101
|
+
default_value=date.today,
|
102
|
+
editable=False,
|
103
|
+
lookup=lambda v: Q(request_datetime__lte=datetime.combine(v, time.max))
|
104
|
+
),
|
105
|
+
'width': 11,
|
106
|
+
},
|
107
|
+
{
|
108
|
+
'header': 'Результат',
|
109
|
+
'data_index': 'http_response_status',
|
110
|
+
'sortable': False,
|
111
|
+
'width': 5,
|
112
|
+
},
|
113
|
+
{
|
114
|
+
'header': 'Путь до файлов',
|
115
|
+
'data_index': 'attachment_file',
|
116
|
+
'sortable': False,
|
117
|
+
'searchable': True,
|
118
|
+
'width': 37,
|
119
|
+
},
|
120
|
+
{
|
121
|
+
'header': 'ID запроса',
|
122
|
+
'data_index': 'request_id',
|
123
|
+
'sortable': False,
|
124
|
+
'searchable': True,
|
125
|
+
'width': 10,
|
126
|
+
},
|
127
|
+
{
|
128
|
+
'header': 'Код статуса загрузки',
|
129
|
+
'data_index': 'status_code',
|
130
|
+
'sortable': False,
|
131
|
+
'searchable': True,
|
132
|
+
'width': 10,
|
133
|
+
},
|
134
|
+
{
|
135
|
+
'header': 'Описание статуса загрузки',
|
136
|
+
'data_index': 'status_description',
|
137
|
+
'sortable': False,
|
138
|
+
'searchable': True,
|
139
|
+
'width': 10,
|
140
|
+
},
|
141
|
+
{
|
142
|
+
'header': 'Режим эмуляции',
|
143
|
+
'data_index': 'is_emulation',
|
144
|
+
'sortable': False,
|
145
|
+
'filter': BoolChoicesFilter('is_emulation'),
|
146
|
+
'column_renderer': boolean_column_renderer(),
|
147
|
+
'width': 5,
|
148
|
+
}
|
149
|
+
]
|
150
|
+
|
151
|
+
def __init__(self):
|
152
|
+
"""Инициализация."""
|
153
|
+
super(UploaderLogPack, self).__init__()
|
154
|
+
|
155
|
+
self.edit_window_action.perm_code = 'view'
|
156
|
+
self.replace_action('rows_action', ExtObjectRowsAction())
|
157
|
+
|
158
|
+
def get_rows_query(self, request, context):
|
159
|
+
"""Возвращает кварисет для получения списка данных."""
|
160
|
+
context._row_number = int(getattr(context, 'start', 0))
|
161
|
+
|
162
|
+
return super().get_rows_query(request, context)
|
163
|
+
|
164
|
+
def get_row(self, row_id: Optional[int]) -> 'UploaderClientLog':
|
165
|
+
"""Возвращает объект по идентификатору."""
|
166
|
+
if row_id:
|
167
|
+
record = self.model.base_objects.get(id=row_id)
|
168
|
+
else:
|
169
|
+
record = super().get_row(row_id)
|
170
|
+
|
171
|
+
return record
|
172
|
+
|
173
|
+
def prepare_row(self, obj, request, context):
|
174
|
+
"""Установка дополнительных атрибутов объекта."""
|
175
|
+
context._row_number += 1
|
176
|
+
obj.row_number = context._row_number
|
177
|
+
|
178
|
+
return obj
|
179
|
+
|
180
|
+
def create_list_window(self, is_select_mode, request, context):
|
181
|
+
"""Создание окна списка."""
|
182
|
+
win = super().create_list_window(is_select_mode, request, context)
|
183
|
+
|
184
|
+
append_template_globals(win, 'ui-js/object-grid-buttons.js')
|
185
|
+
|
186
|
+
return win
|
187
|
+
|
188
|
+
def get_list_window_params(self, params, request, context):
|
189
|
+
"""Установка параметров окна списка."""
|
190
|
+
params = super().get_list_window_params(params, request, context)
|
191
|
+
|
192
|
+
params.update(
|
193
|
+
maximized=True,
|
194
|
+
)
|
195
|
+
|
196
|
+
return params
|
197
|
+
|
198
|
+
def configure_grid(self, grid, *args, **kwargs):
|
199
|
+
"""Конфигурирование грида окна списка."""
|
200
|
+
super().configure_grid(grid, *args, **kwargs)
|
201
|
+
|
202
|
+
grid.url_edit = None
|
203
|
+
add_one_row_button(
|
204
|
+
'Просмотр',
|
205
|
+
grid,
|
206
|
+
self.edit_window_action,
|
207
|
+
Icons.APPLICATION_VIEW_DETAIL,
|
208
|
+
dbl_clicked=True,
|
209
|
+
index=0,
|
210
|
+
)
|
211
|
+
|
212
|
+
def get_edit_window_params(self, params, request, context):
|
213
|
+
"""Параметры окна редактирования."""
|
214
|
+
params = super().get_edit_window_params(params, request, context)
|
215
|
+
|
216
|
+
params.update(
|
217
|
+
title=f'{self.title}: Просмотр',
|
218
|
+
)
|
219
|
+
|
220
|
+
return params
|
221
|
+
|
222
|
+
def extend_menu(self, menu): # noqa D102
|
223
|
+
return menu.SubMenu(
|
224
|
+
'Администрирование', menu.SubMenu(
|
225
|
+
'Региональная витрина данных', menu.Item(
|
226
|
+
self.title, self.list_window_action
|
227
|
+
)
|
228
|
+
)
|
229
|
+
)
|
@@ -0,0 +1,100 @@
|
|
1
|
+
from django.db.models import (
|
2
|
+
Case,
|
3
|
+
CharField,
|
4
|
+
F,
|
5
|
+
Manager,
|
6
|
+
PositiveSmallIntegerField,
|
7
|
+
Q,
|
8
|
+
Value,
|
9
|
+
When,
|
10
|
+
)
|
11
|
+
from django.db.models.functions import (
|
12
|
+
Cast,
|
13
|
+
)
|
14
|
+
|
15
|
+
from edu_rdm_integration.uploader_log.enums import (
|
16
|
+
RequestResultStatus,
|
17
|
+
)
|
18
|
+
|
19
|
+
|
20
|
+
class UploaderClientLogManager(Manager):
|
21
|
+
"""Менеджер модели журнала Загрузчика данных в витрину."""
|
22
|
+
|
23
|
+
def get_queryset(self):
|
24
|
+
"""Возвращает кварисет."""
|
25
|
+
query = super().get_queryset()
|
26
|
+
|
27
|
+
result_status = Case(
|
28
|
+
When(
|
29
|
+
Q(Q(error__isnull=True) | Q(error__exact=''))
|
30
|
+
& Q(Q(response__isnull=False) & ~Q(response__exact='')),
|
31
|
+
then=Value(RequestResultStatus.SUCCESS)
|
32
|
+
),
|
33
|
+
default=Value(RequestResultStatus.ERROR),
|
34
|
+
output_field=PositiveSmallIntegerField(),
|
35
|
+
)
|
36
|
+
|
37
|
+
query = query.annotate(
|
38
|
+
request_datetime=F('date_time'),
|
39
|
+
attachment_file=Case(
|
40
|
+
When(
|
41
|
+
request__icontains='POST',
|
42
|
+
then=F('uploader_client_log__attachment__attachment')
|
43
|
+
),
|
44
|
+
When(
|
45
|
+
request__icontains='GET',
|
46
|
+
then=F('upload_status_request_log__upload__attachment__attachment'),
|
47
|
+
),
|
48
|
+
default=Value('')
|
49
|
+
),
|
50
|
+
status_code=Case(
|
51
|
+
When(
|
52
|
+
request__icontains='POST',
|
53
|
+
then=Value('', output_field=CharField())
|
54
|
+
),
|
55
|
+
When(
|
56
|
+
request__icontains='GET',
|
57
|
+
then=Cast(
|
58
|
+
'upload_status_request_log__status__code',
|
59
|
+
output_field=CharField()
|
60
|
+
),
|
61
|
+
),
|
62
|
+
default=Value('')
|
63
|
+
),
|
64
|
+
status_description=Case(
|
65
|
+
When(
|
66
|
+
request__icontains='POST',
|
67
|
+
then=Value('', output_field=CharField()),
|
68
|
+
),
|
69
|
+
When(
|
70
|
+
request__icontains='GET',
|
71
|
+
then=F('upload_status_request_log__status__description'),
|
72
|
+
),
|
73
|
+
default=Value('')
|
74
|
+
),
|
75
|
+
is_emulation=Case(
|
76
|
+
When(
|
77
|
+
request__icontains='POST',
|
78
|
+
then=F('uploader_client_log__is_emulation'),
|
79
|
+
),
|
80
|
+
When(
|
81
|
+
request__icontains='GET',
|
82
|
+
then=F('upload_status_request_log__upload__is_emulation'),
|
83
|
+
),
|
84
|
+
default=Value(False)
|
85
|
+
),
|
86
|
+
request_id=Case(
|
87
|
+
When(
|
88
|
+
request__icontains='POST',
|
89
|
+
then=F('uploader_client_log__request_id')
|
90
|
+
),
|
91
|
+
When(
|
92
|
+
request__icontains='GET',
|
93
|
+
then=F('upload_status_request_log__upload__request_id')
|
94
|
+
),
|
95
|
+
default=Value('')
|
96
|
+
),
|
97
|
+
result_status=result_status
|
98
|
+
)
|
99
|
+
|
100
|
+
return query
|
@@ -0,0 +1,64 @@
|
|
1
|
+
from m3_ext.ui.fields import (
|
2
|
+
ExtTextArea,
|
3
|
+
)
|
4
|
+
from objectpack.ui import (
|
5
|
+
BaseEditWindow,
|
6
|
+
)
|
7
|
+
|
8
|
+
from educommon.utils.ui import (
|
9
|
+
switch_window_in_read_only_mode,
|
10
|
+
)
|
11
|
+
|
12
|
+
|
13
|
+
class UploaderLogInfoWindow(BaseEditWindow):
|
14
|
+
"""Окно просмотра лога Загрузчика данных в витрину."""
|
15
|
+
|
16
|
+
def _init_components(self):
|
17
|
+
"""Инициализация компонентов окна."""
|
18
|
+
super(UploaderLogInfoWindow, self)._init_components()
|
19
|
+
|
20
|
+
self.field__request = ExtTextArea(
|
21
|
+
label='Запрос',
|
22
|
+
name='request',
|
23
|
+
anchor='100%',
|
24
|
+
height=160,
|
25
|
+
)
|
26
|
+
self.field__response = ExtTextArea(
|
27
|
+
label='Ответ',
|
28
|
+
name='response',
|
29
|
+
anchor='100%',
|
30
|
+
height=160,
|
31
|
+
)
|
32
|
+
self.field__error = ExtTextArea(
|
33
|
+
label='Ошибка',
|
34
|
+
name='request_error',
|
35
|
+
anchor='100%',
|
36
|
+
height=80,
|
37
|
+
)
|
38
|
+
self.field__attachment = ExtTextArea(
|
39
|
+
label='Вложения',
|
40
|
+
name='attachment_file',
|
41
|
+
anchor='100%',
|
42
|
+
height=40,
|
43
|
+
)
|
44
|
+
|
45
|
+
def _do_layout(self):
|
46
|
+
"""Размещение компонентов окна на форме."""
|
47
|
+
super(UploaderLogInfoWindow, self)._do_layout()
|
48
|
+
|
49
|
+
self.form.items.extend((
|
50
|
+
self.field__request,
|
51
|
+
self.field__response,
|
52
|
+
self.field__error,
|
53
|
+
self.field__attachment,
|
54
|
+
))
|
55
|
+
|
56
|
+
def set_params(self, params):
|
57
|
+
"""Настройка окна."""
|
58
|
+
super(UploaderLogInfoWindow, self).set_params(params)
|
59
|
+
|
60
|
+
self.height = 'auto'
|
61
|
+
self.width = 700
|
62
|
+
|
63
|
+
switch_window_in_read_only_mode(self)
|
64
|
+
self.make_read_only()
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: edu-rdm-integration
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.8.0
|
4
4
|
Summary: Интеграция с Региональной витриной данных
|
5
5
|
Home-page:
|
6
6
|
Download-URL:
|
@@ -28,7 +28,7 @@ Requires-Dist: setuptools <69,>=47.3.1
|
|
28
28
|
Requires-Dist: wheel <0.42,>=0.37.1
|
29
29
|
Requires-Dist: transliterate <2
|
30
30
|
Requires-Dist: Django <2.3,>=1.11
|
31
|
-
Requires-Dist: educommon <4,>=3.
|
31
|
+
Requires-Dist: educommon <4,>=3.6.0
|
32
32
|
Requires-Dist: function-tools <1,>=0.8.0
|
33
33
|
Requires-Dist: m3-db-utils <1,>=0.3.8
|
34
34
|
Requires-Dist: uploader-client <1,>=0.2.1
|
@@ -289,6 +289,26 @@ Requires-Dist: uploader-client <1,>=0.2.1
|
|
289
289
|
|
290
290
|
### Удалено
|
291
291
|
|
292
|
+
## [0.8.0] - 2023-12-05
|
293
|
+
|
294
|
+
Вынесен функционал просмотра логов РВД из ЭШ.
|
295
|
+
|
296
|
+
### Изменено
|
297
|
+
|
298
|
+
- [EDUCLLG-7736](https://jira.bars.group/browse/EDUCLLG-7736)
|
299
|
+
MINOR Вынесен функционал просмотра логов РВД из ЭШ.
|
300
|
+
|
301
|
+
|
302
|
+
## [0.7.3] - 2023-12-07
|
303
|
+
|
304
|
+
Исправлена аннотация в шаблоне managers.py-tpl для функции экспорта.
|
305
|
+
|
306
|
+
### Исправлено
|
307
|
+
|
308
|
+
- [EDUSCHL-19604](https://jira.bars.group/browse/EDUSCHL-19604)
|
309
|
+
PATCH Исправлена аннотация в шаблоне managers.py-tpl для функции экспорта.
|
310
|
+
|
311
|
+
|
292
312
|
## [0.7.2] - 2023-12-05
|
293
313
|
|
294
314
|
В метод _clean_data класса BaseCollectingFunctionTestCase добавлена возможность обрабатывать поля относящиеся к
|
@@ -303,6 +323,7 @@ Requires-Dist: uploader-client <1,>=0.2.1
|
|
303
323
|
- [EDUSCHL-19507](https://jira.bars.group/browse/EDUSCHL-19507)
|
304
324
|
PATCH Добавление обработки plugins_info при генерации списка данных формирования команд.
|
305
325
|
|
326
|
+
|
306
327
|
## [0.7.1] - 2023-12-02
|
307
328
|
|
308
329
|
Доработано получение множества моделей на основе данных plugins_info при работе метода _get_loggable_models.
|
@@ -312,6 +333,7 @@ Requires-Dist: uploader-client <1,>=0.2.1
|
|
312
333
|
- [EDUSCHL-19576](https://jira.bars.group/browse/EDUSCHL-20954)
|
313
334
|
PATCH Доработано получение множества моделей на основе данных plugins_info при работе метода _get_loggable_models.
|
314
335
|
|
336
|
+
|
315
337
|
## [0.7.0] - 2023-12-02
|
316
338
|
|
317
339
|
Добавлено формирование логов для последующего скачивания.
|
@@ -5,7 +5,7 @@ edu_rdm_integration/consts.py,sha256=chOsPOOY4_JLzN-8idg-VjbLWSlp6r3maFWqnvUsapg
|
|
5
5
|
edu_rdm_integration/entities.py,sha256=mAjsYlcIbemo4xT5CSCr4payZubiBHB7Rb3Ow1CVsy0,14552
|
6
6
|
edu_rdm_integration/enums.py,sha256=fnDPz6pwOYWS6vp65IAExbpDzn2q9U3_9GGyuf4B468,4876
|
7
7
|
edu_rdm_integration/mapping.py,sha256=bwa2fJCbV4YjQcAgRrgT3hgM6dJhr_uBtQgx3L3F2Ck,473
|
8
|
-
edu_rdm_integration/models.py,sha256=
|
8
|
+
edu_rdm_integration/models.py,sha256=EqLDzsmuSLRcVbAPgySMRhnuRtgKFQaOri4ffl2sEKE,26702
|
9
9
|
edu_rdm_integration/signals.py,sha256=3eRlpkDcFCF6TN80-QM8yBYLcyozzcmoPjz6r4_ApWg,73
|
10
10
|
edu_rdm_integration/storages.py,sha256=o5WqUG7SnkeuMt-z8spUi-IraivST-7KHzfY-M3v7FA,6807
|
11
11
|
edu_rdm_integration/utils.py,sha256=vjme0N6tEXnHt6SaqjavZshjwc-mVv4X3Pz37a5YgTw,7092
|
@@ -117,7 +117,7 @@ edu_rdm_integration/function_templates/function_export_data_template/enums.py-tp
|
|
117
117
|
edu_rdm_integration/function_templates/function_export_data_template/errors.py-tpl,sha256=dFPgKvChYiv5iyMdoqOG8szqX7BEp8BTmDog2trqueE,247
|
118
118
|
edu_rdm_integration/function_templates/function_export_data_template/functions.py-tpl,sha256=QhhZiZ1cBYIuzzH5Pe7zQjd1QQwJglRA_Gf1iNeK4GY,2882
|
119
119
|
edu_rdm_integration/function_templates/function_export_data_template/helpers.py-tpl,sha256=tySl3pBeaGjORX5qc2y1zvC8YogpcwbNqvGhh1Ow1Ws,1272
|
120
|
-
edu_rdm_integration/function_templates/function_export_data_template/managers.py-tpl,sha256=
|
120
|
+
edu_rdm_integration/function_templates/function_export_data_template/managers.py-tpl,sha256=SQGcjYmUhA2BOt9XPuWfKdK989zC59SrPYXy4TNYUFo,2671
|
121
121
|
edu_rdm_integration/function_templates/function_export_data_template/presenters.py-tpl,sha256=2Jv_xfrz1Qxj-NXEIaa08uWrIhb5QVZEr9uRxVXczAA,316
|
122
122
|
edu_rdm_integration/function_templates/function_export_data_template/results.py-tpl,sha256=2iyHuzzS0YPZ688hAhSnPKnkY5BZNRNiZpLRcrn40CE,589
|
123
123
|
edu_rdm_integration/function_templates/function_export_data_template/runners.py-tpl,sha256=_5csHUJ79u7NqLAgjbH05tAbOcWH-sHZGYcKliZPmKQ,3653
|
@@ -134,10 +134,17 @@ edu_rdm_integration/management/commands/export_entities_data.py,sha256=Mas1zwsH-
|
|
134
134
|
edu_rdm_integration/migrations/0001_initial.py,sha256=toNuYoHZePe5wJ6AKEW9oPOdt2OefmxDEDDJGYQIrFk,18719
|
135
135
|
edu_rdm_integration/migrations/0002_init_data_uploadstatus.py,sha256=kht966YNuDbC3qTGrcWswJPsVuAtNO59Ck15G2eS2bU,944
|
136
136
|
edu_rdm_integration/migrations/0003_create_index_file_upload_status.py,sha256=TiLnqQ8bxkVI7sRa5-D3JQ6jopFYDoH1ytSxmU6USUo,735
|
137
|
+
edu_rdm_integration/migrations/0004_uploaderclientlog.py,sha256=Llw_cqPpYJSrbEuEsFraUWKrBSq_tFbGzTlO2DnqOKg,626
|
137
138
|
edu_rdm_integration/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
138
|
-
edu_rdm_integration
|
139
|
-
edu_rdm_integration
|
140
|
-
edu_rdm_integration
|
141
|
-
edu_rdm_integration
|
142
|
-
edu_rdm_integration
|
143
|
-
edu_rdm_integration
|
139
|
+
edu_rdm_integration/uploader_log/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
140
|
+
edu_rdm_integration/uploader_log/actions.py,sha256=CIFfmft5m7Nnl_9Drw7FdCVWr9htKJcbcimb4Dcl3EQ,6568
|
141
|
+
edu_rdm_integration/uploader_log/apps.py,sha256=tYJj4-sDlq8fLOSvw18L_yys7SILpTKWNmE2Qug6GnE,265
|
142
|
+
edu_rdm_integration/uploader_log/enums.py,sha256=rgSO3BL2rh2xpfm0Pt4waQW8fB1VMJLdsGmr3SXwH_U,266
|
143
|
+
edu_rdm_integration/uploader_log/managers.py,sha256=Oe2R1G2toEdaEh9ftU1_5s9-t_VFIXgR0TlvbIZyosk,3166
|
144
|
+
edu_rdm_integration/uploader_log/ui.py,sha256=i3q4dNYiKPcZMP3QgbKFD0aTysBntXE-Hu_B6nSjrYU,1789
|
145
|
+
edu_rdm_integration-0.8.0.dist-info/LICENSE,sha256=uw43Gjjj-1vXWCItfSrNDpbejnOwZMrNerUh8oWbq8Q,3458
|
146
|
+
edu_rdm_integration-0.8.0.dist-info/METADATA,sha256=gzs_8o4A12ziXqhjwWP4BBwN5h3yma-2xSk1vQDVuzY,45107
|
147
|
+
edu_rdm_integration-0.8.0.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
|
148
|
+
edu_rdm_integration-0.8.0.dist-info/namespace_packages.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
149
|
+
edu_rdm_integration-0.8.0.dist-info/top_level.txt,sha256=nRJV0O14UtNE-jGIYG03sohgFnZClvf57H5m6VBXe9Y,20
|
150
|
+
edu_rdm_integration-0.8.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
{edu_rdm_integration-0.7.2.dist-info → edu_rdm_integration-0.8.0.dist-info}/namespace_packages.txt
RENAMED
File without changes
|
File without changes
|