educommon 3.13.2__tar.gz → 3.15.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {educommon-3.13.2 → educommon-3.15.0}/CHANGELOG.md +33 -0
- {educommon-3.13.2 → educommon-3.15.0}/PKG-INFO +2 -2
- {educommon-3.13.2 → educommon-3.15.0}/pyproject.toml +1 -1
- educommon-3.15.0/src/educommon/audit_log/README.rst +64 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/actions.py +86 -58
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/app_meta.py +0 -4
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/proxies.py +22 -6
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/ui.py +2 -8
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/utils/__init__.py +1 -23
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/ui.py +27 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon.egg-info/PKG-INFO +2 -2
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon.egg-info/SOURCES.txt +1 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon.egg-info/requires.txt +1 -1
- {educommon-3.13.2 → educommon-3.15.0}/CONDUCT.md +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/CONTRIBUTING.md +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/MANIFEST.in +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/README.md +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/setup.cfg +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/about/README.rst +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/about/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/about/apps.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/about/static/edu_about/barsgroup.png +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/about/ui/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/about/ui/about-window.js +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/about/ui/actions.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/about/ui/common-tab.html +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/about/ui/packages-tab.js +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/about/ui/postgresql-extensions-tab.js +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/about/ui/ui.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/about/utils.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_task/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_task/actions.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_task/apps.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_task/consts.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_task/exceptions.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_task/helpers.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_task/locker.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_task/migrations/0001_initial.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_task/migrations/0002_task_type_and_status_data.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_task/migrations/0003_alter_runningtask_options.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_task/migrations/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_task/models.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_task/tasks.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_task/templates/ui-js/async-task-list-win.js +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_task/templates/ui-js/async-task-revoke.js +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_task/templates/ui-js/async-task-view-win.js +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_task/ui.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_tasks/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_tasks/apps.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_tasks/exceptions.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_tasks/fixtures/initial_data.json +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_tasks/locks.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_tasks/migrations/0001_initial.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_tasks/migrations/0002_load_initial_data.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_tasks/migrations/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_tasks/models.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_tasks/statuses.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_tasks/tasks.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/apps.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/constants.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/error_log/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/error_log/actions.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/helpers.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/management/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/management/commands/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/management/commands/reinstall_audit_log.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/middleware.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/migrations/0001_initial.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/migrations/0002_install_audit_log.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/migrations/0003_logproxy.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/migrations/0004_reinstall_audit_log.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/migrations/0005_postgresql_error.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/migrations/0006_auto_20200806_1707.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/migrations/0007_create_selective_tables_function.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/migrations/0008_table_logged.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/migrations/0009_reinstall_audit_log.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/migrations/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/models.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/permissions.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/routers.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/sql/configure_audit_log.sql +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/sql/install_audit_log.sql +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/audit_log/utils/operations.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/actions.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/app_meta.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/backends/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/backends/base.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/backends/caching.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/backends/simple.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/checker.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/config.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/constants.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/management/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/management/commands/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/management/commands/rbac.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/manager.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/migrations/0001_initial.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/migrations/0002_model_modifier_metaclass_fix.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/migrations/0003_permission_hidden.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/migrations/0004_auto_20171024_1245.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/migrations/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/models.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/permissions.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/templates/rbac/role-add-window.js +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/templates/rbac/role-edit-window.js +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/templates/rbac/roles-list-window.js +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/templates/rbac/roles-view-list-window.js +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/ui.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/utils.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/rbac/validators.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/simple_auth/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/simple_auth/actions.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/simple_auth/app_meta.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/simple_auth/checkers.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/simple_auth/const.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/simple_auth/migrations/0001_initial.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/simple_auth/migrations/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/simple_auth/models.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/simple_auth/static/simple_auth/simple_auth.css +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/simple_auth/templates/simple_auth/change_reset_password_page.html +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/simple_auth/templates/simple_auth/email/reset_password.html +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/simple_auth/templates/simple_auth/login_page.html +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/simple_auth/templates/simple_auth/reset_password_page.html +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/simple_auth/ui.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/auth/simple_auth/validators.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/contingent/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/contingent/actions.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/contingent/app_meta.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/contingent/base.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/contingent/catalogs.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/contingent/contingent_plugin/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/contingent/contingent_plugin/actions.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/contingent/contingent_plugin/apps.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/contingent/contingent_plugin/migrations/0001_initial.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/contingent/contingent_plugin/migrations/0002_add_contingent_model_deleted.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/contingent/contingent_plugin/migrations/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/contingent/contingent_plugin/model_views.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/contingent/contingent_plugin/models.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/contingent/contingent_plugin/observer.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/contingent/contingent_plugin/plugin_meta.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/contingent/contingent_plugin/storage.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/contingent/contingent_plugin/utils.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/contingent/json_data/icao.json +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/contingent/json_data/okogu.json +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/contingent/json_data/oksm.json +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/fields.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/migration/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/migration/operations.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/mixins/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/mixins/date_interval.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/mixins/validation.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/model_view/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/model_view/table-view.html +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/models.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/observer.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/partitioning/README.md +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/partitioning/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/partitioning/const.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/partitioning/management/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/partitioning/management/commands/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/partitioning/management/commands/apply_partitioning.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/partitioning/management/commands/clear_table.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/partitioning/management/commands/split_table.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/partitioning/partitioning.sql +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/partitioning/partitioning_set_search_path.sql +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/partitioning/triggers.sql +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/routers.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/signals.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/utils.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/validators/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/db/validators/simple.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/storages/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/storages/atcfs/README.rst +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/storages/atcfs/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/storages/atcfs/api.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/storages/atcfs/app_meta.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/storages/atcfs/exceptions.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/storages/atcfs/management/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/storages/atcfs/management/commands/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/storages/atcfs/management/commands/atcfs_migrate.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/storages/atcfs/models.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/storages/atcfs/monkey_patching.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/storages/atcfs/settings.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/storages/atcfs/storage.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/django/storages/atcfs/templates/atcfs_unavailable.html +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/extjs/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/extjs/fields/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/extjs/fields/input_params.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/importer/XLSReader.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/importer/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/importer/api.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/importer/constants.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/importer/loggers.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/importer/proxy.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/importer/proxy_import.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/importer/refactoring-notes.txt +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/importer/report.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/importer/test_file.xls +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/importer/ui.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/importer/validators.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/integration_entities/README.rst +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/integration_entities/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/integration_entities/consts.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/integration_entities/entities.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/integration_entities/enums.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/integration_entities/helpers.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/integration_entities/mixins.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ioc/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/logger/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/logger/app_settings.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/logger/apps.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/logger/consts.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/logger/formatters.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/logger/helpers.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/logger/loggers.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/logger/records.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/m3/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/m3/extensions/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/m3/extensions/listeners/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/m3/extensions/listeners/delete_check/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/m3/extensions/listeners/delete_check/cancel-confirm-window.js +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/m3/extensions/listeners/delete_check/listeners.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/m3/extensions/listeners/delete_check/mixins.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/m3/extensions/listeners/delete_check/related-objects-window.html +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/m3/extensions/listeners/delete_check/signals.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/m3/extensions/listeners/delete_check/ui.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/m3/extensions/listeners/delete_check/utils.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/m3/extensions/ui.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/m3/transaction_context.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/objectpack/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/objectpack/actions.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/objectpack/apps.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/objectpack/filters.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/objectpack/templates/base-grid-window.js +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/objectpack/templates/filter-panel.js +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/objectpack/templates/grid-panel.js +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/objectpack/templates/multiSelectWindow.js +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/objectpack/templates/multiselect-page-fix.js +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/objectpack/templates/relations-check-mixin-template.html +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/objectpack/ui.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/actions.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/README.rst +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/app_meta.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/apps.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/base.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/builders/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/builders/excel/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/builders/excel/_base.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/builders/excel/_header.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/builders/excel/constants.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/builders/excel/product.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/builders/excel/with_merged_cells.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/config.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/constants.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/editor/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/editor/actions.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/editor/edit-window.js +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/editor/list-window.js +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/editor/ui.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/exceptions.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/migrations/0001_initial.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/migrations/0002_report_filters.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/migrations/0003_reportfilter_exclude.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/migrations/0004_reportfilter_fields.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/migrations/0005_reportcolumn_visible.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/migrations/0006_reportsorting.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/migrations/0007_include_available_units.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/migrations/0008_auto_20170407_1318.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/migrations/0009_auto_20180405_0642.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/migrations/0010_add_aggregate_fields.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/migrations/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/mixins.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/models.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/plugin_meta.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/registries.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/utils.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/constructor/validators.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/reporter.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/report/utils.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/rest/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/rest/actions.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/rest/context.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/rest/controllers.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/rest/misc.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/rest/mixins.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/secure_media/README.rst +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/secure_media/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/secure_media/app_meta.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/thread_data.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/caching.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/conversion.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/crypto.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/date.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/db/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/db/postgresql.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/fonts/Arial.ttf +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/fonts/Calibri.ttf +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/fonts/Tahoma.ttf +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/fonts/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/licence/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/licence/converters.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/misc.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/object_grid.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/phone_number/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/phone_number/enums.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/phone_number/modelfields.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/phone_number/phone_number.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/phone_number/validators.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/plugins.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/registry.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/seqtools.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/serializer.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/storage.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/system.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/system_app/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/system_app/management/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/system_app/management/commands/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/system_app/management/commands/delete_objects.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/system_app/templatetags/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/system_app/templatetags/educommon.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/xml/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/xml/catalog.json +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/xml/resolver.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/xml/saml-schema-assertion-2.0.xsd +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/xml/saml-schema-protocol-2.0.xsd +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/xml/xenc-schema.xsd +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/utils/xml/xmldsig-core-schema.xsd +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/README.rst +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/actions.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/app_meta.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/base.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/migrations/0001_initial.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/migrations/0002_auto_20160628_1334.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/migrations/0003_add_fields_to_smev_logs.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/migrations/0004_auto_20160727_1600.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/migrations/0005_auto_20161130_1615.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/migrations/0006_auto_20170327_1027.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/migrations/0007_auto_20180607_1040.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/migrations/0008_auto_20180713_1445.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/migrations/0009_auto_20201130_1553.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/migrations/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/models.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/provider.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/report.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/smev/__init__.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/smev/applications.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/smev/exceptions.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/templates/report/smev_logs.xlsx +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/templates/ui-js/smev-logs-list-window.js +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/templates/ui-js/smev-logs-report-setting-window.js +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/ui.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon/ws_log/utils.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon.egg-info/dependency_links.txt +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/src/educommon.egg-info/top_level.txt +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/tests/test_contingent_plugin_utils.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/tests/test_dates_splitter.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/tests/test_delete_check.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/tests/test_delete_objects.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/tests/test_django_db_utils.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/tests/test_interval_mixins.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/tests/test_personal_data_fields.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/tests/test_phone_number.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/tests/test_report.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/tests/test_service_db_router.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/tests/test_utils.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/tests/test_utils_plugins.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/tests/test_validators.py +0 -0
- {educommon-3.13.2 → educommon-3.15.0}/tests/tests_rbac.py +0 -0
@@ -28,6 +28,39 @@
|
|
28
28
|
### Удалено
|
29
29
|
|
30
30
|
|
31
|
+
## [3.15.0] - 2025-04-29
|
32
|
+
|
33
|
+
Добавлен фильтр, позволяющий работать с датой в формате d.m.Y, m.Y, Y.
|
34
|
+
|
35
|
+
### Добавлено
|
36
|
+
|
37
|
+
- [EDUKNDG-15399](https://jira.bars.group/browse/EDUKNDG-15399)
|
38
|
+
MINOR Добавлен фильтр FilterByDateStr, позволяющий работать с датой в формате d.m.Y, m.Y, Y.
|
39
|
+
|
40
|
+
### Изменено
|
41
|
+
|
42
|
+
- [EDUKNDG-15399](https://jira.bars.group/browse/EDUKNDG-15399)
|
43
|
+
MINOR Повышена минимальная версия m3-ui с 2.2.40 до 2.2.116, для корректной работы даты в формате d.m.Y, m.Y, Y.
|
44
|
+
|
45
|
+
|
46
|
+
## [3.14.0] - 2025-04-09
|
47
|
+
|
48
|
+
Доработки журнала изменений до состояния старого журнала в ЭШ
|
49
|
+
|
50
|
+
### Добавлено
|
51
|
+
|
52
|
+
- [EDUSCHL-23386](https://jira.bars.group/browse/EDUSCHL-23386)
|
53
|
+
PATCH Столбец имитация (без функциональности, для доработки работоспособности в последующих задачах).
|
54
|
+
|
55
|
+
### Изменено
|
56
|
+
|
57
|
+
- [EDUSCHL-23386](https://jira.bars.group/browse/EDUSCHL-23386)
|
58
|
+
MINOR Классы LogProxy, AuditLogPack преобразованы в абстрактные с добавлением абстрактных методов для
|
59
|
+
извлечения исходных данных необходимых при: отображении ФИО пользователя в журнале изменений; фильтрации по ФИО;
|
60
|
+
отображении ФИО, организации в окне редактирования записи журнала изменений.
|
61
|
+
Подробнее о необходимых настройках в audit_log/README.rst.
|
62
|
+
|
63
|
+
|
31
64
|
## [3.13.2] - 2024-04-09
|
32
65
|
|
33
66
|
Небольшой рефакторинг для корректной сборки пакета.
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: educommon
|
3
|
-
Version: 3.
|
3
|
+
Version: 3.15.0
|
4
4
|
Summary: Общая кодовая база для проектов БЦ Образование
|
5
5
|
Author-email: BARS Group <education_dev@bars-open.ru>
|
6
6
|
Project-URL: Homepage, https://stash.bars-open.ru/projects/EDUBASE/repos/educommon/browse
|
@@ -33,7 +33,7 @@ Requires-Dist: python-magic==0.4.15
|
|
33
33
|
Requires-Dist: m3-db-utils>=0.3.13
|
34
34
|
Requires-Dist: m3-django-compat<2,>=1.10.2
|
35
35
|
Requires-Dist: m3-core<3,>=2.2.16
|
36
|
-
Requires-Dist: m3-ui<3,>=2.2.
|
36
|
+
Requires-Dist: m3-ui<3,>=2.2.116
|
37
37
|
Requires-Dist: m3-objectpack<3,>=2.2.49
|
38
38
|
Requires-Dist: m3-simple-report<2,>=1.4.1
|
39
39
|
Requires-Dist: m3-spyne-smev<2,>=0.2.4
|
@@ -0,0 +1,64 @@
|
|
1
|
+
Приложение "Логирование изменений объектов на уровне БД"
|
2
|
+
=================================
|
3
|
+
|
4
|
+
Установка
|
5
|
+
--------------
|
6
|
+
1. На основе абстрактного класса LogProxy из educommon/audit_log/proxies.py создать класс и реализовать его абстрактные
|
7
|
+
методы.
|
8
|
+
|
9
|
+
.. code-block:: python
|
10
|
+
|
11
|
+
class AuditLogProxy(LogProxy):
|
12
|
+
"""Прокси-модель для отображения логов."""
|
13
|
+
|
14
|
+
class Meta:
|
15
|
+
proxy = True
|
16
|
+
|
17
|
+
@property
|
18
|
+
def user_fullname(self) -> str:
|
19
|
+
"""Полное имя пользователя."""
|
20
|
+
pass
|
21
|
+
|
22
|
+
@property
|
23
|
+
def user_organization(self) -> str:
|
24
|
+
"""Название организации, к которой привязан пользователь."""
|
25
|
+
pass
|
26
|
+
|
27
|
+
|
28
|
+
В случае использования сервисной базы для нового класса необходимо реализовать
|
29
|
+
роутер на основе ServiceDbRouterBase из educommon/django/db/routers.py и добавить его в settings.DATABASE_ROUTERS
|
30
|
+
|
31
|
+
.. code-block:: python
|
32
|
+
|
33
|
+
class AuditLogProxyDbRouter(MyServiceDbRouterBase):
|
34
|
+
"""Роутер базы данных для AuditLogProxy."""
|
35
|
+
|
36
|
+
app_name = 'model_app_name'
|
37
|
+
service_db_model_names = {'AuditLogProxy'}
|
38
|
+
|
39
|
+
|
40
|
+
2. На основе абстрактного класса AuditLogPack из educommon/audit_log/actions.py создать класс и реализовать его абстрактные
|
41
|
+
методы. В атрибуте model указать модель из пункта "1".
|
42
|
+
|
43
|
+
.. code-block:: python
|
44
|
+
|
45
|
+
class AuditPack(AuditLogPack):
|
46
|
+
"""Журнал изменений."""
|
47
|
+
|
48
|
+
title = 'Журнал изменений (новый)'
|
49
|
+
model = AuditLogProxy
|
50
|
+
|
51
|
+
def _make_name_filter(self, field, value):
|
52
|
+
"""Создает lookup фильтра по фамилии/имени/отчеству пользователя.
|
53
|
+
|
54
|
+
:param str field: название поля ('firstname', 'surname', 'patronymic').
|
55
|
+
:param str value: значение, по которому фильтруется queryset.
|
56
|
+
"""
|
57
|
+
pass
|
58
|
+
|
59
|
+
Выполнить регистрацию нового пака с помощью контроллера основных приложений проекта.
|
60
|
+
|
61
|
+
3. Добавить 'educommon.audit_log.middleware.AuditLogMiddleware', расположив его так, чтобы при его отработке
|
62
|
+
в request уже был определен пользователь.
|
63
|
+
|
64
|
+
4. Создать и выполнить миграции.
|
@@ -1,3 +1,7 @@
|
|
1
|
+
from abc import (
|
2
|
+
ABCMeta,
|
3
|
+
abstractmethod,
|
4
|
+
)
|
1
5
|
from datetime import (
|
2
6
|
date,
|
3
7
|
timedelta,
|
@@ -45,7 +49,6 @@ from educommon.audit_log.ui import (
|
|
45
49
|
from educommon.audit_log.utils import (
|
46
50
|
get_model_choices,
|
47
51
|
make_hstore_filter,
|
48
|
-
make_name_filter,
|
49
52
|
)
|
50
53
|
from educommon.m3 import (
|
51
54
|
PackValidationMixin,
|
@@ -59,7 +62,7 @@ from educommon.utils.ui import (
|
|
59
62
|
)
|
60
63
|
|
61
64
|
|
62
|
-
class AuditLogPack(ViewWindowPackMixin, PackValidationMixin, ObjectPack):
|
65
|
+
class AuditLogPack(ViewWindowPackMixin, PackValidationMixin, ObjectPack, metaclass=ABCMeta):
|
63
66
|
"""Журнал изменений."""
|
64
67
|
|
65
68
|
title = 'Журнал изменений'
|
@@ -82,64 +85,81 @@ class AuditLogPack(ViewWindowPackMixin, PackValidationMixin, ObjectPack):
|
|
82
85
|
model, 'time', get_from=lambda: date.today() - timedelta(days=2), get_to=date.today
|
83
86
|
)
|
84
87
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
'
|
107
|
-
|
108
|
-
|
109
|
-
|
88
|
+
def _generate_columns(self):
|
89
|
+
"""Формирует наполнение столбцов."""
|
90
|
+
columns = [
|
91
|
+
{
|
92
|
+
'data_index': 'time',
|
93
|
+
'width': 140,
|
94
|
+
'header': 'Дата и время',
|
95
|
+
'sortable': True,
|
96
|
+
'filter': self.date_filter.filter
|
97
|
+
},
|
98
|
+
{
|
99
|
+
'data_index': 'user_name',
|
100
|
+
'width': 130,
|
101
|
+
'header': 'Пользователь',
|
102
|
+
'filter': self.ff('table__name', lookup=lambda x: self._make_name_filter('surname', x))
|
103
|
+
& self.ff('table__name', lookup=lambda x: self._make_name_filter('firstname', x))
|
104
|
+
& self.ff('table__name', lookup=lambda x: self._make_name_filter('patronymic', x)),
|
105
|
+
},
|
106
|
+
{
|
107
|
+
'data_index': 'operation',
|
108
|
+
'width': 60,
|
109
|
+
'header': 'Операция',
|
110
|
+
'filter': self.ff('operation', ask_before_deleting=False),
|
111
|
+
},
|
112
|
+
{
|
113
|
+
'data_index': 'model_name',
|
114
|
+
'width': 220,
|
115
|
+
'header': 'Модель объекта',
|
116
|
+
'filter': self.ff(
|
117
|
+
'table',
|
118
|
+
control_creator=lambda: make_combo_box(
|
119
|
+
data=get_model_choices(),
|
120
|
+
ask_before_deleting=False,
|
121
|
+
),
|
122
|
+
),
|
123
|
+
},
|
124
|
+
{
|
125
|
+
'data_index': 'object_id',
|
126
|
+
'width': 50,
|
127
|
+
'header': 'Код объекта',
|
128
|
+
'filter': self.ff('object_id'),
|
129
|
+
},
|
130
|
+
{
|
131
|
+
'data_index': 'ip',
|
132
|
+
'width': 60,
|
133
|
+
'header': 'IP',
|
134
|
+
'filter': self.ff(
|
135
|
+
'ip',
|
136
|
+
parser_map=(GenericIPAddressField, 'str', '%s__contains'),
|
137
|
+
control_creator=ExtStringField,
|
110
138
|
),
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
'
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
'width': 180,
|
132
|
-
'header': 'Объект',
|
133
|
-
'filter': ff(
|
134
|
-
'data',
|
135
|
-
parser_map=(HStoreField, 'str', '%s__values__icontains'),
|
136
|
-
lookup=lambda x: make_hstore_filter('data', x),
|
137
|
-
control_creator=ExtStringField,
|
138
|
-
),
|
139
|
-
},
|
140
|
-
]
|
139
|
+
},
|
140
|
+
{
|
141
|
+
'data_index': 'object_string',
|
142
|
+
'width': 180,
|
143
|
+
'header': 'Объект',
|
144
|
+
'filter': self.ff(
|
145
|
+
'data',
|
146
|
+
parser_map=(HStoreField, 'str', '%s__values__icontains'),
|
147
|
+
lookup=lambda x: make_hstore_filter('data', x),
|
148
|
+
control_creator=ExtStringField,
|
149
|
+
),
|
150
|
+
},
|
151
|
+
{
|
152
|
+
'data_index': '',
|
153
|
+
'width': 40,
|
154
|
+
'header': 'Имитация',
|
155
|
+
},
|
156
|
+
]
|
157
|
+
|
158
|
+
return columns
|
141
159
|
|
142
160
|
def __init__(self):
|
161
|
+
self.columns = self._generate_columns()
|
162
|
+
|
143
163
|
super().__init__()
|
144
164
|
|
145
165
|
self.view_changes_action = ViewChangeAction()
|
@@ -187,6 +207,14 @@ class AuditLogPack(ViewWindowPackMixin, PackValidationMixin, ObjectPack):
|
|
187
207
|
menu.Item(self.title, self.list_window_action),
|
188
208
|
)
|
189
209
|
|
210
|
+
@abstractmethod
|
211
|
+
def _make_name_filter(self, field, value):
|
212
|
+
"""Создает lookup фильтра по фамилии/имени/отчеству пользователя.
|
213
|
+
|
214
|
+
:param str field: название поля ('firstname', 'surname', 'patronymic').
|
215
|
+
:param str value: значение, по которому фильтруется queryset.
|
216
|
+
"""
|
217
|
+
|
190
218
|
|
191
219
|
class ViewChangeAction(BaseAction):
|
192
220
|
"""Action для просмотра изменений."""
|
@@ -203,7 +231,7 @@ class ViewChangeAction(BaseAction):
|
|
203
231
|
"""Тело Action, вызывается при обработке запроса к серверу."""
|
204
232
|
object_id = getattr(context, self.parent.id_param_name)
|
205
233
|
if object_id:
|
206
|
-
rows =
|
234
|
+
rows = self.parent.model.objects.get(id=object_id).diff
|
207
235
|
else:
|
208
236
|
rows = []
|
209
237
|
|
@@ -1,9 +1,6 @@
|
|
1
1
|
from educommon import (
|
2
2
|
ioc,
|
3
3
|
)
|
4
|
-
from educommon.audit_log.actions import (
|
5
|
-
AuditLogPack,
|
6
|
-
)
|
7
4
|
from educommon.audit_log.error_log.actions import (
|
8
5
|
PostgreSQLErrorPack,
|
9
6
|
)
|
@@ -13,7 +10,6 @@ def register_actions():
|
|
13
10
|
"""Регистрация паков и экшенов."""
|
14
11
|
ioc.get('main_controller').packs.extend(
|
15
12
|
(
|
16
|
-
AuditLogPack(),
|
17
13
|
PostgreSQLErrorPack(),
|
18
14
|
)
|
19
15
|
)
|
@@ -1,5 +1,10 @@
|
|
1
1
|
import os
|
2
2
|
|
3
|
+
from abc import (
|
4
|
+
ABCMeta,
|
5
|
+
abstractmethod,
|
6
|
+
)
|
7
|
+
|
3
8
|
from django.conf import (
|
4
9
|
settings,
|
5
10
|
)
|
@@ -36,8 +41,12 @@ from educommon.audit_log.models import (
|
|
36
41
|
)
|
37
42
|
|
38
43
|
|
39
|
-
class
|
40
|
-
"""
|
44
|
+
class LogProxyMeta(type(AuditLog), ABCMeta):
|
45
|
+
"""Метакласс для устранения конфликта при наследовании от AuditLog и использовании ABCMeta"""
|
46
|
+
|
47
|
+
|
48
|
+
class LogProxy(AuditLog, metaclass=LogProxyMeta):
|
49
|
+
"""Абстрактный класс прокси-модели для отображения."""
|
41
50
|
|
42
51
|
class Meta:
|
43
52
|
proxy = True
|
@@ -53,15 +62,22 @@ class LogProxy(AuditLog):
|
|
53
62
|
except ContentType.DoesNotExist:
|
54
63
|
result = 'Model:{}, id:{}'.format(user_type_id, user_id)
|
55
64
|
else:
|
56
|
-
|
57
|
-
result = model.objects.get(id=user_id).person.fullname
|
58
|
-
except model.DoesNotExist:
|
59
|
-
result = f'{model._meta.verbose_name}({user_id})'
|
65
|
+
result = self.user_fullname or f'{model._meta.verbose_name}({user_id})'
|
60
66
|
else:
|
61
67
|
result = ''
|
62
68
|
|
63
69
|
return result
|
64
70
|
|
71
|
+
@property
|
72
|
+
@abstractmethod
|
73
|
+
def user_fullname(self) -> str:
|
74
|
+
"""Полное имя пользователя."""
|
75
|
+
|
76
|
+
@property
|
77
|
+
@abstractmethod
|
78
|
+
def user_organization(self) -> str:
|
79
|
+
"""Название организации, к которой привязан пользователь."""
|
80
|
+
|
65
81
|
@property
|
66
82
|
def model_fullname(self):
|
67
83
|
"""Отображаемое и системное имя модели."""
|
@@ -60,11 +60,5 @@ class ViewChangeWindow(BaseWindow):
|
|
60
60
|
log_record = params['object']
|
61
61
|
self.title = '{}: {}'.format(log_record.get_operation_display(), log_record.model_name)
|
62
62
|
if log_record.user:
|
63
|
-
self.user_field.value = '{} / {}'
|
64
|
-
|
65
|
-
)
|
66
|
-
unit = getattr(log_record.user, 'unit', None)
|
67
|
-
if unit:
|
68
|
-
self.unit_field.value = unit.short_name
|
69
|
-
else:
|
70
|
-
self.unit_field.value = ''
|
63
|
+
self.user_field.value = f'{log_record.user_fullname} / {log_record.user.username}'
|
64
|
+
self.unit_field.value = log_record.user_organization
|
@@ -345,28 +345,6 @@ def make_hstore_filter(field, value):
|
|
345
345
|
return result
|
346
346
|
|
347
347
|
|
348
|
-
def make_name_filter(field, value):
|
349
|
-
"""Создает lookup фильтра по фамилии/имени/отчеству пользователя.
|
350
|
-
|
351
|
-
:param str field: название поля ('firstname', 'surname', 'patronymic').
|
352
|
-
:param str value: значение, по которому фильтруется queryset.
|
353
|
-
"""
|
354
|
-
ContentType = apps.get_model('contenttypes', 'ContentType')
|
355
|
-
Employee = apps.get_model('employee', 'Employee')
|
356
|
-
SysAdmin = apps.get_model('sysadmin', 'SysAdmin')
|
357
|
-
|
358
|
-
result = None
|
359
|
-
for model in (Employee, SysAdmin):
|
360
|
-
type_id = ContentType.objects.get_for_model(model).id
|
361
|
-
user_ids = list(model.objects.filter(**{f'person__{field}__icontains': value}).values_list('id', flat=True))
|
362
|
-
qobj = Q(user_id__in=user_ids, user_type_id=type_id)
|
363
|
-
if result:
|
364
|
-
result |= qobj
|
365
|
-
else:
|
366
|
-
result = qobj
|
367
|
-
return result
|
368
|
-
|
369
|
-
|
370
348
|
class ModelRegistry:
|
371
349
|
"""Реестр моделей Django по имени таблицы.
|
372
350
|
|
@@ -447,7 +425,7 @@ def get_audit_log_context(request):
|
|
447
425
|
result = {}
|
448
426
|
|
449
427
|
current_user = ioc.get('get_current_user')(request)
|
450
|
-
if current_user:
|
428
|
+
if current_user and current_user.is_authenticated:
|
451
429
|
ContentType = apps.get_model('contenttypes', 'ContentType')
|
452
430
|
|
453
431
|
result['user_id'] = current_user.id
|
@@ -339,6 +339,33 @@ class DatetimeFilterCreator:
|
|
339
339
|
return result
|
340
340
|
|
341
341
|
|
342
|
+
class FilterByDateStr(_FilterByField):
|
343
|
+
"""Фильтр позволяет работать с датой в формате d.m.Y, m.Y, Y."""
|
344
|
+
|
345
|
+
def __init__(self, *args, **kwargs) -> None:
|
346
|
+
kwargs['date_str'] = True
|
347
|
+
|
348
|
+
super().__init__(*args, **kwargs)
|
349
|
+
|
350
|
+
self._lookup = self._lookup if self._lookup.endswith('__icontains') else f'{self._lookup}__icontains'
|
351
|
+
|
352
|
+
def get_q(self, params: dict) -> Q:
|
353
|
+
"""Метод возвращает Q-объект, построенный на основе данных словаря.
|
354
|
+
|
355
|
+
Args:
|
356
|
+
params: Словарь с лукапами.
|
357
|
+
Returns:
|
358
|
+
Q-объект, построенный на основе данных словаря.
|
359
|
+
"""
|
360
|
+
|
361
|
+
if self._uid in params:
|
362
|
+
value = '-'.join(params[self._uid].split('.')[::-1])
|
363
|
+
|
364
|
+
return Q(**{self._lookup: value})
|
365
|
+
|
366
|
+
return Q()
|
367
|
+
|
368
|
+
|
342
369
|
def switch_window_in_read_only_mode(window):
|
343
370
|
"""Переводит окно редактирования в режим "Только для чтения".
|
344
371
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: educommon
|
3
|
-
Version: 3.
|
3
|
+
Version: 3.15.0
|
4
4
|
Summary: Общая кодовая база для проектов БЦ Образование
|
5
5
|
Author-email: BARS Group <education_dev@bars-open.ru>
|
6
6
|
Project-URL: Homepage, https://stash.bars-open.ru/projects/EDUBASE/repos/educommon/browse
|
@@ -33,7 +33,7 @@ Requires-Dist: python-magic==0.4.15
|
|
33
33
|
Requires-Dist: m3-db-utils>=0.3.13
|
34
34
|
Requires-Dist: m3-django-compat<2,>=1.10.2
|
35
35
|
Requires-Dist: m3-core<3,>=2.2.16
|
36
|
-
Requires-Dist: m3-ui<3,>=2.2.
|
36
|
+
Requires-Dist: m3-ui<3,>=2.2.116
|
37
37
|
Requires-Dist: m3-objectpack<3,>=2.2.49
|
38
38
|
Requires-Dist: m3-simple-report<2,>=1.4.1
|
39
39
|
Requires-Dist: m3-spyne-smev<2,>=0.2.4
|
@@ -51,6 +51,7 @@ src/educommon/async_tasks/fixtures/initial_data.json
|
|
51
51
|
src/educommon/async_tasks/migrations/0001_initial.py
|
52
52
|
src/educommon/async_tasks/migrations/0002_load_initial_data.py
|
53
53
|
src/educommon/async_tasks/migrations/__init__.py
|
54
|
+
src/educommon/audit_log/README.rst
|
54
55
|
src/educommon/audit_log/__init__.py
|
55
56
|
src/educommon/audit_log/actions.py
|
56
57
|
src/educommon/audit_log/app_meta.py
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_task/templates/ui-js/async-task-revoke.js
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{educommon-3.13.2 → educommon-3.15.0}/src/educommon/async_tasks/migrations/0002_load_initial_data.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|