educommon 3.9.1__py3-none-any.whl → 3.9.3__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.
@@ -56,7 +56,7 @@ class AsyncTaskPack(ObjectPack):
56
56
  list_window = AsyncTaskListWindow
57
57
  view_result_window = AsyncTaskResultViewWindow
58
58
 
59
- _menu_icon: Optional[str] = 'swap_horiz'
59
+ _menu_icon: Optional[str] = None
60
60
  """css-класс иконки в главном меню."""
61
61
 
62
62
  can_delete = False
@@ -24,8 +24,9 @@ from django.utils.dateparse import (
24
24
  parse_time,
25
25
  )
26
26
  from django.utils.encoding import (
27
- force_text,
27
+ force_str,
28
28
  )
29
+
29
30
  from m3_django_compat import (
30
31
  get_related,
31
32
  )
@@ -78,7 +79,7 @@ class LogProxy(AuditLog):
78
79
  if model:
79
80
  verbose = model._meta.verbose_name
80
81
  if verbose:
81
- return ' - '.join((force_text(verbose), model.__name__))
82
+ return ' - '.join((force_str(verbose), model.__name__))
82
83
  return model.__name__
83
84
  return self.table.name
84
85
 
@@ -130,7 +131,7 @@ class LogProxy(AuditLog):
130
131
  if self.fields:
131
132
  field = self.fields.get(column_name)
132
133
  if field and field.verbose_name:
133
- name = force_text(field.verbose_name)
134
+ name = force_str(field.verbose_name)
134
135
  return name
135
136
 
136
137
  def convert_field_value(self, column_name, value):
@@ -169,7 +170,7 @@ class LogProxy(AuditLog):
169
170
  value = get_choice(field.choices, value)
170
171
  except (ValueError, TypeError):
171
172
  pass
172
- return force_text(value)
173
+ return force_str(value)
173
174
 
174
175
  @property
175
176
  def object_string(self):
@@ -5,14 +5,12 @@ from django.contrib.contenttypes.models import (
5
5
  )
6
6
  from django.core.exceptions import (
7
7
  NON_FIELD_ERRORS,
8
+ FieldDoesNotExist,
8
9
  ValidationError,
9
10
  )
10
11
  from django.db import (
11
12
  models,
12
13
  )
13
- from django.db.models.fields import (
14
- FieldDoesNotExist,
15
- )
16
14
  from django.db.models.signals import (
17
15
  post_delete,
18
16
  pre_delete,
@@ -20,6 +18,7 @@ from django.db.models.signals import (
20
18
  from django.dispatch import (
21
19
  receiver,
22
20
  )
21
+
23
22
  from m3 import (
24
23
  ApplicationLogicException,
25
24
  )
@@ -1,6 +1,7 @@
1
- from django.conf.urls import (
2
- url,
1
+ from django.urls import (
2
+ re_path,
3
3
  )
4
+
4
5
  from m3.actions import (
5
6
  ControllerCache,
6
7
  )
@@ -9,7 +10,6 @@ from m3_ext.ui.app_ui import (
9
10
  DesktopLoader,
10
11
  DesktopShortcut,
11
12
  )
12
-
13
13
  from objectpack.desktop import (
14
14
  uificate_the_controller,
15
15
  )
@@ -51,5 +51,5 @@ def register_desktop_menu():
51
51
  def register_urlpatterns():
52
52
  """Регистрация URL контроллера."""
53
53
  return [
54
- url(*auth_controller.urlpattern),
54
+ re_path(*auth_controller.urlpattern),
55
55
  ]
@@ -107,7 +107,7 @@ class Manager(DjangoManager):
107
107
  return QuerySet(self.model, using=self._db)
108
108
 
109
109
 
110
- pre_clean = Signal(providing_args=('errors',))
110
+ pre_clean = Signal()
111
111
  """Сигнал, отправляемый перед валидацией модели.
112
112
 
113
113
  :param defaultdict errors: Словарь, содержащий ошибки валидации экземпляра
@@ -119,7 +119,7 @@ pre_clean = Signal(providing_args=('errors',))
119
119
  """
120
120
 
121
121
 
122
- post_clean = Signal(providing_args=('errors',))
122
+ post_clean = Signal()
123
123
  """Сигнал, отправляемый после валидации модели.
124
124
 
125
125
  :param defaultdict errors: Словарь, содержащий ошибки валидации экземпляра
@@ -16,8 +16,9 @@ from django.template.loader import (
16
16
  render_to_string,
17
17
  )
18
18
  from django.utils.encoding import (
19
- force_text,
19
+ force_str,
20
20
  )
21
+
21
22
  from m3_django_compat import (
22
23
  get_model,
23
24
  )
@@ -132,7 +133,7 @@ class JoinedAttrValues(DataExtractor):
132
133
  values = []
133
134
  for field_name in self._field_names:
134
135
  try:
135
- value = force_text(get_nested_attr(obj, field_name) or '')
136
+ value = force_str(get_nested_attr(obj, field_name) or '')
136
137
  except AttributeError:
137
138
  return ''
138
139
  else:
@@ -154,7 +155,7 @@ class FieldChoiceValue(DataExtractor):
154
155
  except AttributeError:
155
156
  return ''
156
157
  else:
157
- return force_text(
158
+ return force_str(
158
159
  dict(field.flatchoices).get(value, value),
159
160
  strings_only=True
160
161
  )
@@ -227,7 +227,7 @@ def set_partitioning_for_model(model, column_name, force=False):
227
227
  значение будет определять раздел таблицы, в который будет помещена
228
228
  запись.
229
229
 
230
- :raises django.db.models.fields.FieldDoesNotExist: если модель *model* не
230
+ :raises django.core.exceptions.FieldDoesNotExist: если модель *model* не
231
231
  содержит поля *column_name*
232
232
  """
233
233
  database_alias, table_name, pk_column_name = _get_model_params(model)
@@ -258,7 +258,7 @@ def split_table(model, column_name, timeout=0):
258
258
  :param float timeout: Время ожидания в секундах между переносом записей
259
259
  (можно использовать для снижения нагрузки на СУБД).
260
260
 
261
- :raises django.db.models.fields.FieldDoesNotExist: если модель *model* не
261
+ :raises django.core.exceptions.FieldDoesNotExist: если модель *model* не
262
262
  содержит поля *column_name*
263
263
  """
264
264
  database_alias, table_name, pk_column_name = _get_model_params(model)
@@ -1,9 +1,10 @@
1
+ from django.core.exceptions import (
2
+ FieldDoesNotExist,
3
+ )
1
4
  from django.core.management.base import (
2
5
  CommandError,
3
6
  )
4
- from django.db.models.fields import (
5
- FieldDoesNotExist,
6
- )
7
+
7
8
  from m3_django_compat import (
8
9
  BaseCommand,
9
10
  get_model,
@@ -1,9 +1,10 @@
1
+ from django.core.exceptions import (
2
+ FieldDoesNotExist,
3
+ )
1
4
  from django.core.management.base import (
2
5
  CommandError,
3
6
  )
4
- from django.db.models.fields import (
5
- FieldDoesNotExist,
6
- )
7
+
7
8
  from m3_django_compat import (
8
9
  BaseCommand,
9
10
  get_model,
@@ -9,13 +9,18 @@ from weakref import (
9
9
  WeakKeyDictionary,
10
10
  )
11
11
 
12
- import django
13
12
  from django.core.validators import (
14
13
  MaxLengthValidator,
15
14
  )
16
15
  from django.db.models.base import (
17
16
  ModelBase,
18
17
  )
18
+ from django.db.models.expressions import (
19
+ Func,
20
+ )
21
+ from django.db.models.lookups import (
22
+ Lookup,
23
+ )
19
24
  from django.db.models.signals import (
20
25
  post_delete,
21
26
  post_save,
@@ -23,6 +28,7 @@ from django.db.models.signals import (
23
28
  from django.dispatch.dispatcher import (
24
29
  receiver,
25
30
  )
31
+
26
32
  from m3_django_compat import (
27
33
  ModelOptions,
28
34
  atomic,
@@ -203,65 +209,58 @@ class LazyModel:
203
209
  return self._model
204
210
 
205
211
 
206
- if django.VERSION >= (1, 8):
207
- from django.db.models.expressions import (
208
- Func,
209
- )
210
- from django.db.models.lookups import (
211
- Lookup,
212
- )
212
+ class SmartExact(Func):
213
+ """Удаляет пробелы из строки и заменяет буквы ё на е."""
213
214
 
214
- class SmartExact(Func):
215
- """Удаляет пробелы из строки и заменяет буквы ё на е."""
215
+ template = "TRANSLATE(%(expressions)s, 'ёЁ ', 'еЕ')"
216
216
 
217
- template = "TRANSLATE(%(expressions)s, 'ёЁ ', 'еЕ')"
217
+ class SmartExactLookup(Lookup):
218
+ """Удаляет пробелы из строки и заменяет буквы ё на е."""
218
219
 
219
- class SmartExactLookup(Lookup):
220
- """Удаляет пробелы из строки и заменяет буквы ё на е."""
220
+ lookup_name = 'smart_exact'
221
221
 
222
- lookup_name = 'smart_exact'
222
+ def as_postgresql(self, compiler, connection):
223
+ lhs, lhs_params = self.process_lhs(compiler, connection)
224
+ rhs, rhs_params = self.process_rhs(compiler, connection)
223
225
 
224
- def as_postgresql(self, compiler, connection):
225
- lhs, lhs_params = self.process_lhs(compiler, connection)
226
- rhs, rhs_params = self.process_rhs(compiler, connection)
226
+ sql = "TRANSLATE(%s, 'ёЁ ', 'еЕ')"
227
+ sql = '{sql} = {sql}'.format(sql=sql)
227
228
 
228
- sql = "TRANSLATE(%s, 'ёЁ ', 'еЕ')"
229
- sql = '{sql} = {sql}'.format(sql=sql)
229
+ return sql % (lhs, rhs), lhs_params + rhs_params
230
230
 
231
- return sql % (lhs, rhs), lhs_params + rhs_params
231
+ class SmartIExact(Func):
232
+ """Переводит в верхний регистр, удаляет пробелы, заменяет Ё на Е."""
232
233
 
233
- class SmartIExact(Func):
234
- """Переводит в верхний регистр, удаляет пробелы, заменяет Ё на Е."""
234
+ template = "TRANSLATE(UPPER(%(expressions)s), 'Ё ', 'Е')"
235
235
 
236
- template = "TRANSLATE(UPPER(%(expressions)s), 'Ё ', 'Е')"
236
+ class SmartIExactLookup(Lookup):
237
+ """Переводит в верхний регистр, удаляет пробелы, заменяет Ё на Е."""
237
238
 
238
- class SmartIExactLookup(Lookup):
239
- """Переводит в верхний регистр, удаляет пробелы, заменяет Ё на Е."""
239
+ lookup_name = 'smart_iexact'
240
240
 
241
- lookup_name = 'smart_iexact'
241
+ def as_postgresql(self, compiler, connection):
242
+ lhs, lhs_params = self.process_lhs(compiler, connection)
243
+ rhs, rhs_params = self.process_rhs(compiler, connection)
242
244
 
243
- def as_postgresql(self, compiler, connection):
244
- lhs, lhs_params = self.process_lhs(compiler, connection)
245
- rhs, rhs_params = self.process_rhs(compiler, connection)
245
+ sql = "TRANSLATE(UPPER(%s), 'Ё ', 'Е')"
246
+ sql = '{sql} = {sql}'.format(sql=sql)
246
247
 
247
- sql = "TRANSLATE(UPPER(%s), ', 'Е')"
248
- sql = '{sql} = {sql}'.format(sql=sql)
248
+ return sql % (lhs, rhs), lhs_params + rhs_params
249
249
 
250
- return sql % (lhs, rhs), lhs_params + rhs_params
250
+ class SmartIContainsLookup(Lookup):
251
+ """Регистронезависимый поиск.
251
252
 
252
- class SmartIContainsLookup(Lookup):
253
- """
254
- Переводит в верхний регистр, удаляет пробелы, заменяет Ё на Е,
255
- проверяет вхождение текста.
256
- """
253
+ Переводит в верхний регистр, удаляет пробелы, заменяет Ё на Е, проверяет
254
+ вхождение текста.
255
+ """
257
256
 
258
- lookup_name = 'smart_icontains'
257
+ lookup_name = 'smart_icontains'
259
258
 
260
- def as_postgresql(self, compiler, connection):
261
- lhs, lhs_params = self.process_lhs(compiler, connection)
262
- rhs, rhs_params = self.process_rhs(compiler, connection)
259
+ def as_postgresql(self, compiler, connection):
260
+ lhs, lhs_params = self.process_lhs(compiler, connection)
261
+ rhs, rhs_params = self.process_rhs(compiler, connection)
263
262
 
264
- sql = "TRANSLATE(UPPER(%s), 'Ё ', 'Е')"
265
- sql = "{sql} like '%%%%' || {sql} || '%%%%'".format(sql=sql)
263
+ sql = "TRANSLATE(UPPER(%s), 'Ё ', 'Е')"
264
+ sql = "{sql} like '%%%%' || {sql} || '%%%%'".format(sql=sql)
266
265
 
267
- return sql % (lhs, rhs), lhs_params + rhs_params
266
+ return sql % (lhs, rhs), lhs_params + rhs_params
@@ -1,5 +1,5 @@
1
- from django.conf.urls import (
2
- url,
1
+ from django.urls import (
2
+ re_path,
3
3
  )
4
4
  from django.views.generic import (
5
5
  TemplateView,
@@ -8,7 +8,7 @@ from django.views.generic import (
8
8
 
9
9
  def register_urlpatterns():
10
10
  urlpatterns = [
11
- url(
11
+ re_path(
12
12
  r'^atcfs_unavailable/$',
13
13
  TemplateView.as_view(template_name='atcfs_unavailable.html'),
14
14
  name='atcfs_unavailable'
@@ -11,7 +11,7 @@ from typing import (
11
11
  )
12
12
 
13
13
  from django.utils.encoding import (
14
- smart_text,
14
+ smart_str,
15
15
  )
16
16
  from packaging.version import (
17
17
  Version,
@@ -101,7 +101,7 @@ class WebEduLogger(getLoggerClass()):
101
101
  exc_info = sys.exc_info()
102
102
 
103
103
  session_info = get_session_info(request)
104
- msg = f'{session_info}{smart_text(msg)}'
104
+ msg = f'{session_info}{smart_str(msg)}'
105
105
 
106
106
  record = self.makeRecord(self.name, level, fn, lno, msg, args, exc_info, func, extra, sinfo)
107
107
  self.handle(record)
educommon/m3/__init__.py CHANGED
@@ -17,14 +17,14 @@ from django.db.transaction import (
17
17
  atomic,
18
18
  )
19
19
  from django.utils.encoding import (
20
- force_text,
20
+ force_str,
21
21
  )
22
+
22
23
  from m3.actions import (
23
24
  Action,
24
25
  ActionPack,
25
26
  ControllerCache,
26
27
  )
27
-
28
28
  from objectpack.exceptions import (
29
29
  ValidationError as ObjectPackValidationError,
30
30
  )
@@ -179,7 +179,7 @@ class ModelProxyValidationMixin:
179
179
  # объект будет создан при сохранении составной
180
180
  # модели.
181
181
  field = self._meta.get_field(full_field_name)
182
- if force_text(field.error_messages['null']) in messages:
182
+ if force_str(field.error_messages['null']) in messages:
183
183
  messages.remove(field.error_messages['null'])
184
184
  if not messages:
185
185
  continue
@@ -50,9 +50,7 @@ class DeleteCheck:
50
50
  #: :param related_objects: Словарь, сопоставляющий удаляемые
51
51
  #: и зависимые объекты.
52
52
  #: :type related_objects: collections.defaultdict
53
- collect_implicit = Signal(
54
- providing_args=['objects_to_delete', 'related_objects']
55
- )
53
+ collect_implicit = Signal()
56
54
 
57
55
  def _get_message(self, objects):
58
56
  """Возвращает сообщение в правильном склонении."""
@@ -17,8 +17,9 @@ from django.db.models.fields.reverse_related import (
17
17
  OneToOneRel,
18
18
  )
19
19
  from django.utils.encoding import (
20
- force_text,
20
+ force_str,
21
21
  )
22
+
22
23
  from m3_django_compat import (
23
24
  ModelOptions,
24
25
  get_related,
@@ -252,11 +253,11 @@ class ColumnDescriptor:
252
253
 
253
254
  @property
254
255
  def accessor_name(self):
255
- return force_text(_get_accessor_name(self.field))
256
+ return force_str(_get_accessor_name(self.field))
256
257
 
257
258
  @property
258
259
  def lookup(self):
259
- return force_text(self.field.name)
260
+ return force_str(self.field.name)
260
261
 
261
262
  @property
262
263
  def full_accessor_name(self):
@@ -311,7 +312,7 @@ class ColumnDescriptor:
311
312
  else:
312
313
  result = self.field.verbose_name
313
314
 
314
- return force_text(result)
315
+ return force_str(result)
315
316
 
316
317
  def get_full_title(self, delimiter=' → '):
317
318
  """Возвращает полное наименование с учетом иерархии.
@@ -521,13 +522,13 @@ class _ModelDataSourceInfo:
521
522
  """Внутрисистемное имя источника данных."""
522
523
  result = '.'.join((self._model.app_label, self._model.model_name))
523
524
 
524
- return force_text(result)
525
+ return force_str(result)
525
526
 
526
527
  @cached_property
527
528
  def title(self):
528
529
  """Отображаемое пользователю наименование источника данных."""
529
530
  result = getattr(self.model, '_meta').verbose_name
530
- return force_text(result)
531
+ return force_str(result)
531
532
 
532
533
 
533
534
  class ModelDataSourceParams(_ModelDataSourceInfo):
@@ -32,15 +32,16 @@ from django.forms.fields import (
32
32
  BooleanField,
33
33
  )
34
34
  from django.utils.encoding import (
35
- force_text,
36
- )
37
- from m3.actions.exceptions import (
38
- ApplicationLogicException,
35
+ force_str,
39
36
  )
40
37
  from xlsxwriter import (
41
38
  Workbook,
42
39
  )
43
40
 
41
+ from m3.actions.exceptions import (
42
+ ApplicationLogicException,
43
+ )
44
+
44
45
  from educommon.report.constructor import (
45
46
  constants,
46
47
  )
@@ -898,7 +899,7 @@ class DataLoader:
898
899
  def _get_field_display(field, field_value):
899
900
  for value, name in field.flatchoices:
900
901
  if value == field_value:
901
- return force_text(name, strings_only=True)
902
+ return force_str(name, strings_only=True)
902
903
 
903
904
  @staticmethod
904
905
  def _get_object_data(obj, attr_name, nested):
@@ -6,18 +6,19 @@ from django import (
6
6
  from django.conf import (
7
7
  settings,
8
8
  )
9
- from django.conf.urls import (
10
- url,
9
+ from django.urls import (
10
+ re_path,
11
11
  )
12
+ from sendfile import (
13
+ sendfile,
14
+ )
15
+
12
16
  from m3 import (
13
17
  M3JSONEncoder,
14
18
  )
15
19
  from m3_django_compat import (
16
20
  is_authenticated,
17
21
  )
18
- from sendfile import (
19
- sendfile,
20
- )
21
22
 
22
23
 
23
24
  def check_autorization(request, path):
@@ -40,5 +41,5 @@ def check_autorization(request, path):
40
41
 
41
42
 
42
43
  urlpatterns = [
43
- url(r'^media/(?P<path>.*)$', check_autorization)
44
+ re_path(r'^media/(?P<path>.*)$', check_autorization)
44
45
  ]
@@ -24,7 +24,7 @@ from django.db import (
24
24
  connections,
25
25
  )
26
26
  from django.utils.encoding import (
27
- force_text,
27
+ force_str,
28
28
  )
29
29
 
30
30
 
@@ -70,7 +70,7 @@ def call_custom_command(command_name, *args, **options):
70
70
  parser.add_argument(com, action='store')
71
71
  else:
72
72
  parser.add_argument(com)
73
- defaults = parser.parse_args(args=[force_text(a) for a in args])
73
+ defaults = parser.parse_args(args=[force_str(a) for a in args])
74
74
  defaults = dict(defaults._get_kwargs(), **arg_options)
75
75
  # Move positional args out of options to mimic legacy optparse
76
76
  args = defaults.pop('args', ())
educommon/version.conf CHANGED
@@ -4,8 +4,8 @@
4
4
  # нормальной установки обновлений.
5
5
 
6
6
  [version]
7
- BRANCH = tags/3.9.1
8
- VERSION = 3.9.1
9
- REVISION = 5ee6737b714b7b023836ee035490505c7de4e7a1
10
- VERSION_DATE = 06.03.2024
11
- REVISION_DATE = 06.03.2024
7
+ BRANCH = tags/3.9.3
8
+ VERSION = 3.9.3
9
+ REVISION = 9c15127d6248360b22215f4eb89ffb05a8ab16b5
10
+ VERSION_DATE = 18.03.2024
11
+ REVISION_DATE = 18.03.2024
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: educommon
3
- Version: 3.9.1
3
+ Version: 3.9.3
4
4
  Summary: Общая кодовая база для проектов БЦ Образование
5
5
  Home-page: https://stash.bars-open.ru/projects/EDUBASE/repos/educommon
6
6
  Author: BARS Group
@@ -17,7 +17,8 @@ Classifier: Programming Language :: Python :: 3.8
17
17
  Classifier: Programming Language :: Python :: 3.9
18
18
  Classifier: Framework :: Django :: 2.2
19
19
  Classifier: Framework :: Django :: 3.0
20
- Requires-Dist: Django <3.1,>=2.2
20
+ Requires-Dist: packaging <24,>=21.3
21
+ Requires-Dist: Django <3.2,>=2.2
21
22
  Requires-Dist: django-mptt
22
23
  Requires-Dist: python-dateutil
23
24
  Requires-Dist: termcolor
@@ -1,6 +1,6 @@
1
1
  educommon/__init__.py,sha256=fvsBDL7g8HgOTd-JHOh7TSvMcnUauvGVgPuyA2Z9hUI,419
2
2
  educommon/thread_data.py,sha256=n0XtdesP9H92O3rJ8K6fVnJLiHqyJEfh2xpuT36wzxs,61
3
- educommon/version.conf,sha256=tJQOGi9cgdZgc1HE7MuN5sIPHM-JEYc2p5SbL3ulfDI,448
3
+ educommon/version.conf,sha256=5CkFUgZOxukm1Z-0yB-4x4DvTz3QyPlrPnBIBgcSno0,448
4
4
  educommon/about/README.rst,sha256=U48UW5jv-8qHyaV56atzzkNMvzHKXVcWSb_NR06PnMo,2685
5
5
  educommon/about/__init__.py,sha256=H1W0IgW-qX9LCZ49GOJzHdmQGHhh-MA6U1xmNx7WnfM,132
6
6
  educommon/about/apps.py,sha256=GrpJAOE2sF0ukWsqugP_WJS88DO4aL-T3kTLprrJrcA,259
@@ -14,7 +14,7 @@ educommon/about/ui/packages-tab.js,sha256=67e7MNKA7d5yr6wb8-C_RziAnlSHClvCBwd9QI
14
14
  educommon/about/ui/postgresql-extensions-tab.js,sha256=JOzStPqMqTq3bANlka-WRWH7cbh1X90SH1KXkpWdfP4,129
15
15
  educommon/about/ui/ui.py,sha256=gI7NL9SLAvIz6aGWW7O92s_diE5Eb4hDUMC-Y2Fog4Y,5272
16
16
  educommon/async_task/__init__.py,sha256=OAycE1z98I29hf9C8pmgMRW6g6nC_56exQ7uwZS5-i0,110
17
- educommon/async_task/actions.py,sha256=RlXIf63D63NaM0E8EAoKk-0MP8foknjAOvlRhIfvXfI,6662
17
+ educommon/async_task/actions.py,sha256=hZxpPmcKx5LVQ8s8iMGLtM81HwdLUebnGd3OIgmJ8wc,6654
18
18
  educommon/async_task/apps.py,sha256=dGaiYZ9ockWK1wUAmEDP7NMtinV-IRkXGbaIrhsfuhU,143
19
19
  educommon/async_task/consts.py,sha256=LulbNKSlS_T8sNjFqMS7DtaotVI0HibD1a0Iz9iDo8M,242
20
20
  educommon/async_task/exceptions.py,sha256=PaaG2nqP0G2eZ-p0yssca2hhxIccil6MYKH6ZteezP8,117
@@ -49,7 +49,7 @@ educommon/audit_log/helpers.py,sha256=qJLV6yVgf3Z-Mgalc6kGfFvxk8h1L4bTO9fdSL36OP
49
49
  educommon/audit_log/middleware.py,sha256=HkxBh-1RQJnhKqckkXaMbFjJ34WgZGJssbk04wiS3ts,1140
50
50
  educommon/audit_log/models.py,sha256=1l1ld-q9Kg90JKssrR_MbM9d6nJuqhFCc8lvVo9RUW8,11682
51
51
  educommon/audit_log/permissions.py,sha256=VB040UAY4_KmqM4ioToHlVHQYSE7OP0qHEUn9bnWUSo,1241
52
- educommon/audit_log/proxies.py,sha256=r12ZVAPe8d78tZSnNsOypDnV-gQ4VFtw0l7DycksPhg,8562
52
+ educommon/audit_log/proxies.py,sha256=clKwtEQUBxEq6TuQ3GTyx-aKFZYaJYAnhaBh8ENHSlw,8559
53
53
  educommon/audit_log/routers.py,sha256=FF3KLvf6_WWFuZ9VRI8AZyKDfWp_lyd0i6bcVFfIehQ,204
54
54
  educommon/audit_log/ui.py,sha256=JPdhPXXpoAH391uXpddsb4fl48L6otP0vd49acA_ysU,2117
55
55
  educommon/audit_log/error_log/__init__.py,sha256=lfAIm5GTGQ1-kRFxH1s0agSt2Oeguwj2906XNBC0qH4,97
@@ -79,7 +79,7 @@ educommon/auth/rbac/checker.py,sha256=8A583rwsXDeb4dCegN5mufMFhyDwvd72zfug90usvF
79
79
  educommon/auth/rbac/config.py,sha256=mRpOzD29ZHc0zX-CxhUyyICj3h0xj9gUM6N1OoLEWm0,1074
80
80
  educommon/auth/rbac/constants.py,sha256=Hm4kuG7HZ9krTwF6HIj3eMe8v98ui3EMueToBTeOh4A,502
81
81
  educommon/auth/rbac/manager.py,sha256=3WecXF0SU-uBGMxAWnsVLGmVI9QmHS7zDQ9wVgu6mZE,16250
82
- educommon/auth/rbac/models.py,sha256=Ys49JDEKiDMTs5cnUZ2M7HWRhCR0G_hqEqAua4Ln7vY,15185
82
+ educommon/auth/rbac/models.py,sha256=NwRoHkK8z_yK3TIlt2ws0sE_kzIM9Yo0p0q8u5o95mo,15146
83
83
  educommon/auth/rbac/permissions.py,sha256=rvAYUhWiB4xln39BgxRaXs7T5IzHAg0ZAtKgU__uPk8,865
84
84
  educommon/auth/rbac/ui.py,sha256=RK3YpoKyxKoJyK_qaBzV6HpwffA_S99ZzQbNKS134Ng,15735
85
85
  educommon/auth/rbac/utils.py,sha256=L9F5yXfDhkrgVHjgqsO7r5gYrfbM32OVAMiH_bMU4hQ,7819
@@ -102,7 +102,7 @@ educommon/auth/rbac/templates/rbac/roles-list-window.js,sha256=q7QqjsRyFtr1qk0dO
102
102
  educommon/auth/rbac/templates/rbac/roles-view-list-window.js,sha256=gRkVvd-Wak57q9mNgDSXzzy-Pv-ZQokwQIlmhlFLys0,536
103
103
  educommon/auth/simple_auth/__init__.py,sha256=SLKPUpLFIQapwPtFm1-he9DcZU2TvKO_ZhgXVWnJqKw,267
104
104
  educommon/auth/simple_auth/actions.py,sha256=Rz6cbHZqocux5sWRC9mA2sdpvKarGmAmypDDsU8mi4k,11943
105
- educommon/auth/simple_auth/app_meta.py,sha256=ECZY9TqCRG5oxWe-rN5j5_sddBLvCyM_iHlU_dxvPLE,1085
105
+ educommon/auth/simple_auth/app_meta.py,sha256=TSVaaMPfSv0CMut9CYEHw4jtu4Zze_SDdPlGaFUKxxo,1088
106
106
  educommon/auth/simple_auth/checkers.py,sha256=Wc2zkoOakNQoBTr3k6_1CdvUOIkFw1l7ZRcecAnGfM8,2522
107
107
  educommon/auth/simple_auth/const.py,sha256=vizOnXnOVzY5CkgilnwBmhc3vO4biYKUu4VnzM7XsL4,396
108
108
  educommon/auth/simple_auth/models.py,sha256=HhyXs0krIIxtkPIeK8skjbRAdSMrfQ1sAL1Tuoe5vZU,700
@@ -142,30 +142,30 @@ educommon/django/db/models.py,sha256=mNtrj3MZYCXJJ2alw5TaIiN_fFjsCUrm8OCeuZ9isWI
142
142
  educommon/django/db/observer.py,sha256=oAh0Uu0fwlGZ4pj1ytKZyAhosbWKs4THGBTVyR4NYmA,10990
143
143
  educommon/django/db/routers.py,sha256=Zx8cIf7ZQpQLVhxutNj31_IQqYS6J3MnuBTOA5m43SQ,3268
144
144
  educommon/django/db/signals.py,sha256=pbBr31q3hK6aBW6FZXYmATxKp8KrCuqmrNdDZNnpw38,136
145
- educommon/django/db/utils.py,sha256=rlffDEOgEHb4zIGrtpWzSZDEzjb35LnDSFWV4kfRZic,9366
145
+ educommon/django/db/utils.py,sha256=S9rZhfLn4GYWXiVOPSsEGl382NzUFeOxh-G7OtB43vE,9206
146
146
  educommon/django/db/migration/__init__.py,sha256=FwICNxrFGFwzy5klIKzYIhVpsunLipS4W8ysS8C0z5k,1882
147
147
  educommon/django/db/migration/operations.py,sha256=R_SCK8R1IF6x5qjJPoTnGjiAedqnBT-OpaEjyyJaxVM,9527
148
148
  educommon/django/db/mixins/__init__.py,sha256=Ogjjua1VNYQNlKQJjevrby7qgwlvC9noQ5v3TJ6eViA,14740
149
149
  educommon/django/db/mixins/date_interval.py,sha256=9Ro7KxqSf-dskU9MjAra3aS2a09_11cv1Tol7JWQw3g,24715
150
- educommon/django/db/mixins/validation.py,sha256=t9u1g0nV_pOX5nKXPC44ZCpcWC4NSqb3agjLc7YMRMo,12225
151
- educommon/django/db/model_view/__init__.py,sha256=cZ2r6dalXrFBzIQxIt7YXtH07PXZaxJBK2BScrDn8vA,12365
150
+ educommon/django/db/mixins/validation.py,sha256=u3SDRSDvEkOjEMgfgCIFtnTUk4LRPdru0swzTGDSqIY,12173
151
+ educommon/django/db/model_view/__init__.py,sha256=x0rHvR0q6RSDtuMWDGASrtCIYsytfNh-jHcsra0BTZY,12363
152
152
  educommon/django/db/model_view/table-view.html,sha256=EEz_tSJagl-mT-_bJaELshAEnFnuhPerpWegb3XeGO8,631
153
153
  educommon/django/db/partitioning/README.md,sha256=w4_eFovGlBYAMt-zN7ENv7zHpJyK7L1Jlmbdqt0OiXY,4455
154
- educommon/django/db/partitioning/__init__.py,sha256=yO7LfTsVWlZdmucjlbupJ-1k4ElQuacMhJ2POxhkjq0,22378
154
+ educommon/django/db/partitioning/__init__.py,sha256=PqHa7IymPftrIXtDo4iWKBVw1PAIizl0iI2-dONFwQM,22376
155
155
  educommon/django/db/partitioning/partitioning.sql,sha256=PKKYKgn9MXQtt1vg498XdWD0vGYkzxc_sPKIWmpaSrk,20345
156
156
  educommon/django/db/partitioning/triggers.sql,sha256=OEwQqMwzRB79LcFM0-cWH8x_UdLKw-iZTSPILTGJ1Uk,3401
157
157
  educommon/django/db/partitioning/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
158
158
  educommon/django/db/partitioning/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
159
159
  educommon/django/db/partitioning/management/commands/apply_partitioning.py,sha256=oAsPDLD1YAQ0zU2zGPNlwDaNGCrnVBNC86U1I5xcuoM,1612
160
- educommon/django/db/partitioning/management/commands/clear_table.py,sha256=Dt1u4Q35dz-W39sW1UYIQjdGyI7URJl6Z96qJOJYTbA,2235
161
- educommon/django/db/partitioning/management/commands/split_table.py,sha256=AfsBKWyW2yYYc05LGHdfULwW6GvaB6LXMBblSsxfg30,2082
160
+ educommon/django/db/partitioning/management/commands/clear_table.py,sha256=c3sWVCsxOcrIhPqck1om5_Od7IKe8SjMVwRNa0cPMaE,2235
161
+ educommon/django/db/partitioning/management/commands/split_table.py,sha256=UOFbOWNTvjJLIRzByCv_VpGCsTct-oGONsyYXJgCSpo,2082
162
162
  educommon/django/db/validators/__init__.py,sha256=Hyx-L4suVzUuCEb-HQB9g8LnaxKQp2ymv-DtaOW6qbw,1986
163
163
  educommon/django/db/validators/simple.py,sha256=cwG-OLVPdD146A9dzLOaGyzZOoUWgQoFu9KDQ7_k8xI,38886
164
164
  educommon/django/storages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
165
165
  educommon/django/storages/atcfs/README.rst,sha256=yPy55jjKmSVL6Sg1LHzg_6wI7UAG4JDI6rjqaVxQfWs,2656
166
166
  educommon/django/storages/atcfs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
167
167
  educommon/django/storages/atcfs/api.py,sha256=XeQ_HBbvauiJG704Am5mDbOnvZblJH35xj70mKf13KI,6004
168
- educommon/django/storages/atcfs/app_meta.py,sha256=M_u8xDLOhz3_SwyhxNYK0CWA9QQgTafqdRFX6_rImbg,349
168
+ educommon/django/storages/atcfs/app_meta.py,sha256=whuDogy_KsWNgdi1fitcyEClfd-2veYMPuLF9JLEVXY,352
169
169
  educommon/django/storages/atcfs/exceptions.py,sha256=GD2yxSiZC9N8n3KusXY5bJilPlD6nGL1G3xOwV9aIXc,106
170
170
  educommon/django/storages/atcfs/models.py,sha256=2JOzvRId0cnI-hgFHsspsP-ZXG9b75xefxIVaK3Ciuk,160
171
171
  educommon/django/storages/atcfs/monkey_patching.py,sha256=tWlY255LcS8h87CMQvYl-V1pFUIhylYJW0grlgmcfbs,2623
@@ -204,16 +204,16 @@ educommon/logger/apps.py,sha256=wkGeOGuklNHp_HrTiK1WXOvhkK90mAea3Jp_7uJjQw4,944
204
204
  educommon/logger/consts.py,sha256=uk_TFZteg3ghT1_pvP9nYALlyZBrsH8oMr6AXANFKAU,238
205
205
  educommon/logger/formatters.py,sha256=uraIlYukVsyVngBPm9SqJHzCtgYKvg1xMcwBiUD8hd4,400
206
206
  educommon/logger/helpers.py,sha256=6EsfkteuLt3S-AJTgl3V90KYNwiiBjDYTtuSqOq4kM8,1596
207
- educommon/logger/loggers.py,sha256=8ZX2Ba1L1Gt9UvCO1VG6NLmiRgnIsZfEpKjH6ruH4ks,2967
207
+ educommon/logger/loggers.py,sha256=1btZkeQuh-xP1D06isprDXjVyNNbp6KUMeZF0d9DRSk,2965
208
208
  educommon/logger/records.py,sha256=rBVVIzdrs2x6T9e5QEpN6BZhwynneu7GfRexrUUTb9o,138
209
- educommon/m3/__init__.py,sha256=JzuhQW4lo14IHD3qURk9t9xqajW8KqiorrMevacFAaE,17570
209
+ educommon/m3/__init__.py,sha256=JVnJNZnQJxaN3-__E-ylZrCdbX-HKjD_lKRJ4xd23UI,17568
210
210
  educommon/m3/transaction_context.py,sha256=HfMJAIGGMgWgnzG55UP2O5t2ByViO0sbMWKag2VpArk,5150
211
211
  educommon/m3/extensions/__init__.py,sha256=Q9lMCVvwjZK3zkquxMasLj9CQdUxxvB70PL13OIWLF0,258
212
212
  educommon/m3/extensions/ui.py,sha256=41G-aBrTvDgNEAbe2fhbwKm9dw9QMdtLGvtNh4-OMyI,6912
213
213
  educommon/m3/extensions/listeners/__init__.py,sha256=ax097TgSn7rWH8L3DSiVCc1MOKnuL3uRjoocqXbdjAw,8897
214
214
  educommon/m3/extensions/listeners/delete_check/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
215
215
  educommon/m3/extensions/listeners/delete_check/cancel-confirm-window.js,sha256=Xh0Rzk9ua9NtR9TR0x7oPn0Q96IKqBQF0XkkFzTOUVI,916
216
- educommon/m3/extensions/listeners/delete_check/listeners.py,sha256=VVrwvlPLeae_8Tu6WHOFtUVpmdDFCvhnqtyyJpIdZxk,6200
216
+ educommon/m3/extensions/listeners/delete_check/listeners.py,sha256=r_PhNLlt16Tcikl4lOmhG-E7Hl7KL596ZQL3cEr3f8w,6131
217
217
  educommon/m3/extensions/listeners/delete_check/mixins.py,sha256=DmmTepSHbPBZ49_hdueqHtD2oHjkR_JldlmozdfpDhQ,7660
218
218
  educommon/m3/extensions/listeners/delete_check/related-objects-window.html,sha256=Do_SnmWfexnhDzgvr7o7JJubH4N8pvPNa268cd-JIcA,94
219
219
  educommon/m3/extensions/listeners/delete_check/signals.py,sha256=QnfevsAKpKtOE_EBc7h1qg4hTV4LxXYL5ivvpHyc704,467
@@ -238,7 +238,7 @@ educommon/report/constructor/README.rst,sha256=M6bnt3eAdRMUSIbRXdbuleron11RajRmT
238
238
  educommon/report/constructor/__init__.py,sha256=sMDEr17Etf69p4NKRelFv9ySrNT6JulFO1IByVfZA1w,1252
239
239
  educommon/report/constructor/app_meta.py,sha256=4hFKVlGCO4Mlu46fCw5k7iD9kSse8b9MQt3tRV5WyfE,200
240
240
  educommon/report/constructor/apps.py,sha256=NUp1dCkzHduZFXT6XPDQPasAei3Bs3TYdEQzXhqn1J8,371
241
- educommon/report/constructor/base.py,sha256=v-85sBIL8BbkNiAbDSbUXlHBrUpV-_kIr5LuEd5A92k,26012
241
+ educommon/report/constructor/base.py,sha256=63y99_aS-y08EqXCDLF7oD80oHDEGjDoEWL8AZnFpek,26007
242
242
  educommon/report/constructor/config.py,sha256=6PjPv4A3zww_DnZqE-aj72zduW7cZqbzVwuCP8JDsYg,1058
243
243
  educommon/report/constructor/constants.py,sha256=VF3tu6vEWrN37oPyipD3LGCElbaY2JHGaKy7AxUbQIU,3381
244
244
  educommon/report/constructor/exceptions.py,sha256=NL2mQggBHbkHaQFKpr9mTj7R5IVtxtCRKzJ00dgfTqM,1287
@@ -250,7 +250,7 @@ educommon/report/constructor/utils.py,sha256=KR2wDuvxOZXqHeq1IklpNXyLRrLSJEv5jsd
250
250
  educommon/report/constructor/validators.py,sha256=E_VKNz0Z3YqJOJTjd7OdZXFMDnW8UUiVUIH9Jk6Irtw,524
251
251
  educommon/report/constructor/builders/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
252
252
  educommon/report/constructor/builders/excel/__init__.py,sha256=ZjiilnR4FRJm0DM06G3yKHBEDAPXs5JvuPO3JOg2FB8,104
253
- educommon/report/constructor/builders/excel/_base.py,sha256=5G-7xoTAHkdelifX5_YbWDs_b1CEMHekId8m4GddAvs,55790
253
+ educommon/report/constructor/builders/excel/_base.py,sha256=e3wTeUStC9eLn23afQGjG1Kp7jr4kjuyRt7dUkJMYVI,55789
254
254
  educommon/report/constructor/builders/excel/_header.py,sha256=JUHHlBgkENPatp34csKrefteHsdbeCdJzqzSdTtof8M,4758
255
255
  educommon/report/constructor/builders/excel/constants.py,sha256=SM5OEkd7CMrGhuCpMWIdZGy-R1NAUB06973QnECayR0,28
256
256
  educommon/report/constructor/builders/excel/product.py,sha256=NsfjhUViZyi_XpDjiUJDwfgHVRlE98v40RMAa6mpAzk,6229
@@ -279,7 +279,7 @@ educommon/rest/misc.py,sha256=NFYw-WXYpUvH6FnL78EwzJXAtnTtQRnxqdvnRTg_qX0,475
279
279
  educommon/rest/mixins.py,sha256=ia0uH_5S6FOy7Gt8-1L8tkee5ryhkuXgrsnD-TH5fvw,4840
280
280
  educommon/secure_media/README.rst,sha256=Hi96RDL5T8FIuG3zaR2Fmxex2mE4lLu0F6t9_98_BHA,4001
281
281
  educommon/secure_media/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
282
- educommon/secure_media/app_meta.py,sha256=cstjzpPq_hnt90JH40s_pq0Xne-oOqeoeeGG9X7gIRo,1313
282
+ educommon/secure_media/app_meta.py,sha256=bA2OirIuk8FW3Krbr1EuK1DFeLgeaDXzNEAEY97fq5A,1317
283
283
  educommon/utils/__init__.py,sha256=kW7OOTVf4Ncht81N2deg5_JFWz4MqxNjseER-p3KGJw,2441
284
284
  educommon/utils/caching.py,sha256=ux6ShlJJK3gh0C6XvpanbapXOI5uXUhDNgWQI7AsBBE,4063
285
285
  educommon/utils/conversion.py,sha256=kEe15TwIH19RmC2mRl1JrrqD8mXgbCAPOYWnkIQXxqQ,1966
@@ -306,7 +306,7 @@ educommon/utils/licence/converters.py,sha256=BLXjqy4kgBj78qqfiXtuz0Nwu5rVb_us3om
306
306
  educommon/utils/system_app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
307
307
  educommon/utils/system_app/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
308
308
  educommon/utils/system_app/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
309
- educommon/utils/system_app/management/commands/delete_objects.py,sha256=3LeBj6LEQAgSz3feapeMz9-qPey1ztnejDTCigefixQ,9297
309
+ educommon/utils/system_app/management/commands/delete_objects.py,sha256=SlsiCMAV80QQy5cNNl50yxwjPMkK-_5OLyvuMAkgTKI,9295
310
310
  educommon/utils/system_app/templatetags/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
311
311
  educommon/utils/system_app/templatetags/educommon.py,sha256=_K5iM3LBnpCJJTIrC6PR5K6-ORIpm2NTQ7APlEu9FcQ,273
312
312
  educommon/utils/xml/__init__.py,sha256=TTnCVQmcT-PHW7REDmDM6tbmN7o5ahYK_m_kJFeI_L4,2194
@@ -342,8 +342,8 @@ educommon/ws_log/smev/exceptions.py,sha256=lmy7o2T3dJkqgIhG07qyh5yPqO3qZAYABuT4J
342
342
  educommon/ws_log/templates/report/smev_logs.xlsx,sha256=nnYgB0Z_ix8HoxsRICjsZfFRQBdra-5Gd8nWhCxTjYg,10439
343
343
  educommon/ws_log/templates/ui-js/smev-logs-list-window.js,sha256=AGup3D8GTJSY9WdDPj0zBJeYQBFOmGgcbxPOJbKK-nY,513
344
344
  educommon/ws_log/templates/ui-js/smev-logs-report-setting-window.js,sha256=nQ7QYK9frJcE7g7kIt6INg9TlEEJAPPayBJgRaoTePA,1103
345
- educommon-3.9.1.dist-info/METADATA,sha256=jSgP4WrnQR_aY0xrpaldjGPAnM7r9189JiQZnsO_5Js,1450
346
- educommon-3.9.1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
347
- educommon-3.9.1.dist-info/dependency_links.txt,sha256=RNlr4t-BxZRm7e_IfVo1ikr5ln-7viimzLHvQMO1C_Q,43
348
- educommon-3.9.1.dist-info/top_level.txt,sha256=z5fbW7bz_0V1foUm_FGcZ9_MTpW3N1dBN7-kEmMowl4,10
349
- educommon-3.9.1.dist-info/RECORD,,
345
+ educommon-3.9.3.dist-info/METADATA,sha256=MQm6ZohbMiKGqXCeX8Rjew7ijtm2FNoO-p4el5Y_6Lk,1486
346
+ educommon-3.9.3.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
347
+ educommon-3.9.3.dist-info/dependency_links.txt,sha256=RNlr4t-BxZRm7e_IfVo1ikr5ln-7viimzLHvQMO1C_Q,43
348
+ educommon-3.9.3.dist-info/top_level.txt,sha256=z5fbW7bz_0V1foUm_FGcZ9_MTpW3N1dBN7-kEmMowl4,10
349
+ educommon-3.9.3.dist-info/RECORD,,