educommon 3.6.0__tar.gz → 3.6.1__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 (352) hide show
  1. {educommon-3.6.0/src/educommon.egg-info → educommon-3.6.1}/PKG-INFO +2 -2
  2. {educommon-3.6.0 → educommon-3.6.1}/setup.py +1 -1
  3. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/integration_entities/helpers.py +22 -0
  4. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/version.conf +5 -5
  5. {educommon-3.6.0 → educommon-3.6.1/src/educommon.egg-info}/PKG-INFO +2 -2
  6. {educommon-3.6.0 → educommon-3.6.1}/src/educommon.egg-info/requires.txt +1 -1
  7. {educommon-3.6.0 → educommon-3.6.1}/MANIFEST.in +0 -0
  8. {educommon-3.6.0 → educommon-3.6.1}/README.rst +0 -0
  9. {educommon-3.6.0 → educommon-3.6.1}/UPGRADE.rst +0 -0
  10. {educommon-3.6.0 → educommon-3.6.1}/setup.cfg +0 -0
  11. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/__init__.py +0 -0
  12. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/about/README.rst +0 -0
  13. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/about/__init__.py +0 -0
  14. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/about/apps.py +0 -0
  15. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/about/static/edu_about/barsgroup.png +0 -0
  16. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/about/ui/__init__.py +0 -0
  17. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/about/ui/about-window.js +0 -0
  18. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/about/ui/actions.py +0 -0
  19. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/about/ui/common-tab.html +0 -0
  20. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/about/ui/packages-tab.js +0 -0
  21. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/about/ui/postgresql-extensions-tab.js +0 -0
  22. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/about/ui/ui.py +0 -0
  23. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/about/utils.py +0 -0
  24. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/async_tasks/__init__.py +0 -0
  25. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/async_tasks/apps.py +0 -0
  26. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/async_tasks/exceptions.py +0 -0
  27. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/async_tasks/fixtures/initial_data.json +0 -0
  28. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/async_tasks/locks.py +0 -0
  29. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/async_tasks/migrations/0001_initial.py +0 -0
  30. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/async_tasks/migrations/0002_load_initial_data.py +0 -0
  31. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/async_tasks/migrations/__init__.py +0 -0
  32. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/async_tasks/models.py +0 -0
  33. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/async_tasks/statuses.py +0 -0
  34. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/async_tasks/tasks.py +0 -0
  35. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/__init__.py +0 -0
  36. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/actions.py +0 -0
  37. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/app_meta.py +0 -0
  38. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/apps.py +0 -0
  39. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/constants.py +0 -0
  40. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/error_log/__init__.py +0 -0
  41. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/error_log/actions.py +0 -0
  42. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/helpers.py +1 -1
  43. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/management/__init__.py +0 -0
  44. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/management/commands/__init__.py +0 -0
  45. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/management/commands/reinstall_audit_log.py +0 -0
  46. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/middleware.py +0 -0
  47. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/migrations/0001_initial.py +0 -0
  48. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/migrations/0002_install_audit_log.py +0 -0
  49. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/migrations/0003_logproxy.py +0 -0
  50. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/migrations/0004_reinstall_audit_log.py +0 -0
  51. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/migrations/0005_postgresql_error.py +0 -0
  52. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/migrations/0006_auto_20200806_1707.py +0 -0
  53. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/migrations/0007_create_selective_tables_function.py +0 -0
  54. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/migrations/0008_table_logged.py +0 -0
  55. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/migrations/0009_reinstall_audit_log.py +0 -0
  56. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/migrations/__init__.py +0 -0
  57. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/models.py +0 -0
  58. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/permissions.py +0 -0
  59. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/proxies.py +0 -0
  60. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/routers.py +0 -0
  61. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/sql/configure_audit_log.sql +0 -0
  62. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/sql/install_audit_log.sql +0 -0
  63. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/ui.py +0 -0
  64. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/utils/__init__.py +0 -0
  65. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/audit_log/utils/operations.py +0 -0
  66. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/__init__.py +0 -0
  67. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/__init__.py +0 -0
  68. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/actions.py +0 -0
  69. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/app_meta.py +0 -0
  70. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/backends/__init__.py +0 -0
  71. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/backends/base.py +0 -0
  72. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/backends/caching.py +0 -0
  73. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/backends/simple.py +0 -0
  74. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/checker.py +0 -0
  75. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/config.py +0 -0
  76. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/constants.py +0 -0
  77. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/management/__init__.py +0 -0
  78. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/management/commands/__init__.py +0 -0
  79. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/management/commands/rbac.py +0 -0
  80. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/manager.py +0 -0
  81. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/migrations/0001_initial.py +0 -0
  82. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/migrations/0002_model_modifier_metaclass_fix.py +0 -0
  83. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/migrations/0003_permission_hidden.py +0 -0
  84. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/migrations/0004_auto_20171024_1245.py +0 -0
  85. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/migrations/__init__.py +0 -0
  86. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/models.py +0 -0
  87. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/permissions.py +0 -0
  88. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/templates/rbac/role-add-window.js +0 -0
  89. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/templates/rbac/role-edit-window.js +0 -0
  90. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/templates/rbac/roles-list-window.js +0 -0
  91. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/templates/rbac/roles-view-list-window.js +0 -0
  92. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/ui.py +0 -0
  93. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/utils.py +0 -0
  94. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/rbac/validators.py +0 -0
  95. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/simple_auth/__init__.py +0 -0
  96. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/simple_auth/actions.py +0 -0
  97. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/simple_auth/app_meta.py +0 -0
  98. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/simple_auth/checkers.py +0 -0
  99. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/simple_auth/const.py +0 -0
  100. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/simple_auth/migrations/0001_initial.py +0 -0
  101. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/simple_auth/migrations/__init__.py +0 -0
  102. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/simple_auth/models.py +0 -0
  103. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/simple_auth/static/simple_auth/simple_auth.css +0 -0
  104. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/simple_auth/templates/simple_auth/change_reset_password_page.html +0 -0
  105. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/simple_auth/templates/simple_auth/email/reset_password.html +0 -0
  106. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/simple_auth/templates/simple_auth/login_page.html +0 -0
  107. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/simple_auth/templates/simple_auth/reset_password_page.html +0 -0
  108. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/simple_auth/ui.py +0 -0
  109. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/auth/simple_auth/validators.py +0 -0
  110. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/contingent/__init__.py +0 -0
  111. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/contingent/actions.py +0 -0
  112. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/contingent/app_meta.py +0 -0
  113. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/contingent/base.py +0 -0
  114. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/contingent/catalogs.py +0 -0
  115. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/contingent/contingent_plugin/__init__.py +0 -0
  116. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/contingent/contingent_plugin/actions.py +0 -0
  117. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/contingent/contingent_plugin/apps.py +0 -0
  118. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/contingent/contingent_plugin/migrations/0001_initial.py +0 -0
  119. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/contingent/contingent_plugin/migrations/0002_add_contingent_model_deleted.py +0 -0
  120. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/contingent/contingent_plugin/migrations/__init__.py +0 -0
  121. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/contingent/contingent_plugin/model_views.py +0 -0
  122. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/contingent/contingent_plugin/models.py +0 -0
  123. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/contingent/contingent_plugin/observer.py +0 -0
  124. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/contingent/contingent_plugin/plugin_meta.py +0 -0
  125. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/contingent/contingent_plugin/storage.py +0 -0
  126. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/contingent/contingent_plugin/utils.py +0 -0
  127. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/contingent/json_data/okogu.json +0 -0
  128. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/contingent/json_data/oksm.json +0 -0
  129. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/__init__.py +0 -0
  130. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/__init__.py +0 -0
  131. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/fields.py +0 -0
  132. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/migration/__init__.py +0 -0
  133. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/migration/operations.py +0 -0
  134. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/mixins/__init__.py +0 -0
  135. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/mixins/date_interval.py +0 -0
  136. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/mixins/validation.py +0 -0
  137. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/model_view/__init__.py +0 -0
  138. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/model_view/table-view.html +0 -0
  139. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/models.py +0 -0
  140. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/observer.py +0 -0
  141. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/partitioning/README.md +0 -0
  142. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/partitioning/__init__.py +0 -0
  143. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/partitioning/management/__init__.py +0 -0
  144. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/partitioning/management/commands/__init__.py +0 -0
  145. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/partitioning/management/commands/apply_partitioning.py +0 -0
  146. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/partitioning/management/commands/clear_table.py +0 -0
  147. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/partitioning/management/commands/split_table.py +0 -0
  148. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/partitioning/partitioning.sql +0 -0
  149. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/partitioning/triggers.sql +0 -0
  150. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/routers.py +0 -0
  151. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/signals.py +0 -0
  152. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/utils.py +0 -0
  153. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/validators/__init__.py +0 -0
  154. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/db/validators/simple.py +0 -0
  155. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/storages/__init__.py +0 -0
  156. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/storages/atcfs/README.rst +0 -0
  157. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/storages/atcfs/__init__.py +0 -0
  158. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/storages/atcfs/api.py +0 -0
  159. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/storages/atcfs/app_meta.py +0 -0
  160. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/storages/atcfs/exceptions.py +0 -0
  161. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/storages/atcfs/management/__init__.py +0 -0
  162. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/storages/atcfs/management/commands/__init__.py +0 -0
  163. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/storages/atcfs/management/commands/atcfs_migrate.py +0 -0
  164. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/storages/atcfs/models.py +0 -0
  165. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/storages/atcfs/monkey_patching.py +0 -0
  166. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/storages/atcfs/settings.py +0 -0
  167. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/storages/atcfs/storage.py +0 -0
  168. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/django/storages/atcfs/templates/atcfs_unavailable.html +0 -0
  169. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/extjs/__init__.py +0 -0
  170. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/extjs/fields/__init__.py +0 -0
  171. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/extjs/fields/input_params.py +0 -0
  172. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/importer/XLSReader.py +0 -0
  173. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/importer/__init__.py +0 -0
  174. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/importer/api.py +0 -0
  175. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/importer/constants.py +0 -0
  176. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/importer/loggers.py +0 -0
  177. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/importer/proxy.py +0 -0
  178. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/importer/proxy_import.py +0 -0
  179. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/importer/refactoring-notes.txt +0 -0
  180. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/importer/report.py +0 -0
  181. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/importer/test_file.xls +0 -0
  182. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/importer/ui.py +0 -0
  183. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/importer/validators.py +0 -0
  184. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/integration_entities/README.rst +0 -0
  185. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/integration_entities/__init__.py +0 -0
  186. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/integration_entities/consts.py +0 -0
  187. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/integration_entities/entities.py +0 -0
  188. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/integration_entities/enums.py +0 -0
  189. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/integration_entities/mixins.py +0 -0
  190. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ioc/__init__.py +0 -0
  191. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/logger/__init__.py +0 -0
  192. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/logger/app_settings.py +0 -0
  193. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/logger/apps.py +0 -0
  194. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/logger/consts.py +0 -0
  195. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/logger/formatters.py +0 -0
  196. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/logger/helpers.py +0 -0
  197. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/logger/loggers.py +0 -0
  198. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/logger/records.py +0 -0
  199. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/m3/__init__.py +0 -0
  200. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/m3/extensions/__init__.py +0 -0
  201. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/m3/extensions/listeners/__init__.py +0 -0
  202. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/m3/extensions/listeners/delete_check/__init__.py +0 -0
  203. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/m3/extensions/listeners/delete_check/cancel-confirm-window.js +0 -0
  204. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/m3/extensions/listeners/delete_check/listeners.py +0 -0
  205. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/m3/extensions/listeners/delete_check/mixins.py +0 -0
  206. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/m3/extensions/listeners/delete_check/related-objects-window.html +0 -0
  207. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/m3/extensions/listeners/delete_check/signals.py +0 -0
  208. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/m3/extensions/listeners/delete_check/ui.py +0 -0
  209. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/m3/extensions/listeners/delete_check/utils.py +0 -0
  210. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/m3/extensions/ui.py +0 -0
  211. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/m3/transaction_context.py +0 -0
  212. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/objectpack/__init__.py +0 -0
  213. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/objectpack/actions.py +0 -0
  214. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/objectpack/apps.py +0 -0
  215. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/objectpack/filters.py +0 -0
  216. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/objectpack/templates/base-grid-window.js +0 -0
  217. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/objectpack/templates/filter-panel.js +0 -0
  218. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/objectpack/templates/grid-panel.js +0 -0
  219. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/objectpack/templates/multiSelectWindow.js +0 -0
  220. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/objectpack/templates/multiselect-page-fix.js +0 -0
  221. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/objectpack/templates/relations-check-mixin-template.html +0 -0
  222. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/objectpack/ui.py +0 -0
  223. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/__init__.py +0 -0
  224. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/actions.py +0 -0
  225. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/README.rst +0 -0
  226. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/__init__.py +0 -0
  227. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/app_meta.py +0 -0
  228. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/apps.py +0 -0
  229. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/base.py +0 -0
  230. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/builders/__init__.py +0 -0
  231. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/builders/excel/__init__.py +0 -0
  232. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/builders/excel/_base.py +0 -0
  233. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/builders/excel/_header.py +0 -0
  234. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/builders/excel/constants.py +0 -0
  235. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/builders/excel/product.py +0 -0
  236. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/builders/excel/with_merged_cells.py +0 -0
  237. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/config.py +0 -0
  238. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/constants.py +0 -0
  239. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/editor/__init__.py +0 -0
  240. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/editor/actions.py +0 -0
  241. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/editor/edit-window.js +0 -0
  242. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/editor/list-window.js +0 -0
  243. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/editor/ui.py +0 -0
  244. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/exceptions.py +0 -0
  245. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/migrations/0001_initial.py +0 -0
  246. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/migrations/0002_report_filters.py +0 -0
  247. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/migrations/0003_reportfilter_exclude.py +0 -0
  248. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/migrations/0004_reportfilter_fields.py +0 -0
  249. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/migrations/0005_reportcolumn_visible.py +0 -0
  250. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/migrations/0006_reportsorting.py +0 -0
  251. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/migrations/0007_include_available_units.py +0 -0
  252. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/migrations/0008_auto_20170407_1318.py +0 -0
  253. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/migrations/0009_auto_20180405_0642.py +0 -0
  254. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/migrations/0010_add_aggregate_fields.py +0 -0
  255. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/migrations/__init__.py +0 -0
  256. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/mixins.py +0 -0
  257. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/models.py +0 -0
  258. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/plugin_meta.py +0 -0
  259. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/registries.py +0 -0
  260. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/utils.py +0 -0
  261. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/constructor/validators.py +0 -0
  262. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/reporter.py +0 -0
  263. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/report/utils.py +0 -0
  264. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/rest/__init__.py +0 -0
  265. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/rest/actions.py +0 -0
  266. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/rest/context.py +0 -0
  267. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/rest/controllers.py +0 -0
  268. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/rest/misc.py +0 -0
  269. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/rest/mixins.py +0 -0
  270. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/secure_media/README.rst +0 -0
  271. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/secure_media/__init__.py +0 -0
  272. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/secure_media/app_meta.py +0 -0
  273. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/thread_data.py +0 -0
  274. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/__init__.py +0 -0
  275. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/caching.py +0 -0
  276. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/conversion.py +0 -0
  277. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/crypto.py +0 -0
  278. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/date.py +0 -0
  279. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/db/__init__.py +0 -0
  280. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/db/postgresql.py +0 -0
  281. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/fonts/Arial.ttf +0 -0
  282. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/fonts/Calibri.ttf +0 -0
  283. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/fonts/Tahoma.ttf +0 -0
  284. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/fonts/__init__.py +0 -0
  285. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/licence/__init__.py +0 -0
  286. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/licence/converters.py +0 -0
  287. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/misc.py +0 -0
  288. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/object_grid.py +0 -0
  289. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/patches.py +0 -0
  290. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/plugins.py +0 -0
  291. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/registry.py +0 -0
  292. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/seqtools.py +0 -0
  293. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/serializer.py +0 -0
  294. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/storage.py +0 -0
  295. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/system.py +0 -0
  296. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/system_app/__init__.py +0 -0
  297. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/system_app/management/__init__.py +0 -0
  298. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/system_app/management/commands/__init__.py +0 -0
  299. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/system_app/management/commands/delete_objects.py +0 -0
  300. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/system_app/templatetags/__init__.py +0 -0
  301. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/system_app/templatetags/educommon.py +0 -0
  302. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/ui.py +0 -0
  303. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/xml/__init__.py +0 -0
  304. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/xml/catalog.json +0 -0
  305. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/xml/resolver.py +0 -0
  306. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/xml/saml-schema-assertion-2.0.xsd +0 -0
  307. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/xml/saml-schema-protocol-2.0.xsd +0 -0
  308. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/xml/xenc-schema.xsd +0 -0
  309. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/utils/xml/xmldsig-core-schema.xsd +0 -0
  310. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/README.rst +0 -0
  311. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/__init__.py +0 -0
  312. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/actions.py +0 -0
  313. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/app_meta.py +0 -0
  314. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/base.py +0 -0
  315. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/migrations/0001_initial.py +0 -0
  316. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/migrations/0002_auto_20160628_1334.py +0 -0
  317. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/migrations/0003_add_fields_to_smev_logs.py +0 -0
  318. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/migrations/0004_auto_20160727_1600.py +0 -0
  319. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/migrations/0005_auto_20161130_1615.py +0 -0
  320. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/migrations/0006_auto_20170327_1027.py +0 -0
  321. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/migrations/0007_auto_20180607_1040.py +0 -0
  322. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/migrations/0008_auto_20180713_1445.py +0 -0
  323. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/migrations/0009_auto_20201130_1553.py +0 -0
  324. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/migrations/__init__.py +0 -0
  325. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/models.py +0 -0
  326. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/provider.py +0 -0
  327. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/report.py +0 -0
  328. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/smev/__init__.py +0 -0
  329. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/smev/applications.py +0 -0
  330. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/smev/exceptions.py +0 -0
  331. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/templates/report/smev_logs.xlsx +0 -0
  332. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/templates/ui-js/smev-logs-list-window.js +0 -0
  333. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/templates/ui-js/smev-logs-report-setting-window.js +0 -0
  334. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/ui.py +0 -0
  335. {educommon-3.6.0 → educommon-3.6.1}/src/educommon/ws_log/utils.py +0 -0
  336. {educommon-3.6.0 → educommon-3.6.1}/src/educommon.egg-info/SOURCES.txt +0 -0
  337. {educommon-3.6.0 → educommon-3.6.1}/src/educommon.egg-info/dependency_links.txt +0 -0
  338. {educommon-3.6.0 → educommon-3.6.1}/src/educommon.egg-info/top_level.txt +0 -0
  339. {educommon-3.6.0 → educommon-3.6.1}/tests/test_contingent_plugin_utils.py +0 -0
  340. {educommon-3.6.0 → educommon-3.6.1}/tests/test_dates_splitter.py +0 -0
  341. {educommon-3.6.0 → educommon-3.6.1}/tests/test_delete_check.py +0 -0
  342. {educommon-3.6.0 → educommon-3.6.1}/tests/test_delete_objects.py +0 -0
  343. {educommon-3.6.0 → educommon-3.6.1}/tests/test_django_db_utils.py +0 -0
  344. {educommon-3.6.0 → educommon-3.6.1}/tests/test_interval_mixins.py +0 -0
  345. {educommon-3.6.0 → educommon-3.6.1}/tests/test_patches.py +0 -0
  346. {educommon-3.6.0 → educommon-3.6.1}/tests/test_personal_data_fields.py +0 -0
  347. {educommon-3.6.0 → educommon-3.6.1}/tests/test_report.py +0 -0
  348. {educommon-3.6.0 → educommon-3.6.1}/tests/test_service_db_router.py +0 -0
  349. {educommon-3.6.0 → educommon-3.6.1}/tests/test_utils.py +0 -0
  350. {educommon-3.6.0 → educommon-3.6.1}/tests/test_utils_plugins.py +0 -0
  351. {educommon-3.6.0 → educommon-3.6.1}/tests/test_validators.py +0 -0
  352. {educommon-3.6.0 → educommon-3.6.1}/tests/tests_rbac.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: educommon
3
- Version: 3.6.0
3
+ Version: 3.6.1
4
4
  Summary: Общая кодовая база для проектов БЦ Образование
5
5
  Home-page: https://stash.bars-open.ru/projects/EDUBASE/repos/educommon
6
6
  Author: BARS Group
@@ -34,7 +34,7 @@ Requires-Dist: celery
34
34
  Requires-Dist: spyne
35
35
  Requires-Dist: xlsxwriter<1,>=0.9.3
36
36
  Requires-Dist: m3-builder<2,>=1.2
37
- Requires-Dist: m3-db-utils>=0.3.4
37
+ Requires-Dist: m3-db-utils>=0.3.11
38
38
  Requires-Dist: m3-django-compat<2,>=1.9.1
39
39
  Requires-Dist: m3-core<3,>=2.2.16
40
40
  Requires-Dist: m3-ui<3,>=2.2.40
@@ -64,7 +64,7 @@ def main():
64
64
  'xlsxwriter>=0.9.3,<1',
65
65
 
66
66
  'm3-builder>=1.2,<2',
67
- 'm3-db-utils>=0.3.4',
67
+ 'm3-db-utils>=0.3.11',
68
68
  'm3-django-compat>=1.9.1,<2',
69
69
  'm3-core>=2.2.16,<3',
70
70
  'm3-ui>=2.2.40,<3',
@@ -19,6 +19,10 @@ from django.utils import (
19
19
  timezone,
20
20
  )
21
21
 
22
+ from m3_db_utils.models import (
23
+ FictiveForeignKeyMixin,
24
+ )
25
+
22
26
  from educommon.integration_entities.enums import (
23
27
  EntityLogOperation,
24
28
  )
@@ -75,8 +79,24 @@ class AbstractEntitySaver(ABC):
75
79
  """
76
80
  return []
77
81
 
82
+ def _convert_fictive_foreign_keys(self, entities: Iterable[Model]):
83
+ """Преобразование значений полей фиктивных внешних ключей.
84
+
85
+ В рамках метода производится проверка наличия фиктивного внешнего ключа у модели. Если они есть и заполнены
86
+ объектами модели, то производится получения идентификатора объекта модели и замена им самого объекта.
87
+ """
88
+ for entity in entities:
89
+ if isinstance(entity, FictiveForeignKeyMixin):
90
+ for field_name in entity.fictive_foreign_key_field_names:
91
+ field_value = getattr(entity, field_name, None)
92
+
93
+ if field_value and isinstance(field_value, Model):
94
+ setattr(entity, field_name, getattr(field_value, 'pk'))
95
+
78
96
  def _create_entities(self) -> None:
79
97
  """Создает новые записи."""
98
+ self._convert_fictive_foreign_keys(entities=self._to_create_entities)
99
+
80
100
  self.model.objects.bulk_create(
81
101
  self._to_create_entities,
82
102
  batch_size=self.create_batch_size,
@@ -85,6 +105,8 @@ class AbstractEntitySaver(ABC):
85
105
 
86
106
  def _update_entities(self) -> None:
87
107
  """Обновляет записи."""
108
+ self._convert_fictive_foreign_keys(entities=self._to_create_entities)
109
+
88
110
  for entity in self._to_update_entities:
89
111
  # Поле modified имеет свойство auto_now=True и оно не обновляется при update и bulk_update.
90
112
  # Поэтому, его нужно обновить вручную:
@@ -4,8 +4,8 @@
4
4
  # нормальной установки обновлений.
5
5
 
6
6
  [version]
7
- BRANCH = tags/3.6.0
8
- VERSION = 3.6.0
9
- REVISION = 352f6d926d60b0008ba31dc0a8d2b89403ebf012
10
- VERSION_DATE = 07.12.2023
11
- REVISION_DATE = 07.12.2023
7
+ BRANCH = tags/3.6.1
8
+ VERSION = 3.6.1
9
+ REVISION = 5c849c3a296d1e7c1b370e73a9a661b385c43293
10
+ VERSION_DATE = 16.12.2023
11
+ REVISION_DATE = 16.12.2023
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: educommon
3
- Version: 3.6.0
3
+ Version: 3.6.1
4
4
  Summary: Общая кодовая база для проектов БЦ Образование
5
5
  Home-page: https://stash.bars-open.ru/projects/EDUBASE/repos/educommon
6
6
  Author: BARS Group
@@ -34,7 +34,7 @@ Requires-Dist: celery
34
34
  Requires-Dist: spyne
35
35
  Requires-Dist: xlsxwriter<1,>=0.9.3
36
36
  Requires-Dist: m3-builder<2,>=1.2
37
- Requires-Dist: m3-db-utils>=0.3.4
37
+ Requires-Dist: m3-db-utils>=0.3.11
38
38
  Requires-Dist: m3-django-compat<2,>=1.9.1
39
39
  Requires-Dist: m3-core<3,>=2.2.16
40
40
  Requires-Dist: m3-ui<3,>=2.2.40
@@ -8,7 +8,7 @@ celery
8
8
  spyne
9
9
  xlsxwriter<1,>=0.9.3
10
10
  m3-builder<2,>=1.2
11
- m3-db-utils>=0.3.4
11
+ m3-db-utils>=0.3.11
12
12
  m3-django-compat<2,>=1.9.1
13
13
  m3-core<3,>=2.2.16
14
14
  m3-ui<3,>=2.2.40
File without changes
File without changes
File without changes
File without changes
@@ -3,9 +3,9 @@ from collections.abc import (
3
3
  )
4
4
  from typing import (
5
5
  TYPE_CHECKING,
6
+ Iterable as IterableType,
6
7
  List,
7
8
  Union,
8
- Iterable as IterableType,
9
9
  )
10
10
 
11
11
  from educommon.audit_log.models import (