educommon 3.13.2__tar.gz → 3.14.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 (378) hide show
  1. {educommon-3.13.2 → educommon-3.14.0}/CHANGELOG.md +18 -0
  2. {educommon-3.13.2 → educommon-3.14.0}/PKG-INFO +1 -1
  3. educommon-3.14.0/src/educommon/audit_log/README.rst +64 -0
  4. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/actions.py +86 -58
  5. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/app_meta.py +0 -4
  6. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/proxies.py +22 -6
  7. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/ui.py +2 -8
  8. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/utils/__init__.py +1 -23
  9. {educommon-3.13.2 → educommon-3.14.0}/src/educommon.egg-info/PKG-INFO +1 -1
  10. {educommon-3.13.2 → educommon-3.14.0}/src/educommon.egg-info/SOURCES.txt +1 -0
  11. {educommon-3.13.2 → educommon-3.14.0}/CONDUCT.md +0 -0
  12. {educommon-3.13.2 → educommon-3.14.0}/CONTRIBUTING.md +0 -0
  13. {educommon-3.13.2 → educommon-3.14.0}/MANIFEST.in +0 -0
  14. {educommon-3.13.2 → educommon-3.14.0}/README.md +0 -0
  15. {educommon-3.13.2 → educommon-3.14.0}/pyproject.toml +0 -0
  16. {educommon-3.13.2 → educommon-3.14.0}/setup.cfg +0 -0
  17. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/__init__.py +0 -0
  18. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/about/README.rst +0 -0
  19. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/about/__init__.py +0 -0
  20. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/about/apps.py +0 -0
  21. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/about/static/edu_about/barsgroup.png +0 -0
  22. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/about/ui/__init__.py +0 -0
  23. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/about/ui/about-window.js +0 -0
  24. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/about/ui/actions.py +0 -0
  25. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/about/ui/common-tab.html +0 -0
  26. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/about/ui/packages-tab.js +0 -0
  27. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/about/ui/postgresql-extensions-tab.js +0 -0
  28. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/about/ui/ui.py +0 -0
  29. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/about/utils.py +0 -0
  30. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_task/__init__.py +0 -0
  31. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_task/actions.py +0 -0
  32. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_task/apps.py +0 -0
  33. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_task/consts.py +0 -0
  34. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_task/exceptions.py +0 -0
  35. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_task/helpers.py +0 -0
  36. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_task/locker.py +0 -0
  37. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_task/migrations/0001_initial.py +0 -0
  38. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_task/migrations/0002_task_type_and_status_data.py +0 -0
  39. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_task/migrations/0003_alter_runningtask_options.py +0 -0
  40. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_task/migrations/__init__.py +0 -0
  41. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_task/models.py +0 -0
  42. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_task/tasks.py +0 -0
  43. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_task/templates/ui-js/async-task-list-win.js +0 -0
  44. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_task/templates/ui-js/async-task-revoke.js +0 -0
  45. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_task/templates/ui-js/async-task-view-win.js +0 -0
  46. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_task/ui.py +0 -0
  47. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_tasks/__init__.py +0 -0
  48. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_tasks/apps.py +0 -0
  49. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_tasks/exceptions.py +0 -0
  50. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_tasks/fixtures/initial_data.json +0 -0
  51. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_tasks/locks.py +0 -0
  52. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_tasks/migrations/0001_initial.py +0 -0
  53. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_tasks/migrations/0002_load_initial_data.py +0 -0
  54. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_tasks/migrations/__init__.py +0 -0
  55. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_tasks/models.py +0 -0
  56. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_tasks/statuses.py +0 -0
  57. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/async_tasks/tasks.py +0 -0
  58. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/__init__.py +0 -0
  59. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/apps.py +0 -0
  60. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/constants.py +0 -0
  61. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/error_log/__init__.py +0 -0
  62. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/error_log/actions.py +0 -0
  63. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/helpers.py +0 -0
  64. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/management/__init__.py +0 -0
  65. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/management/commands/__init__.py +0 -0
  66. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/management/commands/reinstall_audit_log.py +0 -0
  67. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/middleware.py +0 -0
  68. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/migrations/0001_initial.py +0 -0
  69. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/migrations/0002_install_audit_log.py +0 -0
  70. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/migrations/0003_logproxy.py +0 -0
  71. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/migrations/0004_reinstall_audit_log.py +0 -0
  72. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/migrations/0005_postgresql_error.py +0 -0
  73. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/migrations/0006_auto_20200806_1707.py +0 -0
  74. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/migrations/0007_create_selective_tables_function.py +0 -0
  75. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/migrations/0008_table_logged.py +0 -0
  76. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/migrations/0009_reinstall_audit_log.py +0 -0
  77. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/migrations/__init__.py +0 -0
  78. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/models.py +0 -0
  79. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/permissions.py +0 -0
  80. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/routers.py +0 -0
  81. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/sql/configure_audit_log.sql +0 -0
  82. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/sql/install_audit_log.sql +0 -0
  83. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/audit_log/utils/operations.py +0 -0
  84. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/__init__.py +0 -0
  85. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/__init__.py +0 -0
  86. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/actions.py +0 -0
  87. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/app_meta.py +0 -0
  88. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/backends/__init__.py +0 -0
  89. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/backends/base.py +0 -0
  90. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/backends/caching.py +0 -0
  91. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/backends/simple.py +0 -0
  92. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/checker.py +0 -0
  93. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/config.py +0 -0
  94. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/constants.py +0 -0
  95. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/management/__init__.py +0 -0
  96. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/management/commands/__init__.py +0 -0
  97. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/management/commands/rbac.py +0 -0
  98. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/manager.py +0 -0
  99. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/migrations/0001_initial.py +0 -0
  100. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/migrations/0002_model_modifier_metaclass_fix.py +0 -0
  101. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/migrations/0003_permission_hidden.py +0 -0
  102. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/migrations/0004_auto_20171024_1245.py +0 -0
  103. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/migrations/__init__.py +0 -0
  104. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/models.py +0 -0
  105. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/permissions.py +0 -0
  106. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/templates/rbac/role-add-window.js +0 -0
  107. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/templates/rbac/role-edit-window.js +0 -0
  108. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/templates/rbac/roles-list-window.js +0 -0
  109. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/templates/rbac/roles-view-list-window.js +0 -0
  110. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/ui.py +0 -0
  111. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/utils.py +0 -0
  112. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/rbac/validators.py +0 -0
  113. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/simple_auth/__init__.py +0 -0
  114. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/simple_auth/actions.py +0 -0
  115. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/simple_auth/app_meta.py +0 -0
  116. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/simple_auth/checkers.py +0 -0
  117. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/simple_auth/const.py +0 -0
  118. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/simple_auth/migrations/0001_initial.py +0 -0
  119. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/simple_auth/migrations/__init__.py +0 -0
  120. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/simple_auth/models.py +0 -0
  121. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/simple_auth/static/simple_auth/simple_auth.css +0 -0
  122. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/simple_auth/templates/simple_auth/change_reset_password_page.html +0 -0
  123. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/simple_auth/templates/simple_auth/email/reset_password.html +0 -0
  124. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/simple_auth/templates/simple_auth/login_page.html +0 -0
  125. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/simple_auth/templates/simple_auth/reset_password_page.html +0 -0
  126. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/simple_auth/ui.py +0 -0
  127. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/auth/simple_auth/validators.py +0 -0
  128. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/contingent/__init__.py +0 -0
  129. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/contingent/actions.py +0 -0
  130. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/contingent/app_meta.py +0 -0
  131. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/contingent/base.py +0 -0
  132. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/contingent/catalogs.py +0 -0
  133. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/contingent/contingent_plugin/__init__.py +0 -0
  134. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/contingent/contingent_plugin/actions.py +0 -0
  135. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/contingent/contingent_plugin/apps.py +0 -0
  136. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/contingent/contingent_plugin/migrations/0001_initial.py +0 -0
  137. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/contingent/contingent_plugin/migrations/0002_add_contingent_model_deleted.py +0 -0
  138. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/contingent/contingent_plugin/migrations/__init__.py +0 -0
  139. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/contingent/contingent_plugin/model_views.py +0 -0
  140. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/contingent/contingent_plugin/models.py +0 -0
  141. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/contingent/contingent_plugin/observer.py +0 -0
  142. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/contingent/contingent_plugin/plugin_meta.py +0 -0
  143. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/contingent/contingent_plugin/storage.py +0 -0
  144. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/contingent/contingent_plugin/utils.py +0 -0
  145. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/contingent/json_data/icao.json +0 -0
  146. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/contingent/json_data/okogu.json +0 -0
  147. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/contingent/json_data/oksm.json +0 -0
  148. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/__init__.py +0 -0
  149. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/__init__.py +0 -0
  150. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/fields.py +0 -0
  151. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/migration/__init__.py +0 -0
  152. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/migration/operations.py +0 -0
  153. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/mixins/__init__.py +0 -0
  154. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/mixins/date_interval.py +0 -0
  155. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/mixins/validation.py +0 -0
  156. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/model_view/__init__.py +0 -0
  157. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/model_view/table-view.html +0 -0
  158. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/models.py +0 -0
  159. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/observer.py +0 -0
  160. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/partitioning/README.md +0 -0
  161. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/partitioning/__init__.py +0 -0
  162. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/partitioning/const.py +0 -0
  163. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/partitioning/management/__init__.py +0 -0
  164. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/partitioning/management/commands/__init__.py +0 -0
  165. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/partitioning/management/commands/apply_partitioning.py +0 -0
  166. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/partitioning/management/commands/clear_table.py +0 -0
  167. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/partitioning/management/commands/split_table.py +0 -0
  168. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/partitioning/partitioning.sql +0 -0
  169. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/partitioning/partitioning_set_search_path.sql +0 -0
  170. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/partitioning/triggers.sql +0 -0
  171. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/routers.py +0 -0
  172. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/signals.py +0 -0
  173. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/utils.py +0 -0
  174. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/validators/__init__.py +0 -0
  175. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/db/validators/simple.py +0 -0
  176. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/storages/__init__.py +0 -0
  177. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/storages/atcfs/README.rst +0 -0
  178. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/storages/atcfs/__init__.py +0 -0
  179. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/storages/atcfs/api.py +0 -0
  180. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/storages/atcfs/app_meta.py +0 -0
  181. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/storages/atcfs/exceptions.py +0 -0
  182. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/storages/atcfs/management/__init__.py +0 -0
  183. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/storages/atcfs/management/commands/__init__.py +0 -0
  184. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/storages/atcfs/management/commands/atcfs_migrate.py +0 -0
  185. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/storages/atcfs/models.py +0 -0
  186. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/storages/atcfs/monkey_patching.py +0 -0
  187. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/storages/atcfs/settings.py +0 -0
  188. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/storages/atcfs/storage.py +0 -0
  189. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/django/storages/atcfs/templates/atcfs_unavailable.html +0 -0
  190. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/extjs/__init__.py +0 -0
  191. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/extjs/fields/__init__.py +0 -0
  192. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/extjs/fields/input_params.py +0 -0
  193. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/importer/XLSReader.py +0 -0
  194. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/importer/__init__.py +0 -0
  195. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/importer/api.py +0 -0
  196. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/importer/constants.py +0 -0
  197. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/importer/loggers.py +0 -0
  198. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/importer/proxy.py +0 -0
  199. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/importer/proxy_import.py +0 -0
  200. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/importer/refactoring-notes.txt +0 -0
  201. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/importer/report.py +0 -0
  202. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/importer/test_file.xls +0 -0
  203. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/importer/ui.py +0 -0
  204. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/importer/validators.py +0 -0
  205. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/integration_entities/README.rst +0 -0
  206. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/integration_entities/__init__.py +0 -0
  207. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/integration_entities/consts.py +0 -0
  208. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/integration_entities/entities.py +0 -0
  209. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/integration_entities/enums.py +0 -0
  210. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/integration_entities/helpers.py +0 -0
  211. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/integration_entities/mixins.py +0 -0
  212. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ioc/__init__.py +0 -0
  213. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/logger/__init__.py +0 -0
  214. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/logger/app_settings.py +0 -0
  215. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/logger/apps.py +0 -0
  216. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/logger/consts.py +0 -0
  217. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/logger/formatters.py +0 -0
  218. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/logger/helpers.py +0 -0
  219. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/logger/loggers.py +0 -0
  220. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/logger/records.py +0 -0
  221. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/m3/__init__.py +0 -0
  222. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/m3/extensions/__init__.py +0 -0
  223. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/m3/extensions/listeners/__init__.py +0 -0
  224. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/m3/extensions/listeners/delete_check/__init__.py +0 -0
  225. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/m3/extensions/listeners/delete_check/cancel-confirm-window.js +0 -0
  226. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/m3/extensions/listeners/delete_check/listeners.py +0 -0
  227. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/m3/extensions/listeners/delete_check/mixins.py +0 -0
  228. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/m3/extensions/listeners/delete_check/related-objects-window.html +0 -0
  229. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/m3/extensions/listeners/delete_check/signals.py +0 -0
  230. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/m3/extensions/listeners/delete_check/ui.py +0 -0
  231. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/m3/extensions/listeners/delete_check/utils.py +0 -0
  232. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/m3/extensions/ui.py +0 -0
  233. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/m3/transaction_context.py +0 -0
  234. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/objectpack/__init__.py +0 -0
  235. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/objectpack/actions.py +0 -0
  236. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/objectpack/apps.py +0 -0
  237. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/objectpack/filters.py +0 -0
  238. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/objectpack/templates/base-grid-window.js +0 -0
  239. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/objectpack/templates/filter-panel.js +0 -0
  240. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/objectpack/templates/grid-panel.js +0 -0
  241. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/objectpack/templates/multiSelectWindow.js +0 -0
  242. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/objectpack/templates/multiselect-page-fix.js +0 -0
  243. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/objectpack/templates/relations-check-mixin-template.html +0 -0
  244. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/objectpack/ui.py +0 -0
  245. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/__init__.py +0 -0
  246. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/actions.py +0 -0
  247. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/README.rst +0 -0
  248. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/__init__.py +0 -0
  249. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/app_meta.py +0 -0
  250. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/apps.py +0 -0
  251. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/base.py +0 -0
  252. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/builders/__init__.py +0 -0
  253. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/builders/excel/__init__.py +0 -0
  254. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/builders/excel/_base.py +0 -0
  255. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/builders/excel/_header.py +0 -0
  256. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/builders/excel/constants.py +0 -0
  257. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/builders/excel/product.py +0 -0
  258. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/builders/excel/with_merged_cells.py +0 -0
  259. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/config.py +0 -0
  260. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/constants.py +0 -0
  261. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/editor/__init__.py +0 -0
  262. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/editor/actions.py +0 -0
  263. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/editor/edit-window.js +0 -0
  264. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/editor/list-window.js +0 -0
  265. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/editor/ui.py +0 -0
  266. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/exceptions.py +0 -0
  267. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/migrations/0001_initial.py +0 -0
  268. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/migrations/0002_report_filters.py +0 -0
  269. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/migrations/0003_reportfilter_exclude.py +0 -0
  270. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/migrations/0004_reportfilter_fields.py +0 -0
  271. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/migrations/0005_reportcolumn_visible.py +0 -0
  272. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/migrations/0006_reportsorting.py +0 -0
  273. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/migrations/0007_include_available_units.py +0 -0
  274. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/migrations/0008_auto_20170407_1318.py +0 -0
  275. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/migrations/0009_auto_20180405_0642.py +0 -0
  276. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/migrations/0010_add_aggregate_fields.py +0 -0
  277. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/migrations/__init__.py +0 -0
  278. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/mixins.py +0 -0
  279. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/models.py +0 -0
  280. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/plugin_meta.py +0 -0
  281. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/registries.py +0 -0
  282. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/utils.py +0 -0
  283. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/constructor/validators.py +0 -0
  284. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/reporter.py +0 -0
  285. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/report/utils.py +0 -0
  286. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/rest/__init__.py +0 -0
  287. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/rest/actions.py +0 -0
  288. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/rest/context.py +0 -0
  289. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/rest/controllers.py +0 -0
  290. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/rest/misc.py +0 -0
  291. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/rest/mixins.py +0 -0
  292. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/secure_media/README.rst +0 -0
  293. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/secure_media/__init__.py +0 -0
  294. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/secure_media/app_meta.py +0 -0
  295. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/thread_data.py +0 -0
  296. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/__init__.py +0 -0
  297. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/caching.py +0 -0
  298. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/conversion.py +0 -0
  299. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/crypto.py +0 -0
  300. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/date.py +0 -0
  301. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/db/__init__.py +0 -0
  302. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/db/postgresql.py +0 -0
  303. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/fonts/Arial.ttf +0 -0
  304. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/fonts/Calibri.ttf +0 -0
  305. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/fonts/Tahoma.ttf +0 -0
  306. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/fonts/__init__.py +0 -0
  307. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/licence/__init__.py +0 -0
  308. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/licence/converters.py +0 -0
  309. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/misc.py +0 -0
  310. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/object_grid.py +0 -0
  311. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/phone_number/__init__.py +0 -0
  312. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/phone_number/enums.py +0 -0
  313. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/phone_number/modelfields.py +0 -0
  314. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/phone_number/phone_number.py +0 -0
  315. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/phone_number/validators.py +0 -0
  316. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/plugins.py +0 -0
  317. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/registry.py +0 -0
  318. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/seqtools.py +0 -0
  319. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/serializer.py +0 -0
  320. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/storage.py +0 -0
  321. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/system.py +0 -0
  322. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/system_app/__init__.py +0 -0
  323. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/system_app/management/__init__.py +0 -0
  324. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/system_app/management/commands/__init__.py +0 -0
  325. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/system_app/management/commands/delete_objects.py +0 -0
  326. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/system_app/templatetags/__init__.py +0 -0
  327. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/system_app/templatetags/educommon.py +0 -0
  328. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/ui.py +0 -0
  329. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/xml/__init__.py +0 -0
  330. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/xml/catalog.json +0 -0
  331. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/xml/resolver.py +0 -0
  332. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/xml/saml-schema-assertion-2.0.xsd +0 -0
  333. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/xml/saml-schema-protocol-2.0.xsd +0 -0
  334. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/xml/xenc-schema.xsd +0 -0
  335. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/utils/xml/xmldsig-core-schema.xsd +0 -0
  336. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/README.rst +0 -0
  337. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/__init__.py +0 -0
  338. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/actions.py +0 -0
  339. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/app_meta.py +0 -0
  340. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/base.py +0 -0
  341. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/migrations/0001_initial.py +0 -0
  342. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/migrations/0002_auto_20160628_1334.py +0 -0
  343. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/migrations/0003_add_fields_to_smev_logs.py +0 -0
  344. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/migrations/0004_auto_20160727_1600.py +0 -0
  345. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/migrations/0005_auto_20161130_1615.py +0 -0
  346. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/migrations/0006_auto_20170327_1027.py +0 -0
  347. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/migrations/0007_auto_20180607_1040.py +0 -0
  348. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/migrations/0008_auto_20180713_1445.py +0 -0
  349. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/migrations/0009_auto_20201130_1553.py +0 -0
  350. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/migrations/__init__.py +0 -0
  351. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/models.py +0 -0
  352. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/provider.py +0 -0
  353. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/report.py +0 -0
  354. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/smev/__init__.py +0 -0
  355. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/smev/applications.py +0 -0
  356. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/smev/exceptions.py +0 -0
  357. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/templates/report/smev_logs.xlsx +0 -0
  358. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/templates/ui-js/smev-logs-list-window.js +0 -0
  359. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/templates/ui-js/smev-logs-report-setting-window.js +0 -0
  360. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/ui.py +0 -0
  361. {educommon-3.13.2 → educommon-3.14.0}/src/educommon/ws_log/utils.py +0 -0
  362. {educommon-3.13.2 → educommon-3.14.0}/src/educommon.egg-info/dependency_links.txt +0 -0
  363. {educommon-3.13.2 → educommon-3.14.0}/src/educommon.egg-info/requires.txt +0 -0
  364. {educommon-3.13.2 → educommon-3.14.0}/src/educommon.egg-info/top_level.txt +0 -0
  365. {educommon-3.13.2 → educommon-3.14.0}/tests/test_contingent_plugin_utils.py +0 -0
  366. {educommon-3.13.2 → educommon-3.14.0}/tests/test_dates_splitter.py +0 -0
  367. {educommon-3.13.2 → educommon-3.14.0}/tests/test_delete_check.py +0 -0
  368. {educommon-3.13.2 → educommon-3.14.0}/tests/test_delete_objects.py +0 -0
  369. {educommon-3.13.2 → educommon-3.14.0}/tests/test_django_db_utils.py +0 -0
  370. {educommon-3.13.2 → educommon-3.14.0}/tests/test_interval_mixins.py +0 -0
  371. {educommon-3.13.2 → educommon-3.14.0}/tests/test_personal_data_fields.py +0 -0
  372. {educommon-3.13.2 → educommon-3.14.0}/tests/test_phone_number.py +0 -0
  373. {educommon-3.13.2 → educommon-3.14.0}/tests/test_report.py +0 -0
  374. {educommon-3.13.2 → educommon-3.14.0}/tests/test_service_db_router.py +0 -0
  375. {educommon-3.13.2 → educommon-3.14.0}/tests/test_utils.py +0 -0
  376. {educommon-3.13.2 → educommon-3.14.0}/tests/test_utils_plugins.py +0 -0
  377. {educommon-3.13.2 → educommon-3.14.0}/tests/test_validators.py +0 -0
  378. {educommon-3.13.2 → educommon-3.14.0}/tests/tests_rbac.py +0 -0
@@ -28,6 +28,24 @@
28
28
  ### Удалено
29
29
 
30
30
 
31
+ ## [3.14.0] - 2025-04-09
32
+
33
+ Доработки журнала изменений до состояния старого журнала в ЭШ
34
+
35
+ ### Добавлено
36
+
37
+ - [EDUSCHL-23386](https://jira.bars.group/browse/EDUSCHL-23386)
38
+ PATCH Столбец имитация (без функциональности, для доработки работоспособности в последующих задачах).
39
+
40
+ ### Изменено
41
+
42
+ - [EDUSCHL-23386](https://jira.bars.group/browse/EDUSCHL-23386)
43
+ MINOR Классы LogProxy, AuditLogPack преобразованы в абстрактные с добавлением абстрактных методов для
44
+ извлечения исходных данных необходимых при: отображении ФИО пользователя в журнале изменений; фильтрации по ФИО;
45
+ отображении ФИО, организации в окне редактирования записи журнала изменений.
46
+ Подробнее о необходимых настройках в audit_log/README.rst.
47
+
48
+
31
49
  ## [3.13.2] - 2024-04-09
32
50
 
33
51
  Небольшой рефакторинг для корректной сборки пакета.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: educommon
3
- Version: 3.13.2
3
+ Version: 3.14.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,64 @@
1
+ Приложение "Логирование изменений объектов на уровне БД"
2
+ =================================
3
+
4
+ Установка
5
+ --------------
6
+ 1. На основе абстрактного класса LogProxy из educommon/audit_log/proxies.py создать класс и реализовать его абстрактные
7
+ методы.
8
+
9
+ .. code-block:: python
10
+
11
+ class AuditLogProxy(LogProxy):
12
+ """Прокси-модель для отображения логов."""
13
+
14
+ class Meta:
15
+ proxy = True
16
+
17
+ @property
18
+ def user_fullname(self) -> str:
19
+ """Полное имя пользователя."""
20
+ pass
21
+
22
+ @property
23
+ def user_organization(self) -> str:
24
+ """Название организации, к которой привязан пользователь."""
25
+ pass
26
+
27
+
28
+ В случае использования сервисной базы для нового класса необходимо реализовать
29
+ роутер на основе ServiceDbRouterBase из educommon/django/db/routers.py и добавить его в settings.DATABASE_ROUTERS
30
+
31
+ .. code-block:: python
32
+
33
+ class AuditLogProxyDbRouter(MyServiceDbRouterBase):
34
+ """Роутер базы данных для AuditLogProxy."""
35
+
36
+ app_name = 'model_app_name'
37
+ service_db_model_names = {'AuditLogProxy'}
38
+
39
+
40
+ 2. На основе абстрактного класса AuditLogPack из educommon/audit_log/actions.py создать класс и реализовать его абстрактные
41
+ методы. В атрибуте model указать модель из пункта "1".
42
+
43
+ .. code-block:: python
44
+
45
+ class AuditPack(AuditLogPack):
46
+ """Журнал изменений."""
47
+
48
+ title = 'Журнал изменений (новый)'
49
+ model = AuditLogProxy
50
+
51
+ def _make_name_filter(self, field, value):
52
+ """Создает lookup фильтра по фамилии/имени/отчеству пользователя.
53
+
54
+ :param str field: название поля ('firstname', 'surname', 'patronymic').
55
+ :param str value: значение, по которому фильтруется queryset.
56
+ """
57
+ pass
58
+
59
+ Выполнить регистрацию нового пака с помощью контроллера основных приложений проекта.
60
+
61
+ 3. Добавить 'educommon.audit_log.middleware.AuditLogMiddleware', расположив его так, чтобы при его отработке
62
+ в request уже был определен пользователь.
63
+
64
+ 4. Создать и выполнить миграции.
@@ -1,3 +1,7 @@
1
+ from abc import (
2
+ ABCMeta,
3
+ abstractmethod,
4
+ )
1
5
  from datetime import (
2
6
  date,
3
7
  timedelta,
@@ -45,7 +49,6 @@ from educommon.audit_log.ui import (
45
49
  from educommon.audit_log.utils import (
46
50
  get_model_choices,
47
51
  make_hstore_filter,
48
- make_name_filter,
49
52
  )
50
53
  from educommon.m3 import (
51
54
  PackValidationMixin,
@@ -59,7 +62,7 @@ from educommon.utils.ui import (
59
62
  )
60
63
 
61
64
 
62
- class AuditLogPack(ViewWindowPackMixin, PackValidationMixin, ObjectPack):
65
+ class AuditLogPack(ViewWindowPackMixin, PackValidationMixin, ObjectPack, metaclass=ABCMeta):
63
66
  """Журнал изменений."""
64
67
 
65
68
  title = 'Журнал изменений'
@@ -82,64 +85,81 @@ class AuditLogPack(ViewWindowPackMixin, PackValidationMixin, ObjectPack):
82
85
  model, 'time', get_from=lambda: date.today() - timedelta(days=2), get_to=date.today
83
86
  )
84
87
 
85
- columns = [
86
- {'data_index': 'time', 'width': 140, 'header': 'Дата и время', 'sortable': True, 'filter': date_filter.filter},
87
- {
88
- 'data_index': 'user_name',
89
- 'width': 130,
90
- 'header': 'Пользователь',
91
- 'filter': ff('table__name', lookup=lambda x: make_name_filter('surname', x))
92
- & ff('table__name', lookup=lambda x: make_name_filter('firstname', x))
93
- & ff('table__name', lookup=lambda x: make_name_filter('patronymic', x)),
94
- },
95
- {
96
- 'data_index': 'operation',
97
- 'width': 60,
98
- 'header': 'Операция',
99
- 'filter': ff('operation', ask_before_deleting=False),
100
- },
101
- {
102
- 'data_index': 'model_name',
103
- 'width': 220,
104
- 'header': 'Модель объекта',
105
- 'filter': ff(
106
- 'table',
107
- control_creator=lambda: make_combo_box(
108
- data=get_model_choices(),
109
- ask_before_deleting=False,
88
+ def _generate_columns(self):
89
+ """Формирует наполнение столбцов."""
90
+ columns = [
91
+ {
92
+ 'data_index': 'time',
93
+ 'width': 140,
94
+ 'header': 'Дата и время',
95
+ 'sortable': True,
96
+ 'filter': self.date_filter.filter
97
+ },
98
+ {
99
+ 'data_index': 'user_name',
100
+ 'width': 130,
101
+ 'header': 'Пользователь',
102
+ 'filter': self.ff('table__name', lookup=lambda x: self._make_name_filter('surname', x))
103
+ & self.ff('table__name', lookup=lambda x: self._make_name_filter('firstname', x))
104
+ & self.ff('table__name', lookup=lambda x: self._make_name_filter('patronymic', x)),
105
+ },
106
+ {
107
+ 'data_index': 'operation',
108
+ 'width': 60,
109
+ 'header': 'Операция',
110
+ 'filter': self.ff('operation', ask_before_deleting=False),
111
+ },
112
+ {
113
+ 'data_index': 'model_name',
114
+ 'width': 220,
115
+ 'header': 'Модель объекта',
116
+ 'filter': self.ff(
117
+ 'table',
118
+ control_creator=lambda: make_combo_box(
119
+ data=get_model_choices(),
120
+ ask_before_deleting=False,
121
+ ),
122
+ ),
123
+ },
124
+ {
125
+ 'data_index': 'object_id',
126
+ 'width': 50,
127
+ 'header': 'Код объекта',
128
+ 'filter': self.ff('object_id'),
129
+ },
130
+ {
131
+ 'data_index': 'ip',
132
+ 'width': 60,
133
+ 'header': 'IP',
134
+ 'filter': self.ff(
135
+ 'ip',
136
+ parser_map=(GenericIPAddressField, 'str', '%s__contains'),
137
+ control_creator=ExtStringField,
110
138
  ),
111
- ),
112
- },
113
- {
114
- 'data_index': 'object_id',
115
- 'width': 50,
116
- 'header': 'Код объекта',
117
- 'filter': ff('object_id'),
118
- },
119
- {
120
- 'data_index': 'ip',
121
- 'width': 60,
122
- 'header': 'IP',
123
- 'filter': ff(
124
- 'ip',
125
- parser_map=(GenericIPAddressField, 'str', '%s__contains'),
126
- control_creator=ExtStringField,
127
- ),
128
- },
129
- {
130
- 'data_index': 'object_string',
131
- 'width': 180,
132
- 'header': 'Объект',
133
- 'filter': ff(
134
- 'data',
135
- parser_map=(HStoreField, 'str', '%s__values__icontains'),
136
- lookup=lambda x: make_hstore_filter('data', x),
137
- control_creator=ExtStringField,
138
- ),
139
- },
140
- ]
139
+ },
140
+ {
141
+ 'data_index': 'object_string',
142
+ 'width': 180,
143
+ 'header': 'Объект',
144
+ 'filter': self.ff(
145
+ 'data',
146
+ parser_map=(HStoreField, 'str', '%s__values__icontains'),
147
+ lookup=lambda x: make_hstore_filter('data', x),
148
+ control_creator=ExtStringField,
149
+ ),
150
+ },
151
+ {
152
+ 'data_index': '',
153
+ 'width': 40,
154
+ 'header': 'Имитация',
155
+ },
156
+ ]
157
+
158
+ return columns
141
159
 
142
160
  def __init__(self):
161
+ self.columns = self._generate_columns()
162
+
143
163
  super().__init__()
144
164
 
145
165
  self.view_changes_action = ViewChangeAction()
@@ -187,6 +207,14 @@ class AuditLogPack(ViewWindowPackMixin, PackValidationMixin, ObjectPack):
187
207
  menu.Item(self.title, self.list_window_action),
188
208
  )
189
209
 
210
+ @abstractmethod
211
+ def _make_name_filter(self, field, value):
212
+ """Создает lookup фильтра по фамилии/имени/отчеству пользователя.
213
+
214
+ :param str field: название поля ('firstname', 'surname', 'patronymic').
215
+ :param str value: значение, по которому фильтруется queryset.
216
+ """
217
+
190
218
 
191
219
  class ViewChangeAction(BaseAction):
192
220
  """Action для просмотра изменений."""
@@ -203,7 +231,7 @@ class ViewChangeAction(BaseAction):
203
231
  """Тело Action, вызывается при обработке запроса к серверу."""
204
232
  object_id = getattr(context, self.parent.id_param_name)
205
233
  if object_id:
206
- rows = LogProxy.objects.get(id=object_id).diff
234
+ rows = self.parent.model.objects.get(id=object_id).diff
207
235
  else:
208
236
  rows = []
209
237
 
@@ -1,9 +1,6 @@
1
1
  from educommon import (
2
2
  ioc,
3
3
  )
4
- from educommon.audit_log.actions import (
5
- AuditLogPack,
6
- )
7
4
  from educommon.audit_log.error_log.actions import (
8
5
  PostgreSQLErrorPack,
9
6
  )
@@ -13,7 +10,6 @@ def register_actions():
13
10
  """Регистрация паков и экшенов."""
14
11
  ioc.get('main_controller').packs.extend(
15
12
  (
16
- AuditLogPack(),
17
13
  PostgreSQLErrorPack(),
18
14
  )
19
15
  )
@@ -1,5 +1,10 @@
1
1
  import os
2
2
 
3
+ from abc import (
4
+ ABCMeta,
5
+ abstractmethod,
6
+ )
7
+
3
8
  from django.conf import (
4
9
  settings,
5
10
  )
@@ -36,8 +41,12 @@ from educommon.audit_log.models import (
36
41
  )
37
42
 
38
43
 
39
- class LogProxy(AuditLog):
40
- """Прокси-модель для отображения."""
44
+ class LogProxyMeta(type(AuditLog), ABCMeta):
45
+ """Метакласс для устранения конфликта при наследовании от AuditLog и использовании ABCMeta"""
46
+
47
+
48
+ class LogProxy(AuditLog, metaclass=LogProxyMeta):
49
+ """Абстрактный класс прокси-модели для отображения."""
41
50
 
42
51
  class Meta:
43
52
  proxy = True
@@ -53,15 +62,22 @@ class LogProxy(AuditLog):
53
62
  except ContentType.DoesNotExist:
54
63
  result = 'Model:{}, id:{}'.format(user_type_id, user_id)
55
64
  else:
56
- try:
57
- result = model.objects.get(id=user_id).person.fullname
58
- except model.DoesNotExist:
59
- result = f'{model._meta.verbose_name}({user_id})'
65
+ result = self.user_fullname or f'{model._meta.verbose_name}({user_id})'
60
66
  else:
61
67
  result = ''
62
68
 
63
69
  return result
64
70
 
71
+ @property
72
+ @abstractmethod
73
+ def user_fullname(self) -> str:
74
+ """Полное имя пользователя."""
75
+
76
+ @property
77
+ @abstractmethod
78
+ def user_organization(self) -> str:
79
+ """Название организации, к которой привязан пользователь."""
80
+
65
81
  @property
66
82
  def model_fullname(self):
67
83
  """Отображаемое и системное имя модели."""
@@ -60,11 +60,5 @@ class ViewChangeWindow(BaseWindow):
60
60
  log_record = params['object']
61
61
  self.title = '{}: {}'.format(log_record.get_operation_display(), log_record.model_name)
62
62
  if log_record.user:
63
- self.user_field.value = '{} / {}'.format(
64
- log_record.user.person.fullname, log_record.user.person.user.username
65
- )
66
- unit = getattr(log_record.user, 'unit', None)
67
- if unit:
68
- self.unit_field.value = unit.short_name
69
- else:
70
- self.unit_field.value = ''
63
+ self.user_field.value = f'{log_record.user_fullname} / {log_record.user.username}'
64
+ self.unit_field.value = log_record.user_organization
@@ -345,28 +345,6 @@ def make_hstore_filter(field, value):
345
345
  return result
346
346
 
347
347
 
348
- def make_name_filter(field, value):
349
- """Создает lookup фильтра по фамилии/имени/отчеству пользователя.
350
-
351
- :param str field: название поля ('firstname', 'surname', 'patronymic').
352
- :param str value: значение, по которому фильтруется queryset.
353
- """
354
- ContentType = apps.get_model('contenttypes', 'ContentType')
355
- Employee = apps.get_model('employee', 'Employee')
356
- SysAdmin = apps.get_model('sysadmin', 'SysAdmin')
357
-
358
- result = None
359
- for model in (Employee, SysAdmin):
360
- type_id = ContentType.objects.get_for_model(model).id
361
- user_ids = list(model.objects.filter(**{f'person__{field}__icontains': value}).values_list('id', flat=True))
362
- qobj = Q(user_id__in=user_ids, user_type_id=type_id)
363
- if result:
364
- result |= qobj
365
- else:
366
- result = qobj
367
- return result
368
-
369
-
370
348
  class ModelRegistry:
371
349
  """Реестр моделей Django по имени таблицы.
372
350
 
@@ -447,7 +425,7 @@ def get_audit_log_context(request):
447
425
  result = {}
448
426
 
449
427
  current_user = ioc.get('get_current_user')(request)
450
- if current_user:
428
+ if current_user and current_user.is_authenticated:
451
429
  ContentType = apps.get_model('contenttypes', 'ContentType')
452
430
 
453
431
  result['user_id'] = current_user.id
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: educommon
3
- Version: 3.13.2
3
+ Version: 3.14.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
@@ -51,6 +51,7 @@ src/educommon/async_tasks/fixtures/initial_data.json
51
51
  src/educommon/async_tasks/migrations/0001_initial.py
52
52
  src/educommon/async_tasks/migrations/0002_load_initial_data.py
53
53
  src/educommon/async_tasks/migrations/__init__.py
54
+ src/educommon/audit_log/README.rst
54
55
  src/educommon/audit_log/__init__.py
55
56
  src/educommon/audit_log/actions.py
56
57
  src/educommon/audit_log/app_meta.py
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes