zou 0.20.47__tar.gz → 0.20.49__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.47/zou.egg-info → zou-0.20.49}/PKG-INFO +6 -8
- {zou-0.20.47 → zou-0.20.49}/setup.cfg +4 -6
- {zou-0.20.47 → zou-0.20.49}/setup.py +1 -1
- zou-0.20.49/zou/__init__.py +1 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/preview_file.py +12 -8
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/projects/resources.py +10 -10
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/deletion_service.py +1 -1
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/entities_service.py +15 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/playlists_service.py +27 -5
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/preview_files_service.py +4 -4
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/projects_service.py +20 -2
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/time_spents_service.py +10 -9
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/user_service.py +18 -14
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/fido.py +0 -4
- {zou-0.20.47 → zou-0.20.49/zou.egg-info}/PKG-INFO +6 -8
- {zou-0.20.47 → zou-0.20.49}/zou.egg-info/requires.txt +4 -9
- zou-0.20.47/zou/__init__.py +0 -1
- {zou-0.20.47 → zou-0.20.49}/LICENSE +0 -0
- {zou-0.20.47 → zou-0.20.49}/README.rst +0 -0
- {zou-0.20.47 → zou-0.20.49}/pyproject.toml +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/api.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/assets/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/assets/resources.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/auth/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/auth/resources.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/breakdown/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/breakdown/resources.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/chats/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/chats/resources.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/comments/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/comments/resources.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/concepts/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/concepts/resources.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/asset_instance.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/attachment_file.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/base.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/budget.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/budget_entry.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/chat.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/chat_message.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/comments.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/custom_action.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/day_off.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/department.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/entity.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/entity_link.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/entity_type.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/event.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/file_status.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/metadata_descriptor.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/milestone.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/news.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/notification.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/organisation.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/output_file.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/output_type.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/person.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/playlist.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/plugin.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/preview_background_file.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/project.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/project_status.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/salary_scale.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/schedule_item.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/search_filter.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/search_filter_group.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/software.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/status_automation.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/studio.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/subscription.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/task.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/task_status.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/task_type.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/time_spent.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/crud/working_file.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/edits/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/edits/resources.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/entities/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/entities/resources.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/events/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/events/resources.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/export/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/export/csv/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/export/csv/assets.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/export/csv/base.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/export/csv/casting.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/export/csv/edits.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/export/csv/persons.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/export/csv/playlists.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/export/csv/projects.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/export/csv/shots.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/export/csv/task_types.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/export/csv/tasks.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/export/csv/time_spents.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/files/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/files/resources.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/index/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/index/resources.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/news/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/news/resources.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/persons/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/persons/resources.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/playlists/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/playlists/resources.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/previews/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/previews/resources.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/projects/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/search/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/search/resources.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/shots/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/shots/resources.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/csv/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/csv/assets.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/csv/base.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/csv/casting.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/csv/edits.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/csv/persons.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/csv/shots.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/csv/task_type_estimations.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/kitsu.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/otio.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/shotgun/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/shotgun/assets.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/shotgun/base.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/shotgun/episode.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/shotgun/exception.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/shotgun/import_errors.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/shotgun/notes.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/shotgun/person.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/shotgun/project.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/shotgun/scene.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/shotgun/sequence.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/shotgun/shot.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/shotgun/status.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/shotgun/steps.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/shotgun/tasks.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/shotgun/team.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/source/shotgun/versions.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/tasks/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/tasks/resources.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/user/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/blueprints/user/resources.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/config.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/file_trees/default.json +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/file_trees/simple.json +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/indexer/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/indexer/indexing.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/mixin.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/asset_instance.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/attachment_file.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/base.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/budget.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/budget_entry.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/build_job.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/chat.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/chat_message.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/comment.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/custom_action.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/data_import_error.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/day_off.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/department.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/desktop_login_log.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/entity.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/entity_type.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/event.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/file_status.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/login_log.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/metadata_descriptor.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/milestone.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/news.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/notification.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/organisation.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/output_file.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/output_type.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/person.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/playlist.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/plugin.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/preview_background_file.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/preview_file.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/project.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/project_status.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/salary_scale.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/schedule_item.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/search_filter.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/search_filter_group.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/serializer.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/software.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/status_automation.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/studio.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/subscription.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/task.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/task_status.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/task_type.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/time_spent.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/models/working_file.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/assets_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/auth_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/backup_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/base_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/breakdown_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/budget_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/chats_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/comments_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/concepts_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/custom_actions_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/edits_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/emails_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/events_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/exception.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/file_tree_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/files_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/index_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/names_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/news_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/notifications_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/persons_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/plugins_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/scenes_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/schedule_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/shots_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/stats_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/status_automations_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/sync_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/tasks_service.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/services/telemetry_services.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/stores/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/stores/auth_tokens_store.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/stores/file_store.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/stores/publisher_store.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/stores/queue_store.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/swagger.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/api.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/auth.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/cache.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/chats.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/colors.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/commands.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/csv_utils.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/date_helpers.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/dbhelpers.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/emails.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/env.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/events.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/fields.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/flask.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/fs.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/git.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/logs.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/monitoring.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/permissions.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/plugins.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/query.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/redis.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/remote_job.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/saml.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/shell.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/string.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/app/utils/thumbnail.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/cli.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/debug.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/event_stream.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/job_settings.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/README +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/alembic.ini +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/env.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/script.py.mako +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/utils/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/utils/base.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/003be8a91001_add_start_and_end_dates_to_projects.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/0596674df51d_add_department_mentions_to_comments.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/05ac7e8caa21_remove_unique_constraint_for_taskstatus_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/05b7dc79a416_add_archived_fields_to_main_tables.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/06552e22f9e7_add_comment_updated_by.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/0cf5e0e035fa_drop_column_tasktype_for_shots.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/0ec3762a745d_add_attachment_table.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/0ef6416a507b_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/10cf267d95c9_fix_schedule_item.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/16328eae4b5f_add_new_constraint_for_timespent.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/16df47d76c64_add_some_indexes.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/17ef8f7be758_disallow_null_choicetype.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/1bb55759146f_add_table_studio.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/1cb44194db49_add_file_size_field_to_preview_file.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/1e150c2cea4d_add_nb_entities_out.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/1e2d77a2f0c4_add_hd_by_default_column.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/1fab8c420678_add_attachments_to_message_chats.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/20a8ad264659_tasktypeassettypelink_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/20dfeb36142b_add_projecttaskstatuslink_roles_for_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/23122f290ca2_add_entity_chat_models.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/269d41bfb73f_add_entity_entity_links.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/2762a797f1f9_add_people_salary_information.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/29df910f04a4_create_unique_constraint_project_id_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/29fe01a6c9eb_add_status_automation_field.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/2adc020885fa_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/2baede80b111_add_entity_status_field.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/306266361f4f_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/307edd8c639d_change_comment_updated_by_in_comment_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/328fd44c6347_add_entity_created_by.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/32f134ff1201_add_is_shared_flag_to_filters.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/346250b5304c_add_position_to_preview_files.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/3476e147e632_add_acks_to_comments.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/389cfb9de776_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/38baa9a23b3d_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/398150912a3f_validation_status_preview.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/3b0d1321079e_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/3d5c93bafb9d_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/3e0538ddf80f_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/3fee3bd10f9d_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/4095103c7d01_add_is_clients_isolated_flag_to_projects.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/40dea9555940_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/42ec83db6a01_change_person_preferred_two_factor_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/43d0cf0ed5e7_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/443d1e78a932_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/45c2de366e66_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/45dafbb3f4e1_for_person_contract_type_disallow_null.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/45f739ef962a_add_people_salary_scale_table.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/4715c2586036_add_last_preview_file_fields.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/4aab1f84ad72_introduce_plugin_table.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/4e3738cdc34c_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/4f2398ebcd49_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/523ee9647bee_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/539a3a00c417_for_departmentlink_index_person_id_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/54ee0d1d60ba_add_build_job_model.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/556526e47daa_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/57222395f2be_add_statusautomation_import_last_revision.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/5798d2c9020b_change_person_role_to_choicetype.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/590aa1ffe731_add_notifications_enabled_flag.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/59a7445a966c_add_entity_is_shared.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/5a291251823c_add_max_retake_parameter.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/5ab9d7a75887_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/5b0fcbb94f24_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/5b7fa3e51701_add_is_client_allowed_flag_to_task_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/5b980f0dc365_add_comment_links.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/5b9fd9ddfe43_add_homepage_and_contract_fields.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/5c0498e264bc_add_slack_fields.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/5e2ce62632a6_add_workflow_to_project.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/680c64565f9d_for_searchfiltergroup_is_shared.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/693cc511d28d_add_taskstatus_priority.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/6aa446ee4072_add_is_for_all_flage_to_playlists.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/6bd3b102d61b_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/6c597e842afa_add_task_type_field_to_playlists.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/6d1b2c60f58b_add_milestone_model.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/6d7fa5a8e9a5_add_timesheets_locked_field_to_org.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/6eeaff945706_add_data_field_on_entity_links.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/6f6049877105_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/7417c8eb70d8_add_for_entity_field_to_playlists.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/772a5e43f05b_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/7748d3d22925_add_columns_to_searchfilter_table_to_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/77d6820f494f_add_reply_to_notif.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/7a16258f2fab_add_currency_field_to_budgets.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/7b1f765677d8_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/7bc746997e8d_add_slack_token_field_to_organisation.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/7dc79d4ed7cd_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/818f7bda2528_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/82e7f7a95e84_add_project_id_to_events.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/82ee682204ab_add_is_generated_from_ldap_column_to_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/83e2f33a9b14_add_project_bugdet_table.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/8588f254d6b8_add_archived_fields.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/8739ae9fa28b_add_for_client_field.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/87efceb6745b_add_ready_for_to_entity.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/892b264937ec_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/8a1b4a1b7f4a_add_totp_columns_for_person.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/8ab98c178903_add_budget_entry_table.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/8e4f39e321f4_add_day_off_table.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/8e67c183bed7_add_preference_fields.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/8fbd40afbe5f_allow_to_set_float_values_for_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/9010a64e5a2d_add_indices.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/9060dd4f6116_notification_uc.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/925771029620_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/92b40d79ad3f_allow_message_attachments.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/92bdfe07e5f5_discord_integration.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/956659992419_add_columns_for_person_to_store_fido_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/96c79d31e648_add_mail_otp_columns_for_person.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/96f58a4a2a58_person_partial_index_for_email_only_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/971dbf5a0faf_add_short_name_for_asset_type_entity_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/98c90621cf58_add_for_client_flag_to_playlist.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/99825b9cc778_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/9a09467f9b2c_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/9b85c14fa8a7_add_day_off_new_columns.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/9bd17364fc18_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/9d3bb33c6fc6_add_department_keys_to_filter_models.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/9e5b3a9b0cee_add_new_column_metadatadescriptor_data_type_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/9f8445f9b42c_add_man_days_fields.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/a23682ccc1f1_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/a252a094e977_add_descriptions_for_entities_tasks_and_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/a519c710877c_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/a65bdadbae2f_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/a66508788c53_add_nb_assets_ready.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/a6c25eed3ea1_add_login_failed_attemps_and_last_login_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/a7c43f3fbc76_add_duration_column_to_the_preview_file.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/aa0a60033106_feedback_request.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/addbad59c706_allow_to_manage_drawings_instead_of_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/addbbefa7028_add_departments_link_to_metadata_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/ae0127f2fc56_add_previewfile_width_and_previewfile_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/af1790868e2c_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/b45cb782bb9c_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/b4dd0add5f79_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/b8c0a0f9d054_drop_task_status_is_reviewable.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/b8ed0fb263f8_add_person_jti_and_jti_expiration_date.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/b97a71306fc8_add_is_casting_standby_column_to_entity.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/be56dc0fb760_for_is_shared_disallow_nullable.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/bf1347acdee2_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/c49e41f1298b_add_previewbackground.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/c68c2a62cfac_add_mimetype_column_to_attachment.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/c726b98be194_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/c81f3e83bdb5_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/ca28796a2a62_add_is_done_field_to_the_task_model.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/cf3d365de164_add_entity_version_model.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/cf6cec6d6bf5_add_status_field_to_preview_file.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/d25118cddcaa_modify_salary_scale_model.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/d80267806131_task_status_new_column_is_default.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/d80f02824047_add_plugin_revision.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/d8dcd5196d57_add_casting_label.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/de8a3de227ef_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/deeacd38d373_for_projecttaskstatuslink_set_default_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/df1834485f57_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/df9f8a147e80_change_file_size_to_big_integer.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/e1ef93f40d3d_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/e29638428dfd_add_schedule_item_table.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/e3f6db74cc1e_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/e7e633bd6fa2_add_exceptions_to_budget_entries.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/e839d6603c09_add_person_id_to_shot_history.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/ee2373fbe3a4_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/f0567e8d0c62_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/f0c6cbb61869_add_production_style_field.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/f344b867a911_for_description_of_entity_task_working_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/f4ff5a73d283_add_person_ldap_uid.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/f5b113876a49_add_preferred_two_factor_authentication_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/f5bdca075cdc_add_preview_download_flag_to_projects.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/f874ad5e898a_add_link_entity_type_task_type.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/f995b28fb749_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/fb6b6f188497_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/fb87feaaa094_add_missing_unique_constraints.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/fba149993140_add_missing_index.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/fc322f908695_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/fee7c696166e_.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/feffd3c5b806_introduce_concepts.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/migrations/versions/ffeed4956ab1_add_more_details_to_projects.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/plugin_template/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/plugin_template/migrations/alembic.ini +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/plugin_template/migrations/env.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/plugin_template/migrations/script.py.mako +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/plugin_template/models.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/plugin_template/routes.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/remote/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/remote/config_payload.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/remote/normalize_movie.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/remote/playlist.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/utils/__init__.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou/utils/movie.py +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou.egg-info/SOURCES.txt +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou.egg-info/dependency_links.txt +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou.egg-info/entry_points.txt +0 -0
- {zou-0.20.47 → zou-0.20.49}/zou.egg-info/not-zip-safe +0 -0
- {zou-0.20.47 → zou-0.20.49}/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.49
|
|
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
|
|
@@ -11,7 +11,6 @@ Classifier: Development Status :: 5 - Production/Stable
|
|
|
11
11
|
Classifier: Environment :: Web Environment
|
|
12
12
|
Classifier: Framework :: Flask
|
|
13
13
|
Classifier: Intended Audience :: Developers
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
15
14
|
Classifier: Programming Language :: Python :: 3.10
|
|
16
15
|
Classifier: Programming Language :: Python :: 3.11
|
|
17
16
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -19,14 +18,14 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
19
18
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
20
19
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
21
20
|
Classifier: Topic :: Multimedia :: Graphics
|
|
22
|
-
Requires-Python: >=3.
|
|
21
|
+
Requires-Python: >=3.10, <3.14
|
|
23
22
|
License-File: LICENSE
|
|
24
23
|
Requires-Dist: babel==2.17.0
|
|
25
|
-
Requires-Dist: click==8.1
|
|
24
|
+
Requires-Dist: click==8.2.1
|
|
26
25
|
Requires-Dist: discord.py==2.5.2
|
|
27
26
|
Requires-Dist: email-validator==2.2.0
|
|
28
27
|
Requires-Dist: ffmpeg-python==0.2.0
|
|
29
|
-
Requires-Dist: fido2==
|
|
28
|
+
Requires-Dist: fido2==2.0.0
|
|
30
29
|
Requires-Dist: flasgger==0.9.7.1
|
|
31
30
|
Requires-Dist: flask_bcrypt==1.0.1
|
|
32
31
|
Requires-Dist: flask_caching==2.3.1
|
|
@@ -35,7 +34,7 @@ Requires-Dist: flask_mail==0.10.0
|
|
|
35
34
|
Requires-Dist: flask_principal==0.4.0
|
|
36
35
|
Requires-Dist: flask_restful==0.3.10
|
|
37
36
|
Requires-Dist: flask_sqlalchemy==3.1.1
|
|
38
|
-
Requires-Dist: flask-fs2[s3,swift]==0.7.
|
|
37
|
+
Requires-Dist: flask-fs2[s3,swift]==0.7.30
|
|
39
38
|
Requires-Dist: flask-jwt-extended==4.7.1
|
|
40
39
|
Requires-Dist: flask-migrate==4.1.0
|
|
41
40
|
Requires-Dist: flask-socketio==5.5.1
|
|
@@ -50,8 +49,7 @@ Requires-Dist: Jinja2==3.1.6
|
|
|
50
49
|
Requires-Dist: ldap3==2.9.1
|
|
51
50
|
Requires-Dist: matterhook==0.2
|
|
52
51
|
Requires-Dist: meilisearch==0.34.1
|
|
53
|
-
Requires-Dist: numpy==2.
|
|
54
|
-
Requires-Dist: numpy==2.2.6; python_version >= "3.10"
|
|
52
|
+
Requires-Dist: numpy==2.2.6
|
|
55
53
|
Requires-Dist: opencv-python==4.11.0.86
|
|
56
54
|
Requires-Dist: OpenTimelineIO==0.17.0
|
|
57
55
|
Requires-Dist: OpenTimelineIO-Plugins==0.17.0
|
|
@@ -14,7 +14,6 @@ classifiers =
|
|
|
14
14
|
Environment :: Web Environment
|
|
15
15
|
Framework :: Flask
|
|
16
16
|
Intended Audience :: Developers
|
|
17
|
-
Programming Language :: Python :: 3.9
|
|
18
17
|
Programming Language :: Python :: 3.10
|
|
19
18
|
Programming Language :: Python :: 3.11
|
|
20
19
|
Programming Language :: Python :: 3.12
|
|
@@ -28,11 +27,11 @@ zip_safe = False
|
|
|
28
27
|
packages = find:
|
|
29
28
|
install_requires =
|
|
30
29
|
babel==2.17.0
|
|
31
|
-
click==8.1
|
|
30
|
+
click==8.2.1
|
|
32
31
|
discord.py==2.5.2
|
|
33
32
|
email-validator==2.2.0
|
|
34
33
|
ffmpeg-python==0.2.0
|
|
35
|
-
fido2==
|
|
34
|
+
fido2==2.0.0
|
|
36
35
|
flasgger==0.9.7.1
|
|
37
36
|
flask_bcrypt==1.0.1
|
|
38
37
|
flask_caching==2.3.1
|
|
@@ -41,7 +40,7 @@ install_requires =
|
|
|
41
40
|
flask_principal==0.4.0
|
|
42
41
|
flask_restful==0.3.10
|
|
43
42
|
flask_sqlalchemy==3.1.1
|
|
44
|
-
flask-fs2[swift, s3]==0.7.
|
|
43
|
+
flask-fs2[swift, s3]==0.7.30
|
|
45
44
|
flask-jwt-extended==4.7.1
|
|
46
45
|
flask-migrate==4.1.0
|
|
47
46
|
flask-socketio==5.5.1
|
|
@@ -56,8 +55,7 @@ install_requires =
|
|
|
56
55
|
ldap3==2.9.1
|
|
57
56
|
matterhook==0.2
|
|
58
57
|
meilisearch==0.34.1
|
|
59
|
-
numpy==2.
|
|
60
|
-
numpy==2.2.6; python_version >= '3.10'
|
|
58
|
+
numpy==2.2.6
|
|
61
59
|
opencv-python==4.11.0.86
|
|
62
60
|
OpenTimelineIO==0.17.0
|
|
63
61
|
OpenTimelineIO-Plugins==0.17.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.20.49"
|
|
@@ -6,6 +6,7 @@ from sqlalchemy.exc import IntegrityError, StatementError
|
|
|
6
6
|
from zou.app.models.preview_file import PreviewFile
|
|
7
7
|
from zou.app.models.task import Task
|
|
8
8
|
from zou.app.models.project import Project
|
|
9
|
+
from zou.app.models.project_status import ProjectStatus
|
|
9
10
|
from zou.app.services import (
|
|
10
11
|
user_service,
|
|
11
12
|
tasks_service,
|
|
@@ -21,19 +22,22 @@ class PreviewFilesResource(BaseModelsResource):
|
|
|
21
22
|
BaseModelsResource.__init__(self, PreviewFile)
|
|
22
23
|
|
|
23
24
|
def add_project_permission_filter(self, query):
|
|
24
|
-
if permissions.
|
|
25
|
-
query = (
|
|
26
|
-
query.join(Task)
|
|
27
|
-
.filter(user_service.build_assignee_filter())
|
|
28
|
-
.filter(user_service.build_open_project_filter())
|
|
29
|
-
)
|
|
30
|
-
elif not permissions.has_admin_permissions():
|
|
25
|
+
if not permissions.has_admin_permissions():
|
|
31
26
|
query = (
|
|
32
27
|
query.join(Task)
|
|
33
28
|
.join(Project)
|
|
34
|
-
.
|
|
29
|
+
.join(
|
|
30
|
+
ProjectStatus,
|
|
31
|
+
Project.project_status_id == ProjectStatus.id,
|
|
32
|
+
)
|
|
35
33
|
.filter(user_service.build_open_project_filter())
|
|
36
34
|
)
|
|
35
|
+
if permissions.has_vendor_permissions():
|
|
36
|
+
query = query.filter(user_service.build_assignee_filter())
|
|
37
|
+
else:
|
|
38
|
+
query = query.filter(
|
|
39
|
+
user_service.build_related_projects_filter()
|
|
40
|
+
)
|
|
37
41
|
|
|
38
42
|
return query
|
|
39
43
|
|
|
@@ -1509,20 +1509,20 @@ class ProductionMonthTimeSpentsResource(Resource, ArgsMixin):
|
|
|
1509
1509
|
- Projects
|
|
1510
1510
|
parameters:
|
|
1511
1511
|
- in: path
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1512
|
+
name: project_id
|
|
1513
|
+
required: True
|
|
1514
|
+
type: string
|
|
1515
|
+
format: UUID
|
|
1516
|
+
x-example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
1517
1517
|
responses:
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1518
|
+
200:
|
|
1519
|
+
description: Aggregated time spents for given person and month
|
|
1520
|
+
400:
|
|
1521
|
+
description: Wrong ID format
|
|
1522
1522
|
"""
|
|
1523
1523
|
permissions.check_admin_permissions()
|
|
1524
1524
|
self.check_id_parameter(project_id)
|
|
1525
1525
|
user = persons_service.get_current_user()
|
|
1526
1526
|
return time_spents_service.get_project_month_time_spents(
|
|
1527
1527
|
project_id, user["timezone"]
|
|
1528
|
-
)
|
|
1528
|
+
)
|
|
@@ -313,7 +313,7 @@ def remove_tasks(project_id, task_ids):
|
|
|
313
313
|
filter is there to facilitate right management.
|
|
314
314
|
"""
|
|
315
315
|
task_ids = [task_id for task_id in task_ids if fields.is_valid_id(task_id)]
|
|
316
|
-
tasks = Task.query.filter(
|
|
316
|
+
tasks = Task.query.filter(Task.project_id == project_id).filter(
|
|
317
317
|
Task.id.in_(task_ids)
|
|
318
318
|
)
|
|
319
319
|
for task in tasks:
|
|
@@ -140,6 +140,21 @@ def update_entity_preview(entity_id, preview_file_id):
|
|
|
140
140
|
return entity.serialize()
|
|
141
141
|
|
|
142
142
|
|
|
143
|
+
def get_for_entity_from_task(task):
|
|
144
|
+
"""
|
|
145
|
+
Return the entity type name for given task. All asset types are returned
|
|
146
|
+
as "Asset".
|
|
147
|
+
"""
|
|
148
|
+
entity = get_entity(task["entity_id"])
|
|
149
|
+
entity_type = get_entity_type(entity["entity_type_id"])
|
|
150
|
+
for_entity = entity_type["name"]
|
|
151
|
+
if for_entity.lower() not in [
|
|
152
|
+
"shot", "sequence", "episode", "edit", "concept"
|
|
153
|
+
]:
|
|
154
|
+
for_entity = "Asset"
|
|
155
|
+
return for_entity
|
|
156
|
+
|
|
157
|
+
|
|
143
158
|
def get_entities_for_project(
|
|
144
159
|
project_id,
|
|
145
160
|
entity_type_id,
|
|
@@ -820,9 +820,19 @@ def generate_temp_playlist(task_ids, sort=True):
|
|
|
820
820
|
persist anything. The goal is to build a temporary playlist used to see
|
|
821
821
|
a quick preview of several shots.
|
|
822
822
|
"""
|
|
823
|
+
if len(task_ids) == 0:
|
|
824
|
+
return []
|
|
825
|
+
|
|
826
|
+
task_id = task_ids[0]
|
|
827
|
+
task = tasks_service.get_task(task_id)
|
|
828
|
+
for_entity = entities_service.get_for_entity_from_task(task)
|
|
829
|
+
task_type_links = projects_service.get_task_type_links(
|
|
830
|
+
task["project_id"], for_entity
|
|
831
|
+
)
|
|
823
832
|
entities = []
|
|
833
|
+
|
|
824
834
|
for task_id in task_ids:
|
|
825
|
-
entity = generate_playlisted_entity_from_task(task_id)
|
|
835
|
+
entity = generate_playlisted_entity_from_task(task_id, task_type_links)
|
|
826
836
|
entities.append(entity)
|
|
827
837
|
if len(entities) > 0:
|
|
828
838
|
if not sort:
|
|
@@ -846,15 +856,13 @@ def generate_temp_playlist(task_ids, sort=True):
|
|
|
846
856
|
return []
|
|
847
857
|
|
|
848
858
|
|
|
849
|
-
def generate_playlisted_entity_from_task(task_id):
|
|
859
|
+
def generate_playlisted_entity_from_task(task_id, task_type_links):
|
|
850
860
|
"""
|
|
851
861
|
Generate the data structure of a playlisted shot for a given task. It
|
|
852
862
|
doesn't persist anything.
|
|
853
863
|
"""
|
|
854
864
|
task = tasks_service.get_task(task_id)
|
|
855
|
-
task = tasks_service.get_task(task_id)
|
|
856
865
|
entity = entities_service.get_entity(task["entity_id"])
|
|
857
|
-
task = tasks_service.get_task(task_id)
|
|
858
866
|
if shots_service.is_shot(entity):
|
|
859
867
|
playlisted_entity = get_base_shot_for_playlist(entity, task_id)
|
|
860
868
|
elif shots_service.is_sequence(entity):
|
|
@@ -866,8 +874,22 @@ def generate_playlisted_entity_from_task(task_id):
|
|
|
866
874
|
|
|
867
875
|
task_type_id = task["task_type_id"]
|
|
868
876
|
preview_files = get_preview_files_for_entity(entity["id"])
|
|
877
|
+
|
|
878
|
+
preview_file = None
|
|
869
879
|
if task_type_id in preview_files and len(preview_files[task_type_id]) > 0:
|
|
870
880
|
preview_file = preview_files[task_type_id][0]
|
|
881
|
+
|
|
882
|
+
if preview_file is None and len(preview_files.keys()) > 0:
|
|
883
|
+
available_task_types = [
|
|
884
|
+
link["task_type_id"]
|
|
885
|
+
for link in task_type_links
|
|
886
|
+
if link["task_type_id"] in preview_files
|
|
887
|
+
]
|
|
888
|
+
if len(available_task_types) > 0:
|
|
889
|
+
task_type_id = available_task_types[0]
|
|
890
|
+
preview_file = preview_files[ task_type_id][0]
|
|
891
|
+
|
|
892
|
+
if preview_file is not None:
|
|
871
893
|
playlisted_entity.update(
|
|
872
894
|
{
|
|
873
895
|
"preview_file_id": preview_file["id"],
|
|
@@ -877,7 +899,7 @@ def generate_playlisted_entity_from_task(task_id):
|
|
|
877
899
|
"preview_file_duration": preview_file["duration"],
|
|
878
900
|
"preview_file_revision": preview_file["revision"],
|
|
879
901
|
"preview_file_status": preview_file["status"],
|
|
880
|
-
"preview_file_annotations": preview_file["annotations"],
|
|
902
|
+
"preview_file_annotations": preview_file["annotations"] or [],
|
|
881
903
|
"preview_file_previews": preview_file["previews"],
|
|
882
904
|
}
|
|
883
905
|
)
|
|
@@ -555,7 +555,7 @@ def get_running_preview_files():
|
|
|
555
555
|
entries = (
|
|
556
556
|
PreviewFile.query.join(Task)
|
|
557
557
|
.join(Project)
|
|
558
|
-
.join(ProjectStatus)
|
|
558
|
+
.join(ProjectStatus, ProjectStatus.id == Project.project_status_id)
|
|
559
559
|
.filter(ProjectStatus.name.in_(("Active", "open", "Open")))
|
|
560
560
|
.filter(PreviewFile.status.in_(("broken", "processing")))
|
|
561
561
|
.add_columns(Task.project_id, Task.task_type_id, Task.entity_id)
|
|
@@ -668,7 +668,7 @@ def reset_movie_files_metadata():
|
|
|
668
668
|
preview_files = (
|
|
669
669
|
PreviewFile.query.join(Task)
|
|
670
670
|
.join(Project)
|
|
671
|
-
.join(ProjectStatus)
|
|
671
|
+
.join(ProjectStatus, Project.project_status_id == ProjectStatus.id)
|
|
672
672
|
.filter(ProjectStatus.name.in_(("Active", "open", "Open")))
|
|
673
673
|
.filter(PreviewFile.status.not_in(("broken", "processing")))
|
|
674
674
|
.filter(PreviewFile.extension == "mp4")
|
|
@@ -711,7 +711,7 @@ def reset_picture_files_metadata():
|
|
|
711
711
|
preview_files = (
|
|
712
712
|
PreviewFile.query.join(Task)
|
|
713
713
|
.join(Project)
|
|
714
|
-
.join(ProjectStatus)
|
|
714
|
+
.join(ProjectStatus, Project.project_status_id == ProjectStatus.id)
|
|
715
715
|
.filter(ProjectStatus.name.in_(("Active", "open", "Open")))
|
|
716
716
|
.filter(PreviewFile.status.not_in(("broken", "processing")))
|
|
717
717
|
.filter(PreviewFile.extension == "png")
|
|
@@ -765,7 +765,7 @@ def generate_preview_extra(
|
|
|
765
765
|
PreviewFile.query.join(Task)
|
|
766
766
|
.join(Entity)
|
|
767
767
|
.join(Project)
|
|
768
|
-
.join(ProjectStatus)
|
|
768
|
+
.join(ProjectStatus, Project.project_status_id == ProjectStatus.id)
|
|
769
769
|
.filter(ProjectStatus.name.in_(("Active", "open", "Open")))
|
|
770
770
|
.filter(PreviewFile.status.not_in(("broken", "processing")))
|
|
771
771
|
.filter(PreviewFile.extension.in_(("mp4", "png")))
|
|
@@ -49,7 +49,9 @@ def open_projects(name=None):
|
|
|
49
49
|
Return all open projects. Allow to filter projects by name.
|
|
50
50
|
"""
|
|
51
51
|
query = (
|
|
52
|
-
Project.query.join(
|
|
52
|
+
Project.query.join(
|
|
53
|
+
ProjectStatus, Project.project_status_id == ProjectStatus.id
|
|
54
|
+
)
|
|
53
55
|
.outerjoin(MetadataDescriptor)
|
|
54
56
|
.filter(ProjectStatus.name.in_(("Active", "open", "Open")))
|
|
55
57
|
.order_by(Project.name)
|
|
@@ -163,7 +165,9 @@ def get_projects():
|
|
|
163
165
|
Return all projects. Allow to filter projects by name.
|
|
164
166
|
"""
|
|
165
167
|
query = (
|
|
166
|
-
Project.query.join(
|
|
168
|
+
Project.query.join(
|
|
169
|
+
ProjectStatus, Project.project_status_id == ProjectStatus.id
|
|
170
|
+
)
|
|
167
171
|
.add_columns(ProjectStatus.name)
|
|
168
172
|
.order_by(Project.name)
|
|
169
173
|
)
|
|
@@ -696,6 +700,20 @@ def get_task_type_priority_map(project_id, for_entity="Asset"):
|
|
|
696
700
|
}
|
|
697
701
|
|
|
698
702
|
|
|
703
|
+
def get_task_type_links(project_id, for_entity="Asset"):
|
|
704
|
+
"""
|
|
705
|
+
Return a lisk of links for given project and entity type.
|
|
706
|
+
"""
|
|
707
|
+
task_type_links = (
|
|
708
|
+
ProjectTaskTypeLink.query
|
|
709
|
+
.join(TaskType)
|
|
710
|
+
.filter(ProjectTaskTypeLink.project_id == project_id)
|
|
711
|
+
.filter(TaskType.for_entity == for_entity)
|
|
712
|
+
.order_by(ProjectTaskTypeLink.priority.desc())
|
|
713
|
+
).all()
|
|
714
|
+
return ProjectTaskTypeLink.serialize_list(task_type_links)
|
|
715
|
+
|
|
716
|
+
|
|
699
717
|
def get_department_team(project_id, department_id):
|
|
700
718
|
persons = (
|
|
701
719
|
Person.query.join(
|
|
@@ -545,8 +545,7 @@ def get_project_month_time_spents(project_id, timezone=None):
|
|
|
545
545
|
"""
|
|
546
546
|
data = {}
|
|
547
547
|
query = (
|
|
548
|
-
TimeSpent.query
|
|
549
|
-
.join(Task)
|
|
548
|
+
TimeSpent.query.join(Task)
|
|
550
549
|
.join(TaskType, TaskType.id == Task.task_type_id)
|
|
551
550
|
.join(Department, Department.id == TaskType.department_id)
|
|
552
551
|
.filter(Task.project_id == project_id)
|
|
@@ -559,15 +558,17 @@ def get_project_month_time_spents(project_id, timezone=None):
|
|
|
559
558
|
time_spent.date, timezone
|
|
560
559
|
)[0:7]
|
|
561
560
|
if department_id not in data:
|
|
562
|
-
data[department_id] = {
|
|
561
|
+
data[department_id] = {"total": 0}
|
|
563
562
|
if time_spent.person_id not in data[department_id]:
|
|
564
|
-
data[department_id][time_spent.person_id] = {
|
|
563
|
+
data[department_id][time_spent.person_id] = {"total": 0}
|
|
565
564
|
if date_key not in data[department_id][time_spent.person_id]:
|
|
566
565
|
data[department_id][time_spent.person_id][date_key] = 0
|
|
567
566
|
|
|
568
|
-
data[department_id][time_spent.person_id][
|
|
569
|
-
|
|
567
|
+
data[department_id][time_spent.person_id][
|
|
568
|
+
date_key
|
|
569
|
+
] += time_spent.duration
|
|
570
570
|
data[department_id]["total"] += time_spent.duration
|
|
571
|
-
data[department_id][time_spent.person_id][
|
|
572
|
-
|
|
573
|
-
|
|
571
|
+
data[department_id][time_spent.person_id][
|
|
572
|
+
"total"
|
|
573
|
+
] += time_spent.duration
|
|
574
|
+
return data
|
|
@@ -86,7 +86,9 @@ def build_related_projects_filter():
|
|
|
86
86
|
is part of the team.
|
|
87
87
|
"""
|
|
88
88
|
projects = (
|
|
89
|
-
Project.query.join(
|
|
89
|
+
Project.query.join(
|
|
90
|
+
ProjectStatus, Project.project_status_id == ProjectStatus.id
|
|
91
|
+
)
|
|
90
92
|
.filter(build_team_filter())
|
|
91
93
|
.filter(build_open_project_filter())
|
|
92
94
|
.all()
|
|
@@ -105,7 +107,7 @@ def related_projects():
|
|
|
105
107
|
"""
|
|
106
108
|
projects = (
|
|
107
109
|
Project.query.join(Task)
|
|
108
|
-
.join(ProjectStatus)
|
|
110
|
+
.join(ProjectStatus, Project.project_status_id == ProjectStatus.id)
|
|
109
111
|
.filter(build_team_filter())
|
|
110
112
|
.filter(build_open_project_filter())
|
|
111
113
|
.all()
|
|
@@ -158,7 +160,7 @@ def get_tasks_for_entity(entity_id):
|
|
|
158
160
|
"""
|
|
159
161
|
query = (
|
|
160
162
|
Task.query.join(Project)
|
|
161
|
-
.join(ProjectStatus)
|
|
163
|
+
.join(ProjectStatus, Project.project_status_id == ProjectStatus.id)
|
|
162
164
|
.filter(Task.entity_id == entity_id)
|
|
163
165
|
.filter(build_assignee_filter())
|
|
164
166
|
.filter(build_open_project_filter())
|
|
@@ -175,7 +177,7 @@ def get_task_types_for_entity(entity_id):
|
|
|
175
177
|
query = (
|
|
176
178
|
TaskType.query.join(Task)
|
|
177
179
|
.join(Project)
|
|
178
|
-
.join(ProjectStatus)
|
|
180
|
+
.join(ProjectStatus, Project.project_status_id == ProjectStatus.id)
|
|
179
181
|
.filter(Task.entity_id == entity_id)
|
|
180
182
|
.filter(build_assignee_filter())
|
|
181
183
|
.filter(build_open_project_filter())
|
|
@@ -193,7 +195,7 @@ def get_assets_for_asset_type(project_id, asset_type_id):
|
|
|
193
195
|
Entity.query.join(EntityType)
|
|
194
196
|
.join(Project)
|
|
195
197
|
.join(Task, Task.entity_id == Entity.id)
|
|
196
|
-
.join(ProjectStatus)
|
|
198
|
+
.join(ProjectStatus, Project.project_status_id == ProjectStatus.id)
|
|
197
199
|
.filter(EntityType.id == asset_type_id)
|
|
198
200
|
.filter(Project.id == project_id)
|
|
199
201
|
.filter(build_assignee_filter())
|
|
@@ -212,7 +214,7 @@ def get_asset_types_for_project(project_id):
|
|
|
212
214
|
EntityType.query.join(Entity, Entity.entity_type_id == EntityType.id)
|
|
213
215
|
.join(Task, Task.entity_id == Entity.id)
|
|
214
216
|
.join(Project)
|
|
215
|
-
.join(ProjectStatus)
|
|
217
|
+
.join(ProjectStatus, Project.project_status_id == ProjectStatus.id)
|
|
216
218
|
.filter(Project.id == project_id)
|
|
217
219
|
.filter(build_assignee_filter())
|
|
218
220
|
.filter(build_open_project_filter())
|
|
@@ -236,7 +238,7 @@ def get_sequences_for_project(project_id):
|
|
|
236
238
|
.join(Task, Task.entity_id == Shot.id)
|
|
237
239
|
.join(EntityType, EntityType.id == Entity.entity_type_id)
|
|
238
240
|
.join(Project, Project.id == Entity.project_id)
|
|
239
|
-
.join(ProjectStatus)
|
|
241
|
+
.join(ProjectStatus, Project.project_status_id == ProjectStatus.id)
|
|
240
242
|
.filter(Shot.entity_type_id == shot_type["id"])
|
|
241
243
|
.filter(Entity.entity_type_id == sequence_type["id"])
|
|
242
244
|
.filter(Project.id == project_id)
|
|
@@ -263,7 +265,7 @@ def get_project_episodes(project_id):
|
|
|
263
265
|
.join(Shot, Shot.parent_id == Sequence.id)
|
|
264
266
|
.join(Task, Task.entity_id == Shot.id)
|
|
265
267
|
.join(Project, Project.id == Entity.project_id)
|
|
266
|
-
.join(ProjectStatus)
|
|
268
|
+
.join(ProjectStatus, Project.project_status_id == ProjectStatus.id)
|
|
267
269
|
.filter(Shot.entity_type_id == shot_type["id"])
|
|
268
270
|
.filter(Sequence.entity_type_id == sequence_type["id"])
|
|
269
271
|
.filter(Entity.entity_type_id == episode_type["id"])
|
|
@@ -283,7 +285,7 @@ def get_shots_for_sequence(sequence_id):
|
|
|
283
285
|
query = (
|
|
284
286
|
Entity.query.join(Task)
|
|
285
287
|
.join(Project)
|
|
286
|
-
.join(ProjectStatus)
|
|
288
|
+
.join(ProjectStatus, Project.project_status_id == ProjectStatus.id)
|
|
287
289
|
.join(EntityType)
|
|
288
290
|
.filter(Entity.entity_type_id == shot_type["id"])
|
|
289
291
|
.filter(Entity.parent_id == sequence_id)
|
|
@@ -303,7 +305,7 @@ def get_scenes_for_sequence(sequence_id):
|
|
|
303
305
|
query = (
|
|
304
306
|
Entity.query.join(Task)
|
|
305
307
|
.join(Project)
|
|
306
|
-
.join(ProjectStatus)
|
|
308
|
+
.join(ProjectStatus, Project.project_status_id == ProjectStatus.id)
|
|
307
309
|
.join(EntityType)
|
|
308
310
|
.filter(Entity.entity_type_id == scene_type["id"])
|
|
309
311
|
.filter(Entity.parent_id == sequence_id)
|
|
@@ -318,9 +320,9 @@ def get_open_projects(name=None):
|
|
|
318
320
|
"""
|
|
319
321
|
Get all open projects for which current user is part of the team.
|
|
320
322
|
"""
|
|
321
|
-
query = Project.query.join(
|
|
322
|
-
|
|
323
|
-
)
|
|
323
|
+
query = Project.query.join(
|
|
324
|
+
ProjectStatus, Project.project_status_id == ProjectStatus.id
|
|
325
|
+
).filter(build_open_project_filter())
|
|
324
326
|
|
|
325
327
|
if name is not None:
|
|
326
328
|
query = query.filter(Project.name == name)
|
|
@@ -353,7 +355,9 @@ def get_projects(name=None):
|
|
|
353
355
|
"""
|
|
354
356
|
Get all projects for which current user has a task assigned.
|
|
355
357
|
"""
|
|
356
|
-
query = Project.query.join(
|
|
358
|
+
query = Project.query.join(
|
|
359
|
+
ProjectStatus, Project.project_status_id == ProjectStatus.id
|
|
360
|
+
).filter(build_team_filter())
|
|
357
361
|
|
|
358
362
|
if name is not None:
|
|
359
363
|
query = query.filter(Project.name == name)
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import fido2.features
|
|
2
|
-
|
|
3
1
|
from fido2.webauthn import (
|
|
4
2
|
PublicKeyCredentialRpEntity,
|
|
5
3
|
)
|
|
@@ -8,8 +6,6 @@ from urllib.parse import urlparse
|
|
|
8
6
|
|
|
9
7
|
from zou.app import config
|
|
10
8
|
|
|
11
|
-
fido2.features.webauthn_json_mapping.enabled = True
|
|
12
|
-
|
|
13
9
|
|
|
14
10
|
def get_fido_server():
|
|
15
11
|
return Fido2Server(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: zou
|
|
3
|
-
Version: 0.20.
|
|
3
|
+
Version: 0.20.49
|
|
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
|
|
@@ -11,7 +11,6 @@ Classifier: Development Status :: 5 - Production/Stable
|
|
|
11
11
|
Classifier: Environment :: Web Environment
|
|
12
12
|
Classifier: Framework :: Flask
|
|
13
13
|
Classifier: Intended Audience :: Developers
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
15
14
|
Classifier: Programming Language :: Python :: 3.10
|
|
16
15
|
Classifier: Programming Language :: Python :: 3.11
|
|
17
16
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -19,14 +18,14 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
19
18
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
20
19
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
21
20
|
Classifier: Topic :: Multimedia :: Graphics
|
|
22
|
-
Requires-Python: >=3.
|
|
21
|
+
Requires-Python: >=3.10, <3.14
|
|
23
22
|
License-File: LICENSE
|
|
24
23
|
Requires-Dist: babel==2.17.0
|
|
25
|
-
Requires-Dist: click==8.1
|
|
24
|
+
Requires-Dist: click==8.2.1
|
|
26
25
|
Requires-Dist: discord.py==2.5.2
|
|
27
26
|
Requires-Dist: email-validator==2.2.0
|
|
28
27
|
Requires-Dist: ffmpeg-python==0.2.0
|
|
29
|
-
Requires-Dist: fido2==
|
|
28
|
+
Requires-Dist: fido2==2.0.0
|
|
30
29
|
Requires-Dist: flasgger==0.9.7.1
|
|
31
30
|
Requires-Dist: flask_bcrypt==1.0.1
|
|
32
31
|
Requires-Dist: flask_caching==2.3.1
|
|
@@ -35,7 +34,7 @@ Requires-Dist: flask_mail==0.10.0
|
|
|
35
34
|
Requires-Dist: flask_principal==0.4.0
|
|
36
35
|
Requires-Dist: flask_restful==0.3.10
|
|
37
36
|
Requires-Dist: flask_sqlalchemy==3.1.1
|
|
38
|
-
Requires-Dist: flask-fs2[s3,swift]==0.7.
|
|
37
|
+
Requires-Dist: flask-fs2[s3,swift]==0.7.30
|
|
39
38
|
Requires-Dist: flask-jwt-extended==4.7.1
|
|
40
39
|
Requires-Dist: flask-migrate==4.1.0
|
|
41
40
|
Requires-Dist: flask-socketio==5.5.1
|
|
@@ -50,8 +49,7 @@ Requires-Dist: Jinja2==3.1.6
|
|
|
50
49
|
Requires-Dist: ldap3==2.9.1
|
|
51
50
|
Requires-Dist: matterhook==0.2
|
|
52
51
|
Requires-Dist: meilisearch==0.34.1
|
|
53
|
-
Requires-Dist: numpy==2.
|
|
54
|
-
Requires-Dist: numpy==2.2.6; python_version >= "3.10"
|
|
52
|
+
Requires-Dist: numpy==2.2.6
|
|
55
53
|
Requires-Dist: opencv-python==4.11.0.86
|
|
56
54
|
Requires-Dist: OpenTimelineIO==0.17.0
|
|
57
55
|
Requires-Dist: OpenTimelineIO-Plugins==0.17.0
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
babel==2.17.0
|
|
2
|
-
click==8.1
|
|
2
|
+
click==8.2.1
|
|
3
3
|
discord.py==2.5.2
|
|
4
4
|
email-validator==2.2.0
|
|
5
5
|
ffmpeg-python==0.2.0
|
|
6
|
-
fido2==
|
|
6
|
+
fido2==2.0.0
|
|
7
7
|
flasgger==0.9.7.1
|
|
8
8
|
flask_bcrypt==1.0.1
|
|
9
9
|
flask_caching==2.3.1
|
|
@@ -12,7 +12,7 @@ flask_mail==0.10.0
|
|
|
12
12
|
flask_principal==0.4.0
|
|
13
13
|
flask_restful==0.3.10
|
|
14
14
|
flask_sqlalchemy==3.1.1
|
|
15
|
-
flask-fs2[s3,swift]==0.7.
|
|
15
|
+
flask-fs2[s3,swift]==0.7.30
|
|
16
16
|
flask-jwt-extended==4.7.1
|
|
17
17
|
flask-migrate==4.1.0
|
|
18
18
|
flask-socketio==5.5.1
|
|
@@ -27,6 +27,7 @@ Jinja2==3.1.6
|
|
|
27
27
|
ldap3==2.9.1
|
|
28
28
|
matterhook==0.2
|
|
29
29
|
meilisearch==0.34.1
|
|
30
|
+
numpy==2.2.6
|
|
30
31
|
opencv-python==4.11.0.86
|
|
31
32
|
OpenTimelineIO==0.17.0
|
|
32
33
|
OpenTimelineIO-Plugins==0.17.0
|
|
@@ -53,12 +54,6 @@ tomlkit==0.13.2
|
|
|
53
54
|
ua-parser==1.0.1
|
|
54
55
|
werkzeug==3.1.3
|
|
55
56
|
|
|
56
|
-
[:python_version == "3.9"]
|
|
57
|
-
numpy==2.0.1
|
|
58
|
-
|
|
59
|
-
[:python_version >= "3.10"]
|
|
60
|
-
numpy==2.2.6
|
|
61
|
-
|
|
62
57
|
[dev]
|
|
63
58
|
wheel
|
|
64
59
|
|
zou-0.20.47/zou/__init__.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.20.47"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|