educommon 3.9.2__tar.gz → 3.9.4__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 (369) hide show
  1. {educommon-3.9.2/src/educommon.egg-info → educommon-3.9.4}/PKG-INFO +3 -2
  2. {educommon-3.9.2 → educommon-3.9.4}/setup.py +2 -1
  3. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/proxies.py +5 -4
  4. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/models.py +2 -3
  5. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/simple_auth/app_meta.py +4 -4
  6. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/mixins/validation.py +2 -2
  7. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/model_view/__init__.py +4 -3
  8. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/partitioning/__init__.py +2 -2
  9. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/partitioning/management/commands/clear_table.py +4 -3
  10. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/partitioning/management/commands/split_table.py +4 -3
  11. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/utils.py +43 -44
  12. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/storages/atcfs/app_meta.py +3 -3
  13. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/logger/loggers.py +2 -2
  14. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/m3/__init__.py +3 -3
  15. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/m3/extensions/listeners/delete_check/listeners.py +1 -3
  16. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/base.py +31 -6
  17. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/builders/excel/_base.py +6 -5
  18. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/secure_media/app_meta.py +7 -6
  19. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/system_app/management/commands/delete_objects.py +2 -2
  20. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/version.conf +5 -5
  21. {educommon-3.9.2 → educommon-3.9.4/src/educommon.egg-info}/PKG-INFO +3 -2
  22. {educommon-3.9.2 → educommon-3.9.4}/src/educommon.egg-info/requires.txt +2 -1
  23. {educommon-3.9.2 → educommon-3.9.4}/MANIFEST.in +0 -0
  24. {educommon-3.9.2 → educommon-3.9.4}/README.rst +0 -0
  25. {educommon-3.9.2 → educommon-3.9.4}/UPGRADE.rst +0 -0
  26. {educommon-3.9.2 → educommon-3.9.4}/setup.cfg +0 -0
  27. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/__init__.py +0 -0
  28. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/about/README.rst +0 -0
  29. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/about/__init__.py +0 -0
  30. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/about/apps.py +0 -0
  31. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/about/static/edu_about/barsgroup.png +0 -0
  32. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/about/ui/__init__.py +0 -0
  33. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/about/ui/about-window.js +0 -0
  34. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/about/ui/actions.py +0 -0
  35. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/about/ui/common-tab.html +0 -0
  36. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/about/ui/packages-tab.js +0 -0
  37. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/about/ui/postgresql-extensions-tab.js +0 -0
  38. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/about/ui/ui.py +0 -0
  39. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/about/utils.py +0 -0
  40. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_task/__init__.py +0 -0
  41. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_task/actions.py +0 -0
  42. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_task/apps.py +0 -0
  43. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_task/consts.py +0 -0
  44. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_task/exceptions.py +0 -0
  45. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_task/helpers.py +0 -0
  46. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_task/locker.py +0 -0
  47. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_task/migrations/0001_initial.py +0 -0
  48. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_task/migrations/0002_task_type_and_status_data.py +0 -0
  49. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_task/migrations/__init__.py +0 -0
  50. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_task/models.py +0 -0
  51. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_task/tasks.py +0 -0
  52. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_task/templates/ui-js/async-task-list-win.js +0 -0
  53. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_task/templates/ui-js/async-task-revoke.js +0 -0
  54. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_task/templates/ui-js/async-task-view-win.js +0 -0
  55. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_task/ui.py +0 -0
  56. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_tasks/__init__.py +0 -0
  57. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_tasks/apps.py +0 -0
  58. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_tasks/exceptions.py +0 -0
  59. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_tasks/fixtures/initial_data.json +0 -0
  60. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_tasks/locks.py +0 -0
  61. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_tasks/migrations/0001_initial.py +0 -0
  62. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_tasks/migrations/0002_load_initial_data.py +0 -0
  63. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_tasks/migrations/__init__.py +0 -0
  64. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_tasks/models.py +0 -0
  65. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_tasks/statuses.py +0 -0
  66. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/async_tasks/tasks.py +0 -0
  67. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/__init__.py +0 -0
  68. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/actions.py +0 -0
  69. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/app_meta.py +0 -0
  70. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/apps.py +0 -0
  71. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/constants.py +0 -0
  72. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/error_log/__init__.py +0 -0
  73. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/error_log/actions.py +0 -0
  74. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/helpers.py +0 -0
  75. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/management/__init__.py +0 -0
  76. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/management/commands/__init__.py +0 -0
  77. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/management/commands/reinstall_audit_log.py +0 -0
  78. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/middleware.py +0 -0
  79. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/migrations/0001_initial.py +0 -0
  80. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/migrations/0002_install_audit_log.py +0 -0
  81. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/migrations/0003_logproxy.py +0 -0
  82. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/migrations/0004_reinstall_audit_log.py +0 -0
  83. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/migrations/0005_postgresql_error.py +0 -0
  84. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/migrations/0006_auto_20200806_1707.py +0 -0
  85. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/migrations/0007_create_selective_tables_function.py +0 -0
  86. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/migrations/0008_table_logged.py +0 -0
  87. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/migrations/0009_reinstall_audit_log.py +0 -0
  88. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/migrations/__init__.py +0 -0
  89. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/models.py +0 -0
  90. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/permissions.py +0 -0
  91. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/routers.py +0 -0
  92. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/sql/configure_audit_log.sql +0 -0
  93. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/sql/install_audit_log.sql +0 -0
  94. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/ui.py +0 -0
  95. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/utils/__init__.py +0 -0
  96. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/audit_log/utils/operations.py +0 -0
  97. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/__init__.py +0 -0
  98. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/__init__.py +0 -0
  99. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/actions.py +0 -0
  100. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/app_meta.py +0 -0
  101. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/backends/__init__.py +0 -0
  102. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/backends/base.py +0 -0
  103. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/backends/caching.py +0 -0
  104. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/backends/simple.py +0 -0
  105. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/checker.py +0 -0
  106. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/config.py +0 -0
  107. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/constants.py +0 -0
  108. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/management/__init__.py +0 -0
  109. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/management/commands/__init__.py +0 -0
  110. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/management/commands/rbac.py +0 -0
  111. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/manager.py +0 -0
  112. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/migrations/0001_initial.py +0 -0
  113. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/migrations/0002_model_modifier_metaclass_fix.py +0 -0
  114. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/migrations/0003_permission_hidden.py +0 -0
  115. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/migrations/0004_auto_20171024_1245.py +0 -0
  116. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/migrations/__init__.py +0 -0
  117. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/permissions.py +0 -0
  118. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/templates/rbac/role-add-window.js +0 -0
  119. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/templates/rbac/role-edit-window.js +0 -0
  120. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/templates/rbac/roles-list-window.js +0 -0
  121. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/templates/rbac/roles-view-list-window.js +0 -0
  122. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/ui.py +0 -0
  123. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/utils.py +0 -0
  124. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/rbac/validators.py +0 -0
  125. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/simple_auth/__init__.py +0 -0
  126. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/simple_auth/actions.py +0 -0
  127. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/simple_auth/checkers.py +0 -0
  128. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/simple_auth/const.py +0 -0
  129. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/simple_auth/migrations/0001_initial.py +0 -0
  130. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/simple_auth/migrations/__init__.py +0 -0
  131. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/simple_auth/models.py +0 -0
  132. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/simple_auth/static/simple_auth/simple_auth.css +0 -0
  133. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/simple_auth/templates/simple_auth/change_reset_password_page.html +0 -0
  134. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/simple_auth/templates/simple_auth/email/reset_password.html +0 -0
  135. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/simple_auth/templates/simple_auth/login_page.html +0 -0
  136. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/simple_auth/templates/simple_auth/reset_password_page.html +0 -0
  137. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/simple_auth/ui.py +0 -0
  138. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/auth/simple_auth/validators.py +0 -0
  139. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/contingent/__init__.py +0 -0
  140. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/contingent/actions.py +0 -0
  141. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/contingent/app_meta.py +0 -0
  142. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/contingent/base.py +0 -0
  143. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/contingent/catalogs.py +0 -0
  144. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/contingent/contingent_plugin/__init__.py +0 -0
  145. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/contingent/contingent_plugin/actions.py +0 -0
  146. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/contingent/contingent_plugin/apps.py +0 -0
  147. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/contingent/contingent_plugin/migrations/0001_initial.py +0 -0
  148. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/contingent/contingent_plugin/migrations/0002_add_contingent_model_deleted.py +0 -0
  149. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/contingent/contingent_plugin/migrations/__init__.py +0 -0
  150. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/contingent/contingent_plugin/model_views.py +0 -0
  151. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/contingent/contingent_plugin/models.py +0 -0
  152. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/contingent/contingent_plugin/observer.py +0 -0
  153. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/contingent/contingent_plugin/plugin_meta.py +0 -0
  154. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/contingent/contingent_plugin/storage.py +0 -0
  155. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/contingent/contingent_plugin/utils.py +0 -0
  156. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/contingent/json_data/icao.json +0 -0
  157. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/contingent/json_data/okogu.json +0 -0
  158. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/contingent/json_data/oksm.json +0 -0
  159. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/__init__.py +0 -0
  160. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/__init__.py +0 -0
  161. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/fields.py +0 -0
  162. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/migration/__init__.py +0 -0
  163. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/migration/operations.py +0 -0
  164. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/mixins/__init__.py +0 -0
  165. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/mixins/date_interval.py +0 -0
  166. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/model_view/table-view.html +0 -0
  167. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/models.py +0 -0
  168. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/observer.py +0 -0
  169. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/partitioning/README.md +0 -0
  170. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/partitioning/management/__init__.py +0 -0
  171. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/partitioning/management/commands/__init__.py +0 -0
  172. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/partitioning/management/commands/apply_partitioning.py +0 -0
  173. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/partitioning/partitioning.sql +0 -0
  174. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/partitioning/triggers.sql +0 -0
  175. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/routers.py +0 -0
  176. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/signals.py +0 -0
  177. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/validators/__init__.py +0 -0
  178. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/db/validators/simple.py +0 -0
  179. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/storages/__init__.py +0 -0
  180. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/storages/atcfs/README.rst +0 -0
  181. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/storages/atcfs/__init__.py +0 -0
  182. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/storages/atcfs/api.py +0 -0
  183. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/storages/atcfs/exceptions.py +0 -0
  184. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/storages/atcfs/management/__init__.py +0 -0
  185. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/storages/atcfs/management/commands/__init__.py +0 -0
  186. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/storages/atcfs/management/commands/atcfs_migrate.py +0 -0
  187. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/storages/atcfs/models.py +0 -0
  188. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/storages/atcfs/monkey_patching.py +0 -0
  189. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/storages/atcfs/settings.py +0 -0
  190. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/storages/atcfs/storage.py +0 -0
  191. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/django/storages/atcfs/templates/atcfs_unavailable.html +0 -0
  192. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/extjs/__init__.py +0 -0
  193. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/extjs/fields/__init__.py +0 -0
  194. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/extjs/fields/input_params.py +0 -0
  195. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/importer/XLSReader.py +0 -0
  196. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/importer/__init__.py +0 -0
  197. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/importer/api.py +0 -0
  198. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/importer/constants.py +0 -0
  199. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/importer/loggers.py +0 -0
  200. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/importer/proxy.py +0 -0
  201. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/importer/proxy_import.py +0 -0
  202. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/importer/refactoring-notes.txt +0 -0
  203. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/importer/report.py +0 -0
  204. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/importer/test_file.xls +0 -0
  205. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/importer/ui.py +0 -0
  206. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/importer/validators.py +0 -0
  207. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/integration_entities/README.rst +0 -0
  208. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/integration_entities/__init__.py +0 -0
  209. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/integration_entities/consts.py +0 -0
  210. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/integration_entities/entities.py +0 -0
  211. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/integration_entities/enums.py +0 -0
  212. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/integration_entities/helpers.py +0 -0
  213. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/integration_entities/mixins.py +0 -0
  214. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ioc/__init__.py +0 -0
  215. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/logger/__init__.py +0 -0
  216. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/logger/app_settings.py +0 -0
  217. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/logger/apps.py +0 -0
  218. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/logger/consts.py +0 -0
  219. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/logger/formatters.py +0 -0
  220. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/logger/helpers.py +0 -0
  221. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/logger/records.py +0 -0
  222. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/m3/extensions/__init__.py +0 -0
  223. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/m3/extensions/listeners/__init__.py +0 -0
  224. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/m3/extensions/listeners/delete_check/__init__.py +0 -0
  225. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/m3/extensions/listeners/delete_check/cancel-confirm-window.js +0 -0
  226. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/m3/extensions/listeners/delete_check/mixins.py +0 -0
  227. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/m3/extensions/listeners/delete_check/related-objects-window.html +0 -0
  228. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/m3/extensions/listeners/delete_check/signals.py +0 -0
  229. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/m3/extensions/listeners/delete_check/ui.py +0 -0
  230. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/m3/extensions/listeners/delete_check/utils.py +0 -0
  231. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/m3/extensions/ui.py +0 -0
  232. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/m3/transaction_context.py +0 -0
  233. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/objectpack/__init__.py +0 -0
  234. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/objectpack/actions.py +0 -0
  235. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/objectpack/apps.py +0 -0
  236. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/objectpack/filters.py +0 -0
  237. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/objectpack/templates/base-grid-window.js +0 -0
  238. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/objectpack/templates/filter-panel.js +0 -0
  239. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/objectpack/templates/grid-panel.js +0 -0
  240. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/objectpack/templates/multiSelectWindow.js +0 -0
  241. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/objectpack/templates/multiselect-page-fix.js +0 -0
  242. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/objectpack/templates/relations-check-mixin-template.html +0 -0
  243. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/objectpack/ui.py +0 -0
  244. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/__init__.py +0 -0
  245. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/actions.py +0 -0
  246. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/README.rst +0 -0
  247. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/__init__.py +0 -0
  248. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/app_meta.py +0 -0
  249. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/apps.py +0 -0
  250. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/builders/__init__.py +0 -0
  251. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/builders/excel/__init__.py +0 -0
  252. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/builders/excel/_header.py +0 -0
  253. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/builders/excel/constants.py +0 -0
  254. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/builders/excel/product.py +0 -0
  255. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/builders/excel/with_merged_cells.py +0 -0
  256. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/config.py +0 -0
  257. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/constants.py +0 -0
  258. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/editor/__init__.py +0 -0
  259. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/editor/actions.py +0 -0
  260. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/editor/edit-window.js +0 -0
  261. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/editor/list-window.js +0 -0
  262. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/editor/ui.py +0 -0
  263. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/exceptions.py +0 -0
  264. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/migrations/0001_initial.py +0 -0
  265. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/migrations/0002_report_filters.py +0 -0
  266. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/migrations/0003_reportfilter_exclude.py +0 -0
  267. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/migrations/0004_reportfilter_fields.py +0 -0
  268. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/migrations/0005_reportcolumn_visible.py +0 -0
  269. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/migrations/0006_reportsorting.py +0 -0
  270. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/migrations/0007_include_available_units.py +0 -0
  271. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/migrations/0008_auto_20170407_1318.py +0 -0
  272. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/migrations/0009_auto_20180405_0642.py +0 -0
  273. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/migrations/0010_add_aggregate_fields.py +0 -0
  274. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/migrations/__init__.py +0 -0
  275. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/mixins.py +0 -0
  276. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/models.py +0 -0
  277. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/plugin_meta.py +0 -0
  278. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/registries.py +0 -0
  279. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/utils.py +0 -0
  280. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/constructor/validators.py +0 -0
  281. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/reporter.py +0 -0
  282. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/report/utils.py +0 -0
  283. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/rest/__init__.py +0 -0
  284. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/rest/actions.py +0 -0
  285. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/rest/context.py +0 -0
  286. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/rest/controllers.py +0 -0
  287. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/rest/misc.py +0 -0
  288. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/rest/mixins.py +0 -0
  289. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/secure_media/README.rst +0 -0
  290. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/secure_media/__init__.py +0 -0
  291. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/thread_data.py +0 -0
  292. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/__init__.py +0 -0
  293. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/caching.py +0 -0
  294. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/conversion.py +0 -0
  295. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/crypto.py +0 -0
  296. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/date.py +0 -0
  297. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/db/__init__.py +0 -0
  298. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/db/postgresql.py +0 -0
  299. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/fonts/Arial.ttf +0 -0
  300. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/fonts/Calibri.ttf +0 -0
  301. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/fonts/Tahoma.ttf +0 -0
  302. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/fonts/__init__.py +0 -0
  303. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/licence/__init__.py +0 -0
  304. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/licence/converters.py +0 -0
  305. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/misc.py +0 -0
  306. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/object_grid.py +0 -0
  307. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/patches.py +0 -0
  308. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/plugins.py +0 -0
  309. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/registry.py +0 -0
  310. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/seqtools.py +0 -0
  311. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/serializer.py +0 -0
  312. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/storage.py +0 -0
  313. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/system.py +0 -0
  314. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/system_app/__init__.py +0 -0
  315. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/system_app/management/__init__.py +0 -0
  316. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/system_app/management/commands/__init__.py +0 -0
  317. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/system_app/templatetags/__init__.py +0 -0
  318. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/system_app/templatetags/educommon.py +0 -0
  319. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/ui.py +0 -0
  320. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/xml/__init__.py +0 -0
  321. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/xml/catalog.json +0 -0
  322. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/xml/resolver.py +0 -0
  323. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/xml/saml-schema-assertion-2.0.xsd +0 -0
  324. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/xml/saml-schema-protocol-2.0.xsd +0 -0
  325. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/xml/xenc-schema.xsd +0 -0
  326. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/utils/xml/xmldsig-core-schema.xsd +0 -0
  327. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/README.rst +0 -0
  328. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/__init__.py +0 -0
  329. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/actions.py +0 -0
  330. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/app_meta.py +0 -0
  331. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/base.py +0 -0
  332. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/migrations/0001_initial.py +0 -0
  333. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/migrations/0002_auto_20160628_1334.py +0 -0
  334. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/migrations/0003_add_fields_to_smev_logs.py +0 -0
  335. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/migrations/0004_auto_20160727_1600.py +0 -0
  336. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/migrations/0005_auto_20161130_1615.py +0 -0
  337. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/migrations/0006_auto_20170327_1027.py +0 -0
  338. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/migrations/0007_auto_20180607_1040.py +0 -0
  339. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/migrations/0008_auto_20180713_1445.py +0 -0
  340. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/migrations/0009_auto_20201130_1553.py +0 -0
  341. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/migrations/__init__.py +0 -0
  342. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/models.py +0 -0
  343. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/provider.py +0 -0
  344. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/report.py +0 -0
  345. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/smev/__init__.py +0 -0
  346. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/smev/applications.py +0 -0
  347. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/smev/exceptions.py +0 -0
  348. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/templates/report/smev_logs.xlsx +0 -0
  349. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/templates/ui-js/smev-logs-list-window.js +0 -0
  350. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/templates/ui-js/smev-logs-report-setting-window.js +0 -0
  351. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/ui.py +0 -0
  352. {educommon-3.9.2 → educommon-3.9.4}/src/educommon/ws_log/utils.py +0 -0
  353. {educommon-3.9.2 → educommon-3.9.4}/src/educommon.egg-info/SOURCES.txt +0 -0
  354. {educommon-3.9.2 → educommon-3.9.4}/src/educommon.egg-info/dependency_links.txt +0 -0
  355. {educommon-3.9.2 → educommon-3.9.4}/src/educommon.egg-info/top_level.txt +0 -0
  356. {educommon-3.9.2 → educommon-3.9.4}/tests/test_contingent_plugin_utils.py +0 -0
  357. {educommon-3.9.2 → educommon-3.9.4}/tests/test_dates_splitter.py +0 -0
  358. {educommon-3.9.2 → educommon-3.9.4}/tests/test_delete_check.py +0 -0
  359. {educommon-3.9.2 → educommon-3.9.4}/tests/test_delete_objects.py +0 -0
  360. {educommon-3.9.2 → educommon-3.9.4}/tests/test_django_db_utils.py +0 -0
  361. {educommon-3.9.2 → educommon-3.9.4}/tests/test_interval_mixins.py +0 -0
  362. {educommon-3.9.2 → educommon-3.9.4}/tests/test_patches.py +0 -0
  363. {educommon-3.9.2 → educommon-3.9.4}/tests/test_personal_data_fields.py +0 -0
  364. {educommon-3.9.2 → educommon-3.9.4}/tests/test_report.py +0 -0
  365. {educommon-3.9.2 → educommon-3.9.4}/tests/test_service_db_router.py +0 -0
  366. {educommon-3.9.2 → educommon-3.9.4}/tests/test_utils.py +0 -0
  367. {educommon-3.9.2 → educommon-3.9.4}/tests/test_utils_plugins.py +0 -0
  368. {educommon-3.9.2 → educommon-3.9.4}/tests/test_validators.py +0 -0
  369. {educommon-3.9.2 → educommon-3.9.4}/tests/tests_rbac.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: educommon
3
- Version: 3.9.2
3
+ Version: 3.9.4
4
4
  Summary: Общая кодовая база для проектов БЦ Образование
5
5
  Home-page: https://stash.bars-open.ru/projects/EDUBASE/repos/educommon
6
6
  Author: BARS Group
@@ -17,7 +17,8 @@ Classifier: Programming Language :: Python :: 3.8
17
17
  Classifier: Programming Language :: Python :: 3.9
18
18
  Classifier: Framework :: Django :: 2.2
19
19
  Classifier: Framework :: Django :: 3.0
20
- Requires-Dist: Django<3.1,>=2.2
20
+ Requires-Dist: packaging<24,>=21.3
21
+ Requires-Dist: Django<3.2,>=2.2
21
22
  Requires-Dist: django-mptt
22
23
  Requires-Dist: python-dateutil
23
24
  Requires-Dist: termcolor
@@ -46,7 +46,8 @@ def main():
46
46
  'm3-builder>=1.2,<2',
47
47
  ),
48
48
  install_requires=(
49
- 'Django>=2.2,<3.1',
49
+ 'packaging>=21.3,<24',
50
+ 'Django>=2.2,<3.2',
50
51
  'django-mptt',
51
52
  'python-dateutil',
52
53
  'termcolor',
@@ -24,8 +24,9 @@ from django.utils.dateparse import (
24
24
  parse_time,
25
25
  )
26
26
  from django.utils.encoding import (
27
- force_text,
27
+ force_str,
28
28
  )
29
+
29
30
  from m3_django_compat import (
30
31
  get_related,
31
32
  )
@@ -78,7 +79,7 @@ class LogProxy(AuditLog):
78
79
  if model:
79
80
  verbose = model._meta.verbose_name
80
81
  if verbose:
81
- return ' - '.join((force_text(verbose), model.__name__))
82
+ return ' - '.join((force_str(verbose), model.__name__))
82
83
  return model.__name__
83
84
  return self.table.name
84
85
 
@@ -130,7 +131,7 @@ class LogProxy(AuditLog):
130
131
  if self.fields:
131
132
  field = self.fields.get(column_name)
132
133
  if field and field.verbose_name:
133
- name = force_text(field.verbose_name)
134
+ name = force_str(field.verbose_name)
134
135
  return name
135
136
 
136
137
  def convert_field_value(self, column_name, value):
@@ -169,7 +170,7 @@ class LogProxy(AuditLog):
169
170
  value = get_choice(field.choices, value)
170
171
  except (ValueError, TypeError):
171
172
  pass
172
- return force_text(value)
173
+ return force_str(value)
173
174
 
174
175
  @property
175
176
  def object_string(self):
@@ -5,14 +5,12 @@ from django.contrib.contenttypes.models import (
5
5
  )
6
6
  from django.core.exceptions import (
7
7
  NON_FIELD_ERRORS,
8
+ FieldDoesNotExist,
8
9
  ValidationError,
9
10
  )
10
11
  from django.db import (
11
12
  models,
12
13
  )
13
- from django.db.models.fields import (
14
- FieldDoesNotExist,
15
- )
16
14
  from django.db.models.signals import (
17
15
  post_delete,
18
16
  pre_delete,
@@ -20,6 +18,7 @@ from django.db.models.signals import (
20
18
  from django.dispatch import (
21
19
  receiver,
22
20
  )
21
+
23
22
  from m3 import (
24
23
  ApplicationLogicException,
25
24
  )
@@ -1,6 +1,7 @@
1
- from django.conf.urls import (
2
- url,
1
+ from django.urls import (
2
+ re_path,
3
3
  )
4
+
4
5
  from m3.actions import (
5
6
  ControllerCache,
6
7
  )
@@ -9,7 +10,6 @@ from m3_ext.ui.app_ui import (
9
10
  DesktopLoader,
10
11
  DesktopShortcut,
11
12
  )
12
-
13
13
  from objectpack.desktop import (
14
14
  uificate_the_controller,
15
15
  )
@@ -51,5 +51,5 @@ def register_desktop_menu():
51
51
  def register_urlpatterns():
52
52
  """Регистрация URL контроллера."""
53
53
  return [
54
- url(*auth_controller.urlpattern),
54
+ re_path(*auth_controller.urlpattern),
55
55
  ]
@@ -107,7 +107,7 @@ class Manager(DjangoManager):
107
107
  return QuerySet(self.model, using=self._db)
108
108
 
109
109
 
110
- pre_clean = Signal(providing_args=('errors',))
110
+ pre_clean = Signal()
111
111
  """Сигнал, отправляемый перед валидацией модели.
112
112
 
113
113
  :param defaultdict errors: Словарь, содержащий ошибки валидации экземпляра
@@ -119,7 +119,7 @@ pre_clean = Signal(providing_args=('errors',))
119
119
  """
120
120
 
121
121
 
122
- post_clean = Signal(providing_args=('errors',))
122
+ post_clean = Signal()
123
123
  """Сигнал, отправляемый после валидации модели.
124
124
 
125
125
  :param defaultdict errors: Словарь, содержащий ошибки валидации экземпляра
@@ -16,8 +16,9 @@ from django.template.loader import (
16
16
  render_to_string,
17
17
  )
18
18
  from django.utils.encoding import (
19
- force_text,
19
+ force_str,
20
20
  )
21
+
21
22
  from m3_django_compat import (
22
23
  get_model,
23
24
  )
@@ -132,7 +133,7 @@ class JoinedAttrValues(DataExtractor):
132
133
  values = []
133
134
  for field_name in self._field_names:
134
135
  try:
135
- value = force_text(get_nested_attr(obj, field_name) or '')
136
+ value = force_str(get_nested_attr(obj, field_name) or '')
136
137
  except AttributeError:
137
138
  return ''
138
139
  else:
@@ -154,7 +155,7 @@ class FieldChoiceValue(DataExtractor):
154
155
  except AttributeError:
155
156
  return ''
156
157
  else:
157
- return force_text(
158
+ return force_str(
158
159
  dict(field.flatchoices).get(value, value),
159
160
  strings_only=True
160
161
  )
@@ -227,7 +227,7 @@ def set_partitioning_for_model(model, column_name, force=False):
227
227
  значение будет определять раздел таблицы, в который будет помещена
228
228
  запись.
229
229
 
230
- :raises django.db.models.fields.FieldDoesNotExist: если модель *model* не
230
+ :raises django.core.exceptions.FieldDoesNotExist: если модель *model* не
231
231
  содержит поля *column_name*
232
232
  """
233
233
  database_alias, table_name, pk_column_name = _get_model_params(model)
@@ -258,7 +258,7 @@ def split_table(model, column_name, timeout=0):
258
258
  :param float timeout: Время ожидания в секундах между переносом записей
259
259
  (можно использовать для снижения нагрузки на СУБД).
260
260
 
261
- :raises django.db.models.fields.FieldDoesNotExist: если модель *model* не
261
+ :raises django.core.exceptions.FieldDoesNotExist: если модель *model* не
262
262
  содержит поля *column_name*
263
263
  """
264
264
  database_alias, table_name, pk_column_name = _get_model_params(model)
@@ -1,9 +1,10 @@
1
+ from django.core.exceptions import (
2
+ FieldDoesNotExist,
3
+ )
1
4
  from django.core.management.base import (
2
5
  CommandError,
3
6
  )
4
- from django.db.models.fields import (
5
- FieldDoesNotExist,
6
- )
7
+
7
8
  from m3_django_compat import (
8
9
  BaseCommand,
9
10
  get_model,
@@ -1,9 +1,10 @@
1
+ from django.core.exceptions import (
2
+ FieldDoesNotExist,
3
+ )
1
4
  from django.core.management.base import (
2
5
  CommandError,
3
6
  )
4
- from django.db.models.fields import (
5
- FieldDoesNotExist,
6
- )
7
+
7
8
  from m3_django_compat import (
8
9
  BaseCommand,
9
10
  get_model,
@@ -9,13 +9,18 @@ from weakref import (
9
9
  WeakKeyDictionary,
10
10
  )
11
11
 
12
- import django
13
12
  from django.core.validators import (
14
13
  MaxLengthValidator,
15
14
  )
16
15
  from django.db.models.base import (
17
16
  ModelBase,
18
17
  )
18
+ from django.db.models.expressions import (
19
+ Func,
20
+ )
21
+ from django.db.models.lookups import (
22
+ Lookup,
23
+ )
19
24
  from django.db.models.signals import (
20
25
  post_delete,
21
26
  post_save,
@@ -23,6 +28,7 @@ from django.db.models.signals import (
23
28
  from django.dispatch.dispatcher import (
24
29
  receiver,
25
30
  )
31
+
26
32
  from m3_django_compat import (
27
33
  ModelOptions,
28
34
  atomic,
@@ -203,65 +209,58 @@ class LazyModel:
203
209
  return self._model
204
210
 
205
211
 
206
- if django.VERSION >= (1, 8):
207
- from django.db.models.expressions import (
208
- Func,
209
- )
210
- from django.db.models.lookups import (
211
- Lookup,
212
- )
212
+ class SmartExact(Func):
213
+ """Удаляет пробелы из строки и заменяет буквы ё на е."""
213
214
 
214
- class SmartExact(Func):
215
- """Удаляет пробелы из строки и заменяет буквы ё на е."""
215
+ template = "TRANSLATE(%(expressions)s, 'ёЁ ', 'еЕ')"
216
216
 
217
- template = "TRANSLATE(%(expressions)s, 'ёЁ ', 'еЕ')"
217
+ class SmartExactLookup(Lookup):
218
+ """Удаляет пробелы из строки и заменяет буквы ё на е."""
218
219
 
219
- class SmartExactLookup(Lookup):
220
- """Удаляет пробелы из строки и заменяет буквы ё на е."""
220
+ lookup_name = 'smart_exact'
221
221
 
222
- lookup_name = 'smart_exact'
222
+ def as_postgresql(self, compiler, connection):
223
+ lhs, lhs_params = self.process_lhs(compiler, connection)
224
+ rhs, rhs_params = self.process_rhs(compiler, connection)
223
225
 
224
- def as_postgresql(self, compiler, connection):
225
- lhs, lhs_params = self.process_lhs(compiler, connection)
226
- rhs, rhs_params = self.process_rhs(compiler, connection)
226
+ sql = "TRANSLATE(%s, 'ёЁ ', 'еЕ')"
227
+ sql = '{sql} = {sql}'.format(sql=sql)
227
228
 
228
- sql = "TRANSLATE(%s, 'ёЁ ', 'еЕ')"
229
- sql = '{sql} = {sql}'.format(sql=sql)
229
+ return sql % (lhs, rhs), lhs_params + rhs_params
230
230
 
231
- return sql % (lhs, rhs), lhs_params + rhs_params
231
+ class SmartIExact(Func):
232
+ """Переводит в верхний регистр, удаляет пробелы, заменяет Ё на Е."""
232
233
 
233
- class SmartIExact(Func):
234
- """Переводит в верхний регистр, удаляет пробелы, заменяет Ё на Е."""
234
+ template = "TRANSLATE(UPPER(%(expressions)s), 'Ё ', 'Е')"
235
235
 
236
- template = "TRANSLATE(UPPER(%(expressions)s), 'Ё ', 'Е')"
236
+ class SmartIExactLookup(Lookup):
237
+ """Переводит в верхний регистр, удаляет пробелы, заменяет Ё на Е."""
237
238
 
238
- class SmartIExactLookup(Lookup):
239
- """Переводит в верхний регистр, удаляет пробелы, заменяет Ё на Е."""
239
+ lookup_name = 'smart_iexact'
240
240
 
241
- lookup_name = 'smart_iexact'
241
+ def as_postgresql(self, compiler, connection):
242
+ lhs, lhs_params = self.process_lhs(compiler, connection)
243
+ rhs, rhs_params = self.process_rhs(compiler, connection)
242
244
 
243
- def as_postgresql(self, compiler, connection):
244
- lhs, lhs_params = self.process_lhs(compiler, connection)
245
- rhs, rhs_params = self.process_rhs(compiler, connection)
245
+ sql = "TRANSLATE(UPPER(%s), 'Ё ', 'Е')"
246
+ sql = '{sql} = {sql}'.format(sql=sql)
246
247
 
247
- sql = "TRANSLATE(UPPER(%s), ', 'Е')"
248
- sql = '{sql} = {sql}'.format(sql=sql)
248
+ return sql % (lhs, rhs), lhs_params + rhs_params
249
249
 
250
- return sql % (lhs, rhs), lhs_params + rhs_params
250
+ class SmartIContainsLookup(Lookup):
251
+ """Регистронезависимый поиск.
251
252
 
252
- class SmartIContainsLookup(Lookup):
253
- """
254
- Переводит в верхний регистр, удаляет пробелы, заменяет Ё на Е,
255
- проверяет вхождение текста.
256
- """
253
+ Переводит в верхний регистр, удаляет пробелы, заменяет Ё на Е, проверяет
254
+ вхождение текста.
255
+ """
257
256
 
258
- lookup_name = 'smart_icontains'
257
+ lookup_name = 'smart_icontains'
259
258
 
260
- def as_postgresql(self, compiler, connection):
261
- lhs, lhs_params = self.process_lhs(compiler, connection)
262
- rhs, rhs_params = self.process_rhs(compiler, connection)
259
+ def as_postgresql(self, compiler, connection):
260
+ lhs, lhs_params = self.process_lhs(compiler, connection)
261
+ rhs, rhs_params = self.process_rhs(compiler, connection)
263
262
 
264
- sql = "TRANSLATE(UPPER(%s), 'Ё ', 'Е')"
265
- sql = "{sql} like '%%%%' || {sql} || '%%%%'".format(sql=sql)
263
+ sql = "TRANSLATE(UPPER(%s), 'Ё ', 'Е')"
264
+ sql = "{sql} like '%%%%' || {sql} || '%%%%'".format(sql=sql)
266
265
 
267
- return sql % (lhs, rhs), lhs_params + rhs_params
266
+ return sql % (lhs, rhs), lhs_params + rhs_params
@@ -1,5 +1,5 @@
1
- from django.conf.urls import (
2
- url,
1
+ from django.urls import (
2
+ re_path,
3
3
  )
4
4
  from django.views.generic import (
5
5
  TemplateView,
@@ -8,7 +8,7 @@ from django.views.generic import (
8
8
 
9
9
  def register_urlpatterns():
10
10
  urlpatterns = [
11
- url(
11
+ re_path(
12
12
  r'^atcfs_unavailable/$',
13
13
  TemplateView.as_view(template_name='atcfs_unavailable.html'),
14
14
  name='atcfs_unavailable'
@@ -11,7 +11,7 @@ from typing import (
11
11
  )
12
12
 
13
13
  from django.utils.encoding import (
14
- smart_text,
14
+ smart_str,
15
15
  )
16
16
  from packaging.version import (
17
17
  Version,
@@ -101,7 +101,7 @@ class WebEduLogger(getLoggerClass()):
101
101
  exc_info = sys.exc_info()
102
102
 
103
103
  session_info = get_session_info(request)
104
- msg = f'{session_info}{smart_text(msg)}'
104
+ msg = f'{session_info}{smart_str(msg)}'
105
105
 
106
106
  record = self.makeRecord(self.name, level, fn, lno, msg, args, exc_info, func, extra, sinfo)
107
107
  self.handle(record)
@@ -17,14 +17,14 @@ from django.db.transaction import (
17
17
  atomic,
18
18
  )
19
19
  from django.utils.encoding import (
20
- force_text,
20
+ force_str,
21
21
  )
22
+
22
23
  from m3.actions import (
23
24
  Action,
24
25
  ActionPack,
25
26
  ControllerCache,
26
27
  )
27
-
28
28
  from objectpack.exceptions import (
29
29
  ValidationError as ObjectPackValidationError,
30
30
  )
@@ -179,7 +179,7 @@ class ModelProxyValidationMixin:
179
179
  # объект будет создан при сохранении составной
180
180
  # модели.
181
181
  field = self._meta.get_field(full_field_name)
182
- if force_text(field.error_messages['null']) in messages:
182
+ if force_str(field.error_messages['null']) in messages:
183
183
  messages.remove(field.error_messages['null'])
184
184
  if not messages:
185
185
  continue
@@ -50,9 +50,7 @@ class DeleteCheck:
50
50
  #: :param related_objects: Словарь, сопоставляющий удаляемые
51
51
  #: и зависимые объекты.
52
52
  #: :type related_objects: collections.defaultdict
53
- collect_implicit = Signal(
54
- providing_args=['objects_to_delete', 'related_objects']
55
- )
53
+ collect_implicit = Signal()
56
54
 
57
55
  def _get_message(self, objects):
58
56
  """Возвращает сообщение в правильном склонении."""
@@ -17,8 +17,9 @@ from django.db.models.fields.reverse_related import (
17
17
  OneToOneRel,
18
18
  )
19
19
  from django.utils.encoding import (
20
- force_text,
20
+ force_str,
21
21
  )
22
+
22
23
  from m3_django_compat import (
23
24
  ModelOptions,
24
25
  get_related,
@@ -230,6 +231,11 @@ class ColumnDescriptor:
230
231
  )
231
232
  if skip_field(descriptor.parent.model, field, accessor_name):
232
233
  return True
234
+ # проверка, что связанная модель поля, не связана с родительскими моделями полей
235
+ if (getattr(field, 'related_model', None) and
236
+ field.related_model in descriptor.parent.related_field_models
237
+ ):
238
+ return True
233
239
 
234
240
  descriptor = descriptor.parent
235
241
  # проверка модели источника данных
@@ -250,13 +256,32 @@ class ColumnDescriptor:
250
256
 
251
257
  return model
252
258
 
259
+ @cached_property
260
+ def related_field_models(self):
261
+ """Связанные модели полей."""
262
+ fields_models = set()
263
+ # Для первых в корне добавляем модели источника данных.
264
+ if self.parent is None:
265
+ data_source_columns = tuple(self.data_source.get_available_columns())
266
+ fields_models.update({column.model for column in data_source_columns if column.model})
267
+ fields_models.add(self.data_source.model)
268
+
269
+ # получаем поля текущего экземпляра
270
+ if self.model:
271
+ fields = self.model._meta.get_fields()
272
+ fields_models.update({field.related_model for field in fields if field.related_model})
273
+ # добавляем саму модель экземпляра, если она есть
274
+ fields_models.add(self.model)
275
+
276
+ return fields_models
277
+
253
278
  @property
254
279
  def accessor_name(self):
255
- return force_text(_get_accessor_name(self.field))
280
+ return force_str(_get_accessor_name(self.field))
256
281
 
257
282
  @property
258
283
  def lookup(self):
259
- return force_text(self.field.name)
284
+ return force_str(self.field.name)
260
285
 
261
286
  @property
262
287
  def full_accessor_name(self):
@@ -311,7 +336,7 @@ class ColumnDescriptor:
311
336
  else:
312
337
  result = self.field.verbose_name
313
338
 
314
- return force_text(result)
339
+ return force_str(result)
315
340
 
316
341
  def get_full_title(self, delimiter=' → '):
317
342
  """Возвращает полное наименование с учетом иерархии.
@@ -521,13 +546,13 @@ class _ModelDataSourceInfo:
521
546
  """Внутрисистемное имя источника данных."""
522
547
  result = '.'.join((self._model.app_label, self._model.model_name))
523
548
 
524
- return force_text(result)
549
+ return force_str(result)
525
550
 
526
551
  @cached_property
527
552
  def title(self):
528
553
  """Отображаемое пользователю наименование источника данных."""
529
554
  result = getattr(self.model, '_meta').verbose_name
530
- return force_text(result)
555
+ return force_str(result)
531
556
 
532
557
 
533
558
  class ModelDataSourceParams(_ModelDataSourceInfo):
@@ -32,15 +32,16 @@ from django.forms.fields import (
32
32
  BooleanField,
33
33
  )
34
34
  from django.utils.encoding import (
35
- force_text,
36
- )
37
- from m3.actions.exceptions import (
38
- ApplicationLogicException,
35
+ force_str,
39
36
  )
40
37
  from xlsxwriter import (
41
38
  Workbook,
42
39
  )
43
40
 
41
+ from m3.actions.exceptions import (
42
+ ApplicationLogicException,
43
+ )
44
+
44
45
  from educommon.report.constructor import (
45
46
  constants,
46
47
  )
@@ -898,7 +899,7 @@ class DataLoader:
898
899
  def _get_field_display(field, field_value):
899
900
  for value, name in field.flatchoices:
900
901
  if value == field_value:
901
- return force_text(name, strings_only=True)
902
+ return force_str(name, strings_only=True)
902
903
 
903
904
  @staticmethod
904
905
  def _get_object_data(obj, attr_name, nested):
@@ -6,18 +6,19 @@ from django import (
6
6
  from django.conf import (
7
7
  settings,
8
8
  )
9
- from django.conf.urls import (
10
- url,
9
+ from django.urls import (
10
+ re_path,
11
11
  )
12
+ from sendfile import (
13
+ sendfile,
14
+ )
15
+
12
16
  from m3 import (
13
17
  M3JSONEncoder,
14
18
  )
15
19
  from m3_django_compat import (
16
20
  is_authenticated,
17
21
  )
18
- from sendfile import (
19
- sendfile,
20
- )
21
22
 
22
23
 
23
24
  def check_autorization(request, path):
@@ -40,5 +41,5 @@ def check_autorization(request, path):
40
41
 
41
42
 
42
43
  urlpatterns = [
43
- url(r'^media/(?P<path>.*)$', check_autorization)
44
+ re_path(r'^media/(?P<path>.*)$', check_autorization)
44
45
  ]
@@ -24,7 +24,7 @@ from django.db import (
24
24
  connections,
25
25
  )
26
26
  from django.utils.encoding import (
27
- force_text,
27
+ force_str,
28
28
  )
29
29
 
30
30
 
@@ -70,7 +70,7 @@ def call_custom_command(command_name, *args, **options):
70
70
  parser.add_argument(com, action='store')
71
71
  else:
72
72
  parser.add_argument(com)
73
- defaults = parser.parse_args(args=[force_text(a) for a in args])
73
+ defaults = parser.parse_args(args=[force_str(a) for a in args])
74
74
  defaults = dict(defaults._get_kwargs(), **arg_options)
75
75
  # Move positional args out of options to mimic legacy optparse
76
76
  args = defaults.pop('args', ())
@@ -4,8 +4,8 @@
4
4
  # нормальной установки обновлений.
5
5
 
6
6
  [version]
7
- BRANCH = tags/3.9.2^0
8
- VERSION = 3.9.2
9
- REVISION = da80b4e265b466aafffa36b94db108b4b01fae9f
10
- VERSION_DATE = 06.03.2024
11
- REVISION_DATE = 06.03.2024
7
+ BRANCH = tags/3.9.4^0
8
+ VERSION = 3.9.4
9
+ REVISION = b525751553abee2f4deac7b1783499fb00ef29f5
10
+ VERSION_DATE = 03.04.2024
11
+ REVISION_DATE = 03.04.2024
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: educommon
3
- Version: 3.9.2
3
+ Version: 3.9.4
4
4
  Summary: Общая кодовая база для проектов БЦ Образование
5
5
  Home-page: https://stash.bars-open.ru/projects/EDUBASE/repos/educommon
6
6
  Author: BARS Group
@@ -17,7 +17,8 @@ Classifier: Programming Language :: Python :: 3.8
17
17
  Classifier: Programming Language :: Python :: 3.9
18
18
  Classifier: Framework :: Django :: 2.2
19
19
  Classifier: Framework :: Django :: 3.0
20
- Requires-Dist: Django<3.1,>=2.2
20
+ Requires-Dist: packaging<24,>=21.3
21
+ Requires-Dist: Django<3.2,>=2.2
21
22
  Requires-Dist: django-mptt
22
23
  Requires-Dist: python-dateutil
23
24
  Requires-Dist: termcolor
@@ -1,4 +1,5 @@
1
- Django<3.1,>=2.2
1
+ packaging<24,>=21.3
2
+ Django<3.2,>=2.2
2
3
  django-mptt
3
4
  python-dateutil
4
5
  termcolor
File without changes
File without changes
File without changes
File without changes