zou 0.20.68__tar.gz → 0.20.69__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.68/zou.egg-info → zou-0.20.69}/PKG-INFO +4 -4
- {zou-0.20.68 → zou-0.20.69}/setup.cfg +3 -3
- zou-0.20.69/zou/__init__.py +1 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/comments/resources.py +21 -8
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/shots/resources.py +124 -72
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/tasks/resources.py +1 -1
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/attachment_file.py +4 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/comments_service.py +41 -9
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/tasks_service.py +1 -0
- zou-0.20.69/zou/migrations/versions/1b0ab951adca_add_reply_id_to_attachments.py +44 -0
- {zou-0.20.68 → zou-0.20.69/zou.egg-info}/PKG-INFO +4 -4
- {zou-0.20.68 → zou-0.20.69}/zou.egg-info/SOURCES.txt +1 -0
- {zou-0.20.68 → zou-0.20.69}/zou.egg-info/requires.txt +3 -3
- zou-0.20.68/zou/__init__.py +0 -1
- {zou-0.20.68 → zou-0.20.69}/LICENSE +0 -0
- {zou-0.20.68 → zou-0.20.69}/README.rst +0 -0
- {zou-0.20.68 → zou-0.20.69}/pyproject.toml +0 -0
- {zou-0.20.68 → zou-0.20.69}/setup.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/api.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/assets/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/assets/resources.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/auth/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/auth/resources.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/breakdown/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/breakdown/resources.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/chats/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/chats/resources.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/comments/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/concepts/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/concepts/resources.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/asset_instance.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/attachment_file.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/base.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/budget.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/budget_entry.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/chat.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/chat_message.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/comments.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/custom_action.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/day_off.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/department.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/entity.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/entity_link.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/entity_type.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/event.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/file_status.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/hardware_item.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/metadata_descriptor.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/milestone.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/news.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/notification.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/organisation.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/output_file.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/output_type.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/person.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/playlist.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/plugin.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/preview_background_file.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/preview_file.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/production_schedule_version.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/project.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/project_status.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/salary_scale.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/schedule_item.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/search_filter.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/search_filter_group.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/software.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/status_automation.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/studio.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/subscription.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/task.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/task_status.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/task_type.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/time_spent.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/crud/working_file.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/departments/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/departments/resources.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/edits/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/edits/resources.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/entities/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/entities/resources.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/events/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/events/resources.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/export/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/export/csv/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/export/csv/assets.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/export/csv/base.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/export/csv/casting.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/export/csv/edits.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/export/csv/persons.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/export/csv/playlists.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/export/csv/projects.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/export/csv/shots.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/export/csv/task_types.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/export/csv/tasks.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/export/csv/time_spents.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/files/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/files/resources.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/index/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/index/resources.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/news/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/news/resources.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/persons/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/persons/resources.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/playlists/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/playlists/resources.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/previews/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/previews/resources.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/projects/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/projects/resources.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/search/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/search/resources.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/shots/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/csv/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/csv/assets.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/csv/base.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/csv/casting.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/csv/edits.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/csv/persons.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/csv/shots.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/csv/task_type_estimations.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/kitsu.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/otio.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/shotgun/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/shotgun/assets.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/shotgun/base.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/shotgun/episode.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/shotgun/exception.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/shotgun/import_errors.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/shotgun/notes.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/shotgun/person.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/shotgun/project.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/shotgun/scene.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/shotgun/sequence.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/shotgun/shot.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/shotgun/status.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/shotgun/steps.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/shotgun/tasks.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/shotgun/team.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/source/shotgun/versions.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/tasks/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/user/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/blueprints/user/resources.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/config.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/file_trees/default.json +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/file_trees/simple.json +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/indexer/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/indexer/indexing.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/mixin.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/asset_instance.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/base.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/budget.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/budget_entry.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/build_job.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/chat.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/chat_message.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/comment.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/custom_action.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/data_import_error.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/day_off.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/department.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/desktop_login_log.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/entity.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/entity_type.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/event.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/file_status.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/hardware_item.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/login_log.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/metadata_descriptor.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/milestone.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/news.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/notification.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/organisation.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/output_file.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/output_type.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/person.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/playlist.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/plugin.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/preview_background_file.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/preview_file.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/production_schedule_version.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/project.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/project_status.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/salary_scale.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/schedule_item.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/search_filter.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/search_filter_group.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/serializer.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/software.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/status_automation.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/studio.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/subscription.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/task.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/task_status.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/task_type.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/time_spent.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/models/working_file.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/assets_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/auth_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/backup_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/base_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/breakdown_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/budget_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/chats_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/concepts_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/custom_actions_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/deletion_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/departments_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/edits_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/emails_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/entities_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/events_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/exception.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/file_tree_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/files_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/index_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/names_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/news_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/notifications_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/persons_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/playlists_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/plugins_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/preview_files_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/projects_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/scenes_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/schedule_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/shots_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/stats_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/status_automations_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/sync_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/telemetry_services.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/time_spents_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/services/user_service.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/stores/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/stores/auth_tokens_store.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/stores/file_store.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/stores/publisher_store.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/stores/queue_store.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/swagger.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/api.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/auth.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/cache.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/chats.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/colors.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/commands.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/csv_utils.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/date_helpers.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/dbhelpers.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/emails.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/env.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/events.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/fido.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/fields.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/flask.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/fs.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/git.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/logs.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/monitoring.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/permissions.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/plugins.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/query.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/redis.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/remote_job.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/saml.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/shell.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/string.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/app/utils/thumbnail.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/cli.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/debug.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/event_stream.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/job_settings.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/README +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/alembic.ini +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/env.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/script.py.mako +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/utils/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/utils/base.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/003be8a91001_add_start_and_end_dates_to_projects.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/0596674df51d_add_department_mentions_to_comments.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/05ac7e8caa21_remove_unique_constraint_for_taskstatus_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/05b7dc79a416_add_archived_fields_to_main_tables.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/06552e22f9e7_add_comment_updated_by.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/0bd1e89f2a6f_add_productionscheduleversiontasklink_uc.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/0cf5e0e035fa_drop_column_tasktype_for_shots.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/0ec3762a745d_add_attachment_table.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/0ef6416a507b_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/10cf267d95c9_fix_schedule_item.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/16328eae4b5f_add_new_constraint_for_timespent.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/16df47d76c64_add_some_indexes.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/17ef8f7be758_disallow_null_choicetype.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/1bb55759146f_add_table_studio.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/1cb44194db49_add_file_size_field_to_preview_file.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/1e150c2cea4d_add_nb_entities_out.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/1e2d77a2f0c4_add_hd_by_default_column.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/1fab8c420678_add_attachments_to_message_chats.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/20a8ad264659_tasktypeassettypelink_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/20dfeb36142b_add_projecttaskstatuslink_roles_for_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/23122f290ca2_add_entity_chat_models.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/269d41bfb73f_add_entity_entity_links.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/26f96f65cfa3_add_productionversionschedule_uc.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/2762a797f1f9_add_people_salary_information.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/29df910f04a4_create_unique_constraint_project_id_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/29fe01a6c9eb_add_status_automation_field.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/2adc020885fa_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/2baede80b111_add_entity_status_field.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/306266361f4f_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/307edd8c639d_change_comment_updated_by_in_comment_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/328fd44c6347_add_entity_created_by.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/32f134ff1201_add_is_shared_flag_to_filters.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/346250b5304c_add_position_to_preview_files.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/3476e147e632_add_acks_to_comments.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/389cfb9de776_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/38baa9a23b3d_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/398150912a3f_validation_status_preview.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/3b0d1321079e_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/3d5c93bafb9d_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/3d8e68dffeee_fix_task_person_link.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/3e0538ddf80f_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/3fee3bd10f9d_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/4095103c7d01_add_is_clients_isolated_flag_to_projects.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/40dea9555940_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/42ec83db6a01_change_person_preferred_two_factor_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/4368137b44e1_productionscheduleversion_add_on_delete_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/43d0cf0ed5e7_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/443d1e78a932_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/45c2de366e66_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/45dafbb3f4e1_for_person_contract_type_disallow_null.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/45f739ef962a_add_people_salary_scale_table.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/4715c2586036_add_last_preview_file_fields.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/4aab1f84ad72_introduce_plugin_table.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/4bd9bfb73f11_add_fields_to_the_software_table.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/4d585b6956f2_add_taskstatus_is_wip.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/4e3738cdc34c_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/4f2398ebcd49_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/523ee9647bee_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/539a3a00c417_for_departmentlink_index_person_id_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/54ee0d1d60ba_add_build_job_model.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/556526e47daa_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/57222395f2be_add_statusautomation_import_last_revision.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/5798d2c9020b_change_person_role_to_choicetype.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/590aa1ffe731_add_notifications_enabled_flag.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/59a7445a966c_add_entity_is_shared.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/5a291251823c_add_max_retake_parameter.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/5ab9d7a75887_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/5b0fcbb94f24_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/5b7fa3e51701_add_is_client_allowed_flag_to_task_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/5b980f0dc365_add_comment_links.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/5b9fd9ddfe43_add_homepage_and_contract_fields.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/5c0498e264bc_add_slack_fields.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/5e2ce62632a6_add_workflow_to_project.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/5f715f2b6348_add_new_table_productionscheduleversion.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/680c64565f9d_for_searchfiltergroup_is_shared.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/693cc511d28d_add_taskstatus_priority.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/6aa446ee4072_add_is_for_all_flage_to_playlists.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/6bd3b102d61b_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/6c597e842afa_add_task_type_field_to_playlists.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/6d1b2c60f58b_add_milestone_model.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/6d7fa5a8e9a5_add_timesheets_locked_field_to_org.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/6eeaff945706_add_data_field_on_entity_links.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/6f6049877105_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/7417c8eb70d8_add_for_entity_field_to_playlists.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/772a5e43f05b_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/7748d3d22925_add_columns_to_searchfilter_table_to_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/77d6820f494f_add_reply_to_notif.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/7a16258f2fab_add_currency_field_to_budgets.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/7b1f765677d8_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/7bc746997e8d_add_slack_token_field_to_organisation.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/7dc79d4ed7cd_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/818f7bda2528_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/82e7f7a95e84_add_project_id_to_events.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/82ee682204ab_add_is_generated_from_ldap_column_to_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/83e2f33a9b14_add_project_bugdet_table.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/8588f254d6b8_add_archived_fields.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/8739ae9fa28b_add_for_client_field.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/87efceb6745b_add_ready_for_to_entity.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/892b264937ec_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/8a1b4a1b7f4a_add_totp_columns_for_person.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/8ab98c178903_add_budget_entry_table.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/8e4f39e321f4_add_day_off_table.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/8e67c183bed7_add_preference_fields.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/8fbd40afbe5f_allow_to_set_float_values_for_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/9010a64e5a2d_add_indices.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/9060dd4f6116_notification_uc.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/925771029620_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/92b40d79ad3f_allow_message_attachments.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/92bdfe07e5f5_discord_integration.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/956659992419_add_columns_for_person_to_store_fido_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/9683bd840dee_add_archived_field_to_software.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/96c79d31e648_add_mail_otp_columns_for_person.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/96f58a4a2a58_person_partial_index_for_email_only_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/971dbf5a0faf_add_short_name_for_asset_type_entity_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/98c90621cf58_add_for_client_flag_to_playlist.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/99825b9cc778_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/9a09467f9b2c_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/9af2df17a9d5_add_hardware_table.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/9b85c14fa8a7_add_day_off_new_columns.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/9bd17364fc18_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/9d3bb33c6fc6_add_department_keys_to_filter_models.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/9e5b3a9b0cee_add_new_column_metadatadescriptor_data_type_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/9f8445f9b42c_add_man_days_fields.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/a23682ccc1f1_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/a252a094e977_add_descriptions_for_entities_tasks_and_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/a519c710877c_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/a65bdadbae2f_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/a66508788c53_add_nb_assets_ready.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/a6c25eed3ea1_add_login_failed_attemps_and_last_login_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/a7c43f3fbc76_add_duration_column_to_the_preview_file.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/aa0a60033106_feedback_request.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/addbad59c706_allow_to_manage_drawings_instead_of_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/addbbefa7028_add_departments_link_to_metadata_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/ae0127f2fc56_add_previewfile_width_and_previewfile_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/af1790868e2c_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/b45cb782bb9c_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/b4dd0add5f79_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/b8c0a0f9d054_drop_task_status_is_reviewable.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/b8ed0fb263f8_add_person_jti_and_jti_expiration_date.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/b97a71306fc8_add_is_casting_standby_column_to_entity.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/be56dc0fb760_for_is_shared_disallow_nullable.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/bf1347acdee2_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/c49e41f1298b_add_previewbackground.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/c68c2a62cfac_add_mimetype_column_to_attachment.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/c726b98be194_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/c81f3e83bdb5_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/ca28796a2a62_add_is_done_field_to_the_task_model.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/ce7f46f445dc_add_column_estimation_for_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/cf3d365de164_add_entity_version_model.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/cf6cec6d6bf5_add_status_field_to_preview_file.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/d25118cddcaa_modify_salary_scale_model.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/d5665dca188b_add_version_field_to_software.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/d80267806131_task_status_new_column_is_default.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/d80f02824047_add_plugin_revision.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/d8dcd5196d57_add_casting_label.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/d97f2730bf7b_add_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/dde6be40f54f_add_departement_links_tables_for_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/de8a3de227ef_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/deeacd38d373_for_projecttaskstatuslink_set_default_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/df1834485f57_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/df9f8a147e80_change_file_size_to_big_integer.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/e1ef93f40d3d_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/e29638428dfd_add_schedule_item_table.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/e3f6db74cc1e_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/e4b48ca33539_add_project_production_schedule_version_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/e7e633bd6fa2_add_exceptions_to_budget_entries.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/e839d6603c09_add_person_id_to_shot_history.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/e8bc24998b34_remove_on_delete_cascade_for_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/ee2373fbe3a4_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/f0567e8d0c62_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/f0c6cbb61869_add_production_style_field.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/f344b867a911_for_description_of_entity_task_working_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/f4ff5a73d283_add_person_ldap_uid.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/f5b113876a49_add_preferred_two_factor_authentication_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/f5bdca075cdc_add_preview_download_flag_to_projects.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/f874ad5e898a_add_link_entity_type_task_type.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/f995b28fb749_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/fb6b6f188497_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/fb87feaaa094_add_missing_unique_constraints.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/fba149993140_add_missing_index.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/fc322f908695_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/fee7c696166e_.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/feffd3c5b806_introduce_concepts.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/migrations/versions/ffeed4956ab1_add_more_details_to_projects.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/plugin_template/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/plugin_template/migrations/alembic.ini +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/plugin_template/migrations/env.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/plugin_template/migrations/script.py.mako +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/plugin_template/models.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/plugin_template/routes.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/remote/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/remote/config_payload.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/remote/normalize_movie.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/remote/playlist.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/utils/__init__.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou/utils/movie.py +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou.egg-info/dependency_links.txt +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou.egg-info/entry_points.txt +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou.egg-info/not-zip-safe +0 -0
- {zou-0.20.68 → zou-0.20.69}/zou.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: zou
|
|
3
|
-
Version: 0.20.
|
|
3
|
+
Version: 0.20.69
|
|
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
|
|
@@ -23,7 +23,7 @@ License-File: LICENSE
|
|
|
23
23
|
Requires-Dist: babel==2.17.0
|
|
24
24
|
Requires-Dist: click==8.2.1
|
|
25
25
|
Requires-Dist: discord.py==2.6.2
|
|
26
|
-
Requires-Dist: email-validator==2.
|
|
26
|
+
Requires-Dist: email-validator==2.3.0
|
|
27
27
|
Requires-Dist: ffmpeg-python==0.2.0
|
|
28
28
|
Requires-Dist: fido2==2.0.0
|
|
29
29
|
Requires-Dist: flasgger==0.9.7.1
|
|
@@ -41,7 +41,7 @@ Requires-Dist: flask-socketio==5.5.1
|
|
|
41
41
|
Requires-Dist: flask==3.1.2
|
|
42
42
|
Requires-Dist: gazu==0.10.36
|
|
43
43
|
Requires-Dist: gevent-websocket==0.10.1
|
|
44
|
-
Requires-Dist: gevent==25.
|
|
44
|
+
Requires-Dist: gevent==25.8.1
|
|
45
45
|
Requires-Dist: gunicorn==23.0.0
|
|
46
46
|
Requires-Dist: isoweek==1.3.3
|
|
47
47
|
Requires-Dist: itsdangerous==2.2.0
|
|
@@ -53,7 +53,7 @@ Requires-Dist: numpy==2.2.6
|
|
|
53
53
|
Requires-Dist: opencv-python==4.12.0.88
|
|
54
54
|
Requires-Dist: OpenTimelineIO==0.17.0
|
|
55
55
|
Requires-Dist: OpenTimelineIO-Plugins==0.17.0
|
|
56
|
-
Requires-Dist: orjson==3.11.
|
|
56
|
+
Requires-Dist: orjson==3.11.3
|
|
57
57
|
Requires-Dist: pillow==11.3.0
|
|
58
58
|
Requires-Dist: psutil==7.0.0
|
|
59
59
|
Requires-Dist: psycopg[binary]==3.2.9
|
|
@@ -29,7 +29,7 @@ install_requires =
|
|
|
29
29
|
babel==2.17.0
|
|
30
30
|
click==8.2.1
|
|
31
31
|
discord.py==2.6.2
|
|
32
|
-
email-validator==2.
|
|
32
|
+
email-validator==2.3.0
|
|
33
33
|
ffmpeg-python==0.2.0
|
|
34
34
|
fido2==2.0.0
|
|
35
35
|
flasgger==0.9.7.1
|
|
@@ -47,7 +47,7 @@ install_requires =
|
|
|
47
47
|
flask==3.1.2
|
|
48
48
|
gazu==0.10.36
|
|
49
49
|
gevent-websocket==0.10.1
|
|
50
|
-
gevent==25.
|
|
50
|
+
gevent==25.8.1
|
|
51
51
|
gunicorn==23.0.0
|
|
52
52
|
isoweek==1.3.3
|
|
53
53
|
itsdangerous==2.2.0
|
|
@@ -59,7 +59,7 @@ install_requires =
|
|
|
59
59
|
opencv-python==4.12.0.88
|
|
60
60
|
OpenTimelineIO==0.17.0
|
|
61
61
|
OpenTimelineIO-Plugins==0.17.0
|
|
62
|
-
orjson==3.11.
|
|
62
|
+
orjson==3.11.3
|
|
63
63
|
pillow==11.3.0
|
|
64
64
|
psutil==7.0.0
|
|
65
65
|
psycopg[binary]==3.2.9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.20.69"
|
|
@@ -322,6 +322,13 @@ class AddAttachmentToCommentResource(Resource):
|
|
|
322
322
|
type: string
|
|
323
323
|
format: uuid
|
|
324
324
|
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
325
|
+
- in: formData
|
|
326
|
+
name: reply_id
|
|
327
|
+
type: uuid
|
|
328
|
+
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
329
|
+
required: True
|
|
330
|
+
format: uuid
|
|
331
|
+
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
325
332
|
- in: formData
|
|
326
333
|
name: files
|
|
327
334
|
type: file
|
|
@@ -337,7 +344,9 @@ class AddAttachmentToCommentResource(Resource):
|
|
|
337
344
|
user_service.check_manager_project_access(task["project_id"])
|
|
338
345
|
|
|
339
346
|
files = request.files
|
|
340
|
-
comment = comments_service.add_attachments_to_comment(
|
|
347
|
+
comment = comments_service.add_attachments_to_comment(
|
|
348
|
+
comment, files, reply_id=None
|
|
349
|
+
)
|
|
341
350
|
return comment["attachment_files"], 201
|
|
342
351
|
|
|
343
352
|
|
|
@@ -487,12 +496,6 @@ class ReplyCommentResource(Resource, ArgsMixin):
|
|
|
487
496
|
200:
|
|
488
497
|
description: Reply to given comment
|
|
489
498
|
"""
|
|
490
|
-
args = self.get_args(
|
|
491
|
-
[
|
|
492
|
-
("text", "", False),
|
|
493
|
-
]
|
|
494
|
-
)
|
|
495
|
-
|
|
496
499
|
comment = tasks_service.get_comment(comment_id)
|
|
497
500
|
current_user = persons_service.get_current_user()
|
|
498
501
|
if comment["person_id"] != current_user["id"]:
|
|
@@ -500,7 +503,17 @@ class ReplyCommentResource(Resource, ArgsMixin):
|
|
|
500
503
|
raise permissions.PermissionDenied()
|
|
501
504
|
user_service.check_task_action_access(task_id)
|
|
502
505
|
|
|
503
|
-
|
|
506
|
+
args = self.get_args(
|
|
507
|
+
[
|
|
508
|
+
("text", "", False),
|
|
509
|
+
]
|
|
510
|
+
)
|
|
511
|
+
files = request.files
|
|
512
|
+
return comments_service.reply_comment(
|
|
513
|
+
comment_id,
|
|
514
|
+
args["text"],
|
|
515
|
+
files=files
|
|
516
|
+
)
|
|
504
517
|
|
|
505
518
|
|
|
506
519
|
class DeleteReplyCommentResource(Resource):
|
|
@@ -64,10 +64,13 @@ class ShotResource(Resource, ArgsMixin):
|
|
|
64
64
|
type: string
|
|
65
65
|
format: uuid
|
|
66
66
|
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
requestBody:
|
|
68
|
+
required: true
|
|
69
|
+
content:
|
|
70
|
+
application/json:
|
|
71
|
+
schema:
|
|
72
|
+
type: object
|
|
73
|
+
description: Shot data to update
|
|
71
74
|
responses:
|
|
72
75
|
200:
|
|
73
76
|
description: Update given shot
|
|
@@ -711,23 +714,32 @@ class ProjectShotsResource(Resource, ArgsMixin):
|
|
|
711
714
|
type: string
|
|
712
715
|
format: uuid
|
|
713
716
|
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
717
|
+
requestBody:
|
|
718
|
+
required: true
|
|
719
|
+
content:
|
|
720
|
+
application/json:
|
|
721
|
+
schema:
|
|
722
|
+
type: object
|
|
723
|
+
required:
|
|
724
|
+
- name
|
|
725
|
+
properties:
|
|
726
|
+
name:
|
|
727
|
+
type: string
|
|
728
|
+
required: true
|
|
729
|
+
example: "Name of shot"
|
|
730
|
+
description:
|
|
731
|
+
type: string
|
|
732
|
+
required: false
|
|
733
|
+
example: "Description of shot"
|
|
734
|
+
sequence_id:
|
|
735
|
+
type: string
|
|
736
|
+
format: uuid
|
|
737
|
+
required: false
|
|
738
|
+
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
739
|
+
nb_frames:
|
|
740
|
+
type: integer
|
|
741
|
+
required: false
|
|
742
|
+
example: 24
|
|
731
743
|
responses:
|
|
732
744
|
201:
|
|
733
745
|
description: Shot created for given project
|
|
@@ -812,16 +824,24 @@ class ProjectSequencesResource(Resource, ArgsMixin):
|
|
|
812
824
|
type: string
|
|
813
825
|
format: uuid
|
|
814
826
|
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
827
|
+
requestBody:
|
|
828
|
+
required: true
|
|
829
|
+
content:
|
|
830
|
+
application/json:
|
|
831
|
+
schema:
|
|
832
|
+
type: object
|
|
833
|
+
required:
|
|
834
|
+
- name
|
|
835
|
+
properties:
|
|
836
|
+
name:
|
|
837
|
+
type: string
|
|
838
|
+
required: true
|
|
839
|
+
example: "Name of sequence"
|
|
840
|
+
episode_id:
|
|
841
|
+
type: string
|
|
842
|
+
format: uuid
|
|
843
|
+
required: false
|
|
844
|
+
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
825
845
|
responses:
|
|
826
846
|
201:
|
|
827
847
|
description: Sequence created for given project
|
|
@@ -896,16 +916,24 @@ class ProjectEpisodesResource(Resource, ArgsMixin):
|
|
|
896
916
|
type: string
|
|
897
917
|
format: uuid
|
|
898
918
|
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
919
|
+
requestBody:
|
|
920
|
+
required: true
|
|
921
|
+
content:
|
|
922
|
+
application/json:
|
|
923
|
+
schema:
|
|
924
|
+
type: object
|
|
925
|
+
required:
|
|
926
|
+
- name
|
|
927
|
+
- description
|
|
928
|
+
properties:
|
|
929
|
+
name:
|
|
930
|
+
type: string
|
|
931
|
+
required: true
|
|
932
|
+
example: "Name of the episode"
|
|
933
|
+
description:
|
|
934
|
+
type: string
|
|
935
|
+
required: true
|
|
936
|
+
example: "Description of the episode"
|
|
909
937
|
responses:
|
|
910
938
|
201:
|
|
911
939
|
description: Episode created for given project
|
|
@@ -1309,17 +1337,25 @@ class ProjectScenesResource(Resource, ArgsMixin):
|
|
|
1309
1337
|
type: string
|
|
1310
1338
|
format: uuid
|
|
1311
1339
|
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1340
|
+
requestBody:
|
|
1341
|
+
required: true
|
|
1342
|
+
content:
|
|
1343
|
+
application/json:
|
|
1344
|
+
schema:
|
|
1345
|
+
type: object
|
|
1346
|
+
required:
|
|
1347
|
+
- name
|
|
1348
|
+
- sequence_id
|
|
1349
|
+
properties:
|
|
1350
|
+
name:
|
|
1351
|
+
type: string
|
|
1352
|
+
required: true
|
|
1353
|
+
example: "Name of scene"
|
|
1354
|
+
sequence_id:
|
|
1355
|
+
type: string
|
|
1356
|
+
format: uuid
|
|
1357
|
+
required: true
|
|
1358
|
+
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
1323
1359
|
responses:
|
|
1324
1360
|
201:
|
|
1325
1361
|
description: Scene created for given project
|
|
@@ -1453,11 +1489,20 @@ class SceneShotsResource(Resource, ArgsMixin):
|
|
|
1453
1489
|
type: string
|
|
1454
1490
|
format: uuid
|
|
1455
1491
|
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1492
|
+
requestBody:
|
|
1493
|
+
required: true
|
|
1494
|
+
content:
|
|
1495
|
+
application/json:
|
|
1496
|
+
schema:
|
|
1497
|
+
type: object
|
|
1498
|
+
required:
|
|
1499
|
+
- shot_id
|
|
1500
|
+
properties:
|
|
1501
|
+
shot_id:
|
|
1502
|
+
type: string
|
|
1503
|
+
format: uuid
|
|
1504
|
+
required: true
|
|
1505
|
+
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
1461
1506
|
responses:
|
|
1462
1507
|
200:
|
|
1463
1508
|
description: Given scene marked as source of given shot
|
|
@@ -1696,21 +1741,28 @@ class SetShotsFramesResource(Resource, ArgsMixin):
|
|
|
1696
1741
|
---
|
|
1697
1742
|
tags:
|
|
1698
1743
|
- Shots
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1744
|
+
requestBody:
|
|
1745
|
+
required: true
|
|
1746
|
+
content:
|
|
1747
|
+
application/json:
|
|
1748
|
+
schema:
|
|
1749
|
+
type: object
|
|
1750
|
+
required:
|
|
1751
|
+
- shots
|
|
1752
|
+
properties:
|
|
1753
|
+
shots:
|
|
1754
|
+
type: array
|
|
1755
|
+
required: true
|
|
1756
|
+
items:
|
|
1757
|
+
type: object
|
|
1758
|
+
properties:
|
|
1759
|
+
shot_id:
|
|
1760
|
+
type: string
|
|
1761
|
+
format: uuid
|
|
1762
|
+
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
1763
|
+
nb_frames:
|
|
1764
|
+
type: integer
|
|
1765
|
+
example: 24
|
|
1714
1766
|
responses:
|
|
1715
1767
|
200:
|
|
1716
1768
|
description: Frames set for given shots
|
|
@@ -1625,7 +1625,7 @@ class PersonsTasksDatesResource(Resource, ArgsMixin):
|
|
|
1625
1625
|
description: For each person, the first start date of all tasks of assigned to this person and the last end date.
|
|
1626
1626
|
"""
|
|
1627
1627
|
permissions.check_admin_permissions()
|
|
1628
|
-
args = self.get_args([("project_id", None,
|
|
1628
|
+
args = self.get_args([("project_id", None, False, str)])
|
|
1629
1629
|
return tasks_service.get_persons_tasks_dates(
|
|
1630
1630
|
project_id=args["project_id"]
|
|
1631
1631
|
)
|
|
@@ -21,6 +21,10 @@ class AttachmentFile(db.Model, BaseMixin, SerializerMixin):
|
|
|
21
21
|
index=True,
|
|
22
22
|
nullable=True,
|
|
23
23
|
)
|
|
24
|
+
reply_id = db.Column(
|
|
25
|
+
UUIDType(binary=False),
|
|
26
|
+
nullable=True,
|
|
27
|
+
)
|
|
24
28
|
chat_message_id = db.Column(
|
|
25
29
|
UUIDType(binary=False),
|
|
26
30
|
db.ForeignKey("chat_message.id"),
|
|
@@ -19,6 +19,7 @@ from zou.app.services import (
|
|
|
19
19
|
assets_service,
|
|
20
20
|
base_service,
|
|
21
21
|
breakdown_service,
|
|
22
|
+
deletion_service,
|
|
22
23
|
entities_service,
|
|
23
24
|
news_service,
|
|
24
25
|
notifications_service,
|
|
@@ -355,7 +356,7 @@ def reset_mentions(comment):
|
|
|
355
356
|
return comment_dict
|
|
356
357
|
|
|
357
358
|
|
|
358
|
-
def create_attachment(comment, uploaded_file, randomize=False):
|
|
359
|
+
def create_attachment(comment, uploaded_file, randomize=False, reply_id=None):
|
|
359
360
|
tmp_folder = current_app.config["TMP_DIR"]
|
|
360
361
|
filename = uploaded_file.filename
|
|
361
362
|
mimetype = uploaded_file.mimetype
|
|
@@ -366,11 +367,19 @@ def create_attachment(comment, uploaded_file, randomize=False):
|
|
|
366
367
|
filename = f"{filename[:len(filename) - len(extension) - 1]}"
|
|
367
368
|
filename += f"-{random_str}.{extension}"
|
|
368
369
|
|
|
370
|
+
if reply_id is not None:
|
|
371
|
+
is_reply_present = any(
|
|
372
|
+
reply["id"] == reply_id for reply in comment.get("replies", [])
|
|
373
|
+
)
|
|
374
|
+
if not is_reply_present:
|
|
375
|
+
reply_id = None
|
|
376
|
+
|
|
369
377
|
attachment_file = AttachmentFile.create(
|
|
370
378
|
name=filename,
|
|
371
379
|
size=0,
|
|
372
380
|
extension=extension,
|
|
373
381
|
mimetype=mimetype,
|
|
382
|
+
reply_id=reply_id,
|
|
374
383
|
comment_id=comment["id"],
|
|
375
384
|
)
|
|
376
385
|
attachment_file_id = str(attachment_file.id)
|
|
@@ -455,7 +464,7 @@ def _send_ack_event(project_id, comment, user_id, name="acknowledge"):
|
|
|
455
464
|
)
|
|
456
465
|
|
|
457
466
|
|
|
458
|
-
def reply_comment(comment_id, text, person_id=None):
|
|
467
|
+
def reply_comment(comment_id, text, person_id=None, files={}):
|
|
459
468
|
"""
|
|
460
469
|
Add a reply entry to the JSONB field of given comment model. Create
|
|
461
470
|
notifications needed for this.
|
|
@@ -469,6 +478,7 @@ def reply_comment(comment_id, text, person_id=None):
|
|
|
469
478
|
task = tasks_service.get_task(comment.object_id, relations=True)
|
|
470
479
|
if comment.replies is None:
|
|
471
480
|
comment.replies = []
|
|
481
|
+
|
|
472
482
|
reply = {
|
|
473
483
|
"id": str(fields.gen_uuid()),
|
|
474
484
|
"date": date_helpers.get_now(),
|
|
@@ -483,18 +493,26 @@ def reply_comment(comment_id, text, person_id=None):
|
|
|
483
493
|
replies = list(comment.replies)
|
|
484
494
|
replies.append(reply)
|
|
485
495
|
comment.update({"replies": replies})
|
|
496
|
+
if len(files.keys()) > 0:
|
|
497
|
+
comment = comment.serialize(relations=True)
|
|
498
|
+
new_attachment_files = add_attachments_to_comment(
|
|
499
|
+
comment, files, reply_id=reply["id"]
|
|
500
|
+
)
|
|
501
|
+
for new_attachment_file in new_attachment_files:
|
|
502
|
+
new_attachment_file["reply_id"] = reply["id"]
|
|
503
|
+
reply["attachment_files"] = new_attachment_files
|
|
486
504
|
tasks_service.clear_comment_cache(comment_id)
|
|
487
505
|
events.emit(
|
|
488
506
|
"comment:reply",
|
|
489
507
|
{
|
|
490
508
|
"task_id": task["id"],
|
|
491
|
-
"comment_id":
|
|
509
|
+
"comment_id": comment_id,
|
|
492
510
|
"reply_id": reply["id"],
|
|
493
511
|
},
|
|
494
512
|
project_id=task["project_id"],
|
|
495
513
|
)
|
|
496
514
|
notifications_service.create_notifications_for_task_and_reply(
|
|
497
|
-
task, comment
|
|
515
|
+
task, comment, reply
|
|
498
516
|
)
|
|
499
517
|
return reply
|
|
500
518
|
|
|
@@ -508,6 +526,14 @@ def get_reply(comment_id, reply_id):
|
|
|
508
526
|
def delete_reply(comment_id, reply_id):
|
|
509
527
|
comment = tasks_service.get_comment_raw(comment_id)
|
|
510
528
|
task = tasks_service.get_task(comment.object_id)
|
|
529
|
+
|
|
530
|
+
if comment.attachment_files is None:
|
|
531
|
+
comment.attachment_files = []
|
|
532
|
+
for attachment_file in comment.attachment_files:
|
|
533
|
+
if attachment_file.reply_id == reply_id:
|
|
534
|
+
deletion_service.remove_attachment_file_by_id(
|
|
535
|
+
attachment_file["id"]
|
|
536
|
+
)
|
|
511
537
|
if comment.replies is None:
|
|
512
538
|
comment.replies = []
|
|
513
539
|
comment.replies = [
|
|
@@ -567,19 +593,25 @@ def get_comment_department_mention_ids(project_id, text):
|
|
|
567
593
|
]
|
|
568
594
|
|
|
569
595
|
|
|
570
|
-
def add_attachments_to_comment(comment, files):
|
|
596
|
+
def add_attachments_to_comment(comment, files, reply_id=None):
|
|
571
597
|
"""
|
|
572
598
|
Create an attachment entry and for each given uploaded files and tie it
|
|
573
599
|
to given comment.
|
|
574
600
|
"""
|
|
575
|
-
comment["attachment_files"]
|
|
601
|
+
if comment["attachment_files"] is None:
|
|
602
|
+
comment["attachment_files"] = []
|
|
603
|
+
new_attachment_files = []
|
|
576
604
|
for uploaded_file in files.values():
|
|
577
605
|
try:
|
|
578
|
-
attachment_file = create_attachment(
|
|
606
|
+
attachment_file = create_attachment(
|
|
607
|
+
comment, uploaded_file, reply_id=reply_id
|
|
608
|
+
)
|
|
579
609
|
comment["attachment_files"].append(attachment_file)
|
|
610
|
+
new_attachment_files.append(attachment_file)
|
|
580
611
|
except IntegrityError:
|
|
581
612
|
attachment_file = create_attachment(
|
|
582
|
-
comment, uploaded_file, randomize=True
|
|
613
|
+
comment, uploaded_file, randomize=True, reply_id=reply_id
|
|
583
614
|
)
|
|
584
615
|
comment["attachment_files"].append(attachment_file)
|
|
585
|
-
|
|
616
|
+
new_attachment_files.append(attachment_file)
|
|
617
|
+
return new_attachment_files
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"""add reply id to attachments
|
|
2
|
+
|
|
3
|
+
Revision ID: 1b0ab951adca
|
|
4
|
+
Revises: ce7f46f445dc
|
|
5
|
+
Create Date: 2025-08-27 14:14:16.237272
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
from alembic import op
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
import sqlalchemy_utils
|
|
11
|
+
import sqlalchemy_utils
|
|
12
|
+
import uuid
|
|
13
|
+
|
|
14
|
+
# revision identifiers, used by Alembic.
|
|
15
|
+
revision = '1b0ab951adca'
|
|
16
|
+
down_revision = 'ce7f46f445dc'
|
|
17
|
+
branch_labels = None
|
|
18
|
+
depends_on = None
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def upgrade():
|
|
22
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
23
|
+
with op.batch_alter_table('attachment_file', schema=None) as batch_op:
|
|
24
|
+
batch_op.add_column(sa.Column('reply_id', sqlalchemy_utils.types.uuid.UUIDType(binary=False), default=uuid.uuid4, nullable=True))
|
|
25
|
+
|
|
26
|
+
with op.batch_alter_table('software', schema=None) as batch_op:
|
|
27
|
+
batch_op.alter_column('version',
|
|
28
|
+
existing_type=sa.VARCHAR(length=20),
|
|
29
|
+
nullable=True)
|
|
30
|
+
|
|
31
|
+
# ### end Alembic commands ###
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def downgrade():
|
|
35
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
36
|
+
with op.batch_alter_table('software', schema=None) as batch_op:
|
|
37
|
+
batch_op.alter_column('version',
|
|
38
|
+
existing_type=sa.VARCHAR(length=20),
|
|
39
|
+
nullable=False)
|
|
40
|
+
|
|
41
|
+
with op.batch_alter_table('attachment_file', schema=None) as batch_op:
|
|
42
|
+
batch_op.drop_column('reply_id')
|
|
43
|
+
|
|
44
|
+
# ### end Alembic commands ###
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: zou
|
|
3
|
-
Version: 0.20.
|
|
3
|
+
Version: 0.20.69
|
|
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
|
|
@@ -23,7 +23,7 @@ License-File: LICENSE
|
|
|
23
23
|
Requires-Dist: babel==2.17.0
|
|
24
24
|
Requires-Dist: click==8.2.1
|
|
25
25
|
Requires-Dist: discord.py==2.6.2
|
|
26
|
-
Requires-Dist: email-validator==2.
|
|
26
|
+
Requires-Dist: email-validator==2.3.0
|
|
27
27
|
Requires-Dist: ffmpeg-python==0.2.0
|
|
28
28
|
Requires-Dist: fido2==2.0.0
|
|
29
29
|
Requires-Dist: flasgger==0.9.7.1
|
|
@@ -41,7 +41,7 @@ Requires-Dist: flask-socketio==5.5.1
|
|
|
41
41
|
Requires-Dist: flask==3.1.2
|
|
42
42
|
Requires-Dist: gazu==0.10.36
|
|
43
43
|
Requires-Dist: gevent-websocket==0.10.1
|
|
44
|
-
Requires-Dist: gevent==25.
|
|
44
|
+
Requires-Dist: gevent==25.8.1
|
|
45
45
|
Requires-Dist: gunicorn==23.0.0
|
|
46
46
|
Requires-Dist: isoweek==1.3.3
|
|
47
47
|
Requires-Dist: itsdangerous==2.2.0
|
|
@@ -53,7 +53,7 @@ Requires-Dist: numpy==2.2.6
|
|
|
53
53
|
Requires-Dist: opencv-python==4.12.0.88
|
|
54
54
|
Requires-Dist: OpenTimelineIO==0.17.0
|
|
55
55
|
Requires-Dist: OpenTimelineIO-Plugins==0.17.0
|
|
56
|
-
Requires-Dist: orjson==3.11.
|
|
56
|
+
Requires-Dist: orjson==3.11.3
|
|
57
57
|
Requires-Dist: pillow==11.3.0
|
|
58
58
|
Requires-Dist: psutil==7.0.0
|
|
59
59
|
Requires-Dist: psycopg[binary]==3.2.9
|
|
@@ -297,6 +297,7 @@ zou/migrations/versions/10cf267d95c9_fix_schedule_item.py
|
|
|
297
297
|
zou/migrations/versions/16328eae4b5f_add_new_constraint_for_timespent.py
|
|
298
298
|
zou/migrations/versions/16df47d76c64_add_some_indexes.py
|
|
299
299
|
zou/migrations/versions/17ef8f7be758_disallow_null_choicetype.py
|
|
300
|
+
zou/migrations/versions/1b0ab951adca_add_reply_id_to_attachments.py
|
|
300
301
|
zou/migrations/versions/1bb55759146f_add_table_studio.py
|
|
301
302
|
zou/migrations/versions/1cb44194db49_add_file_size_field_to_preview_file.py
|
|
302
303
|
zou/migrations/versions/1e150c2cea4d_add_nb_entities_out.py
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
babel==2.17.0
|
|
2
2
|
click==8.2.1
|
|
3
3
|
discord.py==2.6.2
|
|
4
|
-
email-validator==2.
|
|
4
|
+
email-validator==2.3.0
|
|
5
5
|
ffmpeg-python==0.2.0
|
|
6
6
|
fido2==2.0.0
|
|
7
7
|
flasgger==0.9.7.1
|
|
@@ -19,7 +19,7 @@ flask-socketio==5.5.1
|
|
|
19
19
|
flask==3.1.2
|
|
20
20
|
gazu==0.10.36
|
|
21
21
|
gevent-websocket==0.10.1
|
|
22
|
-
gevent==25.
|
|
22
|
+
gevent==25.8.1
|
|
23
23
|
gunicorn==23.0.0
|
|
24
24
|
isoweek==1.3.3
|
|
25
25
|
itsdangerous==2.2.0
|
|
@@ -31,7 +31,7 @@ numpy==2.2.6
|
|
|
31
31
|
opencv-python==4.12.0.88
|
|
32
32
|
OpenTimelineIO==0.17.0
|
|
33
33
|
OpenTimelineIO-Plugins==0.17.0
|
|
34
|
-
orjson==3.11.
|
|
34
|
+
orjson==3.11.3
|
|
35
35
|
pillow==11.3.0
|
|
36
36
|
psutil==7.0.0
|
|
37
37
|
psycopg[binary]==3.2.9
|
zou-0.20.68/zou/__init__.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.20.68"
|
|
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
|