educommon 3.13.0__py3-none-any.whl → 3.13.2__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.
Files changed (220) hide show
  1. educommon/__init__.py +0 -1
  2. educommon/about/ui/actions.py +16 -30
  3. educommon/about/ui/ui.py +3 -12
  4. educommon/about/utils.py +6 -5
  5. educommon/async_task/__init__.py +0 -1
  6. educommon/async_task/actions.py +18 -13
  7. educommon/async_task/apps.py +4 -0
  8. educommon/async_task/locker.py +2 -5
  9. educommon/async_task/migrations/0001_initial.py +55 -9
  10. educommon/async_task/migrations/0002_task_type_and_status_data.py +94 -89
  11. educommon/async_task/migrations/0003_alter_runningtask_options.py +0 -1
  12. educommon/async_task/models.py +9 -6
  13. educommon/async_task/tasks.py +11 -7
  14. educommon/async_task/ui.py +16 -35
  15. educommon/async_tasks/__init__.py +0 -1
  16. educommon/async_tasks/apps.py +4 -0
  17. educommon/async_tasks/locks.py +11 -21
  18. educommon/async_tasks/migrations/0001_initial.py +68 -8
  19. educommon/async_tasks/migrations/0002_load_initial_data.py +0 -1
  20. educommon/async_tasks/models.py +9 -29
  21. educommon/async_tasks/tasks.py +25 -54
  22. educommon/audit_log/__init__.py +1 -0
  23. educommon/audit_log/actions.py +27 -36
  24. educommon/audit_log/app_meta.py +7 -4
  25. educommon/audit_log/apps.py +44 -29
  26. educommon/audit_log/constants.py +7 -4
  27. educommon/audit_log/error_log/actions.py +1 -3
  28. educommon/audit_log/helpers.py +2 -4
  29. educommon/audit_log/management/commands/reinstall_audit_log.py +11 -7
  30. educommon/audit_log/migrations/0001_initial.py +91 -16
  31. educommon/audit_log/migrations/0002_install_audit_log.py +13 -13
  32. educommon/audit_log/migrations/0003_logproxy.py +1 -3
  33. educommon/audit_log/migrations/0004_reinstall_audit_log.py +1 -4
  34. educommon/audit_log/migrations/0005_postgresql_error.py +4 -2
  35. educommon/audit_log/migrations/0006_auto_20200806_1707.py +3 -4
  36. educommon/audit_log/migrations/0007_create_selective_tables_function.py +8 -5
  37. educommon/audit_log/migrations/0008_table_logged.py +0 -1
  38. educommon/audit_log/migrations/0009_reinstall_audit_log.py +0 -1
  39. educommon/audit_log/models.py +36 -42
  40. educommon/audit_log/permissions.py +11 -9
  41. educommon/audit_log/proxies.py +12 -23
  42. educommon/audit_log/ui.py +18 -15
  43. educommon/audit_log/utils/__init__.py +28 -60
  44. educommon/audit_log/utils/operations.py +16 -2
  45. educommon/auth/__init__.py +0 -3
  46. educommon/auth/rbac/__init__.py +2 -4
  47. educommon/auth/rbac/actions.py +148 -145
  48. educommon/auth/rbac/app_meta.py +9 -6
  49. educommon/auth/rbac/backends/base.py +2 -8
  50. educommon/auth/rbac/backends/caching.py +27 -37
  51. educommon/auth/rbac/backends/simple.py +1 -4
  52. educommon/auth/rbac/checker.py +1 -3
  53. educommon/auth/rbac/management/commands/rbac.py +6 -11
  54. educommon/auth/rbac/manager.py +18 -47
  55. educommon/auth/rbac/migrations/0001_initial.py +73 -12
  56. educommon/auth/rbac/migrations/0002_model_modifier_metaclass_fix.py +7 -6
  57. educommon/auth/rbac/migrations/0003_permission_hidden.py +1 -5
  58. educommon/auth/rbac/migrations/0004_auto_20171024_1245.py +26 -19
  59. educommon/auth/rbac/models.py +63 -68
  60. educommon/auth/rbac/permissions.py +6 -7
  61. educommon/auth/rbac/ui.py +83 -84
  62. educommon/auth/rbac/utils.py +10 -11
  63. educommon/auth/rbac/validators.py +4 -5
  64. educommon/auth/simple_auth/__init__.py +1 -5
  65. educommon/auth/simple_auth/actions.py +79 -92
  66. educommon/auth/simple_auth/app_meta.py +2 -9
  67. educommon/auth/simple_auth/checkers.py +3 -3
  68. educommon/auth/simple_auth/migrations/0001_initial.py +23 -4
  69. educommon/auth/simple_auth/validators.py +0 -1
  70. educommon/contingent/actions.py +7 -7
  71. educommon/contingent/app_meta.py +1 -4
  72. educommon/contingent/base.py +10 -15
  73. educommon/contingent/catalogs.py +424 -540
  74. educommon/contingent/contingent_plugin/actions.py +4 -15
  75. educommon/contingent/contingent_plugin/apps.py +10 -4
  76. educommon/contingent/contingent_plugin/migrations/0001_initial.py +5 -6
  77. educommon/contingent/contingent_plugin/migrations/0002_add_contingent_model_deleted.py +6 -11
  78. educommon/contingent/contingent_plugin/model_views.py +2 -12
  79. educommon/contingent/contingent_plugin/models.py +2 -7
  80. educommon/contingent/contingent_plugin/observer.py +14 -13
  81. educommon/contingent/contingent_plugin/plugin_meta.py +1 -3
  82. educommon/contingent/contingent_plugin/storage.py +8 -7
  83. educommon/contingent/contingent_plugin/utils.py +6 -6
  84. educommon/django/db/fields.py +72 -86
  85. educommon/django/db/migration/__init__.py +3 -7
  86. educommon/django/db/migration/operations.py +29 -51
  87. educommon/django/db/mixins/__init__.py +16 -10
  88. educommon/django/db/mixins/date_interval.py +47 -75
  89. educommon/django/db/mixins/validation.py +26 -26
  90. educommon/django/db/model_view/__init__.py +18 -22
  91. educommon/django/db/models.py +9 -8
  92. educommon/django/db/observer.py +9 -27
  93. educommon/django/db/partitioning/__init__.py +66 -92
  94. educommon/django/db/partitioning/management/commands/apply_partitioning.py +3 -13
  95. educommon/django/db/partitioning/management/commands/clear_table.py +18 -14
  96. educommon/django/db/partitioning/management/commands/split_table.py +18 -13
  97. educommon/django/db/routers.py +6 -15
  98. educommon/django/db/signals.py +4 -2
  99. educommon/django/db/utils.py +14 -19
  100. educommon/django/db/validators/__init__.py +1 -0
  101. educommon/django/db/validators/simple.py +72 -100
  102. educommon/django/storages/atcfs/api.py +39 -53
  103. educommon/django/storages/atcfs/app_meta.py +1 -1
  104. educommon/django/storages/atcfs/management/commands/atcfs_migrate.py +42 -55
  105. educommon/django/storages/atcfs/models.py +0 -3
  106. educommon/django/storages/atcfs/monkey_patching.py +18 -12
  107. educommon/django/storages/atcfs/storage.py +14 -23
  108. educommon/extjs/fields/input_params.py +15 -45
  109. educommon/importer/XLSReader.py +143 -241
  110. educommon/importer/__init__.py +86 -4
  111. educommon/importer/api.py +53 -84
  112. educommon/importer/constants.py +4 -14
  113. educommon/importer/loggers.py +16 -26
  114. educommon/importer/proxy.py +131 -176
  115. educommon/importer/proxy_import.py +11 -12
  116. educommon/importer/report.py +4 -6
  117. educommon/importer/ui.py +32 -26
  118. educommon/importer/validators.py +4 -7
  119. educommon/integration_entities/helpers.py +14 -18
  120. educommon/ioc/__init__.py +3 -6
  121. educommon/logger/loggers.py +10 -14
  122. educommon/m3/__init__.py +20 -38
  123. educommon/m3/extensions/__init__.py +1 -0
  124. educommon/m3/extensions/listeners/__init__.py +22 -38
  125. educommon/m3/extensions/listeners/delete_check/listeners.py +31 -41
  126. educommon/m3/extensions/listeners/delete_check/mixins.py +20 -25
  127. educommon/m3/extensions/listeners/delete_check/signals.py +2 -2
  128. educommon/m3/extensions/listeners/delete_check/ui.py +15 -14
  129. educommon/m3/extensions/listeners/delete_check/utils.py +9 -11
  130. educommon/m3/extensions/ui.py +15 -33
  131. educommon/m3/transaction_context.py +17 -19
  132. educommon/objectpack/actions.py +70 -88
  133. educommon/objectpack/apps.py +5 -0
  134. educommon/objectpack/filters.py +9 -15
  135. educommon/objectpack/ui.py +59 -77
  136. educommon/report/__init__.py +9 -5
  137. educommon/report/actions.py +29 -32
  138. educommon/report/constructor/__init__.py +5 -8
  139. educommon/report/constructor/app_meta.py +1 -3
  140. educommon/report/constructor/apps.py +1 -0
  141. educommon/report/constructor/base.py +33 -80
  142. educommon/report/constructor/builders/excel/_base.py +138 -286
  143. educommon/report/constructor/builders/excel/_header.py +2 -9
  144. educommon/report/constructor/builders/excel/product.py +13 -34
  145. educommon/report/constructor/builders/excel/with_merged_cells.py +18 -14
  146. educommon/report/constructor/config.py +2 -0
  147. educommon/report/constructor/editor/actions.py +101 -215
  148. educommon/report/constructor/editor/ui.py +71 -93
  149. educommon/report/constructor/exceptions.py +6 -12
  150. educommon/report/constructor/migrations/0001_initial.py +36 -44
  151. educommon/report/constructor/migrations/0002_report_filters.py +86 -72
  152. educommon/report/constructor/migrations/0003_reportfilter_exclude.py +5 -5
  153. educommon/report/constructor/migrations/0004_reportfilter_fields.py +22 -18
  154. educommon/report/constructor/migrations/0005_reportcolumn_visible.py +5 -4
  155. educommon/report/constructor/migrations/0006_reportsorting.py +21 -17
  156. educommon/report/constructor/migrations/0007_include_available_units.py +14 -14
  157. educommon/report/constructor/migrations/0008_auto_20170407_1318.py +4 -5
  158. educommon/report/constructor/migrations/0009_auto_20180405_0642.py +1 -4
  159. educommon/report/constructor/migrations/0010_add_aggregate_fields.py +7 -8
  160. educommon/report/constructor/mixins.py +14 -15
  161. educommon/report/constructor/models.py +76 -124
  162. educommon/report/constructor/utils.py +3 -8
  163. educommon/report/constructor/validators.py +1 -3
  164. educommon/report/reporter.py +25 -43
  165. educommon/report/utils.py +14 -40
  166. educommon/rest/actions.py +7 -11
  167. educommon/rest/context.py +6 -16
  168. educommon/rest/controllers.py +10 -10
  169. educommon/rest/mixins.py +29 -27
  170. educommon/secure_media/app_meta.py +9 -9
  171. educommon/utils/__init__.py +3 -2
  172. educommon/utils/caching.py +1 -3
  173. educommon/utils/conversion.py +1 -3
  174. educommon/utils/crypto.py +1 -2
  175. educommon/utils/date.py +13 -26
  176. educommon/utils/db/__init__.py +17 -26
  177. educommon/utils/db/postgresql.py +1 -4
  178. educommon/utils/fonts/__init__.py +3 -4
  179. educommon/utils/licence/__init__.py +5 -16
  180. educommon/utils/misc.py +9 -18
  181. educommon/utils/object_grid.py +55 -62
  182. educommon/utils/phone_number/modelfields.py +1 -3
  183. educommon/utils/phone_number/phone_number.py +5 -8
  184. educommon/utils/phone_number/validators.py +8 -23
  185. educommon/utils/plugins.py +15 -28
  186. educommon/utils/registry.py +2 -1
  187. educommon/utils/seqtools.py +1 -3
  188. educommon/utils/serializer.py +9 -16
  189. educommon/utils/storage.py +3 -2
  190. educommon/utils/system.py +1 -3
  191. educommon/utils/system_app/management/commands/delete_objects.py +17 -34
  192. educommon/utils/ui.py +87 -84
  193. educommon/utils/xml/__init__.py +2 -7
  194. educommon/utils/xml/resolver.py +1 -0
  195. educommon/ws_log/actions.py +31 -76
  196. educommon/ws_log/base.py +6 -20
  197. educommon/ws_log/migrations/0001_initial.py +25 -8
  198. educommon/ws_log/migrations/0002_auto_20160628_1334.py +0 -1
  199. educommon/ws_log/migrations/0003_add_fields_to_smev_logs.py +20 -4
  200. educommon/ws_log/migrations/0004_auto_20160727_1600.py +7 -6
  201. educommon/ws_log/migrations/0005_auto_20161130_1615.py +14 -4
  202. educommon/ws_log/migrations/0006_auto_20170327_1027.py +3 -2
  203. educommon/ws_log/migrations/0007_auto_20180607_1040.py +8 -9
  204. educommon/ws_log/migrations/0008_auto_20180713_1445.py +23 -10
  205. educommon/ws_log/migrations/0009_auto_20201130_1553.py +7 -2
  206. educommon/ws_log/models.py +21 -35
  207. educommon/ws_log/provider.py +2 -1
  208. educommon/ws_log/report.py +8 -13
  209. educommon/ws_log/smev/applications.py +12 -27
  210. educommon/ws_log/smev/exceptions.py +2 -3
  211. educommon/ws_log/ui.py +32 -32
  212. educommon/ws_log/utils.py +1 -3
  213. {educommon-3.13.0.dist-info → educommon-3.13.2.dist-info}/METADATA +26 -14
  214. educommon-3.13.2.dist-info/RECORD +354 -0
  215. educommon/utils/patches.py +0 -27
  216. educommon/version.conf +0 -11
  217. educommon-3.13.0.dist-info/RECORD +0 -357
  218. educommon-3.13.0.dist-info/dependency_links.txt +0 -1
  219. {educommon-3.13.0.dist-info → educommon-3.13.2.dist-info}/WHEEL +0 -0
  220. {educommon-3.13.0.dist-info → educommon-3.13.2.dist-info}/top_level.txt +0 -0
@@ -77,10 +77,11 @@ def field_ignored_by_model_params(model, accessor_name):
77
77
 
78
78
  params = model.report_constructor_params
79
79
  assert isinstance(params, dict), params
80
- assert sum(
81
- 1 if param in params else 0
82
- for param in ('skip', 'except', 'only')
83
- ) <= 1, ('Должен быть указан только один параметр.', model, params)
80
+ assert sum(1 if param in params else 0 for param in ('skip', 'except', 'only')) <= 1, (
81
+ 'Должен быть указан только один параметр.',
82
+ model,
83
+ params,
84
+ )
84
85
 
85
86
  if 'extra' in params and accessor_name in params['extra']:
86
87
  return False
@@ -162,18 +163,15 @@ class ColumnDescriptor:
162
163
  self.parent.children.append(self)
163
164
 
164
165
  def __repr__(self, *args, **kwargs):
165
- return '{}<{}>'.format(
166
- self.__class__.__name__, self.full_accessor_name
167
- )
166
+ return '{}<{}>'.format(self.__class__.__name__, self.full_accessor_name)
168
167
 
169
168
  @staticmethod
170
169
  def create(model, field_name, data_source, parent=None, level=0):
171
170
  model_params = getattr(model, 'report_constructor_params', {})
172
- assert sum(
173
- 1 if param in model_params else 0
174
- for param in ('skip', 'except', 'only')
175
- ) <= 1, (
176
- 'Может быть указан только один параметр.', model, model_params
171
+ assert sum(1 if param in model_params else 0 for param in ('skip', 'except', 'only')) <= 1, (
172
+ 'Может быть указан только один параметр.',
173
+ model,
174
+ model_params,
177
175
  )
178
176
 
179
177
  attr_name, _, nested_attr = field_name.partition('.')
@@ -204,9 +202,7 @@ class ColumnDescriptor:
204
202
  raise FieldDoesNotExist(field_name)
205
203
 
206
204
  try:
207
- result = ColumnDescriptor.create(
208
- related_model, nested_attr, data_source, result, level + 1
209
- )
205
+ result = ColumnDescriptor.create(related_model, nested_attr, data_source, result, level + 1)
210
206
  except FieldDoesNotExist as error:
211
207
  raise FieldDoesNotExist('.'.join((attr_name, str(error))))
212
208
 
@@ -228,15 +224,11 @@ class ColumnDescriptor:
228
224
  descriptor = self
229
225
  accessor_name = fld_accessor_name
230
226
  while descriptor.parent:
231
- accessor_name = '.'.join(
232
- (descriptor.accessor_name, accessor_name)
233
- )
227
+ accessor_name = '.'.join((descriptor.accessor_name, accessor_name))
234
228
  if skip_field(descriptor.parent.model, field, accessor_name):
235
229
  return True
236
230
  # проверка, что связанная модель поля, не связана с родительскими моделями полей
237
- if (getattr(field, 'related_model', None) and
238
- field.related_model in descriptor.parent.related_field_models
239
- ):
231
+ if getattr(field, 'related_model', None) and field.related_model in descriptor.parent.related_field_models:
240
232
  return True
241
233
 
242
234
  descriptor = descriptor.parent
@@ -288,18 +280,14 @@ class ColumnDescriptor:
288
280
  @property
289
281
  def full_accessor_name(self):
290
282
  if self.parent:
291
- return '.'.join(
292
- (self.parent.full_accessor_name, self.accessor_name)
293
- )
283
+ return '.'.join((self.parent.full_accessor_name, self.accessor_name))
294
284
  else:
295
285
  return self.accessor_name
296
286
 
297
287
  @property
298
288
  def full_lookup(self):
299
289
  if self.parent:
300
- return '__'.join(
301
- (self.parent.full_lookup, self.lookup)
302
- )
290
+ return '__'.join((self.parent.full_lookup, self.lookup))
303
291
  else:
304
292
  return self.lookup
305
293
 
@@ -323,10 +311,7 @@ class ColumnDescriptor:
323
311
 
324
312
  @property
325
313
  def title(self):
326
- if (
327
- self.data_source.field_titles and
328
- self.full_accessor_name in self.data_source.field_titles
329
- ):
314
+ if self.data_source.field_titles and self.full_accessor_name in self.data_source.field_titles:
330
315
  return self.data_source.field_titles[self.full_accessor_name]
331
316
 
332
317
  if isinstance(self.field, ForeignObjectRel):
@@ -348,9 +333,7 @@ class ColumnDescriptor:
348
333
  :rtype: str
349
334
  """
350
335
  if self.parent:
351
- return delimiter.join((
352
- self.parent.get_full_title(delimiter), self.title
353
- ))
336
+ return delimiter.join((self.parent.get_full_title(delimiter), self.title))
354
337
  else:
355
338
  return self.title
356
339
 
@@ -374,10 +357,7 @@ class ColumnDescriptor:
374
357
  if not self._check_to_exclude(field):
375
358
  return True
376
359
 
377
- if (
378
- hasattr(self.model, 'report_constructor_params') and
379
- 'extra' in self.model.report_constructor_params
380
- ):
360
+ if hasattr(self.model, 'report_constructor_params') and 'extra' in self.model.report_constructor_params:
381
361
  extra = self.model.report_constructor_params['extra']
382
362
  for accessor_name, params in extra.items():
383
363
  field = ExtraField(accessor_name, params['field'])
@@ -392,28 +372,19 @@ class ColumnDescriptor:
392
372
  else:
393
373
  for field in getattr(self.model, '_meta').get_fields():
394
374
  if not self._check_to_exclude(field):
395
- yield ColumnDescriptor(
396
- self.data_source, self, field, level=self.level + 1
397
- )
375
+ yield ColumnDescriptor(self.data_source, self, field, level=self.level + 1)
398
376
 
399
- if (
400
- hasattr(self.model, 'report_constructor_params') and
401
- 'extra' in self.model.report_constructor_params
402
- ):
377
+ if hasattr(self.model, 'report_constructor_params') and 'extra' in self.model.report_constructor_params:
403
378
  extra = self.model.report_constructor_params['extra']
404
379
  for accessor_name, params in extra.items():
405
380
  field = ExtraField(accessor_name, params['field'])
406
381
  if not self._check_to_exclude(field):
407
- yield ColumnDescriptor(
408
- self.data_source,
409
- self, field,
410
- level=self.level + 1
411
- )
382
+ yield ColumnDescriptor(self.data_source, self, field, level=self.level + 1)
412
383
 
413
384
  def validate_value(self, value):
414
385
  """Проверяет текстовое представление значения на соотв-е типу поля.
415
386
 
416
- :param unicode value: Текстовое представление значения для проверки.
387
+ :param str value: Текстовое представление значения для проверки.
417
388
 
418
389
  :raises django.core.exceptions.ValidationError: если значение аргумента
419
390
  value не прошло проверку. Описание ошибки будет в исключении.
@@ -432,10 +403,7 @@ class ColumnDescriptor:
432
403
  if choice_display.lower() == lower_case_value:
433
404
  break
434
405
  else:
435
- raise ValidationError(
436
- 'Недопустимое значение для сравнения: {}.'
437
- .format(value)
438
- )
406
+ raise ValidationError('Недопустимое значение для сравнения: {}.'.format(value))
439
407
  # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
440
408
 
441
409
  else:
@@ -562,9 +530,7 @@ class ModelDataSourceParams(_ModelDataSourceInfo):
562
530
 
563
531
  def get_data_source_descriptor(self):
564
532
  """Возвращает дескриптор источника данных."""
565
- return ModelDataSourceDescriptor(
566
- self._model.get_model(), self._filter_func, self.field_titles
567
- )
533
+ return ModelDataSourceDescriptor(self._model.get_model(), self._filter_func, self.field_titles)
568
534
 
569
535
 
570
536
  class ModelDataSourceDescriptor(_ModelDataSourceInfo):
@@ -592,10 +558,7 @@ class ModelDataSourceDescriptor(_ModelDataSourceInfo):
592
558
  if not skip_field(model, field, _get_accessor_name(field)):
593
559
  yield ColumnDescriptor(self, None, field)
594
560
 
595
- if (
596
- hasattr(model, 'report_constructor_params') and
597
- 'extra' in model.report_constructor_params
598
- ):
561
+ if hasattr(model, 'report_constructor_params') and 'extra' in model.report_constructor_params:
599
562
  extra = model.report_constructor_params['extra']
600
563
  for accessor_name, params in extra.items():
601
564
  field = ExtraField(accessor_name, params['field'])
@@ -628,15 +591,13 @@ class ModelDataSourceDescriptor(_ModelDataSourceInfo):
628
591
 
629
592
  else:
630
593
  if (
631
- hasattr(model, 'report_constructor_params') and
632
- 'extra' in model.report_constructor_params and
633
- field_name in model.report_constructor_params['extra']
594
+ hasattr(model, 'report_constructor_params')
595
+ and 'extra' in model.report_constructor_params
596
+ and field_name in model.report_constructor_params['extra']
634
597
  ):
635
598
  column_field = get_field(model, field_name)
636
599
  else:
637
- raise FieldDoesNotExist(
638
- '{}.{}'.format(model.__name__, field_name)
639
- )
600
+ raise FieldDoesNotExist('{}.{}'.format(model.__name__, field_name))
640
601
 
641
602
  return column_field, model
642
603
 
@@ -695,18 +656,14 @@ class ModelDataSourceDescriptor(_ModelDataSourceInfo):
695
656
  # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
696
657
  # Поиск поля в модели.
697
658
 
698
- column_field, model = self._get_model_field_by_name(
699
- model, level_name
700
- )
659
+ column_field, model = self._get_model_field_by_name(model, level_name)
701
660
  # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
702
661
  # Создание дескриптора столбца, если его нет в кэше.
703
662
 
704
663
  if full_accessor_name in self.column_descriptors_cache:
705
664
  result = self.column_descriptors_cache[full_accessor_name]
706
665
  else:
707
- result = ColumnDescriptor(
708
- self, result, column_field, len(level_names) - 1
709
- )
666
+ result = ColumnDescriptor(self, result, column_field, len(level_names) - 1)
710
667
  self.column_descriptors_cache[full_accessor_name] = result
711
668
  # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
712
669
 
@@ -732,17 +689,13 @@ class ModelDataSourceDescriptor(_ModelDataSourceInfo):
732
689
  result = self.column_descriptors_cache[full_accessor_name]
733
690
 
734
691
  if not model:
735
- return ColumnDescriptor(
736
- self, result, FakeField(column_name), len(level_names) - 1
737
- )
692
+ return ColumnDescriptor(self, result, FakeField(column_name), len(level_names) - 1)
738
693
  # Создание дескриптора столбца, если его нет в кэше.
739
694
 
740
695
  if full_accessor_name in self.column_descriptors_cache:
741
696
  result = self.column_descriptors_cache[full_accessor_name]
742
697
  else:
743
- result = ColumnDescriptor(
744
- self, result, FakeField(column_name), len(level_names) - 1
745
- )
698
+ result = ColumnDescriptor(self, result, FakeField(column_name), len(level_names) - 1)
746
699
  self.column_descriptors_cache[full_accessor_name] = result
747
700
  # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
748
701