educommon 3.18.0__py3-none-any.whl → 3.19.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.
@@ -10,6 +10,9 @@ from django.core.management.base import (
10
10
  from django.db import (
11
11
  connection,
12
12
  )
13
+ from psycopg2.extras import (
14
+ Json,
15
+ )
13
16
 
14
17
  from educommon.audit_log.constants import (
15
18
  INSTALL_AUDIT_LOG_SQL_FILE_NAME,
@@ -19,6 +22,7 @@ from educommon.audit_log.constants import (
19
22
  from educommon.audit_log.utils import (
20
23
  clear_audit_logs,
21
24
  configure,
25
+ get_auto_now_fields_by_model,
22
26
  get_db_connection_params,
23
27
  )
24
28
 
@@ -69,6 +73,7 @@ class Command(BaseCommand):
69
73
  """Подготовка SQL-кода."""
70
74
  params = get_db_connection_params()
71
75
  params['lock_id'] = PG_LOCK_ID
76
+ params['auto_now_fields'] = Json(get_auto_now_fields_by_model())
72
77
 
73
78
  self.stdout.write('preparing SQL-code..\n')
74
79
 
@@ -188,6 +188,8 @@ DECLARE
188
188
  operation_code INTEGER;
189
189
  len INTEGER;
190
190
  text_error TEXT;
191
+ auto_now_field_names TEXT[];
192
+ all_changed_have_auto_now BOOLEAN;
191
193
  BEGIN
192
194
  operation_code := 0;
193
195
  user_id := audit.get_param('audit_log.user_id');
@@ -202,8 +204,10 @@ BEGIN
202
204
  data := hstore(OLD);
203
205
  changes := hstore(NEW) - hstore(OLD);
204
206
  len := array_length(akeys(changes),1);
205
- -- Если изменений нет, не логируем
206
- IF len IS NOT NULL OR len = 0 THEN
207
+ auto_now_field_names := ARRAY(SELECT jsonb_array_elements_text({auto_now_fields}::jsonb -> TG_TABLE_NAME::TEXT));
208
+ all_changed_have_auto_now := auto_now_field_names @> akeys(changes);
209
+ -- Если изменений нет или изменения, только в автообновляемых полях, то не логируем.
210
+ IF (len IS NOT NULL OR len = 0) AND NOT all_changed_have_auto_now THEN
207
211
  result_value := NEW;
208
212
  operation_code := 2;
209
213
  END IF;
@@ -469,3 +469,27 @@ def get_audit_log_context(request):
469
469
  result['ip'] = get_ip(request)
470
470
 
471
471
  return result
472
+
473
+
474
+ def get_auto_now_fields_by_model() -> dict[str, list[str]]:
475
+ """Возвращает словарь с полями, имеющими auto_now=True, для моделей с флагом need_to_log = True.
476
+
477
+ Returns:
478
+ Словарь, где ключ это название таблицы, а значение это список названий полей имеющими auto_now=True.
479
+ """
480
+ auto_now_fields = {}
481
+
482
+ for model in apps.get_models():
483
+ if not getattr(model, 'need_to_log', False):
484
+ continue
485
+
486
+ auto_now_field_names = [
487
+ field.name
488
+ for field in model._meta.get_fields()
489
+ if getattr(field, 'auto_now', False)
490
+ ]
491
+
492
+ if auto_now_field_names:
493
+ auto_now_fields[model._meta.db_table] = auto_now_field_names
494
+
495
+ return auto_now_fields
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: educommon
3
- Version: 3.18.0
3
+ Version: 3.19.0
4
4
  Summary: Общая кодовая база для проектов БЦ Образование
5
5
  Author-email: BARS Group <education_dev@bars-open.ru>
6
6
  Project-URL: Homepage, https://stash.bars-open.ru/projects/EDUBASE/repos/educommon/browse
@@ -58,7 +58,7 @@ educommon/audit_log/error_log/actions.py,sha256=-KSy3RrBsbPWCML-gl5Hl5UGQdEsPZho
58
58
  educommon/audit_log/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
59
  educommon/audit_log/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
60
  educommon/audit_log/management/commands/audit_log_migrate_data.py,sha256=J_ZIpamGVBcotc-6cYsz37AJADEEyuiUs-VVyKON47o,12695
61
- educommon/audit_log/management/commands/reinstall_audit_log.py,sha256=HHpUeQwG_SuSsaxwZIq66piNhip_GHHQmAzpEzOFgaM,3573
61
+ educommon/audit_log/management/commands/reinstall_audit_log.py,sha256=xr56lxpMtxR-KB3lKOmqYVmJ0aUOqzYSeod_6XYQmjc,3722
62
62
  educommon/audit_log/migrations/0001_initial.py,sha256=HDhvBNyVSx_NlFmyA-t_ooFo_TiKf0UHNCZp1GOpLA8,6115
63
63
  educommon/audit_log/migrations/0002_install_audit_log.py,sha256=kAhtd1Xz8b6g33wmxBQyRBJIl-LGJdOc7yFy5yhoRJ8,2825
64
64
  educommon/audit_log/migrations/0003_logproxy.py,sha256=fx6nCoDtr3bZTtlwiOKP4QTVPxnnqyYDPMAT20Bv4n8,391
@@ -71,8 +71,8 @@ educommon/audit_log/migrations/0009_reinstall_audit_log.py,sha256=c95H2yamWyrCoG
71
71
  educommon/audit_log/migrations/0010_alter_auditlog_time.py,sha256=XmujmdgNADMy4OhL4O7CIK6KDKtW2sSyfxLYWEGmtvI,509
72
72
  educommon/audit_log/migrations/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
73
73
  educommon/audit_log/sql/configure_audit_log.sql,sha256=M3QxNKTZbn-uNRxGDvNxE9iJh1EOQUTIho7rvc3yhlY,1511
74
- educommon/audit_log/sql/install_audit_log.sql,sha256=SHrZ7WaYxawUKQEpZnj9k4HTU25NvBlxX_POqZ95HU0,14107
75
- educommon/audit_log/utils/__init__.py,sha256=14BHRbKdnvHNgomM-R__GqLk1N32ww_GN2xy81Ph_gs,16388
74
+ educommon/audit_log/sql/install_audit_log.sql,sha256=EhyhGMYn8aYCGEBNC2AC7kuG5vfJiAPxhwTMq_2NADE,14505
75
+ educommon/audit_log/utils/__init__.py,sha256=FKktT7EeO3M1wqYYSnsgEQ6pSyY4OEzSAXP87ZitI5Q,17239
76
76
  educommon/audit_log/utils/operations.py,sha256=skxL7wE4Jx1XlNdPx-Pl3SfiZ1G9jBmcZrXKSQDUGzw,2555
77
77
  educommon/auth/__init__.py,sha256=xkGJgqQ5QaEU86n6tJV77ux-2bMTAKbjpVYBCDhcS0E,79
78
78
  educommon/auth/rbac/__init__.py,sha256=guO7sOX6e1Z-dqptsqXjbnMdgbSdKp2suDKJa5_pdVU,317
@@ -351,7 +351,7 @@ educommon/ws_log/smev/exceptions.py,sha256=VNfzNHlj5Pz8D4979d_msTkxC-RQVoMctsgoJ
351
351
  educommon/ws_log/templates/report/smev_logs.xlsx,sha256=nnYgB0Z_ix8HoxsRICjsZfFRQBdra-5Gd8nWhCxTjYg,10439
352
352
  educommon/ws_log/templates/ui-js/smev-logs-list-window.js,sha256=AGup3D8GTJSY9WdDPj0zBJeYQBFOmGgcbxPOJbKK-nY,513
353
353
  educommon/ws_log/templates/ui-js/smev-logs-report-setting-window.js,sha256=nQ7QYK9frJcE7g7kIt6INg9TlEEJAPPayBJgRaoTePA,1103
354
- educommon-3.18.0.dist-info/METADATA,sha256=cKDmyFTkng12PZ-N2rVp62H3esRyCz9mHRLwenDTlLU,2380
355
- educommon-3.18.0.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
356
- educommon-3.18.0.dist-info/top_level.txt,sha256=z5fbW7bz_0V1foUm_FGcZ9_MTpW3N1dBN7-kEmMowl4,10
357
- educommon-3.18.0.dist-info/RECORD,,
354
+ educommon-3.19.0.dist-info/METADATA,sha256=_ChBeTRUC-DgORKbvRH2P7UA97Njq3NPizgdO4PUygo,2380
355
+ educommon-3.19.0.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
356
+ educommon-3.19.0.dist-info/top_level.txt,sha256=z5fbW7bz_0V1foUm_FGcZ9_MTpW3N1dBN7-kEmMowl4,10
357
+ educommon-3.19.0.dist-info/RECORD,,