zou 0.19.56__tar.gz → 0.19.57__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.
Files changed (428) hide show
  1. {zou-0.19.56/zou.egg-info → zou-0.19.57}/PKG-INFO +8 -8
  2. {zou-0.19.56 → zou-0.19.57}/setup.cfg +7 -7
  3. zou-0.19.57/zou/__init__.py +1 -0
  4. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/chats/resources.py +3 -1
  5. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/day_off.py +6 -2
  6. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/entity_type.py +3 -6
  7. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/project.py +6 -2
  8. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/schedule_item.py +3 -1
  9. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/export/csv/playlists.py +1 -1
  10. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/export/csv/time_spents.py +1 -1
  11. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/previews/resources.py +3 -0
  12. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/user/__init__.py +5 -0
  13. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/user/resources.py +49 -5
  14. {zou-0.19.56 → zou-0.19.57}/zou/app/models/organisation.py +5 -0
  15. {zou-0.19.56 → zou-0.19.57}/zou/app/models/project.py +3 -0
  16. {zou-0.19.56 → zou-0.19.57}/zou/app/models/subscription.py +2 -2
  17. {zou-0.19.56 → zou-0.19.57}/zou/app/models/task.py +4 -0
  18. {zou-0.19.56 → zou-0.19.57}/zou/app/services/assets_service.py +7 -4
  19. {zou-0.19.56 → zou-0.19.57}/zou/app/services/chats_service.py +1 -1
  20. {zou-0.19.56 → zou-0.19.57}/zou/app/services/emails_service.py +1 -1
  21. {zou-0.19.56 → zou-0.19.57}/zou/app/services/entities_service.py +3 -0
  22. {zou-0.19.56 → zou-0.19.57}/zou/app/services/names_service.py +2 -2
  23. {zou-0.19.56 → zou-0.19.57}/zou/app/services/news_service.py +1 -1
  24. {zou-0.19.56 → zou-0.19.57}/zou/app/services/preview_files_service.py +1 -1
  25. {zou-0.19.56 → zou-0.19.57}/zou/app/services/shots_service.py +6 -3
  26. {zou-0.19.56 → zou-0.19.57}/zou/app/services/user_service.py +55 -9
  27. zou-0.19.57/zou/migrations/versions/8e67c183bed7_add_preference_fields.py +71 -0
  28. {zou-0.19.56 → zou-0.19.57/zou.egg-info}/PKG-INFO +8 -8
  29. {zou-0.19.56 → zou-0.19.57}/zou.egg-info/SOURCES.txt +1 -0
  30. {zou-0.19.56 → zou-0.19.57}/zou.egg-info/requires.txt +7 -9
  31. zou-0.19.56/zou/__init__.py +0 -1
  32. {zou-0.19.56 → zou-0.19.57}/LICENSE +0 -0
  33. {zou-0.19.56 → zou-0.19.57}/README.rst +0 -0
  34. {zou-0.19.56 → zou-0.19.57}/pyproject.toml +0 -0
  35. {zou-0.19.56 → zou-0.19.57}/setup.py +0 -0
  36. {zou-0.19.56 → zou-0.19.57}/zou/app/__init__.py +0 -0
  37. {zou-0.19.56 → zou-0.19.57}/zou/app/api.py +0 -0
  38. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/__init__.py +0 -0
  39. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/assets/__init__.py +0 -0
  40. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/assets/resources.py +0 -0
  41. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/auth/__init__.py +0 -0
  42. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/auth/resources.py +0 -0
  43. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/breakdown/__init__.py +0 -0
  44. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/breakdown/resources.py +0 -0
  45. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/chats/__init__.py +0 -0
  46. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/comments/__init__.py +0 -0
  47. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/comments/resources.py +0 -0
  48. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/concepts/__init__.py +0 -0
  49. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/concepts/resources.py +0 -0
  50. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/__init__.py +0 -0
  51. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/asset_instance.py +0 -0
  52. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/attachment_file.py +0 -0
  53. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/base.py +0 -0
  54. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/chat.py +0 -0
  55. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/chat_message.py +0 -0
  56. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/comments.py +0 -0
  57. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/custom_action.py +0 -0
  58. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/department.py +0 -0
  59. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/entity.py +0 -0
  60. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/entity_link.py +0 -0
  61. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/event.py +0 -0
  62. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/file_status.py +0 -0
  63. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/metadata_descriptor.py +0 -0
  64. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/milestone.py +0 -0
  65. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/news.py +0 -0
  66. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/notification.py +0 -0
  67. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/organisation.py +0 -0
  68. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/output_file.py +0 -0
  69. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/output_type.py +0 -0
  70. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/person.py +0 -0
  71. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/playlist.py +0 -0
  72. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/preview_background_file.py +0 -0
  73. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/preview_file.py +0 -0
  74. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/project_status.py +0 -0
  75. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/search_filter.py +0 -0
  76. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/search_filter_group.py +0 -0
  77. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/software.py +0 -0
  78. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/status_automation.py +0 -0
  79. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/studio.py +0 -0
  80. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/subscription.py +0 -0
  81. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/task.py +0 -0
  82. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/task_status.py +0 -0
  83. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/task_type.py +0 -0
  84. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/time_spent.py +0 -0
  85. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/crud/working_file.py +0 -0
  86. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/edits/__init__.py +0 -0
  87. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/edits/resources.py +0 -0
  88. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/entities/__init__.py +0 -0
  89. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/entities/resources.py +0 -0
  90. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/events/__init__.py +0 -0
  91. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/events/resources.py +0 -0
  92. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/export/__init__.py +0 -0
  93. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/export/csv/__init__.py +0 -0
  94. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/export/csv/assets.py +0 -0
  95. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/export/csv/base.py +0 -0
  96. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/export/csv/casting.py +0 -0
  97. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/export/csv/edits.py +0 -0
  98. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/export/csv/persons.py +0 -0
  99. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/export/csv/projects.py +0 -0
  100. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/export/csv/shots.py +0 -0
  101. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/export/csv/task_types.py +0 -0
  102. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/export/csv/tasks.py +0 -0
  103. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/files/__init__.py +0 -0
  104. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/files/resources.py +0 -0
  105. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/index/__init__.py +0 -0
  106. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/index/resources.py +0 -0
  107. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/news/__init__.py +0 -0
  108. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/news/resources.py +0 -0
  109. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/persons/__init__.py +0 -0
  110. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/persons/resources.py +0 -0
  111. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/playlists/__init__.py +0 -0
  112. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/playlists/resources.py +0 -0
  113. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/previews/__init__.py +0 -0
  114. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/projects/__init__.py +0 -0
  115. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/projects/resources.py +0 -0
  116. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/search/__init__.py +0 -0
  117. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/search/resources.py +0 -0
  118. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/shots/__init__.py +0 -0
  119. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/shots/resources.py +0 -0
  120. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/__init__.py +0 -0
  121. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/csv/__init__.py +0 -0
  122. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/csv/assets.py +0 -0
  123. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/csv/base.py +0 -0
  124. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/csv/casting.py +0 -0
  125. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/csv/edits.py +0 -0
  126. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/csv/persons.py +0 -0
  127. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/csv/shots.py +0 -0
  128. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/csv/task_type_estimations.py +0 -0
  129. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/kitsu.py +0 -0
  130. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/otio.py +0 -0
  131. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/shotgun/__init__.py +0 -0
  132. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/shotgun/assets.py +0 -0
  133. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/shotgun/base.py +0 -0
  134. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/shotgun/episode.py +0 -0
  135. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/shotgun/exception.py +0 -0
  136. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/shotgun/import_errors.py +0 -0
  137. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/shotgun/notes.py +0 -0
  138. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/shotgun/person.py +0 -0
  139. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/shotgun/project.py +0 -0
  140. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/shotgun/scene.py +0 -0
  141. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/shotgun/sequence.py +0 -0
  142. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/shotgun/shot.py +0 -0
  143. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/shotgun/status.py +0 -0
  144. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/shotgun/steps.py +0 -0
  145. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/shotgun/tasks.py +0 -0
  146. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/shotgun/team.py +0 -0
  147. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/source/shotgun/versions.py +0 -0
  148. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/tasks/__init__.py +0 -0
  149. {zou-0.19.56 → zou-0.19.57}/zou/app/blueprints/tasks/resources.py +0 -0
  150. {zou-0.19.56 → zou-0.19.57}/zou/app/config.py +0 -0
  151. {zou-0.19.56 → zou-0.19.57}/zou/app/file_trees/default.json +0 -0
  152. {zou-0.19.56 → zou-0.19.57}/zou/app/file_trees/simple.json +0 -0
  153. {zou-0.19.56 → zou-0.19.57}/zou/app/indexer/__init__.py +0 -0
  154. {zou-0.19.56 → zou-0.19.57}/zou/app/indexer/indexing.py +0 -0
  155. {zou-0.19.56 → zou-0.19.57}/zou/app/mixin.py +0 -0
  156. {zou-0.19.56 → zou-0.19.57}/zou/app/models/__init__.py +0 -0
  157. {zou-0.19.56 → zou-0.19.57}/zou/app/models/asset_instance.py +0 -0
  158. {zou-0.19.56 → zou-0.19.57}/zou/app/models/attachment_file.py +0 -0
  159. {zou-0.19.56 → zou-0.19.57}/zou/app/models/base.py +0 -0
  160. {zou-0.19.56 → zou-0.19.57}/zou/app/models/build_job.py +0 -0
  161. {zou-0.19.56 → zou-0.19.57}/zou/app/models/chat.py +0 -0
  162. {zou-0.19.56 → zou-0.19.57}/zou/app/models/chat_message.py +0 -0
  163. {zou-0.19.56 → zou-0.19.57}/zou/app/models/comment.py +0 -0
  164. {zou-0.19.56 → zou-0.19.57}/zou/app/models/custom_action.py +0 -0
  165. {zou-0.19.56 → zou-0.19.57}/zou/app/models/data_import_error.py +0 -0
  166. {zou-0.19.56 → zou-0.19.57}/zou/app/models/day_off.py +0 -0
  167. {zou-0.19.56 → zou-0.19.57}/zou/app/models/department.py +0 -0
  168. {zou-0.19.56 → zou-0.19.57}/zou/app/models/desktop_login_log.py +0 -0
  169. {zou-0.19.56 → zou-0.19.57}/zou/app/models/entity.py +0 -0
  170. {zou-0.19.56 → zou-0.19.57}/zou/app/models/entity_type.py +0 -0
  171. {zou-0.19.56 → zou-0.19.57}/zou/app/models/event.py +0 -0
  172. {zou-0.19.56 → zou-0.19.57}/zou/app/models/file_status.py +0 -0
  173. {zou-0.19.56 → zou-0.19.57}/zou/app/models/login_log.py +0 -0
  174. {zou-0.19.56 → zou-0.19.57}/zou/app/models/metadata_descriptor.py +0 -0
  175. {zou-0.19.56 → zou-0.19.57}/zou/app/models/milestone.py +0 -0
  176. {zou-0.19.56 → zou-0.19.57}/zou/app/models/news.py +0 -0
  177. {zou-0.19.56 → zou-0.19.57}/zou/app/models/notification.py +0 -0
  178. {zou-0.19.56 → zou-0.19.57}/zou/app/models/output_file.py +0 -0
  179. {zou-0.19.56 → zou-0.19.57}/zou/app/models/output_type.py +0 -0
  180. {zou-0.19.56 → zou-0.19.57}/zou/app/models/person.py +0 -0
  181. {zou-0.19.56 → zou-0.19.57}/zou/app/models/playlist.py +0 -0
  182. {zou-0.19.56 → zou-0.19.57}/zou/app/models/preview_background_file.py +0 -0
  183. {zou-0.19.56 → zou-0.19.57}/zou/app/models/preview_file.py +0 -0
  184. {zou-0.19.56 → zou-0.19.57}/zou/app/models/project_status.py +0 -0
  185. {zou-0.19.56 → zou-0.19.57}/zou/app/models/schedule_item.py +0 -0
  186. {zou-0.19.56 → zou-0.19.57}/zou/app/models/search_filter.py +0 -0
  187. {zou-0.19.56 → zou-0.19.57}/zou/app/models/search_filter_group.py +0 -0
  188. {zou-0.19.56 → zou-0.19.57}/zou/app/models/serializer.py +0 -0
  189. {zou-0.19.56 → zou-0.19.57}/zou/app/models/software.py +0 -0
  190. {zou-0.19.56 → zou-0.19.57}/zou/app/models/status_automation.py +0 -0
  191. {zou-0.19.56 → zou-0.19.57}/zou/app/models/studio.py +0 -0
  192. {zou-0.19.56 → zou-0.19.57}/zou/app/models/task_status.py +0 -0
  193. {zou-0.19.56 → zou-0.19.57}/zou/app/models/task_type.py +0 -0
  194. {zou-0.19.56 → zou-0.19.57}/zou/app/models/time_spent.py +0 -0
  195. {zou-0.19.56 → zou-0.19.57}/zou/app/models/working_file.py +0 -0
  196. {zou-0.19.56 → zou-0.19.57}/zou/app/services/__init__.py +0 -0
  197. {zou-0.19.56 → zou-0.19.57}/zou/app/services/auth_service.py +0 -0
  198. {zou-0.19.56 → zou-0.19.57}/zou/app/services/backup_service.py +0 -0
  199. {zou-0.19.56 → zou-0.19.57}/zou/app/services/base_service.py +0 -0
  200. {zou-0.19.56 → zou-0.19.57}/zou/app/services/breakdown_service.py +0 -0
  201. {zou-0.19.56 → zou-0.19.57}/zou/app/services/comments_service.py +0 -0
  202. {zou-0.19.56 → zou-0.19.57}/zou/app/services/concepts_service.py +0 -0
  203. {zou-0.19.56 → zou-0.19.57}/zou/app/services/custom_actions_service.py +0 -0
  204. {zou-0.19.56 → zou-0.19.57}/zou/app/services/deletion_service.py +0 -0
  205. {zou-0.19.56 → zou-0.19.57}/zou/app/services/edits_service.py +0 -0
  206. {zou-0.19.56 → zou-0.19.57}/zou/app/services/events_service.py +0 -0
  207. {zou-0.19.56 → zou-0.19.57}/zou/app/services/exception.py +0 -0
  208. {zou-0.19.56 → zou-0.19.57}/zou/app/services/file_tree_service.py +0 -0
  209. {zou-0.19.56 → zou-0.19.57}/zou/app/services/files_service.py +0 -0
  210. {zou-0.19.56 → zou-0.19.57}/zou/app/services/index_service.py +0 -0
  211. {zou-0.19.56 → zou-0.19.57}/zou/app/services/notifications_service.py +0 -0
  212. {zou-0.19.56 → zou-0.19.57}/zou/app/services/persons_service.py +0 -0
  213. {zou-0.19.56 → zou-0.19.57}/zou/app/services/playlists_service.py +0 -0
  214. {zou-0.19.56 → zou-0.19.57}/zou/app/services/projects_service.py +0 -0
  215. {zou-0.19.56 → zou-0.19.57}/zou/app/services/scenes_service.py +0 -0
  216. {zou-0.19.56 → zou-0.19.57}/zou/app/services/schedule_service.py +0 -0
  217. {zou-0.19.56 → zou-0.19.57}/zou/app/services/stats_service.py +0 -0
  218. {zou-0.19.56 → zou-0.19.57}/zou/app/services/status_automations_service.py +0 -0
  219. {zou-0.19.56 → zou-0.19.57}/zou/app/services/sync_service.py +0 -0
  220. {zou-0.19.56 → zou-0.19.57}/zou/app/services/tasks_service.py +0 -0
  221. {zou-0.19.56 → zou-0.19.57}/zou/app/services/telemetry_services.py +0 -0
  222. {zou-0.19.56 → zou-0.19.57}/zou/app/services/time_spents_service.py +0 -0
  223. {zou-0.19.56 → zou-0.19.57}/zou/app/stores/__init__.py +0 -0
  224. {zou-0.19.56 → zou-0.19.57}/zou/app/stores/auth_tokens_store.py +0 -0
  225. {zou-0.19.56 → zou-0.19.57}/zou/app/stores/file_store.py +0 -0
  226. {zou-0.19.56 → zou-0.19.57}/zou/app/stores/publisher_store.py +0 -0
  227. {zou-0.19.56 → zou-0.19.57}/zou/app/stores/queue_store.py +0 -0
  228. {zou-0.19.56 → zou-0.19.57}/zou/app/swagger.py +0 -0
  229. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/__init__.py +0 -0
  230. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/api.py +0 -0
  231. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/auth.py +0 -0
  232. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/cache.py +0 -0
  233. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/chats.py +0 -0
  234. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/colors.py +0 -0
  235. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/commands.py +0 -0
  236. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/csv_utils.py +0 -0
  237. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/date_helpers.py +0 -0
  238. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/dbhelpers.py +0 -0
  239. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/emails.py +0 -0
  240. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/env.py +0 -0
  241. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/events.py +0 -0
  242. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/fido.py +0 -0
  243. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/fields.py +0 -0
  244. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/flask.py +0 -0
  245. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/fs.py +0 -0
  246. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/git.py +0 -0
  247. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/logs.py +0 -0
  248. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/monitoring.py +0 -0
  249. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/permissions.py +0 -0
  250. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/query.py +0 -0
  251. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/remote_job.py +0 -0
  252. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/saml.py +0 -0
  253. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/shell.py +0 -0
  254. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/string.py +0 -0
  255. {zou-0.19.56 → zou-0.19.57}/zou/app/utils/thumbnail.py +0 -0
  256. {zou-0.19.56 → zou-0.19.57}/zou/cli.py +0 -0
  257. {zou-0.19.56 → zou-0.19.57}/zou/debug.py +0 -0
  258. {zou-0.19.56 → zou-0.19.57}/zou/event_stream.py +0 -0
  259. {zou-0.19.56 → zou-0.19.57}/zou/job_settings.py +0 -0
  260. {zou-0.19.56 → zou-0.19.57}/zou/migrations/README +0 -0
  261. {zou-0.19.56 → zou-0.19.57}/zou/migrations/__init__.py +0 -0
  262. {zou-0.19.56 → zou-0.19.57}/zou/migrations/alembic.ini +0 -0
  263. {zou-0.19.56 → zou-0.19.57}/zou/migrations/env.py +0 -0
  264. {zou-0.19.56 → zou-0.19.57}/zou/migrations/script.py.mako +0 -0
  265. {zou-0.19.56 → zou-0.19.57}/zou/migrations/utils/__init__.py +0 -0
  266. {zou-0.19.56 → zou-0.19.57}/zou/migrations/utils/base.py +0 -0
  267. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/003be8a91001_add_start_and_end_dates_to_projects.py +0 -0
  268. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/0596674df51d_add_department_mentions_to_comments.py +0 -0
  269. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/05ac7e8caa21_remove_unique_constraint_for_taskstatus_.py +0 -0
  270. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/05b7dc79a416_add_archived_fields_to_main_tables.py +0 -0
  271. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/0cf5e0e035fa_drop_column_tasktype_for_shots.py +0 -0
  272. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/0ec3762a745d_add_attachment_table.py +0 -0
  273. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/0ef6416a507b_.py +0 -0
  274. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/10cf267d95c9_fix_schedule_item.py +0 -0
  275. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/16328eae4b5f_add_new_constraint_for_timespent.py +0 -0
  276. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/16df47d76c64_add_some_indexes.py +0 -0
  277. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/17ef8f7be758_disallow_null_choicetype.py +0 -0
  278. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/1bb55759146f_add_table_studio.py +0 -0
  279. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/1cb44194db49_add_file_size_field_to_preview_file.py +0 -0
  280. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/1e150c2cea4d_add_nb_entities_out.py +0 -0
  281. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/1e2d77a2f0c4_add_hd_by_default_column.py +0 -0
  282. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/1fab8c420678_add_attachments_to_message_chats.py +0 -0
  283. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/20dfeb36142b_add_projecttaskstatuslink_roles_for_.py +0 -0
  284. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/23122f290ca2_add_entity_chat_models.py +0 -0
  285. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/269d41bfb73f_add_entity_entity_links.py +0 -0
  286. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/29df910f04a4_create_unique_constraint_project_id_.py +0 -0
  287. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/29fe01a6c9eb_add_status_automation_field.py +0 -0
  288. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/2adc020885fa_.py +0 -0
  289. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/2baede80b111_add_entity_status_field.py +0 -0
  290. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/306266361f4f_.py +0 -0
  291. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/328fd44c6347_add_entity_created_by.py +0 -0
  292. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/32f134ff1201_add_is_shared_flag_to_filters.py +0 -0
  293. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/346250b5304c_add_position_to_preview_files.py +0 -0
  294. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/3476e147e632_add_acks_to_comments.py +0 -0
  295. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/389cfb9de776_.py +0 -0
  296. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/38baa9a23b3d_.py +0 -0
  297. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/398150912a3f_validation_status_preview.py +0 -0
  298. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/3b0d1321079e_.py +0 -0
  299. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/3d5c93bafb9d_.py +0 -0
  300. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/3e0538ddf80f_.py +0 -0
  301. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/3fee3bd10f9d_.py +0 -0
  302. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/4095103c7d01_add_is_clients_isolated_flag_to_projects.py +0 -0
  303. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/40dea9555940_.py +0 -0
  304. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/42ec83db6a01_change_person_preferred_two_factor_.py +0 -0
  305. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/43d0cf0ed5e7_.py +0 -0
  306. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/443d1e78a932_.py +0 -0
  307. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/45c2de366e66_.py +0 -0
  308. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/45dafbb3f4e1_for_person_contract_type_disallow_null.py +0 -0
  309. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/4715c2586036_add_last_preview_file_fields.py +0 -0
  310. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/4e3738cdc34c_.py +0 -0
  311. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/4f2398ebcd49_.py +0 -0
  312. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/523ee9647bee_.py +0 -0
  313. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/54ee0d1d60ba_add_build_job_model.py +0 -0
  314. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/556526e47daa_.py +0 -0
  315. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/57222395f2be_add_statusautomation_import_last_revision.py +0 -0
  316. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/5798d2c9020b_change_person_role_to_choicetype.py +0 -0
  317. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/590aa1ffe731_add_notifications_enabled_flag.py +0 -0
  318. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/59a7445a966c_add_entity_is_shared.py +0 -0
  319. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/5a291251823c_add_max_retake_parameter.py +0 -0
  320. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/5ab9d7a75887_.py +0 -0
  321. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/5b0fcbb94f24_.py +0 -0
  322. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/5b7fa3e51701_add_is_client_allowed_flag_to_task_.py +0 -0
  323. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/5b980f0dc365_add_comment_links.py +0 -0
  324. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/5b9fd9ddfe43_add_homepage_and_contract_fields.py +0 -0
  325. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/5c0498e264bc_add_slack_fields.py +0 -0
  326. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/5e2ce62632a6_add_workflow_to_project.py +0 -0
  327. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/680c64565f9d_for_searchfiltergroup_is_shared.py +0 -0
  328. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/693cc511d28d_add_taskstatus_priority.py +0 -0
  329. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/6aa446ee4072_add_is_for_all_flage_to_playlists.py +0 -0
  330. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/6bd3b102d61b_.py +0 -0
  331. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/6c597e842afa_add_task_type_field_to_playlists.py +0 -0
  332. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/6d1b2c60f58b_add_milestone_model.py +0 -0
  333. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/6d7fa5a8e9a5_add_timesheets_locked_field_to_org.py +0 -0
  334. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/6eeaff945706_add_data_field_on_entity_links.py +0 -0
  335. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/6f6049877105_.py +0 -0
  336. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/7417c8eb70d8_add_for_entity_field_to_playlists.py +0 -0
  337. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/772a5e43f05b_.py +0 -0
  338. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/7748d3d22925_add_columns_to_searchfilter_table_to_.py +0 -0
  339. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/77d6820f494f_add_reply_to_notif.py +0 -0
  340. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/7b1f765677d8_.py +0 -0
  341. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/7bc746997e8d_add_slack_token_field_to_organisation.py +0 -0
  342. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/7dc79d4ed7cd_.py +0 -0
  343. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/818f7bda2528_.py +0 -0
  344. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/82e7f7a95e84_add_project_id_to_events.py +0 -0
  345. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/82ee682204ab_add_is_generated_from_ldap_column_to_.py +0 -0
  346. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/8588f254d6b8_add_archived_fields.py +0 -0
  347. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/8739ae9fa28b_add_for_client_field.py +0 -0
  348. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/87efceb6745b_add_ready_for_to_entity.py +0 -0
  349. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/892b264937ec_.py +0 -0
  350. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/8a1b4a1b7f4a_add_totp_columns_for_person.py +0 -0
  351. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/8e4f39e321f4_add_day_off_table.py +0 -0
  352. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/8fbd40afbe5f_allow_to_set_float_values_for_.py +0 -0
  353. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/9010a64e5a2d_add_indices.py +0 -0
  354. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/9060dd4f6116_notification_uc.py +0 -0
  355. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/925771029620_.py +0 -0
  356. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/92b40d79ad3f_allow_message_attachments.py +0 -0
  357. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/92bdfe07e5f5_discord_integration.py +0 -0
  358. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/956659992419_add_columns_for_person_to_store_fido_.py +0 -0
  359. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/96c79d31e648_add_mail_otp_columns_for_person.py +0 -0
  360. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/96f58a4a2a58_person_partial_index_for_email_only_.py +0 -0
  361. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/971dbf5a0faf_add_short_name_for_asset_type_entity_.py +0 -0
  362. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/98c90621cf58_add_for_client_flag_to_playlist.py +0 -0
  363. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/99825b9cc778_.py +0 -0
  364. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/9a09467f9b2c_.py +0 -0
  365. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/9b85c14fa8a7_add_day_off_new_columns.py +0 -0
  366. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/9bd17364fc18_.py +0 -0
  367. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/9e5b3a9b0cee_add_new_column_metadatadescriptor_data_type_.py +0 -0
  368. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/9f8445f9b42c_add_man_days_fields.py +0 -0
  369. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/a23682ccc1f1_.py +0 -0
  370. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/a252a094e977_add_descriptions_for_entities_tasks_and_.py +0 -0
  371. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/a519c710877c_.py +0 -0
  372. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/a65bdadbae2f_.py +0 -0
  373. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/a66508788c53_add_nb_assets_ready.py +0 -0
  374. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/a6c25eed3ea1_add_login_failed_attemps_and_last_login_.py +0 -0
  375. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/a7c43f3fbc76_add_duration_column_to_the_preview_file.py +0 -0
  376. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/aa0a60033106_feedback_request.py +0 -0
  377. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/addbbefa7028_add_departments_link_to_metadata_.py +0 -0
  378. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/ae0127f2fc56_add_previewfile_width_and_previewfile_.py +0 -0
  379. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/af1790868e2c_.py +0 -0
  380. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/b45cb782bb9c_.py +0 -0
  381. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/b4dd0add5f79_.py +0 -0
  382. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/b8c0a0f9d054_drop_task_status_is_reviewable.py +0 -0
  383. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/b8ed0fb263f8_add_person_jti_and_jti_expiration_date.py +0 -0
  384. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/b97a71306fc8_add_is_casting_standby_column_to_entity.py +0 -0
  385. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/be56dc0fb760_for_is_shared_disallow_nullable.py +0 -0
  386. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/bf1347acdee2_.py +0 -0
  387. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/c49e41f1298b_add_previewbackground.py +0 -0
  388. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/c68c2a62cfac_add_mimetype_column_to_attachment.py +0 -0
  389. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/c726b98be194_.py +0 -0
  390. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/c81f3e83bdb5_.py +0 -0
  391. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/ca28796a2a62_add_is_done_field_to_the_task_model.py +0 -0
  392. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/cf3d365de164_add_entity_version_model.py +0 -0
  393. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/cf6cec6d6bf5_add_status_field_to_preview_file.py +0 -0
  394. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/d80267806131_task_status_new_column_is_default.py +0 -0
  395. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/d8dcd5196d57_add_casting_label.py +0 -0
  396. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/de8a3de227ef_.py +0 -0
  397. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/deeacd38d373_for_projecttaskstatuslink_set_default_.py +0 -0
  398. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/df1834485f57_.py +0 -0
  399. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/df9f8a147e80_change_file_size_to_big_integer.py +0 -0
  400. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/e1ef93f40d3d_.py +0 -0
  401. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/e29638428dfd_add_schedule_item_table.py +0 -0
  402. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/e3f6db74cc1e_.py +0 -0
  403. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/e839d6603c09_add_person_id_to_shot_history.py +0 -0
  404. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/ee2373fbe3a4_.py +0 -0
  405. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/f0567e8d0c62_.py +0 -0
  406. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/f0c6cbb61869_add_production_style_field.py +0 -0
  407. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/f344b867a911_for_description_of_entity_task_working_.py +0 -0
  408. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/f4ff5a73d283_add_person_ldap_uid.py +0 -0
  409. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/f5b113876a49_add_preferred_two_factor_authentication_.py +0 -0
  410. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/f5bdca075cdc_add_preview_download_flag_to_projects.py +0 -0
  411. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/f874ad5e898a_add_link_entity_type_task_type.py +0 -0
  412. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/f995b28fb749_.py +0 -0
  413. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/fb6b6f188497_.py +0 -0
  414. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/fb87feaaa094_add_missing_unique_constraints.py +0 -0
  415. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/fc322f908695_.py +0 -0
  416. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/fee7c696166e_.py +0 -0
  417. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/feffd3c5b806_introduce_concepts.py +0 -0
  418. {zou-0.19.56 → zou-0.19.57}/zou/migrations/versions/ffeed4956ab1_add_more_details_to_projects.py +0 -0
  419. {zou-0.19.56 → zou-0.19.57}/zou/remote/__init__.py +0 -0
  420. {zou-0.19.56 → zou-0.19.57}/zou/remote/config_payload.py +0 -0
  421. {zou-0.19.56 → zou-0.19.57}/zou/remote/normalize_movie.py +0 -0
  422. {zou-0.19.56 → zou-0.19.57}/zou/remote/playlist.py +0 -0
  423. {zou-0.19.56 → zou-0.19.57}/zou/utils/__init__.py +0 -0
  424. {zou-0.19.56 → zou-0.19.57}/zou/utils/movie.py +0 -0
  425. {zou-0.19.56 → zou-0.19.57}/zou.egg-info/dependency_links.txt +0 -0
  426. {zou-0.19.56 → zou-0.19.57}/zou.egg-info/entry_points.txt +0 -0
  427. {zou-0.19.56 → zou-0.19.57}/zou.egg-info/not-zip-safe +0 -0
  428. {zou-0.19.56 → zou-0.19.57}/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.56
3
+ Version: 0.19.57
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,11 +37,11 @@ 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.4.0
40
+ Requires-Dist: flask-socketio==5.4.1
41
41
  Requires-Dist: flask==3.0.3
42
42
  Requires-Dist: gazu==0.10.15
43
43
  Requires-Dist: gevent-websocket==0.10.1
44
- Requires-Dist: gevent==24.2.1
44
+ Requires-Dist: gevent==24.10.1
45
45
  Requires-Dist: gunicorn==23.0.0
46
46
  Requires-Dist: isoweek==1.3.3
47
47
  Requires-Dist: itsdangerous==2.2.0
@@ -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.1; python_version >= "3.10"
53
+ Requires-Dist: numpy==2.1.2; 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
@@ -64,7 +64,7 @@ Requires-Dist: python-nomad==2.0.1
64
64
  Requires-Dist: python-slugify==8.0.4
65
65
  Requires-Dist: python-socketio==5.11.4
66
66
  Requires-Dist: pytz==2024.2
67
- Requires-Dist: redis==5.1.0
67
+ Requires-Dist: redis==5.1.1
68
68
  Requires-Dist: requests==2.32.3
69
69
  Requires-Dist: rq==1.16.2
70
70
  Requires-Dist: slackclient==2.9.4
@@ -85,11 +85,11 @@ Requires-Dist: pytest==8.3.3; extra == "test"
85
85
  Provides-Extra: monitoring
86
86
  Requires-Dist: prometheus-flask-exporter==0.23.1; extra == "monitoring"
87
87
  Requires-Dist: pygelf==0.4.2; extra == "monitoring"
88
- Requires-Dist: sentry-sdk==2.14.0; extra == "monitoring"
88
+ Requires-Dist: sentry-sdk==2.16.0; extra == "monitoring"
89
89
  Provides-Extra: lint
90
90
  Requires-Dist: autoflake==2.3.1; extra == "lint"
91
- Requires-Dist: black==24.8.0; extra == "lint"
92
- Requires-Dist: pre-commit==3.8.0; python_version >= "3.9" and extra == "lint"
91
+ Requires-Dist: black==24.10.0; extra == "lint"
92
+ Requires-Dist: pre-commit==4.0.1; extra == "lint"
93
93
 
94
94
  .. figure:: https://zou.cg-wire.com/kitsu.png
95
95
  :alt: Kitsu Logo
@@ -43,11 +43,11 @@ 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.4.0
46
+ flask-socketio==5.4.1
47
47
  flask==3.0.3
48
48
  gazu==0.10.15
49
49
  gevent-websocket==0.10.1
50
- gevent==24.2.1
50
+ gevent==24.10.1
51
51
  gunicorn==23.0.0
52
52
  isoweek==1.3.3
53
53
  itsdangerous==2.2.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.1; python_version >= '3.10'
59
+ numpy==2.1.2; 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
@@ -70,7 +70,7 @@ install_requires =
70
70
  python-slugify==8.0.4
71
71
  python-socketio==5.11.4
72
72
  pytz==2024.2
73
- redis==5.1.0
73
+ redis==5.1.1
74
74
  requests==2.32.3
75
75
  rq==1.16.2
76
76
  slackclient==2.9.4
@@ -99,11 +99,11 @@ test =
99
99
  monitoring =
100
100
  prometheus-flask-exporter==0.23.1
101
101
  pygelf==0.4.2
102
- sentry-sdk==2.14.0
102
+ sentry-sdk==2.16.0
103
103
  lint =
104
104
  autoflake==2.3.1
105
- black==24.8.0
106
- pre-commit==3.8.0; python_version >= '3.9'
105
+ black==24.10.0
106
+ pre-commit==4.0.1
107
107
 
108
108
  [options.entry_points]
109
109
  console_scripts =
@@ -0,0 +1 @@
1
+ __version__ = "0.19.57"
@@ -116,7 +116,9 @@ 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 WrongParameterException("You are not a participant of this chat")
119
+ raise WrongParameterException(
120
+ "You are not a participant of this chat"
121
+ )
120
122
 
121
123
  return (
122
124
  chats_service.create_chat_message(
@@ -21,7 +21,9 @@ 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 WrongParameterException("Day off already exists for this period")
24
+ raise WrongParameterException(
25
+ "Day off already exists for this period"
26
+ )
25
27
  return data
26
28
 
27
29
  def post_creation(self, instance):
@@ -67,5 +69,7 @@ class DayOffResource(BaseModelResource):
67
69
  data.get("person_id", instance_dict["person_id"]),
68
70
  exclude_id=instance_dict["id"],
69
71
  ):
70
- raise WrongParameterException("Day off already exists for this period")
72
+ raise WrongParameterException(
73
+ "Day off already exists for this period"
74
+ )
71
75
  return data
@@ -7,7 +7,6 @@ from zou.app.services import entities_service, assets_service
7
7
  from zou.app.services.exception import WrongParameterException
8
8
 
9
9
 
10
-
11
10
  class EntityTypesResource(BaseModelsResource):
12
11
  def __init__(self):
13
12
  BaseModelsResource.__init__(self, EntityType)
@@ -32,11 +31,9 @@ class EntityTypesResource(BaseModelsResource):
32
31
  return instance.serialize(relations=True)
33
32
 
34
33
  def check_creation_integrity(self, data):
35
- entity_type = (
36
- EntityType.query
37
- .filter(EntityType.name.ilike(data.get("name", "")))
38
- .first()
39
- )
34
+ entity_type = EntityType.query.filter(
35
+ EntityType.name.ilike(data.get("name", ""))
36
+ ).first()
40
37
  if entity_type is not None:
41
38
  raise WrongParameterException(
42
39
  "Entity type with this name already exists"
@@ -71,7 +71,9 @@ class ProjectsResource(BaseModelsResource):
71
71
  or data["preview_background_file_id"]
72
72
  not in data["preview_background_files_ids"]
73
73
  ):
74
- raise WrongParameterException("Invalid preview_background_file_id")
74
+ raise WrongParameterException(
75
+ "Invalid preview_background_file_id"
76
+ )
75
77
  return data
76
78
 
77
79
  def post_creation(self, project):
@@ -131,7 +133,9 @@ class ProjectResource(BaseModelResource, ArgsMixin):
131
133
  data["preview_background_file_id"]
132
134
  not in preview_background_files_ids
133
135
  ):
134
- raise WrongParameterException("Invalid preview_background_file_id")
136
+ raise WrongParameterException(
137
+ "Invalid preview_background_file_id"
138
+ )
135
139
 
136
140
  return data
137
141
 
@@ -17,7 +17,9 @@ class ScheduleItemsResource(BaseModelsResource):
17
17
  object_id=data.get("object_id", None),
18
18
  )
19
19
  if schedule_item is not None:
20
- raise WrongParameterException("A similar schedule item already exists")
20
+ raise WrongParameterException(
21
+ "A similar schedule item already exists"
22
+ )
21
23
  return schedule_item
22
24
 
23
25
 
@@ -100,7 +100,7 @@ class PlaylistCsvExport(Resource):
100
100
 
101
101
  def build_row(self, shot):
102
102
  entity = entities_service.get_entity(shot["entity_id"])
103
- name, _ = names_service.get_full_entity_name(shot["entity_id"])
103
+ name, _, _ = names_service.get_full_entity_name(shot["entity_id"])
104
104
  preview_file = files_service.get_preview_file(shot["preview_file_id"])
105
105
  task = tasks_service.get_task(preview_file["task_id"])
106
106
  task_type = self.task_type_map[task["task_type_id"]]
@@ -72,7 +72,7 @@ class TimeSpentsCsvExport(BaseCsvExport):
72
72
  person_last_name,
73
73
  ) = time_spent_row
74
74
  if entity_type_name == "Shot":
75
- entity_name, _ = names_service.get_full_entity_name(entity_id)
75
+ entity_name, _, _ = names_service.get_full_entity_name(entity_id)
76
76
 
77
77
  date = ""
78
78
  if time_spent.date is not None:
@@ -65,6 +65,7 @@ ALLOWED_FILE_EXTENSION = [
65
65
  "glb",
66
66
  "gltf",
67
67
  "hip",
68
+ "kra",
68
69
  "ma",
69
70
  "mb",
70
71
  "mp3",
@@ -73,6 +74,8 @@ ALLOWED_FILE_EXTENSION = [
73
74
  "psd",
74
75
  "psb",
75
76
  "rar",
77
+ "sai",
78
+ "sai2",
76
79
  "sbbkp",
77
80
  "svg",
78
81
  "swf",
@@ -33,6 +33,7 @@ from zou.app.blueprints.user.resources import (
33
33
  FilterGroupResource,
34
34
  FilterGroupsResource,
35
35
  DesktopLoginLogsResource,
36
+ MarkAllNotificationsAsReadResource,
36
37
  NotificationsResource,
37
38
  NotificationResource,
38
39
  HasTaskSubscribedResource,
@@ -108,6 +109,10 @@ routes = [
108
109
  "/actions/user/sequences/<sequence_id>/task-types/<task_type_id>/unsubscribe",
109
110
  SequenceUnsubscribeResource,
110
111
  ),
112
+ (
113
+ "/actions/user/notifications/mark-all-as-read",
114
+ MarkAllNotificationsAsReadResource,
115
+ ),
111
116
  ]
112
117
 
113
118
  blueprint = Blueprint("user", "user")
@@ -1,4 +1,4 @@
1
- from flask import abort
1
+ from flask import abort, request
2
2
  from flask_restful import Resource
3
3
 
4
4
  from zou.app.mixin import ArgsMixin
@@ -593,7 +593,6 @@ class FilterResource(Resource, ArgsMixin):
593
593
  ("project_id", None, None),
594
594
  ]
595
595
  )
596
-
597
596
  data = self.clear_empty_fields(
598
597
  data, ignored_fields=["search_filter_group_id"]
599
598
  )
@@ -848,13 +847,22 @@ class NotificationsResource(Resource, ArgsMixin):
848
847
  task_status_id,
849
848
  notification_type,
850
849
  ) = self.get_arguments()
850
+
851
+ read = None
852
+ if request.args.get("read", None) is not None:
853
+ read = self.get_bool_parameter("read")
854
+ watching = None
855
+ if request.args.get("watching", None) is not None:
856
+ watching = self.get_bool_parameter("watching")
857
+ print("watching", watching)
851
858
  notifications = user_service.get_last_notifications(
852
859
  before=before,
853
860
  task_type_id=task_type_id,
854
861
  task_status_id=task_status_id,
855
862
  notification_type=notification_type,
863
+ read=read,
864
+ watching=watching,
856
865
  )
857
- user_service.mark_notifications_as_read()
858
866
  return notifications
859
867
 
860
868
  def get_arguments(self):
@@ -867,7 +875,7 @@ class NotificationsResource(Resource, ArgsMixin):
867
875
  )
868
876
 
869
877
 
870
- class NotificationResource(Resource):
878
+ class NotificationResource(Resource, ArgsMixin):
871
879
  """
872
880
  Return notification matching given id, only if it's a notification that
873
881
  belongs to current user.
@@ -894,6 +902,42 @@ class NotificationResource(Resource):
894
902
  """
895
903
  return user_service.get_notification(notification_id)
896
904
 
905
+ def put(self, notification_id):
906
+ """
907
+ Change notification read status.
908
+ ---
909
+ tags:
910
+ - User
911
+ parameters:
912
+ - in: path
913
+ name: notification_id
914
+ required: True
915
+ type: string
916
+ format: UUID
917
+ x-example: a24a6ea4-ce75-4665-a070-57453082c25
918
+ responses:
919
+ 200:
920
+ description: Notification
921
+ """
922
+ data = self.get_args([("read", None, False, bool)])
923
+ return user_service.update_notification(notification_id, data["read"])
924
+
925
+
926
+ class MarkAllNotificationsAsReadResource(Resource):
927
+
928
+ def post(self):
929
+ """
930
+ Mark all notifications as read for the current user.
931
+ ---
932
+ tags:
933
+ - User
934
+ responses:
935
+ 200:
936
+ description: All notifications marked as read
937
+ """
938
+ user_service.mark_notifications_as_read()
939
+ return {"success": True}
940
+
897
941
 
898
942
  class HasTaskSubscribedResource(Resource):
899
943
  """
@@ -905,7 +949,7 @@ class HasTaskSubscribedResource(Resource):
905
949
  Return true if current user has subscribed to given task.
906
950
  ---
907
951
  tags:
908
- - User
952
+ - User
909
953
  parameters:
910
954
  - in: path
911
955
  name: task_id
@@ -14,10 +14,13 @@ class Organisation(db.Model, BaseMixin, SerializerMixin):
14
14
  has_avatar = db.Column(db.Boolean(), default=False)
15
15
  use_original_file_name = db.Column(db.Boolean(), default=False)
16
16
  timesheets_locked = db.Column(db.Boolean(), default=False)
17
+ format_duration_in_hours = db.Column(db.Boolean(), default=False)
17
18
  hd_by_default = db.Column(db.Boolean(), default=False)
18
19
  chat_token_slack = db.Column(db.String(80), default="")
19
20
  chat_webhook_mattermost = db.Column(db.String(80), default="")
20
21
  chat_token_discord = db.Column(db.String(80), default="")
22
+ dark_theme_by_default = db.Column(db.Boolean(), default=False)
23
+ format_duration_in_hours = db.Column(db.Boolean(), default=False)
21
24
 
22
25
  def present(self):
23
26
  return fields.serialize_dict(
@@ -32,6 +35,8 @@ class Organisation(db.Model, BaseMixin, SerializerMixin):
32
35
  "hd_by_default": self.hd_by_default,
33
36
  "use_original_file_name": self.use_original_file_name,
34
37
  "timesheets_locked": self.timesheets_locked,
38
+ "dark_theme_by_default": self.dark_theme_by_default,
39
+ "format_duration_in_hours": self.format_duration_in_hours,
35
40
  "updated_at": self.updated_at,
36
41
  "created_at": self.created_at,
37
42
  }
@@ -142,6 +142,9 @@ class Project(db.Model, BaseMixin, SerializerMixin):
142
142
  is_preview_download_allowed = db.Column(db.Boolean(), default=False)
143
143
  is_set_preview_automated = db.Column(db.Boolean(), default=False)
144
144
  homepage = db.Column(db.String(80), default="assets")
145
+ is_publish_default_for_artists = db.Column(db.Boolean(), default=False)
146
+ hd_bitrate_compression = db.Column(db.Integer, default=28)
147
+ ld_bitrate_compression = db.Column(db.Integer, default=6)
145
148
 
146
149
  project_status_id = db.Column(
147
150
  UUIDType(binary=False), db.ForeignKey("project_status.id"), index=True
@@ -22,10 +22,10 @@ class Subscription(db.Model, BaseMixin, SerializerMixin):
22
22
 
23
23
  entity_id = db.Column(
24
24
  UUIDType(binary=False), db.ForeignKey("entity.id"), index=True
25
- )
25
+ ) # Deprecated
26
26
  task_type_id = db.Column(
27
27
  UUIDType(binary=False), db.ForeignKey("task_type.id"), index=True
28
- )
28
+ ) # Deprecated
29
29
 
30
30
  __table_args__ = (
31
31
  db.UniqueConstraint(
@@ -33,6 +33,7 @@ class Task(db.Model, BaseMixin, SerializerMixin):
33
33
  description = db.Column(db.Text())
34
34
 
35
35
  priority = db.Column(db.Integer, default=0)
36
+ difficulty = db.Column(db.Integer, default=3, nullable=False)
36
37
  duration = db.Column(db.Float, default=0)
37
38
  estimation = db.Column(db.Float, default=0)
38
39
  completion_rate = db.Column(db.Integer, default=0)
@@ -70,6 +71,9 @@ class Task(db.Model, BaseMixin, SerializerMixin):
70
71
  db.UniqueConstraint(
71
72
  "name", "project_id", "task_type_id", "entity_id", name="task_uc"
72
73
  ),
74
+ db.CheckConstraint(
75
+ "difficulty > 0 AND difficulty < 6", name="check_difficulty"
76
+ ),
73
77
  )
74
78
 
75
79
  def assignees_as_string(self):
@@ -104,8 +104,8 @@ def get_assets(criterions={}, is_admin=False):
104
104
 
105
105
  if "is_shared" in criterions:
106
106
  if not is_admin:
107
- query = (
108
- query.join(Project).filter(user_service.build_team_filter())
107
+ query = query.join(Project).filter(
108
+ user_service.build_team_filter()
109
109
  )
110
110
 
111
111
  if episode_id is not None:
@@ -127,7 +127,7 @@ def get_assets(criterions={}, is_admin=False):
127
127
  result += [a for a in query.all() if a.source_id != episode_id]
128
128
  else:
129
129
  result = query.all()
130
- return EntityType.serialize_list(result, obj_type="Asset")
130
+ return Entity.serialize_list(result, obj_type="Asset")
131
131
 
132
132
 
133
133
  def get_all_raw_assets():
@@ -202,6 +202,7 @@ def get_assets_and_tasks(criterions={}, page=1, with_episode_ids=False):
202
202
  Task.due_date,
203
203
  Task.done_date,
204
204
  Task.last_comment_date,
205
+ Task.difficulty,
205
206
  assignees_table.columns.person,
206
207
  ).order_by(EntityType.name, Entity.name)
207
208
 
@@ -281,6 +282,7 @@ def get_assets_and_tasks(criterions={}, page=1, with_episode_ids=False):
281
282
  task_due_date,
282
283
  task_done_date,
283
284
  task_last_comment_date,
285
+ task_difficulty,
284
286
  person_id,
285
287
  ) in query_result:
286
288
  if asset.source_id is None:
@@ -338,6 +340,7 @@ def get_assets_and_tasks(criterions={}, page=1, with_episode_ids=False):
338
340
  ),
339
341
  "retake_count": task_retake_count,
340
342
  "start_date": fields.serialize_value(task_start_date),
343
+ "difficulty": task_difficulty,
341
344
  "task_status_id": str(task_status_id),
342
345
  "task_type_id": str(task_type_id),
343
346
  "assignees": [],
@@ -722,7 +725,7 @@ def set_shared_assets(
722
725
  project_id=None,
723
726
  asset_type_id=None,
724
727
  asset_ids=None,
725
- with_events=False
728
+ with_events=False,
726
729
  ):
727
730
  """
728
731
  Set all assets of a project to is_shared=True or False.
@@ -213,7 +213,7 @@ def get_chats_for_person(person_id):
213
213
  result = []
214
214
  for chat_model, project_id, preview_file_id in chats:
215
215
  chat = chat_model.present()
216
- chat["entity_name"], _ = names_service.get_full_entity_name(
216
+ chat["entity_name"], _, _ = names_service.get_full_entity_name(
217
217
  chat["object_id"]
218
218
  )
219
219
  chat["project_id"] = project_id
@@ -296,7 +296,7 @@ def get_task_descriptors(person_id, task):
296
296
  project = projects_service.get_project(task["project_id"])
297
297
  task_type = tasks_service.get_task_type(task["task_type_id"])
298
298
  entity = entities_service.get_entity(task["entity_id"])
299
- (entity_name, episode_id) = names_service.get_full_entity_name(
299
+ entity_name, episode_id, _ = names_service.get_full_entity_name(
300
300
  entity["id"]
301
301
  )
302
302
 
@@ -242,6 +242,7 @@ def get_entities_and_tasks(criterions={}):
242
242
  Task.due_date,
243
243
  Task.done_date,
244
244
  Task.last_comment_date,
245
+ Task.difficulty,
245
246
  assignees_table.columns.person,
246
247
  )
247
248
  )
@@ -272,6 +273,7 @@ def get_entities_and_tasks(criterions={}):
272
273
  task_due_date,
273
274
  task_done_date,
274
275
  task_last_comment_date,
276
+ task_difficulty,
275
277
  person_id,
276
278
  ) in query.all():
277
279
  entity_id = str(entity.id)
@@ -315,6 +317,7 @@ def get_entities_and_tasks(criterions={}):
315
317
  "real_start_date": task_real_start_date,
316
318
  "retake_count": task_retake_count,
317
319
  "start_date": task_start_date,
320
+ "difficulty": task_difficulty,
318
321
  "task_status_id": str(task_status_id),
319
322
  "task_type_id": str(task_type_id),
320
323
  "assignees": [],
@@ -52,7 +52,7 @@ def get_full_entity_name(entity_id):
52
52
  asset_type = entities_service.get_entity_type(entity["entity_type_id"])
53
53
  episode_id = entity["source_id"]
54
54
  name = "%s / %s" % (asset_type["name"], entity["name"])
55
- return (name, episode_id)
55
+ return (name, episode_id, entity["preview_file_id"])
56
56
 
57
57
 
58
58
  def get_preview_file_name(preview_file_id):
@@ -66,7 +66,7 @@ def get_preview_file_name(preview_file_id):
66
66
  task = tasks_service.get_task(preview_file["task_id"])
67
67
  task_type = tasks_service.get_task_type(task["task_type_id"])
68
68
  project = projects_service.get_project(task["project_id"])
69
- (entity_name, _) = get_full_entity_name(task["entity_id"])
69
+ (entity_name, _, _) = get_full_entity_name(task["entity_id"])
70
70
 
71
71
  if (
72
72
  organisation["use_original_file_name"]
@@ -185,7 +185,7 @@ def get_last_news_for_project(
185
185
  preview_file_annotations,
186
186
  entity_preview_file_id,
187
187
  ) in news_list:
188
- (full_entity_name, episode_id) = names_service.get_full_entity_name(
188
+ full_entity_name, episode_id, _ = names_service.get_full_entity_name(
189
189
  task_entity_id
190
190
  )
191
191
 
@@ -561,7 +561,7 @@ def get_running_preview_files():
561
561
  result = preview_file.serialize()
562
562
  result["project_id"] = fields.serialize_value(project_id)
563
563
  result["task_type_id"] = fields.serialize_value(task_type_id)
564
- (result["full_entity_name"], _) = names_service.get_full_entity_name(
564
+ result["full_entity_name"], _, _ = names_service.get_full_entity_name(
565
565
  entity_id
566
566
  )
567
567
  results.append(result)
@@ -254,6 +254,7 @@ def get_shots_and_tasks(criterions={}):
254
254
  Task.done_date,
255
255
  Task.last_comment_date,
256
256
  Task.nb_assets_ready,
257
+ Task.difficulty,
257
258
  assignees_table.columns.person,
258
259
  Project.id,
259
260
  Project.name,
@@ -304,6 +305,7 @@ def get_shots_and_tasks(criterions={}):
304
305
  task_done_date,
305
306
  task_last_comment_date,
306
307
  task_nb_assets_ready,
308
+ task_difficulty,
307
309
  person_id,
308
310
  project_id,
309
311
  project_name,
@@ -367,6 +369,7 @@ def get_shots_and_tasks(criterions={}):
367
369
  "real_start_date": task_real_start_date,
368
370
  "retake_count": task_retake_count,
369
371
  "start_date": task_start_date,
372
+ "difficulty": task_difficulty,
370
373
  "task_status_id": task_status_id,
371
374
  "task_type_id": task_type_id,
372
375
  "assignees": [],
@@ -1478,7 +1481,7 @@ def get_weighted_quota_shots_between(
1478
1481
  for entity, task_duration, duration in query_shots:
1479
1482
  shot = entity.serialize()
1480
1483
  if shot["id"] not in already_listed:
1481
- full_name, _ = names_service.get_full_entity_name(shot["id"])
1484
+ full_name, _, _ = names_service.get_full_entity_name(shot["id"])
1482
1485
  shot["full_name"] = full_name
1483
1486
  shot["weight"] = round(duration / task_duration, 2) or 0
1484
1487
  shots.append(shot)
@@ -1525,7 +1528,7 @@ def get_weighted_quota_shots_between(
1525
1528
  business_days = (
1526
1529
  date_helpers.get_business_days(task_start, task_end) + 1
1527
1530
  )
1528
- full_name, _ = names_service.get_full_entity_name(shot["id"])
1531
+ full_name, _, _ = names_service.get_full_entity_name(shot["id"])
1529
1532
  shot["full_name"] = full_name
1530
1533
  multiplicator = 1
1531
1534
  if task_start >= start and task_end <= end:
@@ -1583,7 +1586,7 @@ def get_raw_quota_shots_between(
1583
1586
 
1584
1587
  for entity in query_shots:
1585
1588
  shot = entity.serialize()
1586
- full_name, _ = names_service.get_full_entity_name(shot["id"])
1589
+ full_name, _, _ = names_service.get_full_entity_name(shot["id"])
1587
1590
  shot["full_name"] = full_name
1588
1591
  shot["weight"] = 1
1589
1592
  shots.append(shot)