zou 0.20.16__tar.gz → 0.20.18__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.
- {zou-0.20.16/zou.egg-info → zou-0.20.18}/PKG-INFO +9 -10
- {zou-0.20.16 → zou-0.20.18}/setup.cfg +8 -9
- zou-0.20.18/zou/__init__.py +1 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/comments/resources.py +4 -3
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/previews/resources.py +40 -32
- {zou-0.20.16 → zou-0.20.18}/zou/app/config.py +1 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/comment.py +10 -10
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/project.py +26 -6
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/assets_service.py +3 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/edits_service.py +3 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/entities_service.py +3 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/shots_service.py +3 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/tasks_service.py +4 -4
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/user_service.py +1 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/fs.py +3 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/monitoring.py +2 -0
- zou-0.20.18/zou/migrations/versions/fba149993140_add_missing_index.py +132 -0
- {zou-0.20.16 → zou-0.20.18/zou.egg-info}/PKG-INFO +9 -10
- {zou-0.20.16 → zou-0.20.18}/zou.egg-info/SOURCES.txt +1 -0
- {zou-0.20.16 → zou-0.20.18}/zou.egg-info/requires.txt +8 -11
- zou-0.20.16/zou/__init__.py +0 -1
- {zou-0.20.16 → zou-0.20.18}/LICENSE +0 -0
- {zou-0.20.16 → zou-0.20.18}/README.rst +0 -0
- {zou-0.20.16 → zou-0.20.18}/pyproject.toml +0 -0
- {zou-0.20.16 → zou-0.20.18}/setup.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/api.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/assets/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/assets/resources.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/auth/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/auth/resources.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/breakdown/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/breakdown/resources.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/chats/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/chats/resources.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/comments/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/concepts/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/concepts/resources.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/asset_instance.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/attachment_file.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/base.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/chat.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/chat_message.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/comments.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/custom_action.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/day_off.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/department.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/entity.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/entity_link.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/entity_type.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/event.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/file_status.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/metadata_descriptor.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/milestone.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/news.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/notification.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/organisation.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/output_file.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/output_type.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/person.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/playlist.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/preview_background_file.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/preview_file.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/project.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/project_status.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/schedule_item.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/search_filter.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/search_filter_group.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/software.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/status_automation.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/studio.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/subscription.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/task.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/task_status.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/task_type.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/time_spent.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/crud/working_file.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/edits/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/edits/resources.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/entities/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/entities/resources.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/events/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/events/resources.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/export/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/export/csv/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/export/csv/assets.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/export/csv/base.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/export/csv/casting.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/export/csv/edits.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/export/csv/persons.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/export/csv/playlists.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/export/csv/projects.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/export/csv/shots.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/export/csv/task_types.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/export/csv/tasks.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/export/csv/time_spents.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/files/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/files/resources.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/index/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/index/resources.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/news/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/news/resources.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/persons/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/persons/resources.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/playlists/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/playlists/resources.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/previews/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/projects/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/projects/resources.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/search/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/search/resources.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/shots/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/shots/resources.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/csv/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/csv/assets.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/csv/base.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/csv/casting.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/csv/edits.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/csv/persons.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/csv/shots.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/csv/task_type_estimations.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/kitsu.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/otio.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/shotgun/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/shotgun/assets.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/shotgun/base.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/shotgun/episode.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/shotgun/exception.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/shotgun/import_errors.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/shotgun/notes.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/shotgun/person.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/shotgun/project.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/shotgun/scene.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/shotgun/sequence.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/shotgun/shot.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/shotgun/status.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/shotgun/steps.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/shotgun/tasks.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/shotgun/team.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/source/shotgun/versions.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/tasks/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/tasks/resources.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/user/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/blueprints/user/resources.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/file_trees/default.json +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/file_trees/simple.json +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/indexer/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/indexer/indexing.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/mixin.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/asset_instance.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/attachment_file.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/base.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/build_job.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/chat.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/chat_message.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/custom_action.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/data_import_error.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/day_off.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/department.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/desktop_login_log.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/entity.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/entity_type.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/event.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/file_status.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/login_log.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/metadata_descriptor.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/milestone.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/news.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/notification.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/organisation.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/output_file.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/output_type.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/person.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/playlist.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/preview_background_file.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/preview_file.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/project_status.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/schedule_item.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/search_filter.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/search_filter_group.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/serializer.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/software.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/status_automation.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/studio.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/subscription.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/task.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/task_status.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/task_type.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/time_spent.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/models/working_file.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/auth_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/backup_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/base_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/breakdown_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/chats_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/comments_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/concepts_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/custom_actions_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/deletion_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/emails_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/events_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/exception.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/file_tree_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/files_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/index_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/names_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/news_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/notifications_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/persons_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/playlists_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/preview_files_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/projects_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/scenes_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/schedule_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/stats_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/status_automations_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/sync_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/telemetry_services.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/services/time_spents_service.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/stores/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/stores/auth_tokens_store.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/stores/file_store.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/stores/publisher_store.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/stores/queue_store.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/swagger.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/api.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/auth.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/cache.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/chats.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/colors.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/commands.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/csv_utils.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/date_helpers.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/dbhelpers.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/emails.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/env.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/events.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/fido.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/fields.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/flask.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/git.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/logs.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/permissions.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/query.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/redis.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/remote_job.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/saml.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/shell.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/string.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/app/utils/thumbnail.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/cli.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/debug.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/event_stream.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/job_settings.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/README +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/alembic.ini +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/env.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/script.py.mako +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/utils/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/utils/base.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/003be8a91001_add_start_and_end_dates_to_projects.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/0596674df51d_add_department_mentions_to_comments.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/05ac7e8caa21_remove_unique_constraint_for_taskstatus_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/05b7dc79a416_add_archived_fields_to_main_tables.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/0cf5e0e035fa_drop_column_tasktype_for_shots.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/0ec3762a745d_add_attachment_table.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/0ef6416a507b_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/10cf267d95c9_fix_schedule_item.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/16328eae4b5f_add_new_constraint_for_timespent.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/16df47d76c64_add_some_indexes.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/17ef8f7be758_disallow_null_choicetype.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/1bb55759146f_add_table_studio.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/1cb44194db49_add_file_size_field_to_preview_file.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/1e150c2cea4d_add_nb_entities_out.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/1e2d77a2f0c4_add_hd_by_default_column.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/1fab8c420678_add_attachments_to_message_chats.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/20a8ad264659_tasktypeassettypelink_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/20dfeb36142b_add_projecttaskstatuslink_roles_for_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/23122f290ca2_add_entity_chat_models.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/269d41bfb73f_add_entity_entity_links.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/29df910f04a4_create_unique_constraint_project_id_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/29fe01a6c9eb_add_status_automation_field.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/2adc020885fa_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/2baede80b111_add_entity_status_field.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/306266361f4f_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/328fd44c6347_add_entity_created_by.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/32f134ff1201_add_is_shared_flag_to_filters.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/346250b5304c_add_position_to_preview_files.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/3476e147e632_add_acks_to_comments.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/389cfb9de776_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/38baa9a23b3d_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/398150912a3f_validation_status_preview.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/3b0d1321079e_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/3d5c93bafb9d_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/3e0538ddf80f_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/3fee3bd10f9d_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/4095103c7d01_add_is_clients_isolated_flag_to_projects.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/40dea9555940_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/42ec83db6a01_change_person_preferred_two_factor_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/43d0cf0ed5e7_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/443d1e78a932_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/45c2de366e66_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/45dafbb3f4e1_for_person_contract_type_disallow_null.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/4715c2586036_add_last_preview_file_fields.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/4e3738cdc34c_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/4f2398ebcd49_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/523ee9647bee_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/539a3a00c417_for_departmentlink_index_person_id_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/54ee0d1d60ba_add_build_job_model.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/556526e47daa_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/57222395f2be_add_statusautomation_import_last_revision.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/5798d2c9020b_change_person_role_to_choicetype.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/590aa1ffe731_add_notifications_enabled_flag.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/59a7445a966c_add_entity_is_shared.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/5a291251823c_add_max_retake_parameter.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/5ab9d7a75887_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/5b0fcbb94f24_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/5b7fa3e51701_add_is_client_allowed_flag_to_task_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/5b980f0dc365_add_comment_links.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/5b9fd9ddfe43_add_homepage_and_contract_fields.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/5c0498e264bc_add_slack_fields.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/5e2ce62632a6_add_workflow_to_project.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/680c64565f9d_for_searchfiltergroup_is_shared.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/693cc511d28d_add_taskstatus_priority.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/6aa446ee4072_add_is_for_all_flage_to_playlists.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/6bd3b102d61b_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/6c597e842afa_add_task_type_field_to_playlists.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/6d1b2c60f58b_add_milestone_model.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/6d7fa5a8e9a5_add_timesheets_locked_field_to_org.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/6eeaff945706_add_data_field_on_entity_links.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/6f6049877105_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/7417c8eb70d8_add_for_entity_field_to_playlists.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/772a5e43f05b_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/7748d3d22925_add_columns_to_searchfilter_table_to_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/77d6820f494f_add_reply_to_notif.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/7b1f765677d8_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/7bc746997e8d_add_slack_token_field_to_organisation.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/7dc79d4ed7cd_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/818f7bda2528_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/82e7f7a95e84_add_project_id_to_events.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/82ee682204ab_add_is_generated_from_ldap_column_to_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/8588f254d6b8_add_archived_fields.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/8739ae9fa28b_add_for_client_field.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/87efceb6745b_add_ready_for_to_entity.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/892b264937ec_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/8a1b4a1b7f4a_add_totp_columns_for_person.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/8e4f39e321f4_add_day_off_table.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/8e67c183bed7_add_preference_fields.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/8fbd40afbe5f_allow_to_set_float_values_for_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/9010a64e5a2d_add_indices.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/9060dd4f6116_notification_uc.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/925771029620_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/92b40d79ad3f_allow_message_attachments.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/92bdfe07e5f5_discord_integration.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/956659992419_add_columns_for_person_to_store_fido_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/96c79d31e648_add_mail_otp_columns_for_person.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/96f58a4a2a58_person_partial_index_for_email_only_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/971dbf5a0faf_add_short_name_for_asset_type_entity_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/98c90621cf58_add_for_client_flag_to_playlist.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/99825b9cc778_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/9a09467f9b2c_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/9b85c14fa8a7_add_day_off_new_columns.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/9bd17364fc18_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/9d3bb33c6fc6_add_department_keys_to_filter_models.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/9e5b3a9b0cee_add_new_column_metadatadescriptor_data_type_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/9f8445f9b42c_add_man_days_fields.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/a23682ccc1f1_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/a252a094e977_add_descriptions_for_entities_tasks_and_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/a519c710877c_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/a65bdadbae2f_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/a66508788c53_add_nb_assets_ready.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/a6c25eed3ea1_add_login_failed_attemps_and_last_login_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/a7c43f3fbc76_add_duration_column_to_the_preview_file.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/aa0a60033106_feedback_request.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/addbbefa7028_add_departments_link_to_metadata_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/ae0127f2fc56_add_previewfile_width_and_previewfile_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/af1790868e2c_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/b45cb782bb9c_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/b4dd0add5f79_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/b8c0a0f9d054_drop_task_status_is_reviewable.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/b8ed0fb263f8_add_person_jti_and_jti_expiration_date.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/b97a71306fc8_add_is_casting_standby_column_to_entity.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/be56dc0fb760_for_is_shared_disallow_nullable.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/bf1347acdee2_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/c49e41f1298b_add_previewbackground.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/c68c2a62cfac_add_mimetype_column_to_attachment.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/c726b98be194_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/c81f3e83bdb5_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/ca28796a2a62_add_is_done_field_to_the_task_model.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/cf3d365de164_add_entity_version_model.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/cf6cec6d6bf5_add_status_field_to_preview_file.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/d80267806131_task_status_new_column_is_default.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/d8dcd5196d57_add_casting_label.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/de8a3de227ef_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/deeacd38d373_for_projecttaskstatuslink_set_default_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/df1834485f57_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/df9f8a147e80_change_file_size_to_big_integer.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/e1ef93f40d3d_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/e29638428dfd_add_schedule_item_table.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/e3f6db74cc1e_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/e839d6603c09_add_person_id_to_shot_history.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/ee2373fbe3a4_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/f0567e8d0c62_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/f0c6cbb61869_add_production_style_field.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/f344b867a911_for_description_of_entity_task_working_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/f4ff5a73d283_add_person_ldap_uid.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/f5b113876a49_add_preferred_two_factor_authentication_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/f5bdca075cdc_add_preview_download_flag_to_projects.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/f874ad5e898a_add_link_entity_type_task_type.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/f995b28fb749_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/fb6b6f188497_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/fb87feaaa094_add_missing_unique_constraints.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/fc322f908695_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/fee7c696166e_.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/feffd3c5b806_introduce_concepts.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/migrations/versions/ffeed4956ab1_add_more_details_to_projects.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/remote/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/remote/config_payload.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/remote/normalize_movie.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/remote/playlist.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/utils/__init__.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou/utils/movie.py +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou.egg-info/dependency_links.txt +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou.egg-info/entry_points.txt +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou.egg-info/not-zip-safe +0 -0
- {zou-0.20.16 → zou-0.20.18}/zou.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: zou
|
|
3
|
-
Version: 0.20.
|
|
3
|
+
Version: 0.20.18
|
|
4
4
|
Summary: API to store and manage the data of your animation production
|
|
5
5
|
Home-page: https://zou.cg-wire.com
|
|
6
6
|
Author: CG Wire
|
|
@@ -21,10 +21,9 @@ Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
|
21
21
|
Classifier: Topic :: Multimedia :: Graphics
|
|
22
22
|
Requires-Python: >=3.9, <3.14
|
|
23
23
|
License-File: LICENSE
|
|
24
|
-
Requires-Dist: audioop-lts==0.2.1; python_version >= "3.13"
|
|
25
24
|
Requires-Dist: babel==2.17.0
|
|
26
25
|
Requires-Dist: click==8.1.8
|
|
27
|
-
Requires-Dist: discord.py==2.
|
|
26
|
+
Requires-Dist: discord.py==2.5.0
|
|
28
27
|
Requires-Dist: email-validator==2.2.0
|
|
29
28
|
Requires-Dist: ffmpeg-python==0.2.0
|
|
30
29
|
Requires-Dist: fido2==1.2.0
|
|
@@ -41,7 +40,7 @@ Requires-Dist: flask-jwt-extended==4.7.1
|
|
|
41
40
|
Requires-Dist: flask-migrate==4.1.0
|
|
42
41
|
Requires-Dist: flask-socketio==5.5.1
|
|
43
42
|
Requires-Dist: flask==3.1.0
|
|
44
|
-
Requires-Dist: gazu==0.10.
|
|
43
|
+
Requires-Dist: gazu==0.10.28
|
|
45
44
|
Requires-Dist: gevent-websocket==0.10.1
|
|
46
45
|
Requires-Dist: gevent==24.11.1
|
|
47
46
|
Requires-Dist: gunicorn==23.0.0
|
|
@@ -50,18 +49,18 @@ Requires-Dist: itsdangerous==2.2.0
|
|
|
50
49
|
Requires-Dist: Jinja2==3.1.5
|
|
51
50
|
Requires-Dist: ldap3==2.9.1
|
|
52
51
|
Requires-Dist: matterhook==0.2
|
|
53
|
-
Requires-Dist: meilisearch==0.
|
|
52
|
+
Requires-Dist: meilisearch==0.34.0
|
|
54
53
|
Requires-Dist: numpy==2.0.1; python_version == "3.9"
|
|
55
|
-
Requires-Dist: numpy==2.2.
|
|
54
|
+
Requires-Dist: numpy==2.2.3; python_version >= "3.10"
|
|
56
55
|
Requires-Dist: opencv-python==4.11.0.86
|
|
57
56
|
Requires-Dist: OpenTimelineIO==0.17.0
|
|
58
57
|
Requires-Dist: OpenTimelineIO-Plugins==0.17.0
|
|
59
58
|
Requires-Dist: orjson==3.10.15
|
|
60
59
|
Requires-Dist: pillow==11.1.0
|
|
61
|
-
Requires-Dist: psutil==
|
|
60
|
+
Requires-Dist: psutil==7.0.0
|
|
62
61
|
Requires-Dist: psycopg[binary]==3.2.4
|
|
63
62
|
Requires-Dist: pyotp==2.9.0
|
|
64
|
-
Requires-Dist: pysaml2==7.5.
|
|
63
|
+
Requires-Dist: pysaml2==7.5.2
|
|
65
64
|
Requires-Dist: python-nomad==2.1.0
|
|
66
65
|
Requires-Dist: python-slugify==8.0.4
|
|
67
66
|
Requires-Dist: python-socketio==5.12.1
|
|
@@ -80,14 +79,14 @@ Requires-Dist: gevent; extra == "prod"
|
|
|
80
79
|
Provides-Extra: dev
|
|
81
80
|
Requires-Dist: wheel; extra == "dev"
|
|
82
81
|
Provides-Extra: test
|
|
83
|
-
Requires-Dist: fakeredis==2.
|
|
82
|
+
Requires-Dist: fakeredis==2.27.0; extra == "test"
|
|
84
83
|
Requires-Dist: mixer==7.2.2; extra == "test"
|
|
85
84
|
Requires-Dist: pytest-cov==6.0.0; extra == "test"
|
|
86
85
|
Requires-Dist: pytest==8.3.4; extra == "test"
|
|
87
86
|
Provides-Extra: monitoring
|
|
88
87
|
Requires-Dist: prometheus-flask-exporter==0.23.1; extra == "monitoring"
|
|
89
88
|
Requires-Dist: pygelf==0.4.2; extra == "monitoring"
|
|
90
|
-
Requires-Dist: sentry-sdk==2.
|
|
89
|
+
Requires-Dist: sentry-sdk==2.22.0; extra == "monitoring"
|
|
91
90
|
Provides-Extra: lint
|
|
92
91
|
Requires-Dist: autoflake==2.3.1; extra == "lint"
|
|
93
92
|
Requires-Dist: black==25.1.0; extra == "lint"
|
|
@@ -27,10 +27,9 @@ classifiers =
|
|
|
27
27
|
zip_safe = False
|
|
28
28
|
packages = find:
|
|
29
29
|
install_requires =
|
|
30
|
-
audioop-lts==0.2.1; python_version>='3.13'
|
|
31
30
|
babel==2.17.0
|
|
32
31
|
click==8.1.8
|
|
33
|
-
discord.py==2.
|
|
32
|
+
discord.py==2.5.0
|
|
34
33
|
email-validator==2.2.0
|
|
35
34
|
ffmpeg-python==0.2.0
|
|
36
35
|
fido2==1.2.0
|
|
@@ -47,7 +46,7 @@ install_requires =
|
|
|
47
46
|
flask-migrate==4.1.0
|
|
48
47
|
flask-socketio==5.5.1
|
|
49
48
|
flask==3.1.0
|
|
50
|
-
gazu==0.10.
|
|
49
|
+
gazu==0.10.28
|
|
51
50
|
gevent-websocket==0.10.1
|
|
52
51
|
gevent==24.11.1
|
|
53
52
|
gunicorn==23.0.0
|
|
@@ -56,18 +55,18 @@ install_requires =
|
|
|
56
55
|
Jinja2==3.1.5
|
|
57
56
|
ldap3==2.9.1
|
|
58
57
|
matterhook==0.2
|
|
59
|
-
meilisearch==0.
|
|
58
|
+
meilisearch==0.34.0
|
|
60
59
|
numpy==2.0.1; python_version == '3.9'
|
|
61
|
-
numpy==2.2.
|
|
60
|
+
numpy==2.2.3; python_version >= '3.10'
|
|
62
61
|
opencv-python==4.11.0.86
|
|
63
62
|
OpenTimelineIO==0.17.0
|
|
64
63
|
OpenTimelineIO-Plugins==0.17.0
|
|
65
64
|
orjson==3.10.15
|
|
66
65
|
pillow==11.1.0
|
|
67
|
-
psutil==
|
|
66
|
+
psutil==7.0.0
|
|
68
67
|
psycopg[binary]==3.2.4
|
|
69
68
|
pyotp==2.9.0
|
|
70
|
-
pysaml2==7.5.
|
|
69
|
+
pysaml2==7.5.2
|
|
71
70
|
python-nomad==2.1.0
|
|
72
71
|
python-slugify==8.0.4
|
|
73
72
|
python-socketio==5.12.1
|
|
@@ -94,14 +93,14 @@ prod =
|
|
|
94
93
|
dev =
|
|
95
94
|
wheel
|
|
96
95
|
test =
|
|
97
|
-
fakeredis==2.
|
|
96
|
+
fakeredis==2.27.0
|
|
98
97
|
mixer==7.2.2
|
|
99
98
|
pytest-cov==6.0.0
|
|
100
99
|
pytest==8.3.4
|
|
101
100
|
monitoring =
|
|
102
101
|
prometheus-flask-exporter==0.23.1
|
|
103
102
|
pygelf==0.4.2
|
|
104
|
-
sentry-sdk==2.
|
|
103
|
+
sentry-sdk==2.22.0
|
|
105
104
|
lint =
|
|
106
105
|
autoflake==2.3.1
|
|
107
106
|
black==25.1.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.20.18"
|
|
@@ -83,9 +83,10 @@ class DownloadAttachmentResource(Resource):
|
|
|
83
83
|
),
|
|
84
84
|
)
|
|
85
85
|
except Exception:
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
if config.LOG_FILE_NOT_FOUND:
|
|
87
|
+
current_app.logger.error(
|
|
88
|
+
f"Attachment file was not found for: {attachment_file_id}"
|
|
89
|
+
)
|
|
89
90
|
abort(404)
|
|
90
91
|
|
|
91
92
|
|
|
@@ -653,9 +653,10 @@ class PreviewFileMovieResource(BasePreviewFileResource):
|
|
|
653
653
|
instance_id, last_modified=self.last_modified
|
|
654
654
|
)
|
|
655
655
|
except FileNotFound:
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
656
|
+
if config.LOG_FILE_NOT_FOUND:
|
|
657
|
+
current_app.logger.error(
|
|
658
|
+
"Movie file was not found for: %s" % instance_id
|
|
659
|
+
)
|
|
659
660
|
abort(404)
|
|
660
661
|
|
|
661
662
|
|
|
@@ -698,9 +699,10 @@ class PreviewFileLowMovieResource(BasePreviewFileResource):
|
|
|
698
699
|
instance_id, last_modified=self.last_modified
|
|
699
700
|
)
|
|
700
701
|
except FileNotFound:
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
702
|
+
if config.LOG_FILE_NOT_FOUND:
|
|
703
|
+
current_app.logger.error(
|
|
704
|
+
"Movie file was not found for: %s" % instance_id
|
|
705
|
+
)
|
|
704
706
|
abort(404)
|
|
705
707
|
|
|
706
708
|
|
|
@@ -740,9 +742,10 @@ class PreviewFileMovieDownloadResource(BasePreviewFileResource):
|
|
|
740
742
|
last_modified=self.last_modified,
|
|
741
743
|
)
|
|
742
744
|
except FileNotFound:
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
745
|
+
if config.LOG_FILE_NOT_FOUND:
|
|
746
|
+
current_app.logger.error(
|
|
747
|
+
"Movie file was not found for: %s" % instance_id
|
|
748
|
+
)
|
|
746
749
|
abort(404)
|
|
747
750
|
|
|
748
751
|
|
|
@@ -800,9 +803,10 @@ class PreviewFileResource(BasePreviewFileResource):
|
|
|
800
803
|
)
|
|
801
804
|
|
|
802
805
|
except FileNotFound:
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
+
if config.LOG_FILE_NOT_FOUND:
|
|
807
|
+
current_app.logger.error(
|
|
808
|
+
"Non-movie file was not found for: %s" % instance_id
|
|
809
|
+
)
|
|
806
810
|
abort(404)
|
|
807
811
|
|
|
808
812
|
|
|
@@ -869,9 +873,10 @@ class PreviewFileDownloadResource(BasePreviewFileResource):
|
|
|
869
873
|
last_modified=self.last_modified,
|
|
870
874
|
)
|
|
871
875
|
except FileNotFound:
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
876
|
+
if config.LOG_FILE_NOT_FOUND:
|
|
877
|
+
current_app.logger.error(
|
|
878
|
+
"Standard file was not found for: %s" % instance_id
|
|
879
|
+
)
|
|
875
880
|
abort(404)
|
|
876
881
|
|
|
877
882
|
|
|
@@ -935,10 +940,11 @@ class AttachmentThumbnailResource(Resource):
|
|
|
935
940
|
),
|
|
936
941
|
)
|
|
937
942
|
except FileNotFound:
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
943
|
+
if config.LOG_FILE_NOT_FOUND:
|
|
944
|
+
current_app.logger.error(
|
|
945
|
+
"Picture file was not found for attachment: %s"
|
|
946
|
+
% (attachment_file_id)
|
|
947
|
+
)
|
|
942
948
|
abort(404)
|
|
943
949
|
|
|
944
950
|
|
|
@@ -982,9 +988,10 @@ class BasePreviewPictureResource(BasePreviewFileResource):
|
|
|
982
988
|
last_modified=self.last_modified,
|
|
983
989
|
)
|
|
984
990
|
except FileNotFound:
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
991
|
+
if config.LOG_FILE_NOT_FOUND:
|
|
992
|
+
current_app.logger.error(
|
|
993
|
+
"Picture file was not found for: %s" % instance_id
|
|
994
|
+
)
|
|
988
995
|
abort(404)
|
|
989
996
|
|
|
990
997
|
|
|
@@ -1166,14 +1173,13 @@ class BaseThumbnailResource(Resource):
|
|
|
1166
1173
|
),
|
|
1167
1174
|
)
|
|
1168
1175
|
except FileNotFound:
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1176
|
+
if config.LOG_FILE_NOT_FOUND:
|
|
1177
|
+
current_app.logger.error(
|
|
1178
|
+
"Thumbnail file was not found for: %s" % instance_id
|
|
1179
|
+
)
|
|
1172
1180
|
abort(404)
|
|
1173
|
-
except IOError:
|
|
1174
|
-
current_app.logger.error(
|
|
1175
|
-
"Thumbnail file was not found for: %s" % instance_id
|
|
1176
|
-
)
|
|
1181
|
+
except IOError as e:
|
|
1182
|
+
current_app.logger.error(e)
|
|
1177
1183
|
abort(404)
|
|
1178
1184
|
|
|
1179
1185
|
|
|
@@ -1680,9 +1686,11 @@ class PreviewBackgroundFileResource(Resource):
|
|
|
1680
1686
|
),
|
|
1681
1687
|
)
|
|
1682
1688
|
except FileNotFound:
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1689
|
+
if config.LOG_FILE_NOT_FOUND:
|
|
1690
|
+
current_app.logger.error(
|
|
1691
|
+
"Preview background file was not found for: %s"
|
|
1692
|
+
% instance_id
|
|
1693
|
+
)
|
|
1686
1694
|
raise PreviewBackgroundFileNotFoundException
|
|
1687
1695
|
|
|
1688
1696
|
|
|
@@ -142,6 +142,7 @@ LOGS_MODE = os.getenv("LOGS_MODE", "default")
|
|
|
142
142
|
LOGS_HOST = os.getenv("LOGS_HOST", "localhost")
|
|
143
143
|
LOGS_PORT = os.getenv("LOGS_PORT", 2202)
|
|
144
144
|
LOGS_TOKEN = os.getenv("LOGS_TOKEN")
|
|
145
|
+
LOG_FILE_NOT_FOUND = envtobool("LOG_FILE_NOT_FOUND", False)
|
|
145
146
|
|
|
146
147
|
SENTRY_ENABLED = envtobool("SENTRY_ENABLED", False)
|
|
147
148
|
SENTRY_DSN = os.getenv("SENTRY_DSN", "")
|
|
@@ -6,21 +6,19 @@ from zou.app.models.serializer import SerializerMixin
|
|
|
6
6
|
from zou.app.models.base import BaseMixin
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
db.Column(
|
|
12
|
-
"comment",
|
|
9
|
+
class CommentPreviewLink(db.Model):
|
|
10
|
+
comment = db.Column(
|
|
13
11
|
UUIDType(binary=False),
|
|
14
12
|
db.ForeignKey("comment.id"),
|
|
15
13
|
primary_key=True,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
index=True,
|
|
15
|
+
)
|
|
16
|
+
preview_file = db.Column(
|
|
19
17
|
UUIDType(binary=False),
|
|
20
18
|
db.ForeignKey("preview_file.id"),
|
|
21
19
|
primary_key=True,
|
|
22
|
-
|
|
23
|
-
)
|
|
20
|
+
index=True,
|
|
21
|
+
)
|
|
24
22
|
|
|
25
23
|
|
|
26
24
|
mentions_table = db.Table(
|
|
@@ -107,7 +105,9 @@ class Comment(db.Model, BaseMixin, SerializerMixin):
|
|
|
107
105
|
UUIDType(binary=False), db.ForeignKey("preview_file.id")
|
|
108
106
|
)
|
|
109
107
|
previews = db.relationship(
|
|
110
|
-
"PreviewFile",
|
|
108
|
+
"PreviewFile",
|
|
109
|
+
secondary=CommentPreviewLink.__table__,
|
|
110
|
+
backref="comments",
|
|
111
111
|
)
|
|
112
112
|
mentions = db.relationship("Person", secondary=mentions_table)
|
|
113
113
|
department_mentions = db.relationship(
|
|
@@ -29,10 +29,16 @@ PROJECT_STYLES = [
|
|
|
29
29
|
class ProjectPersonLink(db.Model):
|
|
30
30
|
__tablename__ = "project_person_link"
|
|
31
31
|
project_id = db.Column(
|
|
32
|
-
UUIDType(binary=False),
|
|
32
|
+
UUIDType(binary=False),
|
|
33
|
+
db.ForeignKey("project.id"),
|
|
34
|
+
primary_key=True,
|
|
35
|
+
index=True,
|
|
33
36
|
)
|
|
34
37
|
person_id = db.Column(
|
|
35
|
-
UUIDType(binary=False),
|
|
38
|
+
UUIDType(binary=False),
|
|
39
|
+
db.ForeignKey("person.id"),
|
|
40
|
+
primary_key=True,
|
|
41
|
+
index=True,
|
|
36
42
|
)
|
|
37
43
|
shotgun_id = db.Column(db.Integer)
|
|
38
44
|
|
|
@@ -40,10 +46,16 @@ class ProjectPersonLink(db.Model):
|
|
|
40
46
|
class ProjectTaskTypeLink(db.Model, BaseMixin, SerializerMixin):
|
|
41
47
|
__tablename__ = "project_task_type_link"
|
|
42
48
|
project_id = db.Column(
|
|
43
|
-
UUIDType(binary=False),
|
|
49
|
+
UUIDType(binary=False),
|
|
50
|
+
db.ForeignKey("project.id"),
|
|
51
|
+
primary_key=True,
|
|
52
|
+
index=True,
|
|
44
53
|
)
|
|
45
54
|
task_type_id = db.Column(
|
|
46
|
-
UUIDType(binary=False),
|
|
55
|
+
UUIDType(binary=False),
|
|
56
|
+
db.ForeignKey("task_type.id"),
|
|
57
|
+
primary_key=True,
|
|
58
|
+
index=True,
|
|
47
59
|
)
|
|
48
60
|
priority = db.Column(db.Integer, default=None)
|
|
49
61
|
|
|
@@ -57,12 +69,16 @@ class ProjectTaskTypeLink(db.Model, BaseMixin, SerializerMixin):
|
|
|
57
69
|
class ProjectTaskStatusLink(db.Model, BaseMixin, SerializerMixin):
|
|
58
70
|
__tablename__ = "project_task_status_link"
|
|
59
71
|
project_id = db.Column(
|
|
60
|
-
UUIDType(binary=False),
|
|
72
|
+
UUIDType(binary=False),
|
|
73
|
+
db.ForeignKey("project.id"),
|
|
74
|
+
primary_key=True,
|
|
75
|
+
index=True,
|
|
61
76
|
)
|
|
62
77
|
task_status_id = db.Column(
|
|
63
78
|
UUIDType(binary=False),
|
|
64
79
|
db.ForeignKey("task_status.id"),
|
|
65
80
|
primary_key=True,
|
|
81
|
+
index=True,
|
|
66
82
|
)
|
|
67
83
|
priority = db.Column(db.Integer, default=None)
|
|
68
84
|
roles_for_board = db.Column(
|
|
@@ -92,12 +108,16 @@ class ProjectAssetTypeLink(db.Model):
|
|
|
92
108
|
class ProjectStatusAutomationLink(db.Model):
|
|
93
109
|
__tablename__ = "project_status_automation_link"
|
|
94
110
|
project_id = db.Column(
|
|
95
|
-
UUIDType(binary=False),
|
|
111
|
+
UUIDType(binary=False),
|
|
112
|
+
db.ForeignKey("project.id"),
|
|
113
|
+
primary_key=True,
|
|
114
|
+
index=True,
|
|
96
115
|
)
|
|
97
116
|
status_automation_id = db.Column(
|
|
98
117
|
UUIDType(binary=False),
|
|
99
118
|
db.ForeignKey("status_automation.id"),
|
|
100
119
|
primary_key=True,
|
|
120
|
+
index=True,
|
|
101
121
|
)
|
|
102
122
|
|
|
103
123
|
|
|
@@ -202,6 +202,7 @@ def get_assets_and_tasks(criterions={}, with_episode_ids=False):
|
|
|
202
202
|
Task.due_date,
|
|
203
203
|
Task.done_date,
|
|
204
204
|
Task.last_comment_date,
|
|
205
|
+
Task.last_preview_file_id,
|
|
205
206
|
Task.difficulty,
|
|
206
207
|
assignees_table.columns.person,
|
|
207
208
|
).order_by(EntityType.name, Entity.name)
|
|
@@ -294,6 +295,7 @@ def get_assets_and_tasks(criterions={}, with_episode_ids=False):
|
|
|
294
295
|
task_due_date,
|
|
295
296
|
task_done_date,
|
|
296
297
|
task_last_comment_date,
|
|
298
|
+
task_last_preview_file_id,
|
|
297
299
|
task_difficulty,
|
|
298
300
|
person_id,
|
|
299
301
|
) in query_result:
|
|
@@ -346,6 +348,7 @@ def get_assets_and_tasks(criterions={}, with_episode_ids=False):
|
|
|
346
348
|
"last_comment_date": fields.serialize_value(
|
|
347
349
|
task_last_comment_date
|
|
348
350
|
),
|
|
351
|
+
"last_preview_file_id": str(task_last_preview_file_id or ""),
|
|
349
352
|
"priority": task_priority or 0,
|
|
350
353
|
"real_start_date": fields.serialize_value(
|
|
351
354
|
task_real_start_date
|
|
@@ -106,6 +106,7 @@ def get_edits_and_tasks(criterions={}):
|
|
|
106
106
|
Task.start_date,
|
|
107
107
|
Task.due_date,
|
|
108
108
|
Task.last_comment_date,
|
|
109
|
+
Task.last_preview_file_id,
|
|
109
110
|
Task.nb_assets_ready,
|
|
110
111
|
assignees_table.columns.person,
|
|
111
112
|
Project.id,
|
|
@@ -153,6 +154,7 @@ def get_edits_and_tasks(criterions={}):
|
|
|
153
154
|
task_start_date,
|
|
154
155
|
task_due_date,
|
|
155
156
|
task_last_comment_date,
|
|
157
|
+
task_last_preview_file_id,
|
|
156
158
|
task_nb_assets_ready,
|
|
157
159
|
person_id,
|
|
158
160
|
project_id,
|
|
@@ -203,6 +205,7 @@ def get_edits_and_tasks(criterions={}):
|
|
|
203
205
|
"end_date": task_end_date,
|
|
204
206
|
"estimation": task_estimation,
|
|
205
207
|
"last_comment_date": task_last_comment_date,
|
|
208
|
+
"last_preview_file_id": task_last_preview_file_id,
|
|
206
209
|
"is_subscribed": subscription_map.get(task_id, False),
|
|
207
210
|
"nb_assets_ready": task_nb_assets_ready,
|
|
208
211
|
"priority": task_priority or 0,
|
|
@@ -251,6 +251,7 @@ def get_entities_and_tasks(criterions={}):
|
|
|
251
251
|
Task.due_date,
|
|
252
252
|
Task.done_date,
|
|
253
253
|
Task.last_comment_date,
|
|
254
|
+
Task.last_preview_file_id,
|
|
254
255
|
Task.difficulty,
|
|
255
256
|
assignees_table.columns.person,
|
|
256
257
|
)
|
|
@@ -282,6 +283,7 @@ def get_entities_and_tasks(criterions={}):
|
|
|
282
283
|
task_due_date,
|
|
283
284
|
task_done_date,
|
|
284
285
|
task_last_comment_date,
|
|
286
|
+
task_last_preview_file_id,
|
|
285
287
|
task_difficulty,
|
|
286
288
|
person_id,
|
|
287
289
|
) in query.all():
|
|
@@ -322,6 +324,7 @@ def get_entities_and_tasks(criterions={}):
|
|
|
322
324
|
"duration": task_duration,
|
|
323
325
|
"is_subscribed": subscription_map.get(task_id, False),
|
|
324
326
|
"last_comment_date": task_last_comment_date,
|
|
327
|
+
"last_preview_file_id": task_last_preview_file_id,
|
|
325
328
|
"priority": task_priority or 0,
|
|
326
329
|
"real_start_date": task_real_start_date,
|
|
327
330
|
"retake_count": task_retake_count,
|
|
@@ -253,6 +253,7 @@ def get_shots_and_tasks(criterions={}):
|
|
|
253
253
|
Task.due_date,
|
|
254
254
|
Task.done_date,
|
|
255
255
|
Task.last_comment_date,
|
|
256
|
+
Task.last_preview_file_id,
|
|
256
257
|
Task.nb_assets_ready,
|
|
257
258
|
Task.difficulty,
|
|
258
259
|
assignees_table.columns.person,
|
|
@@ -304,6 +305,7 @@ def get_shots_and_tasks(criterions={}):
|
|
|
304
305
|
task_due_date,
|
|
305
306
|
task_done_date,
|
|
306
307
|
task_last_comment_date,
|
|
308
|
+
task_last_preview_file_id,
|
|
307
309
|
task_nb_assets_ready,
|
|
308
310
|
task_difficulty,
|
|
309
311
|
person_id,
|
|
@@ -364,6 +366,7 @@ def get_shots_and_tasks(criterions={}):
|
|
|
364
366
|
"estimation": task_estimation,
|
|
365
367
|
"is_subscribed": subscription_map.get(task_id, False),
|
|
366
368
|
"last_comment_date": task_last_comment_date,
|
|
369
|
+
"last_preview_file_id": task_last_preview_file_id,
|
|
367
370
|
"nb_assets_ready": task_nb_assets_ready,
|
|
368
371
|
"priority": task_priority or 0,
|
|
369
372
|
"real_start_date": task_real_start_date,
|
|
@@ -15,7 +15,7 @@ from zou.app.models.comment import (
|
|
|
15
15
|
acknowledgements_table,
|
|
16
16
|
mentions_table,
|
|
17
17
|
department_mentions_table,
|
|
18
|
-
|
|
18
|
+
CommentPreviewLink,
|
|
19
19
|
)
|
|
20
20
|
from zou.app.models.department import Department
|
|
21
21
|
from zou.app.models.entity import Entity, EntityLink
|
|
@@ -686,9 +686,9 @@ def _build_department_mention_map_for_comments(comment_ids):
|
|
|
686
686
|
def _build_preview_map_for_comments(comment_ids, is_client=False):
|
|
687
687
|
preview_map = {}
|
|
688
688
|
query = (
|
|
689
|
-
PreviewFile.query.join(
|
|
690
|
-
.filter(
|
|
691
|
-
.add_columns(
|
|
689
|
+
PreviewFile.query.join(CommentPreviewLink)
|
|
690
|
+
.filter(CommentPreviewLink.comment.in_(comment_ids))
|
|
691
|
+
.add_columns(CommentPreviewLink.comment)
|
|
692
692
|
)
|
|
693
693
|
for preview, comment_id in query.all():
|
|
694
694
|
comment_id = str(comment_id)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import shutil
|
|
3
3
|
import time
|
|
4
|
+
from flask_fs.errors import FileNotFound
|
|
4
5
|
|
|
5
6
|
import errno
|
|
6
7
|
|
|
@@ -44,6 +45,8 @@ def get_file_path_and_file(
|
|
|
44
45
|
):
|
|
45
46
|
if config.FS_BACKEND == "local":
|
|
46
47
|
file_path = get_local_path(prefix, instance_id)
|
|
48
|
+
if is_unvalid_file(file_path, file_size):
|
|
49
|
+
raise FileNotFound
|
|
47
50
|
else:
|
|
48
51
|
file_path = os.path.join(
|
|
49
52
|
config.TMP_DIR, "cache-%s-%s.%s" % (prefix, instance_id, extension)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from flask_jwt_extended.exceptions import NoAuthorizationError
|
|
2
2
|
from jwt import ExpiredSignatureError
|
|
3
3
|
from werkzeug.exceptions import Forbidden, NotFound
|
|
4
|
+
from flask_fs.errors import FileNotFound
|
|
4
5
|
|
|
5
6
|
from zou.app import config
|
|
6
7
|
from zou.app.utils import permissions
|
|
@@ -37,6 +38,7 @@ def init_monitoring(app):
|
|
|
37
38
|
NotFound,
|
|
38
39
|
Forbidden,
|
|
39
40
|
ExpiredSignatureError,
|
|
41
|
+
FileNotFound,
|
|
40
42
|
],
|
|
41
43
|
)
|
|
42
44
|
|