zou 0.19.52__tar.gz → 0.19.54__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.19.52/zou.egg-info → zou-0.19.54}/PKG-INFO +6 -6
- {zou-0.19.52 → zou-0.19.54}/setup.cfg +5 -5
- zou-0.19.54/zou/__init__.py +1 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/__init__.py +1 -1
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/assets/__init__.py +22 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/assets/resources.py +240 -3
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/chats/resources.py +2 -2
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/base.py +10 -6
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/day_off.py +3 -3
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/entity.py +3 -3
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/entity_type.py +15 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/metadata_descriptor.py +16 -3
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/person.py +13 -15
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/preview_background_file.py +3 -3
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/project.py +5 -5
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/schedule_item.py +2 -2
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/task.py +1 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/task_type.py +3 -3
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/persons/resources.py +2 -2
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/previews/resources.py +29 -6
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/projects/resources.py +1 -1
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/shots/resources.py +2 -2
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/base.py +6 -1
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/entity.py +3 -5
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/assets_service.py +76 -1
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/breakdown_service.py +33 -3
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/deletion_service.py +5 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/exception.py +1 -5
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/preview_files_service.py +2 -2
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/tasks_service.py +1 -1
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/time_spents_service.py +4 -4
- {zou-0.19.52 → zou-0.19.54}/zou/app/swagger.py +15 -20
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/query.py +53 -5
- {zou-0.19.52 → zou-0.19.54}/zou/event_stream.py +1 -0
- zou-0.19.54/zou/migrations/versions/59a7445a966c_add_entity_is_shared.py +41 -0
- {zou-0.19.52 → zou-0.19.54/zou.egg-info}/PKG-INFO +6 -6
- {zou-0.19.52 → zou-0.19.54}/zou.egg-info/SOURCES.txt +1 -0
- {zou-0.19.52 → zou-0.19.54}/zou.egg-info/requires.txt +5 -5
- zou-0.19.52/zou/__init__.py +0 -1
- {zou-0.19.52 → zou-0.19.54}/LICENSE +0 -0
- {zou-0.19.52 → zou-0.19.54}/README.rst +0 -0
- {zou-0.19.52 → zou-0.19.54}/pyproject.toml +0 -0
- {zou-0.19.52 → zou-0.19.54}/setup.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/api.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/auth/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/auth/resources.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/breakdown/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/breakdown/resources.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/chats/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/comments/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/comments/resources.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/concepts/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/concepts/resources.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/asset_instance.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/attachment_file.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/chat.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/chat_message.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/comments.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/custom_action.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/department.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/entity_link.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/event.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/file_status.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/milestone.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/news.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/notification.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/organisation.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/output_file.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/output_type.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/playlist.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/preview_file.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/project_status.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/search_filter.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/search_filter_group.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/software.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/status_automation.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/studio.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/subscription.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/task_status.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/time_spent.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/crud/working_file.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/edits/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/edits/resources.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/entities/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/entities/resources.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/events/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/events/resources.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/export/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/export/csv/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/export/csv/assets.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/export/csv/base.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/export/csv/casting.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/export/csv/edits.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/export/csv/persons.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/export/csv/playlists.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/export/csv/projects.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/export/csv/shots.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/export/csv/task_types.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/export/csv/tasks.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/export/csv/time_spents.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/files/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/files/resources.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/index/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/index/resources.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/news/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/news/resources.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/persons/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/playlists/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/playlists/resources.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/previews/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/projects/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/search/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/search/resources.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/shots/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/csv/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/csv/assets.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/csv/base.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/csv/casting.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/csv/edits.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/csv/persons.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/csv/shots.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/csv/task_type_estimations.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/kitsu.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/otio.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/shotgun/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/shotgun/assets.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/shotgun/base.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/shotgun/episode.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/shotgun/exception.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/shotgun/import_errors.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/shotgun/notes.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/shotgun/person.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/shotgun/project.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/shotgun/scene.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/shotgun/sequence.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/shotgun/shot.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/shotgun/status.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/shotgun/steps.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/shotgun/tasks.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/shotgun/team.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/source/shotgun/versions.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/tasks/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/tasks/resources.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/user/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/blueprints/user/resources.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/config.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/file_trees/default.json +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/file_trees/simple.json +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/indexer/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/indexer/indexing.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/mixin.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/asset_instance.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/attachment_file.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/build_job.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/chat.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/chat_message.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/comment.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/custom_action.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/data_import_error.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/day_off.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/department.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/desktop_login_log.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/entity_type.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/event.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/file_status.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/login_log.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/metadata_descriptor.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/milestone.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/news.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/notification.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/organisation.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/output_file.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/output_type.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/person.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/playlist.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/preview_background_file.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/preview_file.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/project.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/project_status.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/schedule_item.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/search_filter.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/search_filter_group.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/serializer.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/software.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/status_automation.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/studio.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/subscription.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/task.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/task_status.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/task_type.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/time_spent.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/models/working_file.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/auth_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/backup_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/base_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/chats_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/comments_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/concepts_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/custom_actions_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/edits_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/emails_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/entities_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/events_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/file_tree_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/files_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/index_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/names_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/news_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/notifications_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/persons_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/playlists_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/projects_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/scenes_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/schedule_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/shots_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/stats_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/status_automations_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/sync_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/telemetry_services.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/services/user_service.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/stores/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/stores/auth_tokens_store.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/stores/file_store.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/stores/publisher_store.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/stores/queue_store.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/api.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/auth.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/cache.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/chats.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/colors.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/commands.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/csv_utils.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/date_helpers.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/dbhelpers.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/emails.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/env.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/events.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/fido.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/fields.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/flask.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/fs.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/git.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/logs.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/monitoring.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/permissions.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/remote_job.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/saml.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/shell.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/string.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/app/utils/thumbnail.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/cli.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/debug.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/job_settings.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/README +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/alembic.ini +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/env.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/script.py.mako +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/utils/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/utils/base.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/003be8a91001_add_start_and_end_dates_to_projects.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/0596674df51d_add_department_mentions_to_comments.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/05ac7e8caa21_remove_unique_constraint_for_taskstatus_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/05b7dc79a416_add_archived_fields_to_main_tables.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/0cf5e0e035fa_drop_column_tasktype_for_shots.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/0ec3762a745d_add_attachment_table.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/0ef6416a507b_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/10cf267d95c9_fix_schedule_item.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/16328eae4b5f_add_new_constraint_for_timespent.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/16df47d76c64_add_some_indexes.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/17ef8f7be758_disallow_null_choicetype.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/1bb55759146f_add_table_studio.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/1cb44194db49_add_file_size_field_to_preview_file.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/1e150c2cea4d_add_nb_entities_out.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/1e2d77a2f0c4_add_hd_by_default_column.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/1fab8c420678_add_attachments_to_message_chats.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/20dfeb36142b_add_projecttaskstatuslink_roles_for_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/23122f290ca2_add_entity_chat_models.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/269d41bfb73f_add_entity_entity_links.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/29df910f04a4_create_unique_constraint_project_id_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/29fe01a6c9eb_add_status_automation_field.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/2adc020885fa_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/2baede80b111_add_entity_status_field.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/306266361f4f_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/328fd44c6347_add_entity_created_by.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/32f134ff1201_add_is_shared_flag_to_filters.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/346250b5304c_add_position_to_preview_files.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/3476e147e632_add_acks_to_comments.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/389cfb9de776_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/38baa9a23b3d_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/398150912a3f_validation_status_preview.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/3b0d1321079e_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/3d5c93bafb9d_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/3e0538ddf80f_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/3fee3bd10f9d_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/4095103c7d01_add_is_clients_isolated_flag_to_projects.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/40dea9555940_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/42ec83db6a01_change_person_preferred_two_factor_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/43d0cf0ed5e7_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/443d1e78a932_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/45c2de366e66_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/45dafbb3f4e1_for_person_contract_type_disallow_null.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/4715c2586036_add_last_preview_file_fields.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/4e3738cdc34c_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/4f2398ebcd49_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/523ee9647bee_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/54ee0d1d60ba_add_build_job_model.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/556526e47daa_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/57222395f2be_add_statusautomation_import_last_revision.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/5798d2c9020b_change_person_role_to_choicetype.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/590aa1ffe731_add_notifications_enabled_flag.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/5a291251823c_add_max_retake_parameter.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/5ab9d7a75887_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/5b0fcbb94f24_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/5b7fa3e51701_add_is_client_allowed_flag_to_task_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/5b980f0dc365_add_comment_links.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/5b9fd9ddfe43_add_homepage_and_contract_fields.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/5c0498e264bc_add_slack_fields.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/5e2ce62632a6_add_workflow_to_project.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/680c64565f9d_for_searchfiltergroup_is_shared.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/693cc511d28d_add_taskstatus_priority.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/6aa446ee4072_add_is_for_all_flage_to_playlists.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/6bd3b102d61b_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/6c597e842afa_add_task_type_field_to_playlists.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/6d1b2c60f58b_add_milestone_model.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/6d7fa5a8e9a5_add_timesheets_locked_field_to_org.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/6eeaff945706_add_data_field_on_entity_links.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/6f6049877105_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/7417c8eb70d8_add_for_entity_field_to_playlists.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/772a5e43f05b_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/7748d3d22925_add_columns_to_searchfilter_table_to_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/77d6820f494f_add_reply_to_notif.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/7b1f765677d8_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/7bc746997e8d_add_slack_token_field_to_organisation.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/7dc79d4ed7cd_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/818f7bda2528_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/82e7f7a95e84_add_project_id_to_events.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/82ee682204ab_add_is_generated_from_ldap_column_to_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/8588f254d6b8_add_archived_fields.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/8739ae9fa28b_add_for_client_field.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/87efceb6745b_add_ready_for_to_entity.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/892b264937ec_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/8a1b4a1b7f4a_add_totp_columns_for_person.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/8e4f39e321f4_add_day_off_table.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/8fbd40afbe5f_allow_to_set_float_values_for_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/9010a64e5a2d_add_indices.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/9060dd4f6116_notification_uc.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/925771029620_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/92b40d79ad3f_allow_message_attachments.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/92bdfe07e5f5_discord_integration.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/956659992419_add_columns_for_person_to_store_fido_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/96c79d31e648_add_mail_otp_columns_for_person.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/96f58a4a2a58_person_partial_index_for_email_only_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/971dbf5a0faf_add_short_name_for_asset_type_entity_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/98c90621cf58_add_for_client_flag_to_playlist.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/99825b9cc778_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/9a09467f9b2c_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/9b85c14fa8a7_add_day_off_new_columns.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/9bd17364fc18_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/9e5b3a9b0cee_add_new_column_metadatadescriptor_data_type_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/9f8445f9b42c_add_man_days_fields.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/a23682ccc1f1_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/a252a094e977_add_descriptions_for_entities_tasks_and_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/a519c710877c_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/a65bdadbae2f_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/a66508788c53_add_nb_assets_ready.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/a6c25eed3ea1_add_login_failed_attemps_and_last_login_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/a7c43f3fbc76_add_duration_column_to_the_preview_file.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/aa0a60033106_feedback_request.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/addbbefa7028_add_departments_link_to_metadata_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/ae0127f2fc56_add_previewfile_width_and_previewfile_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/af1790868e2c_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/b45cb782bb9c_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/b4dd0add5f79_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/b8c0a0f9d054_drop_task_status_is_reviewable.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/b8ed0fb263f8_add_person_jti_and_jti_expiration_date.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/b97a71306fc8_add_is_casting_standby_column_to_entity.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/be56dc0fb760_for_is_shared_disallow_nullable.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/bf1347acdee2_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/c49e41f1298b_add_previewbackground.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/c68c2a62cfac_add_mimetype_column_to_attachment.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/c726b98be194_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/c81f3e83bdb5_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/ca28796a2a62_add_is_done_field_to_the_task_model.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/cf3d365de164_add_entity_version_model.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/cf6cec6d6bf5_add_status_field_to_preview_file.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/d80267806131_task_status_new_column_is_default.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/d8dcd5196d57_add_casting_label.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/de8a3de227ef_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/deeacd38d373_for_projecttaskstatuslink_set_default_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/df1834485f57_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/df9f8a147e80_change_file_size_to_big_integer.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/e1ef93f40d3d_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/e29638428dfd_add_schedule_item_table.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/e3f6db74cc1e_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/e839d6603c09_add_person_id_to_shot_history.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/ee2373fbe3a4_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/f0567e8d0c62_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/f0c6cbb61869_add_production_style_field.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/f344b867a911_for_description_of_entity_task_working_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/f4ff5a73d283_add_person_ldap_uid.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/f5b113876a49_add_preferred_two_factor_authentication_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/f5bdca075cdc_add_preview_download_flag_to_projects.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/f874ad5e898a_add_link_entity_type_task_type.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/f995b28fb749_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/fb6b6f188497_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/fb87feaaa094_add_missing_unique_constraints.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/fc322f908695_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/fee7c696166e_.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/feffd3c5b806_introduce_concepts.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/migrations/versions/ffeed4956ab1_add_more_details_to_projects.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/remote/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/remote/config_payload.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/remote/normalize_movie.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/remote/playlist.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/utils/__init__.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou/utils/movie.py +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou.egg-info/dependency_links.txt +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou.egg-info/entry_points.txt +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou.egg-info/not-zip-safe +0 -0
- {zou-0.19.52 → zou-0.19.54}/zou.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: zou
|
|
3
|
-
Version: 0.19.
|
|
3
|
+
Version: 0.19.54
|
|
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
|
|
@@ -37,9 +37,9 @@ Requires-Dist: flask_sqlalchemy==3.1.1
|
|
|
37
37
|
Requires-Dist: flask-fs2[s3,swift]==0.7.27
|
|
38
38
|
Requires-Dist: flask-jwt-extended==4.6.0
|
|
39
39
|
Requires-Dist: flask-migrate==4.0.7
|
|
40
|
-
Requires-Dist: flask-socketio==5.3.
|
|
40
|
+
Requires-Dist: flask-socketio==5.3.7
|
|
41
41
|
Requires-Dist: flask==3.0.3
|
|
42
|
-
Requires-Dist: gazu==0.10.
|
|
42
|
+
Requires-Dist: gazu==0.10.15
|
|
43
43
|
Requires-Dist: gevent-websocket==0.10.1
|
|
44
44
|
Requires-Dist: gevent==24.2.1
|
|
45
45
|
Requires-Dist: gunicorn==23.0.0
|
|
@@ -50,7 +50,7 @@ Requires-Dist: ldap3==2.9.1
|
|
|
50
50
|
Requires-Dist: matterhook==0.2
|
|
51
51
|
Requires-Dist: meilisearch==0.31.5
|
|
52
52
|
Requires-Dist: numpy==2.0.1; python_version == "3.9"
|
|
53
|
-
Requires-Dist: numpy==2.1.
|
|
53
|
+
Requires-Dist: numpy==2.1.1; python_version >= "3.10"
|
|
54
54
|
Requires-Dist: opencv-python==4.10.0.84
|
|
55
55
|
Requires-Dist: OpenTimelineIO==0.17.0
|
|
56
56
|
Requires-Dist: OpenTimelineIO-Plugins==0.17.0
|
|
@@ -62,14 +62,14 @@ Requires-Dist: pyotp==2.9.0
|
|
|
62
62
|
Requires-Dist: pysaml2==7.5.0
|
|
63
63
|
Requires-Dist: python-nomad==2.0.1
|
|
64
64
|
Requires-Dist: python-slugify==8.0.4
|
|
65
|
-
Requires-Dist: python-socketio==5.11.
|
|
65
|
+
Requires-Dist: python-socketio==5.11.4
|
|
66
66
|
Requires-Dist: pytz==2024.1
|
|
67
67
|
Requires-Dist: redis==5.0.8
|
|
68
68
|
Requires-Dist: requests==2.32.3
|
|
69
69
|
Requires-Dist: rq==1.16.2
|
|
70
70
|
Requires-Dist: slackclient==2.9.4
|
|
71
71
|
Requires-Dist: sqlalchemy_utils==0.41.2
|
|
72
|
-
Requires-Dist: sqlalchemy==2.0.
|
|
72
|
+
Requires-Dist: sqlalchemy==2.0.34
|
|
73
73
|
Requires-Dist: ua-parser==0.18.0
|
|
74
74
|
Requires-Dist: werkzeug==3.0.4
|
|
75
75
|
Provides-Extra: prod
|
|
@@ -43,9 +43,9 @@ install_requires =
|
|
|
43
43
|
flask-fs2[swift, s3]==0.7.27
|
|
44
44
|
flask-jwt-extended==4.6.0
|
|
45
45
|
flask-migrate==4.0.7
|
|
46
|
-
flask-socketio==5.3.
|
|
46
|
+
flask-socketio==5.3.7
|
|
47
47
|
flask==3.0.3
|
|
48
|
-
gazu==0.10.
|
|
48
|
+
gazu==0.10.15
|
|
49
49
|
gevent-websocket==0.10.1
|
|
50
50
|
gevent==24.2.1
|
|
51
51
|
gunicorn==23.0.0
|
|
@@ -56,7 +56,7 @@ install_requires =
|
|
|
56
56
|
matterhook==0.2
|
|
57
57
|
meilisearch==0.31.5
|
|
58
58
|
numpy==2.0.1; python_version == '3.9'
|
|
59
|
-
numpy==2.1.
|
|
59
|
+
numpy==2.1.1; python_version >= '3.10'
|
|
60
60
|
opencv-python==4.10.0.84
|
|
61
61
|
OpenTimelineIO==0.17.0
|
|
62
62
|
OpenTimelineIO-Plugins==0.17.0
|
|
@@ -68,14 +68,14 @@ install_requires =
|
|
|
68
68
|
pysaml2==7.5.0
|
|
69
69
|
python-nomad==2.0.1
|
|
70
70
|
python-slugify==8.0.4
|
|
71
|
-
python-socketio==5.11.
|
|
71
|
+
python-socketio==5.11.4
|
|
72
72
|
pytz==2024.1
|
|
73
73
|
redis==5.0.8
|
|
74
74
|
requests==2.32.3
|
|
75
75
|
rq==1.16.2
|
|
76
76
|
slackclient==2.9.4
|
|
77
77
|
sqlalchemy_utils==0.41.2
|
|
78
|
-
sqlalchemy==2.0.
|
|
78
|
+
sqlalchemy==2.0.34
|
|
79
79
|
ua-parser==0.18.0
|
|
80
80
|
werkzeug==3.0.4
|
|
81
81
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.19.54"
|
|
@@ -96,7 +96,7 @@ def id_parameter_format_error(error):
|
|
|
96
96
|
|
|
97
97
|
@app.errorhandler(WrongParameterException)
|
|
98
98
|
def wrong_parameter(error):
|
|
99
|
-
return jsonify(error=True, message=str(error)), 400
|
|
99
|
+
return jsonify(error=True, message=str(error), data=error.dict), 400
|
|
100
100
|
|
|
101
101
|
|
|
102
102
|
@app.errorhandler(ExpiredSignatureError)
|
|
@@ -21,6 +21,11 @@ from zou.app.blueprints.assets.resources import (
|
|
|
21
21
|
ProjectAssetTypeAssetsResource,
|
|
22
22
|
ProjectAssetTypesResource,
|
|
23
23
|
ShotAssetTypesResource,
|
|
24
|
+
SetSharedProjectAssetsResource,
|
|
25
|
+
SetSharedProjectAssetTypeAssetsResource,
|
|
26
|
+
SetSharedAssetsResource,
|
|
27
|
+
ProjectAssetsSharedUsedResource,
|
|
28
|
+
ProjectEpisodeAssetsSharedUsedResource,
|
|
24
29
|
)
|
|
25
30
|
|
|
26
31
|
|
|
@@ -59,6 +64,23 @@ routes = [
|
|
|
59
64
|
("/data/projects/<project_id>/asset-types", ProjectAssetTypesResource),
|
|
60
65
|
("/data/shots/<shot_id>/asset-types", ShotAssetTypesResource),
|
|
61
66
|
("/data/projects/<project_id>/assets", ProjectAssetsResource),
|
|
67
|
+
("/actions/assets/share", SetSharedAssetsResource),
|
|
68
|
+
(
|
|
69
|
+
"/actions/projects/<project_id>/assets/share",
|
|
70
|
+
SetSharedProjectAssetsResource,
|
|
71
|
+
),
|
|
72
|
+
(
|
|
73
|
+
"/actions/projects/<project_id>/asset-types/<asset_type_id>/assets/share",
|
|
74
|
+
SetSharedProjectAssetTypeAssetsResource,
|
|
75
|
+
),
|
|
76
|
+
(
|
|
77
|
+
"/data/projects/<project_id>/assets/shared-used",
|
|
78
|
+
ProjectAssetsSharedUsedResource,
|
|
79
|
+
),
|
|
80
|
+
(
|
|
81
|
+
"/data/projects/<project_id>/episodes/<episode_id>/assets/shared-used",
|
|
82
|
+
ProjectEpisodeAssetsSharedUsedResource,
|
|
83
|
+
),
|
|
62
84
|
]
|
|
63
85
|
|
|
64
86
|
blueprint = Blueprint("assets", "assets")
|
|
@@ -21,7 +21,11 @@ def check_criterion_access(criterions):
|
|
|
21
21
|
elif "episode_id" in criterions:
|
|
22
22
|
episode_id = criterions.get("episode_id", None)
|
|
23
23
|
project_id = shots_service.get_episode(episode_id)["project_id"]
|
|
24
|
-
|
|
24
|
+
|
|
25
|
+
if "project_id" in criterions:
|
|
26
|
+
user_service.check_project_access(project_id)
|
|
27
|
+
|
|
28
|
+
return True
|
|
25
29
|
|
|
26
30
|
|
|
27
31
|
class AssetResource(Resource, ArgsMixin):
|
|
@@ -106,7 +110,10 @@ class AllAssetsResource(Resource):
|
|
|
106
110
|
criterions["assigned_to"] = persons_service.get_current_user()[
|
|
107
111
|
"id"
|
|
108
112
|
]
|
|
109
|
-
return assets_service.get_assets(
|
|
113
|
+
return assets_service.get_assets(
|
|
114
|
+
criterions,
|
|
115
|
+
is_admin=permissions.has_admin_permissions(),
|
|
116
|
+
)
|
|
110
117
|
|
|
111
118
|
|
|
112
119
|
class AllAssetsAliasResource(AllAssetsResource):
|
|
@@ -431,6 +438,7 @@ class NewAssetResource(Resource, ArgsMixin):
|
|
|
431
438
|
- name
|
|
432
439
|
- description
|
|
433
440
|
- data
|
|
441
|
+
- is_shared
|
|
434
442
|
- source_id
|
|
435
443
|
properties:
|
|
436
444
|
name:
|
|
@@ -439,6 +447,8 @@ class NewAssetResource(Resource, ArgsMixin):
|
|
|
439
447
|
type: string
|
|
440
448
|
data:
|
|
441
449
|
type: string
|
|
450
|
+
is_shared:
|
|
451
|
+
type: boolean
|
|
442
452
|
source_id:
|
|
443
453
|
type: string
|
|
444
454
|
format: UUID
|
|
@@ -447,7 +457,7 @@ class NewAssetResource(Resource, ArgsMixin):
|
|
|
447
457
|
201:
|
|
448
458
|
description: New asset resource created
|
|
449
459
|
"""
|
|
450
|
-
(name, description, data, source_id) = self.get_arguments()
|
|
460
|
+
(name, description, data, is_shared, source_id) = self.get_arguments()
|
|
451
461
|
|
|
452
462
|
user_service.check_manager_project_access(project_id)
|
|
453
463
|
asset = assets_service.create_asset(
|
|
@@ -456,6 +466,7 @@ class NewAssetResource(Resource, ArgsMixin):
|
|
|
456
466
|
name,
|
|
457
467
|
description,
|
|
458
468
|
data,
|
|
469
|
+
is_shared,
|
|
459
470
|
source_id,
|
|
460
471
|
created_by=persons_service.get_current_user()["id"],
|
|
461
472
|
)
|
|
@@ -471,6 +482,12 @@ class NewAssetResource(Resource, ArgsMixin):
|
|
|
471
482
|
},
|
|
472
483
|
"description",
|
|
473
484
|
("data", {}, False, dict),
|
|
485
|
+
(
|
|
486
|
+
"is_shared",
|
|
487
|
+
True,
|
|
488
|
+
False,
|
|
489
|
+
bool,
|
|
490
|
+
),
|
|
474
491
|
"episode_id",
|
|
475
492
|
]
|
|
476
493
|
)
|
|
@@ -479,6 +496,7 @@ class NewAssetResource(Resource, ArgsMixin):
|
|
|
479
496
|
args["name"],
|
|
480
497
|
args.get("description", ""),
|
|
481
498
|
args["data"],
|
|
499
|
+
args["is_shared"],
|
|
482
500
|
args["episode_id"],
|
|
483
501
|
)
|
|
484
502
|
|
|
@@ -658,3 +676,222 @@ class AssetAssetInstancesResource(Resource, ArgsMixin):
|
|
|
658
676
|
asset_id, args["asset_to_instantiate_id"], args["description"]
|
|
659
677
|
)
|
|
660
678
|
return asset_instance, 201
|
|
679
|
+
|
|
680
|
+
|
|
681
|
+
class BaseSetSharedAssetsResource(Resource, ArgsMixin):
|
|
682
|
+
|
|
683
|
+
@jwt_required()
|
|
684
|
+
def post(self, project_id=None, asset_type_id=None, asset_ids=None):
|
|
685
|
+
args = self.get_args(
|
|
686
|
+
[
|
|
687
|
+
(
|
|
688
|
+
"is_shared",
|
|
689
|
+
True,
|
|
690
|
+
False,
|
|
691
|
+
bool,
|
|
692
|
+
),
|
|
693
|
+
]
|
|
694
|
+
)
|
|
695
|
+
return assets_service.set_shared_assets(
|
|
696
|
+
is_shared=args["is_shared"],
|
|
697
|
+
project_id=project_id,
|
|
698
|
+
asset_type_id=asset_type_id,
|
|
699
|
+
asset_ids=asset_ids,
|
|
700
|
+
)
|
|
701
|
+
|
|
702
|
+
|
|
703
|
+
class SetSharedProjectAssetsResource(BaseSetSharedAssetsResource):
|
|
704
|
+
"""
|
|
705
|
+
Share or unshare all assets (or a list of assets) for given project.
|
|
706
|
+
"""
|
|
707
|
+
|
|
708
|
+
@jwt_required()
|
|
709
|
+
def post(self, project_id):
|
|
710
|
+
"""
|
|
711
|
+
Share or unshare all assets (or a list of assets) for given project.
|
|
712
|
+
---
|
|
713
|
+
tags:
|
|
714
|
+
- Assets
|
|
715
|
+
consumes:
|
|
716
|
+
- multipart/form-data
|
|
717
|
+
parameters:
|
|
718
|
+
- in: path
|
|
719
|
+
name: project_id
|
|
720
|
+
required: True
|
|
721
|
+
type: string
|
|
722
|
+
format: UUID
|
|
723
|
+
x-example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
724
|
+
- in: formData
|
|
725
|
+
name: asset_ids
|
|
726
|
+
default: None,
|
|
727
|
+
type: array
|
|
728
|
+
items:
|
|
729
|
+
type: UUID
|
|
730
|
+
x-example: ["a24a6ea4-ce75-4665-a070-57453082c25"]
|
|
731
|
+
- in: formData
|
|
732
|
+
name: is_shared
|
|
733
|
+
default: true
|
|
734
|
+
type: boolean
|
|
735
|
+
x-example: true
|
|
736
|
+
responses:
|
|
737
|
+
201:
|
|
738
|
+
description: All assets modified.
|
|
739
|
+
"""
|
|
740
|
+
args = self.get_args(
|
|
741
|
+
[
|
|
742
|
+
(
|
|
743
|
+
"asset_ids",
|
|
744
|
+
None,
|
|
745
|
+
False,
|
|
746
|
+
str,
|
|
747
|
+
"append",
|
|
748
|
+
),
|
|
749
|
+
]
|
|
750
|
+
)
|
|
751
|
+
user_service.check_manager_project_access(project_id)
|
|
752
|
+
return super().post(project_id=project_id, asset_ids=args["asset_ids"])
|
|
753
|
+
|
|
754
|
+
|
|
755
|
+
class SetSharedProjectAssetTypeAssetsResource(BaseSetSharedAssetsResource):
|
|
756
|
+
"""
|
|
757
|
+
Share or unshare all assets for given project and asset type.
|
|
758
|
+
"""
|
|
759
|
+
|
|
760
|
+
@jwt_required()
|
|
761
|
+
def post(self, project_id, asset_type_id):
|
|
762
|
+
"""
|
|
763
|
+
Share or unshare all assets for given project and asset type.
|
|
764
|
+
---
|
|
765
|
+
tags:
|
|
766
|
+
- Assets
|
|
767
|
+
consumes:
|
|
768
|
+
- multipart/form-data
|
|
769
|
+
parameters:
|
|
770
|
+
- in: path
|
|
771
|
+
name: project_id
|
|
772
|
+
required: True
|
|
773
|
+
type: string
|
|
774
|
+
format: UUID
|
|
775
|
+
x-example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
776
|
+
- in: path
|
|
777
|
+
name: asset_type_id
|
|
778
|
+
required: True
|
|
779
|
+
type: string
|
|
780
|
+
format: UUID
|
|
781
|
+
x-example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
782
|
+
- in: formData
|
|
783
|
+
name: is_shared
|
|
784
|
+
default: true
|
|
785
|
+
type: boolean
|
|
786
|
+
x-example: true
|
|
787
|
+
responses:
|
|
788
|
+
201:
|
|
789
|
+
description: All assets modified.
|
|
790
|
+
"""
|
|
791
|
+
user_service.check_manager_project_access(project_id)
|
|
792
|
+
return super().post(project_id=project_id, asset_type_id=asset_type_id)
|
|
793
|
+
|
|
794
|
+
|
|
795
|
+
class SetSharedAssetsResource(BaseSetSharedAssetsResource):
|
|
796
|
+
"""
|
|
797
|
+
Share or unshare all assets (or a list of assets) for given project.
|
|
798
|
+
"""
|
|
799
|
+
|
|
800
|
+
@jwt_required()
|
|
801
|
+
def post(self):
|
|
802
|
+
"""
|
|
803
|
+
Share or unshare a list of assets.
|
|
804
|
+
---
|
|
805
|
+
tags:
|
|
806
|
+
- Assets
|
|
807
|
+
consumes:
|
|
808
|
+
- multipart/form-data
|
|
809
|
+
parameters:
|
|
810
|
+
- in: formData
|
|
811
|
+
name: asset_ids
|
|
812
|
+
default: None,
|
|
813
|
+
type: array
|
|
814
|
+
items:
|
|
815
|
+
type: UUID
|
|
816
|
+
x-example: ["a24a6ea4-ce75-4665-a070-57453082c25"]
|
|
817
|
+
- in: formData
|
|
818
|
+
name: is_shared
|
|
819
|
+
default: true
|
|
820
|
+
type: boolean
|
|
821
|
+
x-example: true
|
|
822
|
+
responses:
|
|
823
|
+
201:
|
|
824
|
+
description: All assets modified.
|
|
825
|
+
"""
|
|
826
|
+
args = self.get_args(
|
|
827
|
+
[
|
|
828
|
+
(
|
|
829
|
+
"asset_ids",
|
|
830
|
+
[],
|
|
831
|
+
True,
|
|
832
|
+
str,
|
|
833
|
+
"append",
|
|
834
|
+
),
|
|
835
|
+
]
|
|
836
|
+
)
|
|
837
|
+
asset_ids = args["asset_ids"]
|
|
838
|
+
project_ids = set()
|
|
839
|
+
for asset_id in asset_ids:
|
|
840
|
+
project_ids.add(assets_service.get_asset(asset_id)["project_id"])
|
|
841
|
+
for project_id in project_ids:
|
|
842
|
+
user_service.check_manager_project_access(project_id)
|
|
843
|
+
return super().post(asset_ids=asset_ids)
|
|
844
|
+
|
|
845
|
+
|
|
846
|
+
class ProjectAssetsSharedUsedResource(Resource):
|
|
847
|
+
@jwt_required()
|
|
848
|
+
def get(self, project_id):
|
|
849
|
+
"""
|
|
850
|
+
Retrieve all shared assets used in project.
|
|
851
|
+
---
|
|
852
|
+
tags:
|
|
853
|
+
- Assets
|
|
854
|
+
parameters:
|
|
855
|
+
- in: path
|
|
856
|
+
name: project_id
|
|
857
|
+
required: True
|
|
858
|
+
type: string
|
|
859
|
+
format: UUID
|
|
860
|
+
x-example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
861
|
+
responses:
|
|
862
|
+
200:
|
|
863
|
+
description: All shared assets used in project
|
|
864
|
+
"""
|
|
865
|
+
user_service.check_project_access(project_id)
|
|
866
|
+
return assets_service.get_shared_assets_used_in_project(project_id)
|
|
867
|
+
|
|
868
|
+
|
|
869
|
+
class ProjectEpisodeAssetsSharedUsedResource(Resource):
|
|
870
|
+
@jwt_required()
|
|
871
|
+
def get(self, project_id, episode_id):
|
|
872
|
+
"""
|
|
873
|
+
Retrieve all shared assets used in project episode.
|
|
874
|
+
---
|
|
875
|
+
tags:
|
|
876
|
+
- Assets
|
|
877
|
+
parameters:
|
|
878
|
+
- in: path
|
|
879
|
+
name: project_id
|
|
880
|
+
required: True
|
|
881
|
+
type: string
|
|
882
|
+
format: UUID
|
|
883
|
+
x-example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
884
|
+
- in: path
|
|
885
|
+
name: episode_id
|
|
886
|
+
required: True
|
|
887
|
+
type: string
|
|
888
|
+
format: UUID
|
|
889
|
+
x-example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
890
|
+
responses:
|
|
891
|
+
200:
|
|
892
|
+
description: All shared assets used in project episode
|
|
893
|
+
"""
|
|
894
|
+
user_service.check_project_access(project_id)
|
|
895
|
+
return assets_service.get_shared_assets_used_in_project(
|
|
896
|
+
project_id, episode_id
|
|
897
|
+
)
|
|
@@ -10,7 +10,7 @@ from zou.app.services import (
|
|
|
10
10
|
persons_service,
|
|
11
11
|
user_service,
|
|
12
12
|
)
|
|
13
|
-
from zou.app.services.exception import
|
|
13
|
+
from zou.app.services.exception import WrongParameterException
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class ChatResource(Resource):
|
|
@@ -116,7 +116,7 @@ class ChatMessagesResource(Resource):
|
|
|
116
116
|
|
|
117
117
|
chat = chats_service.get_chat(entity_id)
|
|
118
118
|
if person["id"] not in chat["participants"]:
|
|
119
|
-
raise
|
|
119
|
+
raise WrongParameterException("You are not a participant of this chat")
|
|
120
120
|
|
|
121
121
|
return (
|
|
122
122
|
chats_service.create_chat_message(
|
|
@@ -12,7 +12,7 @@ from sqlalchemy.inspection import inspect
|
|
|
12
12
|
from zou.app.mixin import ArgsMixin
|
|
13
13
|
from zou.app.utils import events, fields, permissions, query
|
|
14
14
|
from zou.app.services.exception import (
|
|
15
|
-
|
|
15
|
+
WrongParameterException,
|
|
16
16
|
WrongParameterException,
|
|
17
17
|
)
|
|
18
18
|
|
|
@@ -79,7 +79,11 @@ class BaseModelsResource(Resource, ArgsMixin):
|
|
|
79
79
|
) and isinstance(
|
|
80
80
|
field_key.property, orm.properties.RelationshipProperty
|
|
81
81
|
)
|
|
82
|
-
value_is_list =
|
|
82
|
+
value_is_list = (
|
|
83
|
+
hasattr(value, "__len__")
|
|
84
|
+
and len(value) > 0
|
|
85
|
+
and value[0] == "["
|
|
86
|
+
)
|
|
83
87
|
|
|
84
88
|
if key == "name" and field_key is not None:
|
|
85
89
|
name_filter.append(value)
|
|
@@ -233,7 +237,7 @@ class BaseModelsResource(Resource, ArgsMixin):
|
|
|
233
237
|
try:
|
|
234
238
|
data = request.json
|
|
235
239
|
if data is None:
|
|
236
|
-
raise
|
|
240
|
+
raise WrongParameterException(
|
|
237
241
|
"Data are empty. Please verify that you sent JSON data and"
|
|
238
242
|
" that you set the right headers."
|
|
239
243
|
)
|
|
@@ -254,7 +258,7 @@ class BaseModelsResource(Resource, ArgsMixin):
|
|
|
254
258
|
current_app.logger.error(str(exception), exc_info=1)
|
|
255
259
|
return {"message": str(exception)}, 400
|
|
256
260
|
|
|
257
|
-
except
|
|
261
|
+
except WrongParameterException as exception:
|
|
258
262
|
current_app.logger.error(str(exception), exc_info=1)
|
|
259
263
|
return (
|
|
260
264
|
exception.dict
|
|
@@ -402,7 +406,7 @@ class BaseModelResource(Resource, ArgsMixin):
|
|
|
402
406
|
try:
|
|
403
407
|
data = self.get_arguments()
|
|
404
408
|
if data is None:
|
|
405
|
-
raise
|
|
409
|
+
raise WrongParameterException(
|
|
406
410
|
"Data are empty. Please verify that you sent JSON data and"
|
|
407
411
|
" that you set the right headers."
|
|
408
412
|
)
|
|
@@ -425,7 +429,7 @@ class BaseModelResource(Resource, ArgsMixin):
|
|
|
425
429
|
current_app.logger.error(str(exception), exc_info=1)
|
|
426
430
|
return {"message": str(exception)}, 400
|
|
427
431
|
|
|
428
|
-
except
|
|
432
|
+
except WrongParameterException as exception:
|
|
429
433
|
current_app.logger.error(str(exception), exc_info=1)
|
|
430
434
|
return (
|
|
431
435
|
exception.dict
|
|
@@ -5,7 +5,7 @@ from zou.app.blueprints.crud.base import BaseModelsResource, BaseModelResource
|
|
|
5
5
|
|
|
6
6
|
from zou.app.services import user_service, time_spents_service
|
|
7
7
|
|
|
8
|
-
from zou.app.services.exception import
|
|
8
|
+
from zou.app.services.exception import WrongParameterException
|
|
9
9
|
|
|
10
10
|
from zou.app.utils import permissions
|
|
11
11
|
|
|
@@ -21,7 +21,7 @@ class DayOffsResource(BaseModelsResource):
|
|
|
21
21
|
if time_spents_service.get_day_offs_between(
|
|
22
22
|
data["date"], data["end_date"], data["person_id"]
|
|
23
23
|
):
|
|
24
|
-
raise
|
|
24
|
+
raise WrongParameterException("Day off already exists for this period")
|
|
25
25
|
return data
|
|
26
26
|
|
|
27
27
|
def post_creation(self, instance):
|
|
@@ -67,5 +67,5 @@ class DayOffResource(BaseModelResource):
|
|
|
67
67
|
data.get("person_id", instance_dict["person_id"]),
|
|
68
68
|
exclude_id=instance_dict["id"],
|
|
69
69
|
):
|
|
70
|
-
raise
|
|
70
|
+
raise WrongParameterException("Day off already exists for this period")
|
|
71
71
|
return data
|
|
@@ -28,7 +28,7 @@ from zou.app.services import (
|
|
|
28
28
|
)
|
|
29
29
|
from zou.app.utils import date_helpers, events, permissions
|
|
30
30
|
|
|
31
|
-
from zou.app.services.exception import
|
|
31
|
+
from zou.app.services.exception import WrongParameterException
|
|
32
32
|
|
|
33
33
|
from werkzeug.exceptions import NotFound
|
|
34
34
|
|
|
@@ -88,7 +88,7 @@ class EntitiesResource(BaseModelsResource, EntityEventMixin):
|
|
|
88
88
|
if "status" in data:
|
|
89
89
|
types = [entity_status for entity_status, _ in ENTITY_STATUSES]
|
|
90
90
|
if data["status"] not in types:
|
|
91
|
-
raise
|
|
91
|
+
raise WrongParameterException("Invalid status")
|
|
92
92
|
return True
|
|
93
93
|
|
|
94
94
|
def all_entries(self, query=None, relations=False):
|
|
@@ -255,5 +255,5 @@ class EntityResource(BaseModelResource, EntityEventMixin):
|
|
|
255
255
|
if "status" in data:
|
|
256
256
|
types = [entity_status for entity_status, _ in ENTITY_STATUSES]
|
|
257
257
|
if data["status"] not in types:
|
|
258
|
-
raise
|
|
258
|
+
raise WrongParameterException("Invalid status")
|
|
259
259
|
return data
|
|
@@ -4,6 +4,9 @@ from zou.app.models.entity_type import EntityType
|
|
|
4
4
|
from zou.app.utils import events
|
|
5
5
|
from zou.app.services import entities_service, assets_service
|
|
6
6
|
|
|
7
|
+
from zou.app.services.exception import WrongParameterException
|
|
8
|
+
|
|
9
|
+
|
|
7
10
|
|
|
8
11
|
class EntityTypesResource(BaseModelsResource):
|
|
9
12
|
def __init__(self):
|
|
@@ -28,6 +31,18 @@ class EntityTypesResource(BaseModelsResource):
|
|
|
28
31
|
assets_service.clear_asset_type_cache()
|
|
29
32
|
return instance.serialize(relations=True)
|
|
30
33
|
|
|
34
|
+
def check_creation_integrity(self, data):
|
|
35
|
+
entity_type = (
|
|
36
|
+
EntityType.query
|
|
37
|
+
.filter(EntityType.name.ilike(data.get("name", "")))
|
|
38
|
+
.first()
|
|
39
|
+
)
|
|
40
|
+
if entity_type is not None:
|
|
41
|
+
raise WrongParameterException(
|
|
42
|
+
"Entity type with this name already exists"
|
|
43
|
+
)
|
|
44
|
+
return data
|
|
45
|
+
|
|
31
46
|
|
|
32
47
|
class EntityTypeResource(BaseModelResource):
|
|
33
48
|
def __init__(self):
|
|
@@ -4,9 +4,11 @@ from zou.app.models.metadata_descriptor import (
|
|
|
4
4
|
)
|
|
5
5
|
|
|
6
6
|
from zou.app.blueprints.crud.base import BaseModelResource, BaseModelsResource
|
|
7
|
+
from zou.app.utils import permissions
|
|
8
|
+
from zou.app.models.project import Project
|
|
7
9
|
|
|
8
10
|
from zou.app.services.exception import (
|
|
9
|
-
|
|
11
|
+
WrongParameterException,
|
|
10
12
|
)
|
|
11
13
|
|
|
12
14
|
|
|
@@ -14,6 +16,16 @@ class MetadataDescriptorsResource(BaseModelsResource):
|
|
|
14
16
|
def __init__(self):
|
|
15
17
|
BaseModelsResource.__init__(self, MetadataDescriptor)
|
|
16
18
|
|
|
19
|
+
def check_read_permissions(self):
|
|
20
|
+
return not permissions.has_vendor_permissions()
|
|
21
|
+
|
|
22
|
+
def add_project_permission_filter(self, query):
|
|
23
|
+
if not permissions.has_admin_permissions():
|
|
24
|
+
query = query.join(Project).filter(
|
|
25
|
+
user_service.build_related_projects_filter()
|
|
26
|
+
)
|
|
27
|
+
return query
|
|
28
|
+
|
|
17
29
|
def all_entries(self, query=None, relations=True):
|
|
18
30
|
if query is None:
|
|
19
31
|
query = self.model.query
|
|
@@ -30,11 +42,12 @@ class MetadataDescriptorsResource(BaseModelsResource):
|
|
|
30
42
|
if "data_type" in data:
|
|
31
43
|
types = [type_name for type_name, _ in METADATA_DESCRIPTOR_TYPES]
|
|
32
44
|
if data["data_type"] not in types:
|
|
33
|
-
raise
|
|
45
|
+
raise WrongParameterException("Invalid data_type")
|
|
34
46
|
return True
|
|
35
47
|
|
|
36
48
|
|
|
37
49
|
class MetadataDescriptorResource(BaseModelResource):
|
|
50
|
+
|
|
38
51
|
def __init__(self):
|
|
39
52
|
BaseModelResource.__init__(self, MetadataDescriptor)
|
|
40
53
|
|
|
@@ -47,5 +60,5 @@ class MetadataDescriptorResource(BaseModelResource):
|
|
|
47
60
|
if "data_type" in data:
|
|
48
61
|
types = [type_name for type_name, _ in METADATA_DESCRIPTOR_TYPES]
|
|
49
62
|
if data["data_type"] not in types:
|
|
50
|
-
raise
|
|
63
|
+
raise WrongParameterException("Invalid data_type")
|
|
51
64
|
return data
|