educommon 3.19.1__tar.gz → 3.20.0__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 (384) hide show
  1. {educommon-3.19.1 → educommon-3.20.0}/CHANGELOG.md +10 -0
  2. {educommon-3.19.1 → educommon-3.20.0}/PKG-INFO +1 -1
  3. educommon-3.20.0/src/educommon/audit_log/management/commands/removing_false_logs.py +162 -0
  4. educommon-3.20.0/src/educommon/audit_log/sql/new_audit_log_removing_false_logs.sql +25 -0
  5. educommon-3.20.0/src/educommon/audit_log/sql/old_audit_log_removing_false_logs.sql +78 -0
  6. {educommon-3.19.1 → educommon-3.20.0}/src/educommon.egg-info/PKG-INFO +1 -1
  7. {educommon-3.19.1 → educommon-3.20.0}/src/educommon.egg-info/SOURCES.txt +3 -0
  8. {educommon-3.19.1 → educommon-3.20.0}/CONDUCT.md +0 -0
  9. {educommon-3.19.1 → educommon-3.20.0}/CONTRIBUTING.md +0 -0
  10. {educommon-3.19.1 → educommon-3.20.0}/MANIFEST.in +0 -0
  11. {educommon-3.19.1 → educommon-3.20.0}/README.md +0 -0
  12. {educommon-3.19.1 → educommon-3.20.0}/pyproject.toml +0 -0
  13. {educommon-3.19.1 → educommon-3.20.0}/setup.cfg +0 -0
  14. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/__init__.py +0 -0
  15. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/about/README.rst +0 -0
  16. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/about/__init__.py +0 -0
  17. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/about/apps.py +0 -0
  18. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/about/static/edu_about/barsgroup.png +0 -0
  19. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/about/ui/__init__.py +0 -0
  20. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/about/ui/about-window.js +0 -0
  21. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/about/ui/actions.py +0 -0
  22. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/about/ui/common-tab.html +0 -0
  23. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/about/ui/packages-tab.js +0 -0
  24. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/about/ui/postgresql-extensions-tab.js +0 -0
  25. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/about/ui/ui.py +0 -0
  26. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/about/utils.py +0 -0
  27. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_task/__init__.py +0 -0
  28. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_task/actions.py +0 -0
  29. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_task/apps.py +0 -0
  30. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_task/consts.py +0 -0
  31. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_task/exceptions.py +0 -0
  32. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_task/helpers.py +0 -0
  33. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_task/locker.py +0 -0
  34. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_task/migrations/0001_initial.py +0 -0
  35. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_task/migrations/0002_task_type_and_status_data.py +0 -0
  36. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_task/migrations/0003_alter_runningtask_options.py +0 -0
  37. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_task/migrations/__init__.py +0 -0
  38. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_task/models.py +0 -0
  39. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_task/tasks.py +0 -0
  40. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_task/templates/ui-js/async-task-list-win.js +0 -0
  41. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_task/templates/ui-js/async-task-revoke.js +0 -0
  42. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_task/templates/ui-js/async-task-view-win.js +0 -0
  43. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_task/ui.py +0 -0
  44. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_tasks/__init__.py +0 -0
  45. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_tasks/apps.py +0 -0
  46. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_tasks/exceptions.py +0 -0
  47. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_tasks/fixtures/initial_data.json +0 -0
  48. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_tasks/locks.py +0 -0
  49. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_tasks/migrations/0001_initial.py +0 -0
  50. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_tasks/migrations/0002_load_initial_data.py +0 -0
  51. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_tasks/migrations/__init__.py +0 -0
  52. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_tasks/models.py +0 -0
  53. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_tasks/statuses.py +0 -0
  54. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/async_tasks/tasks.py +0 -0
  55. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/README.rst +0 -0
  56. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/__init__.py +0 -0
  57. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/actions.py +0 -0
  58. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/app_meta.py +0 -0
  59. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/apps.py +0 -0
  60. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/constants.py +0 -0
  61. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/error_log/__init__.py +0 -0
  62. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/error_log/actions.py +0 -0
  63. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/helpers.py +0 -0
  64. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/management/__init__.py +0 -0
  65. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/management/commands/__init__.py +0 -0
  66. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/management/commands/audit_log_migrate_data.py +0 -0
  67. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/management/commands/reinstall_audit_log.py +0 -0
  68. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/middleware.py +0 -0
  69. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/migrations/0001_initial.py +0 -0
  70. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/migrations/0002_install_audit_log.py +0 -0
  71. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/migrations/0003_logproxy.py +0 -0
  72. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/migrations/0004_reinstall_audit_log.py +0 -0
  73. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/migrations/0005_postgresql_error.py +0 -0
  74. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/migrations/0006_auto_20200806_1707.py +0 -0
  75. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/migrations/0007_create_selective_tables_function.py +0 -0
  76. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/migrations/0008_table_logged.py +0 -0
  77. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/migrations/0009_reinstall_audit_log.py +0 -0
  78. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/migrations/0010_alter_auditlog_time.py +0 -0
  79. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/migrations/__init__.py +0 -0
  80. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/models.py +0 -0
  81. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/permissions.py +0 -0
  82. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/proxies.py +0 -0
  83. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/routers.py +0 -0
  84. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/sql/configure_audit_log.sql +0 -0
  85. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/sql/install_audit_log.sql +0 -0
  86. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/ui.py +0 -0
  87. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/utils/__init__.py +0 -0
  88. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/audit_log/utils/operations.py +0 -0
  89. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/__init__.py +0 -0
  90. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/__init__.py +0 -0
  91. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/actions.py +0 -0
  92. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/app_meta.py +0 -0
  93. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/backends/__init__.py +0 -0
  94. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/backends/base.py +0 -0
  95. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/backends/caching.py +0 -0
  96. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/backends/simple.py +0 -0
  97. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/checker.py +0 -0
  98. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/config.py +0 -0
  99. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/constants.py +0 -0
  100. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/management/__init__.py +0 -0
  101. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/management/commands/__init__.py +0 -0
  102. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/management/commands/rbac.py +0 -0
  103. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/manager.py +0 -0
  104. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/migrations/0001_initial.py +0 -0
  105. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/migrations/0002_model_modifier_metaclass_fix.py +0 -0
  106. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/migrations/0003_permission_hidden.py +0 -0
  107. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/migrations/0004_auto_20171024_1245.py +0 -0
  108. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/migrations/__init__.py +0 -0
  109. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/models.py +0 -0
  110. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/permissions.py +0 -0
  111. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/templates/rbac/role-add-window.js +0 -0
  112. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/templates/rbac/role-edit-window.js +0 -0
  113. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/templates/rbac/roles-list-window.js +0 -0
  114. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/templates/rbac/roles-view-list-window.js +0 -0
  115. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/ui.py +0 -0
  116. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/utils.py +0 -0
  117. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/rbac/validators.py +0 -0
  118. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/simple_auth/__init__.py +0 -0
  119. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/simple_auth/actions.py +0 -0
  120. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/simple_auth/app_meta.py +0 -0
  121. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/simple_auth/checkers.py +0 -0
  122. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/simple_auth/const.py +0 -0
  123. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/simple_auth/migrations/0001_initial.py +0 -0
  124. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/simple_auth/migrations/__init__.py +0 -0
  125. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/simple_auth/models.py +0 -0
  126. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/simple_auth/static/simple_auth/simple_auth.css +0 -0
  127. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/simple_auth/templates/simple_auth/change_reset_password_page.html +0 -0
  128. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/simple_auth/templates/simple_auth/email/reset_password.html +0 -0
  129. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/simple_auth/templates/simple_auth/login_page.html +0 -0
  130. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/simple_auth/templates/simple_auth/reset_password_page.html +0 -0
  131. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/simple_auth/ui.py +0 -0
  132. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/auth/simple_auth/validators.py +0 -0
  133. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/contingent/__init__.py +0 -0
  134. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/contingent/actions.py +0 -0
  135. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/contingent/app_meta.py +0 -0
  136. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/contingent/base.py +0 -0
  137. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/contingent/catalogs.py +0 -0
  138. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/contingent/contingent_plugin/__init__.py +0 -0
  139. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/contingent/contingent_plugin/actions.py +0 -0
  140. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/contingent/contingent_plugin/apps.py +0 -0
  141. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/contingent/contingent_plugin/migrations/0001_initial.py +0 -0
  142. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/contingent/contingent_plugin/migrations/0002_add_contingent_model_deleted.py +0 -0
  143. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/contingent/contingent_plugin/migrations/__init__.py +0 -0
  144. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/contingent/contingent_plugin/model_views.py +0 -0
  145. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/contingent/contingent_plugin/models.py +0 -0
  146. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/contingent/contingent_plugin/observer.py +0 -0
  147. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/contingent/contingent_plugin/plugin_meta.py +0 -0
  148. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/contingent/contingent_plugin/storage.py +0 -0
  149. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/contingent/contingent_plugin/utils.py +0 -0
  150. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/contingent/json_data/icao.json +0 -0
  151. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/contingent/json_data/okogu.json +0 -0
  152. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/contingent/json_data/oksm.json +0 -0
  153. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/__init__.py +0 -0
  154. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/__init__.py +0 -0
  155. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/fields.py +0 -0
  156. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/migration/__init__.py +0 -0
  157. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/migration/operations.py +0 -0
  158. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/mixins/__init__.py +0 -0
  159. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/mixins/date_interval.py +0 -0
  160. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/mixins/validation.py +0 -0
  161. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/model_view/__init__.py +0 -0
  162. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/model_view/table-view.html +0 -0
  163. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/models.py +0 -0
  164. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/observer.py +0 -0
  165. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/partitioning/README.md +0 -0
  166. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/partitioning/__init__.py +0 -0
  167. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/partitioning/const.py +0 -0
  168. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/partitioning/management/__init__.py +0 -0
  169. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/partitioning/management/commands/__init__.py +0 -0
  170. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/partitioning/management/commands/apply_partitioning.py +0 -0
  171. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/partitioning/management/commands/clear_table.py +0 -0
  172. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/partitioning/management/commands/split_table.py +0 -0
  173. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/partitioning/partitioning.sql +0 -0
  174. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/partitioning/partitioning_set_search_path.sql +0 -0
  175. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/partitioning/triggers.sql +0 -0
  176. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/routers.py +0 -0
  177. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/signals.py +0 -0
  178. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/utils.py +0 -0
  179. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/validators/__init__.py +0 -0
  180. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/db/validators/simple.py +0 -0
  181. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/storages/__init__.py +0 -0
  182. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/storages/atcfs/README.rst +0 -0
  183. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/storages/atcfs/__init__.py +0 -0
  184. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/storages/atcfs/api.py +0 -0
  185. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/storages/atcfs/app_meta.py +0 -0
  186. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/storages/atcfs/exceptions.py +0 -0
  187. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/storages/atcfs/management/__init__.py +0 -0
  188. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/storages/atcfs/management/commands/__init__.py +0 -0
  189. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/storages/atcfs/management/commands/atcfs_migrate.py +0 -0
  190. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/storages/atcfs/models.py +0 -0
  191. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/storages/atcfs/monkey_patching.py +0 -0
  192. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/storages/atcfs/settings.py +0 -0
  193. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/storages/atcfs/storage.py +0 -0
  194. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/django/storages/atcfs/templates/atcfs_unavailable.html +0 -0
  195. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/extjs/__init__.py +0 -0
  196. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/extjs/fields/__init__.py +0 -0
  197. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/extjs/fields/input_params.py +0 -0
  198. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/importer/XLSReader.py +0 -0
  199. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/importer/__init__.py +0 -0
  200. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/importer/api.py +0 -0
  201. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/importer/constants.py +0 -0
  202. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/importer/loggers.py +0 -0
  203. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/importer/proxy.py +0 -0
  204. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/importer/proxy_import.py +0 -0
  205. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/importer/refactoring-notes.txt +0 -0
  206. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/importer/report.py +0 -0
  207. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/importer/test_file.xls +0 -0
  208. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/importer/ui.py +0 -0
  209. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/importer/validators.py +0 -0
  210. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/integration_entities/README.rst +0 -0
  211. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/integration_entities/__init__.py +0 -0
  212. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/integration_entities/consts.py +0 -0
  213. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/integration_entities/entities.py +0 -0
  214. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/integration_entities/enums.py +0 -0
  215. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/integration_entities/helpers.py +0 -0
  216. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/integration_entities/mixins.py +0 -0
  217. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ioc/__init__.py +0 -0
  218. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/logger/__init__.py +0 -0
  219. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/logger/app_settings.py +0 -0
  220. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/logger/apps.py +0 -0
  221. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/logger/consts.py +0 -0
  222. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/logger/formatters.py +0 -0
  223. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/logger/helpers.py +0 -0
  224. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/logger/loggers.py +0 -0
  225. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/logger/records.py +0 -0
  226. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/m3/__init__.py +0 -0
  227. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/m3/extensions/__init__.py +0 -0
  228. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/m3/extensions/listeners/__init__.py +0 -0
  229. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/m3/extensions/listeners/delete_check/__init__.py +0 -0
  230. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/m3/extensions/listeners/delete_check/cancel-confirm-window.js +0 -0
  231. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/m3/extensions/listeners/delete_check/listeners.py +0 -0
  232. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/m3/extensions/listeners/delete_check/mixins.py +0 -0
  233. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/m3/extensions/listeners/delete_check/related-objects-window.html +0 -0
  234. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/m3/extensions/listeners/delete_check/signals.py +0 -0
  235. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/m3/extensions/listeners/delete_check/ui.py +0 -0
  236. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/m3/extensions/listeners/delete_check/utils.py +0 -0
  237. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/m3/extensions/ui.py +0 -0
  238. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/m3/transaction_context.py +0 -0
  239. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/objectpack/__init__.py +0 -0
  240. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/objectpack/actions.py +0 -0
  241. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/objectpack/apps.py +0 -0
  242. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/objectpack/filters.py +0 -0
  243. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/objectpack/templates/base-grid-window.js +0 -0
  244. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/objectpack/templates/filter-panel.js +0 -0
  245. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/objectpack/templates/grid-panel.js +0 -0
  246. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/objectpack/templates/multiSelectWindow.js +0 -0
  247. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/objectpack/templates/multiselect-page-fix.js +0 -0
  248. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/objectpack/templates/relations-check-mixin-template.html +0 -0
  249. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/objectpack/ui.py +0 -0
  250. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/__init__.py +0 -0
  251. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/actions.py +0 -0
  252. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/README.rst +0 -0
  253. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/__init__.py +0 -0
  254. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/app_meta.py +0 -0
  255. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/apps.py +0 -0
  256. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/base.py +0 -0
  257. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/builders/__init__.py +0 -0
  258. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/builders/excel/__init__.py +0 -0
  259. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/builders/excel/_base.py +0 -0
  260. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/builders/excel/_header.py +0 -0
  261. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/builders/excel/constants.py +0 -0
  262. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/builders/excel/product.py +0 -0
  263. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/builders/excel/with_merged_cells.py +0 -0
  264. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/config.py +0 -0
  265. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/constants.py +0 -0
  266. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/editor/__init__.py +0 -0
  267. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/editor/actions.py +0 -0
  268. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/editor/edit-window.js +0 -0
  269. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/editor/list-window.js +0 -0
  270. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/editor/ui.py +0 -0
  271. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/exceptions.py +0 -0
  272. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/migrations/0001_initial.py +0 -0
  273. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/migrations/0002_report_filters.py +0 -0
  274. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/migrations/0003_reportfilter_exclude.py +0 -0
  275. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/migrations/0004_reportfilter_fields.py +0 -0
  276. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/migrations/0005_reportcolumn_visible.py +0 -0
  277. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/migrations/0006_reportsorting.py +0 -0
  278. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/migrations/0007_include_available_units.py +0 -0
  279. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/migrations/0008_auto_20170407_1318.py +0 -0
  280. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/migrations/0009_auto_20180405_0642.py +0 -0
  281. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/migrations/0010_add_aggregate_fields.py +0 -0
  282. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/migrations/__init__.py +0 -0
  283. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/mixins.py +0 -0
  284. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/models.py +0 -0
  285. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/plugin_meta.py +0 -0
  286. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/registries.py +0 -0
  287. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/utils.py +0 -0
  288. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/constructor/validators.py +0 -0
  289. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/reporter.py +0 -0
  290. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/report/utils.py +0 -0
  291. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/rest/__init__.py +0 -0
  292. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/rest/actions.py +0 -0
  293. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/rest/context.py +0 -0
  294. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/rest/controllers.py +0 -0
  295. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/rest/misc.py +0 -0
  296. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/rest/mixins.py +0 -0
  297. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/secure_media/README.rst +0 -0
  298. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/secure_media/__init__.py +0 -0
  299. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/secure_media/app_meta.py +0 -0
  300. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/thread_data.py +0 -0
  301. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/__init__.py +0 -0
  302. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/caching.py +0 -0
  303. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/conversion.py +0 -0
  304. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/crypto.py +0 -0
  305. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/date.py +0 -0
  306. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/db/__init__.py +0 -0
  307. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/db/postgresql.py +0 -0
  308. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/enums.py +0 -0
  309. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/fonts/Arial.ttf +0 -0
  310. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/fonts/Calibri.ttf +0 -0
  311. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/fonts/Tahoma.ttf +0 -0
  312. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/fonts/__init__.py +0 -0
  313. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/licence/__init__.py +0 -0
  314. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/licence/converters.py +0 -0
  315. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/misc.py +0 -0
  316. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/object_grid.py +0 -0
  317. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/phone_number/__init__.py +0 -0
  318. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/phone_number/enums.py +0 -0
  319. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/phone_number/modelfields.py +0 -0
  320. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/phone_number/phone_number.py +0 -0
  321. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/phone_number/validators.py +0 -0
  322. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/plugins.py +0 -0
  323. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/registry.py +0 -0
  324. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/seqtools.py +0 -0
  325. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/serializer.py +0 -0
  326. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/storage.py +0 -0
  327. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/system.py +0 -0
  328. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/system_app/__init__.py +0 -0
  329. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/system_app/management/__init__.py +0 -0
  330. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/system_app/management/commands/__init__.py +0 -0
  331. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/system_app/management/commands/delete_objects.py +0 -0
  332. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/system_app/templatetags/__init__.py +0 -0
  333. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/system_app/templatetags/educommon.py +0 -0
  334. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/ui.py +0 -0
  335. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/xml/__init__.py +0 -0
  336. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/xml/catalog.json +0 -0
  337. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/xml/resolver.py +0 -0
  338. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/xml/saml-schema-assertion-2.0.xsd +0 -0
  339. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/xml/saml-schema-protocol-2.0.xsd +0 -0
  340. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/xml/xenc-schema.xsd +0 -0
  341. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/utils/xml/xmldsig-core-schema.xsd +0 -0
  342. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/README.rst +0 -0
  343. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/__init__.py +0 -0
  344. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/actions.py +0 -0
  345. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/app_meta.py +0 -0
  346. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/base.py +0 -0
  347. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/migrations/0001_initial.py +0 -0
  348. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/migrations/0002_auto_20160628_1334.py +0 -0
  349. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/migrations/0003_add_fields_to_smev_logs.py +0 -0
  350. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/migrations/0004_auto_20160727_1600.py +0 -0
  351. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/migrations/0005_auto_20161130_1615.py +0 -0
  352. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/migrations/0006_auto_20170327_1027.py +0 -0
  353. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/migrations/0007_auto_20180607_1040.py +0 -0
  354. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/migrations/0008_auto_20180713_1445.py +0 -0
  355. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/migrations/0009_auto_20201130_1553.py +0 -0
  356. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/migrations/__init__.py +0 -0
  357. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/models.py +0 -0
  358. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/provider.py +0 -0
  359. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/report.py +0 -0
  360. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/smev/__init__.py +0 -0
  361. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/smev/applications.py +0 -0
  362. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/smev/exceptions.py +0 -0
  363. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/templates/report/smev_logs.xlsx +0 -0
  364. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/templates/ui-js/smev-logs-list-window.js +0 -0
  365. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/templates/ui-js/smev-logs-report-setting-window.js +0 -0
  366. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/ui.py +0 -0
  367. {educommon-3.19.1 → educommon-3.20.0}/src/educommon/ws_log/utils.py +0 -0
  368. {educommon-3.19.1 → educommon-3.20.0}/src/educommon.egg-info/dependency_links.txt +0 -0
  369. {educommon-3.19.1 → educommon-3.20.0}/src/educommon.egg-info/requires.txt +0 -0
  370. {educommon-3.19.1 → educommon-3.20.0}/src/educommon.egg-info/top_level.txt +0 -0
  371. {educommon-3.19.1 → educommon-3.20.0}/tests/test_contingent_plugin_utils.py +0 -0
  372. {educommon-3.19.1 → educommon-3.20.0}/tests/test_dates_splitter.py +0 -0
  373. {educommon-3.19.1 → educommon-3.20.0}/tests/test_delete_check.py +0 -0
  374. {educommon-3.19.1 → educommon-3.20.0}/tests/test_delete_objects.py +0 -0
  375. {educommon-3.19.1 → educommon-3.20.0}/tests/test_django_db_utils.py +0 -0
  376. {educommon-3.19.1 → educommon-3.20.0}/tests/test_interval_mixins.py +0 -0
  377. {educommon-3.19.1 → educommon-3.20.0}/tests/test_personal_data_fields.py +0 -0
  378. {educommon-3.19.1 → educommon-3.20.0}/tests/test_phone_number.py +0 -0
  379. {educommon-3.19.1 → educommon-3.20.0}/tests/test_report.py +0 -0
  380. {educommon-3.19.1 → educommon-3.20.0}/tests/test_service_db_router.py +0 -0
  381. {educommon-3.19.1 → educommon-3.20.0}/tests/test_utils.py +0 -0
  382. {educommon-3.19.1 → educommon-3.20.0}/tests/test_utils_plugins.py +0 -0
  383. {educommon-3.19.1 → educommon-3.20.0}/tests/test_validators.py +0 -0
  384. {educommon-3.19.1 → educommon-3.20.0}/tests/tests_rbac.py +0 -0
@@ -28,6 +28,16 @@
28
28
  ### Удалено
29
29
 
30
30
 
31
+ # [3.20.0] - 2025-06-23
32
+
33
+ Добавлена manage-команда удаления ложных логов в таблицах audit_log_auditlog и state_log_all.
34
+
35
+ ### Добавлено
36
+
37
+ - [EDUDEVOPS-90](https://jira.bars.group/browse/EDUDEVOPS-90)
38
+ MINOR Добавлена manage-команда удаления ложных логов в таблицах audit_log_auditlog и state_log_all.
39
+
40
+
31
41
  ## [3.19.1] - 2025-06-20
32
42
 
33
43
  Добавлен базовый класс для внутренних справочников `NamedIntEnum`.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: educommon
3
- Version: 3.19.1
3
+ Version: 3.20.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
@@ -0,0 +1,162 @@
1
+ """
2
+ Команда удаления ложных логов в таблицах audit_log_auditlog и state_log_all.
3
+ """
4
+ import codecs
5
+ import os
6
+
7
+ import psycopg2
8
+ from django.apps import (
9
+ apps,
10
+ )
11
+ from django.core.management.base import (
12
+ BaseCommand,
13
+ )
14
+ from django.utils.functional import (
15
+ cached_property,
16
+ )
17
+
18
+ from psycopg2.extras import (
19
+ Json,
20
+ )
21
+
22
+ from educommon.audit_log.constants import (
23
+ SQL_FILES_DIR,
24
+ )
25
+ from educommon.audit_log.utils import (
26
+ get_db_connection_params,
27
+ get_auto_now_fields_by_model,
28
+ )
29
+
30
+
31
+ NEW_AUDIT_LOG_REMOVING_FALSE_LOGS_SQL_FILE_NAME = 'new_audit_log_removing_false_logs.sql'
32
+ OLD_AUDIT_LOG_REMOVING_FALSE_LOGS_SQL_FILE_NAME = 'old_audit_log_removing_false_logs.sql'
33
+ NEW_AUDIT_LOG_TABLE_NAME = 'audit_log_auditlog'
34
+ OLD_AUDIT_LOG_TABLE_NAME = 'state_log_all'
35
+
36
+
37
+ class Command(BaseCommand):
38
+ """Команда удаления ложных логов в таблицах audit_log_auditlog и state_log_all."""
39
+
40
+ help = 'Команда удаления ложных логов в таблицах audit_log_auditlog и state_log_all..'
41
+
42
+ @cached_property
43
+ def auto_now_fields_new_audit_log(self) -> dict[str, list[str]]:
44
+ """Возвращает словарь с полями, имеющими auto_now=True, для моделей с флагом need_to_log = True.
45
+
46
+ Returns:
47
+ Словарь, где ключ это название таблицы, а значение это список названий полей имеющими auto_now=True.
48
+ """
49
+
50
+ return get_auto_now_fields_by_model()
51
+
52
+ @cached_property
53
+ def auto_now_fields_old_audit_log(self) -> dict[str, list[str]]:
54
+ """Возвращает словарь с полями, имеющими auto_now=True, для моделей с флагом need_to_log = True.
55
+
56
+ Returns:
57
+ Словарь, где ключ это название модели, а значение это список названий полей имеющими auto_now=True.
58
+ """
59
+
60
+ return {
61
+ model.__name__: fields
62
+ for model in apps.get_models()
63
+ if (fields := self.auto_now_fields_new_audit_log.get(model._meta.db_table))
64
+ }
65
+
66
+ def _check_exists_table(self, cursor, table_name: str) -> bool:
67
+ """Запуск SQL-скрипта для проверки существования таблицы.
68
+
69
+ Args:
70
+ cursor: Объект-курсор для работы с базой данных.
71
+ table_name: Название таблицы БД.
72
+
73
+ Returns:
74
+ Флаг существования таблицы.
75
+ """
76
+ exists_table = """
77
+ SELECT 1
78
+ FROM INFORMATION_SCHEMA.TABLES
79
+ WHERE TABLE_SCHEMA = 'public' AND TABLE_NAME = '{table_name}';
80
+ """.format(table_name=table_name)
81
+
82
+ cursor.execute(exists_table)
83
+
84
+ return bool(cursor.fetchone())
85
+
86
+ def _delete_log(self, cursor, table_name: str, sql_file_name: str, auto_now_fields) -> None:
87
+ """Запуск SQL-скрипта по удалению ложных логов.
88
+
89
+ Args:
90
+ cursor: Объект-курсор для работы с базой данных.
91
+ table_name: Название таблицы БД.
92
+ sql_file_name: Название SQL файла.
93
+ auto_now_fields: Словарь с полями, имеющими auto_now=True, для моделей с флагом need_to_log = True.
94
+ """
95
+ if self._check_exists_table(cursor, table_name):
96
+ self.stdout.write(f'Удаление ложных записей в таблице {table_name}.')
97
+ cursor.execute(self._prepare_sql(sql_file_name, auto_now_fields, table_name))
98
+ self.stdout.write(self.style.SUCCESS(f'Успешно удалены ложные записи в таблице {table_name}.'))
99
+ else:
100
+ self.stdout.write(self.style.ERROR(f'Таблица {table_name} не найдена.'))
101
+
102
+ def _read_sql(self, sql_file_name: str) -> str:
103
+ """Чтение SQL-кода из файла.
104
+
105
+ Args:
106
+ sql_file_name: Название SQL файла.
107
+
108
+ Returns:
109
+ SQL-кода из файла.
110
+ """
111
+ sql_file_path = os.path.join(SQL_FILES_DIR, sql_file_name)
112
+
113
+ with codecs.open(sql_file_path, 'r', 'utf-8') as sql_file:
114
+ sql = sql_file.read()
115
+
116
+ self.stdout.write(f'Выполнение {sql_file_name}.')
117
+
118
+ return sql
119
+
120
+ def _prepare_sql(self, sql_file_name: str, auto_now_fields: dict[str, list[str]], table_name: str) -> str:
121
+ """Подготовка SQL-кода.
122
+
123
+ Args:
124
+ sql_file_name: Название SQL файла.
125
+ auto_now_fields: Словарь с полями, имеющими auto_now=True, для моделей с флагом need_to_log = True.
126
+ table_name: Название таблицы БД.
127
+
128
+ Returns:
129
+ SQL-кода из файла, с добавленными параметрами.
130
+ """
131
+ self.stdout.write(f'Подготовка SQL-кода для удаления ложных логов в таблице {table_name}.')
132
+
133
+ params = {
134
+ 'auto_now_fields': Json(auto_now_fields),
135
+ }
136
+
137
+ return self._read_sql(sql_file_name).format(**params)
138
+
139
+ def handle(self, *args, **options) -> None:
140
+ """Формирование SQL-кода и его исполнение."""
141
+ self.stdout.write('Начало работы команды.')
142
+
143
+ connection = psycopg2.connect(**get_db_connection_params())
144
+ cursor = connection.cursor()
145
+
146
+ # Удаление ложных записей в таблице audit_log_auditlog.
147
+ self._delete_log(
148
+ cursor=cursor,
149
+ table_name=NEW_AUDIT_LOG_TABLE_NAME,
150
+ sql_file_name=NEW_AUDIT_LOG_REMOVING_FALSE_LOGS_SQL_FILE_NAME,
151
+ auto_now_fields=self.auto_now_fields_new_audit_log,
152
+ )
153
+ # Удаление ложных записей в таблице state_log_all.
154
+ self._delete_log(
155
+ cursor=cursor,
156
+ table_name=OLD_AUDIT_LOG_TABLE_NAME,
157
+ sql_file_name=OLD_AUDIT_LOG_REMOVING_FALSE_LOGS_SQL_FILE_NAME,
158
+ auto_now_fields=self.auto_now_fields_old_audit_log,
159
+ )
160
+
161
+ connection.commit()
162
+ self.stdout.write(self.style.SUCCESS('Выполнение команды завершено.'))
@@ -0,0 +1,25 @@
1
+ DO $$
2
+ DECLARE
3
+ chunk_size INT := 1000;
4
+ deleted_count INT := 0;
5
+ BEGIN
6
+ LOOP
7
+ DELETE FROM audit_log_auditlog
8
+ WHERE id IN (
9
+ SELECT a.id
10
+ FROM audit_log_auditlog a
11
+ LEFT JOIN audit_log_table t ON a.table_id = t.id
12
+ WHERE EXISTS (
13
+ SELECT 1
14
+ FROM jsonb_each({auto_now_fields}) AS mapping(table_name, keys)
15
+ WHERE
16
+ t.name = mapping.table_name::text AND
17
+ akeys(a.changes) <@ ARRAY(SELECT jsonb_array_elements_text(mapping.keys))
18
+ )
19
+ LIMIT chunk_size
20
+ );
21
+
22
+ GET DIAGNOSTICS deleted_count = ROW_COUNT;
23
+ EXIT WHEN deleted_count = 0;
24
+ END LOOP;
25
+ END $$;
@@ -0,0 +1,78 @@
1
+ -- Функция нахождения разницы между двумя jsonb.
2
+ CREATE OR REPLACE FUNCTION jsonb_diff(val1 JSONB, val2 JSONB)
3
+ RETURNS JSONB AS $$
4
+ DECLARE
5
+ result JSONB;
6
+ BEGIN
7
+ SELECT jsonb_object_agg(
8
+ COALESCE(a.key, b.key),
9
+ COALESCE(b.value, a.value)
10
+ )
11
+ INTO result
12
+ FROM (
13
+ SELECT key, value FROM jsonb_each(val1)
14
+ ) a
15
+ FULL JOIN (
16
+ SELECT key, value FROM jsonb_each(val2)
17
+ ) b ON a.key = b.key
18
+ WHERE a.value IS DISTINCT FROM b.value
19
+ OR a.value IS NULL
20
+ OR b.value IS NULL;
21
+
22
+ RETURN result;
23
+ END;
24
+ $$ LANGUAGE plpgsql;
25
+
26
+ -- Функция проверки, что текстовое поле можно преобразовать в jsonb.
27
+ CREATE OR REPLACE FUNCTION is_valid_jsonb(input_text TEXT)
28
+ RETURNS BOOLEAN AS $$
29
+ BEGIN
30
+ PERFORM input_text::jsonb;
31
+ RETURN TRUE;
32
+ EXCEPTION
33
+ WHEN others THEN
34
+ RETURN FALSE;
35
+ END;
36
+ $$ LANGUAGE plpgsql IMMUTABLE;
37
+
38
+ DO $$
39
+ DECLARE
40
+ chunk_size INT := 1000;
41
+ deleted_count INT := 0;
42
+ BEGIN
43
+ LOOP
44
+ DELETE FROM state_log_all
45
+ WHERE id IN (
46
+ SELECT object_previous_and_current.id
47
+ FROM (
48
+ SELECT *,
49
+ LAG(object) OVER (
50
+ PARTITION BY model_id, model
51
+ ORDER BY date
52
+ ) AS previous_object
53
+ FROM state_log_all
54
+ ) AS object_previous_and_current
55
+ WHERE previous_object IS NOT NULL
56
+ AND EXISTS (
57
+ SELECT 1
58
+ FROM jsonb_each({auto_now_fields}) AS mapping(table_name, keys)
59
+ WHERE
60
+ is_valid_jsonb(previous_object) AND
61
+ is_valid_jsonb(object) AND
62
+ model = mapping.table_name::text AND
63
+ ARRAY(
64
+ SELECT jsonb_object_keys(
65
+ jsonb_diff(
66
+ COALESCE(previous_object::jsonb -> 0 -> 'fields', jsonb_build_object()),
67
+ COALESCE(object::jsonb -> 0 -> 'fields', jsonb_build_object())
68
+ )
69
+ )
70
+ ) <@ ARRAY(SELECT jsonb_array_elements_text(mapping.keys))
71
+ )
72
+ LIMIT chunk_size
73
+ );
74
+
75
+ GET DIAGNOSTICS deleted_count = ROW_COUNT;
76
+ EXIT WHEN deleted_count = 0;
77
+ END LOOP;
78
+ END $$;
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: educommon
3
- Version: 3.19.1
3
+ Version: 3.20.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
@@ -70,6 +70,7 @@ src/educommon/audit_log/management/__init__.py
70
70
  src/educommon/audit_log/management/commands/__init__.py
71
71
  src/educommon/audit_log/management/commands/audit_log_migrate_data.py
72
72
  src/educommon/audit_log/management/commands/reinstall_audit_log.py
73
+ src/educommon/audit_log/management/commands/removing_false_logs.py
73
74
  src/educommon/audit_log/migrations/0001_initial.py
74
75
  src/educommon/audit_log/migrations/0002_install_audit_log.py
75
76
  src/educommon/audit_log/migrations/0003_logproxy.py
@@ -83,6 +84,8 @@ src/educommon/audit_log/migrations/0010_alter_auditlog_time.py
83
84
  src/educommon/audit_log/migrations/__init__.py
84
85
  src/educommon/audit_log/sql/configure_audit_log.sql
85
86
  src/educommon/audit_log/sql/install_audit_log.sql
87
+ src/educommon/audit_log/sql/new_audit_log_removing_false_logs.sql
88
+ src/educommon/audit_log/sql/old_audit_log_removing_false_logs.sql
86
89
  src/educommon/audit_log/utils/__init__.py
87
90
  src/educommon/audit_log/utils/operations.py
88
91
  src/educommon/auth/__init__.py
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes