zou 0.20.11__tar.gz → 0.20.13__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 (432) hide show
  1. {zou-0.20.11/zou.egg-info → zou-0.20.13}/PKG-INFO +8 -8
  2. {zou-0.20.11 → zou-0.20.13}/setup.cfg +7 -7
  3. zou-0.20.13/zou/__init__.py +1 -0
  4. {zou-0.20.11 → zou-0.20.13}/zou/app/__init__.py +4 -0
  5. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/assets/resources.py +1 -1
  6. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/preview_file.py +3 -1
  7. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/index/resources.py +1 -1
  8. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/projects/resources.py +9 -0
  9. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/csv/task_type_estimations.py +3 -0
  10. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/tasks/resources.py +4 -2
  11. {zou-0.20.11 → zou-0.20.13}/zou/app/config.py +1 -1
  12. {zou-0.20.11 → zou-0.20.13}/zou/app/indexer/indexing.py +29 -18
  13. {zou-0.20.11 → zou-0.20.13}/zou/app/models/entity_type.py +21 -10
  14. {zou-0.20.11 → zou-0.20.13}/zou/app/models/metadata_descriptor.py +24 -10
  15. {zou-0.20.11 → zou-0.20.13}/zou/app/models/person.py +10 -0
  16. {zou-0.20.11 → zou-0.20.13}/zou/app/services/comments_service.py +15 -14
  17. {zou-0.20.11 → zou-0.20.13}/zou/app/services/index_service.py +19 -8
  18. {zou-0.20.11 → zou-0.20.13}/zou/app/services/tasks_service.py +11 -19
  19. {zou-0.20.11 → zou-0.20.13}/zou/app/services/user_service.py +1 -1
  20. {zou-0.20.11 → zou-0.20.13}/zou/cli.py +0 -8
  21. zou-0.20.13/zou/migrations/versions/20a8ad264659_tasktypeassettypelink_.py +132 -0
  22. zou-0.20.13/zou/migrations/versions/539a3a00c417_for_departmentlink_index_person_id_.py +50 -0
  23. {zou-0.20.11 → zou-0.20.13/zou.egg-info}/PKG-INFO +8 -8
  24. {zou-0.20.11 → zou-0.20.13}/zou.egg-info/SOURCES.txt +2 -0
  25. {zou-0.20.11 → zou-0.20.13}/zou.egg-info/requires.txt +7 -7
  26. zou-0.20.11/zou/__init__.py +0 -1
  27. {zou-0.20.11 → zou-0.20.13}/LICENSE +0 -0
  28. {zou-0.20.11 → zou-0.20.13}/README.rst +0 -0
  29. {zou-0.20.11 → zou-0.20.13}/pyproject.toml +0 -0
  30. {zou-0.20.11 → zou-0.20.13}/setup.py +0 -0
  31. {zou-0.20.11 → zou-0.20.13}/zou/app/api.py +0 -0
  32. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/__init__.py +0 -0
  33. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/assets/__init__.py +0 -0
  34. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/auth/__init__.py +0 -0
  35. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/auth/resources.py +0 -0
  36. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/breakdown/__init__.py +0 -0
  37. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/breakdown/resources.py +0 -0
  38. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/chats/__init__.py +0 -0
  39. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/chats/resources.py +0 -0
  40. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/comments/__init__.py +0 -0
  41. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/comments/resources.py +0 -0
  42. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/concepts/__init__.py +0 -0
  43. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/concepts/resources.py +0 -0
  44. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/__init__.py +0 -0
  45. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/asset_instance.py +0 -0
  46. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/attachment_file.py +0 -0
  47. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/base.py +0 -0
  48. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/chat.py +0 -0
  49. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/chat_message.py +0 -0
  50. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/comments.py +0 -0
  51. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/custom_action.py +0 -0
  52. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/day_off.py +0 -0
  53. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/department.py +0 -0
  54. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/entity.py +0 -0
  55. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/entity_link.py +0 -0
  56. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/entity_type.py +0 -0
  57. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/event.py +0 -0
  58. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/file_status.py +0 -0
  59. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/metadata_descriptor.py +0 -0
  60. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/milestone.py +0 -0
  61. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/news.py +0 -0
  62. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/notification.py +0 -0
  63. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/organisation.py +0 -0
  64. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/output_file.py +0 -0
  65. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/output_type.py +0 -0
  66. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/person.py +0 -0
  67. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/playlist.py +0 -0
  68. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/preview_background_file.py +0 -0
  69. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/project.py +0 -0
  70. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/project_status.py +0 -0
  71. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/schedule_item.py +0 -0
  72. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/search_filter.py +0 -0
  73. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/search_filter_group.py +0 -0
  74. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/software.py +0 -0
  75. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/status_automation.py +0 -0
  76. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/studio.py +0 -0
  77. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/subscription.py +0 -0
  78. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/task.py +0 -0
  79. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/task_status.py +0 -0
  80. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/task_type.py +0 -0
  81. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/time_spent.py +0 -0
  82. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/crud/working_file.py +0 -0
  83. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/edits/__init__.py +0 -0
  84. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/edits/resources.py +0 -0
  85. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/entities/__init__.py +0 -0
  86. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/entities/resources.py +0 -0
  87. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/events/__init__.py +0 -0
  88. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/events/resources.py +0 -0
  89. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/export/__init__.py +0 -0
  90. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/export/csv/__init__.py +0 -0
  91. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/export/csv/assets.py +0 -0
  92. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/export/csv/base.py +0 -0
  93. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/export/csv/casting.py +0 -0
  94. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/export/csv/edits.py +0 -0
  95. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/export/csv/persons.py +0 -0
  96. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/export/csv/playlists.py +0 -0
  97. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/export/csv/projects.py +0 -0
  98. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/export/csv/shots.py +0 -0
  99. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/export/csv/task_types.py +0 -0
  100. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/export/csv/tasks.py +0 -0
  101. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/export/csv/time_spents.py +0 -0
  102. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/files/__init__.py +0 -0
  103. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/files/resources.py +0 -0
  104. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/index/__init__.py +0 -0
  105. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/news/__init__.py +0 -0
  106. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/news/resources.py +0 -0
  107. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/persons/__init__.py +0 -0
  108. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/persons/resources.py +0 -0
  109. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/playlists/__init__.py +0 -0
  110. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/playlists/resources.py +0 -0
  111. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/previews/__init__.py +0 -0
  112. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/previews/resources.py +0 -0
  113. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/projects/__init__.py +0 -0
  114. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/search/__init__.py +0 -0
  115. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/search/resources.py +0 -0
  116. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/shots/__init__.py +0 -0
  117. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/shots/resources.py +0 -0
  118. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/__init__.py +0 -0
  119. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/csv/__init__.py +0 -0
  120. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/csv/assets.py +0 -0
  121. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/csv/base.py +0 -0
  122. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/csv/casting.py +0 -0
  123. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/csv/edits.py +0 -0
  124. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/csv/persons.py +0 -0
  125. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/csv/shots.py +0 -0
  126. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/kitsu.py +0 -0
  127. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/otio.py +0 -0
  128. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/shotgun/__init__.py +0 -0
  129. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/shotgun/assets.py +0 -0
  130. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/shotgun/base.py +0 -0
  131. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/shotgun/episode.py +0 -0
  132. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/shotgun/exception.py +0 -0
  133. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/shotgun/import_errors.py +0 -0
  134. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/shotgun/notes.py +0 -0
  135. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/shotgun/person.py +0 -0
  136. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/shotgun/project.py +0 -0
  137. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/shotgun/scene.py +0 -0
  138. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/shotgun/sequence.py +0 -0
  139. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/shotgun/shot.py +0 -0
  140. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/shotgun/status.py +0 -0
  141. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/shotgun/steps.py +0 -0
  142. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/shotgun/tasks.py +0 -0
  143. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/shotgun/team.py +0 -0
  144. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/source/shotgun/versions.py +0 -0
  145. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/tasks/__init__.py +0 -0
  146. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/user/__init__.py +0 -0
  147. {zou-0.20.11 → zou-0.20.13}/zou/app/blueprints/user/resources.py +0 -0
  148. {zou-0.20.11 → zou-0.20.13}/zou/app/file_trees/default.json +0 -0
  149. {zou-0.20.11 → zou-0.20.13}/zou/app/file_trees/simple.json +0 -0
  150. {zou-0.20.11 → zou-0.20.13}/zou/app/indexer/__init__.py +0 -0
  151. {zou-0.20.11 → zou-0.20.13}/zou/app/mixin.py +0 -0
  152. {zou-0.20.11 → zou-0.20.13}/zou/app/models/__init__.py +0 -0
  153. {zou-0.20.11 → zou-0.20.13}/zou/app/models/asset_instance.py +0 -0
  154. {zou-0.20.11 → zou-0.20.13}/zou/app/models/attachment_file.py +0 -0
  155. {zou-0.20.11 → zou-0.20.13}/zou/app/models/base.py +0 -0
  156. {zou-0.20.11 → zou-0.20.13}/zou/app/models/build_job.py +0 -0
  157. {zou-0.20.11 → zou-0.20.13}/zou/app/models/chat.py +0 -0
  158. {zou-0.20.11 → zou-0.20.13}/zou/app/models/chat_message.py +0 -0
  159. {zou-0.20.11 → zou-0.20.13}/zou/app/models/comment.py +0 -0
  160. {zou-0.20.11 → zou-0.20.13}/zou/app/models/custom_action.py +0 -0
  161. {zou-0.20.11 → zou-0.20.13}/zou/app/models/data_import_error.py +0 -0
  162. {zou-0.20.11 → zou-0.20.13}/zou/app/models/day_off.py +0 -0
  163. {zou-0.20.11 → zou-0.20.13}/zou/app/models/department.py +0 -0
  164. {zou-0.20.11 → zou-0.20.13}/zou/app/models/desktop_login_log.py +0 -0
  165. {zou-0.20.11 → zou-0.20.13}/zou/app/models/entity.py +0 -0
  166. {zou-0.20.11 → zou-0.20.13}/zou/app/models/event.py +0 -0
  167. {zou-0.20.11 → zou-0.20.13}/zou/app/models/file_status.py +0 -0
  168. {zou-0.20.11 → zou-0.20.13}/zou/app/models/login_log.py +0 -0
  169. {zou-0.20.11 → zou-0.20.13}/zou/app/models/milestone.py +0 -0
  170. {zou-0.20.11 → zou-0.20.13}/zou/app/models/news.py +0 -0
  171. {zou-0.20.11 → zou-0.20.13}/zou/app/models/notification.py +0 -0
  172. {zou-0.20.11 → zou-0.20.13}/zou/app/models/organisation.py +0 -0
  173. {zou-0.20.11 → zou-0.20.13}/zou/app/models/output_file.py +0 -0
  174. {zou-0.20.11 → zou-0.20.13}/zou/app/models/output_type.py +0 -0
  175. {zou-0.20.11 → zou-0.20.13}/zou/app/models/playlist.py +0 -0
  176. {zou-0.20.11 → zou-0.20.13}/zou/app/models/preview_background_file.py +0 -0
  177. {zou-0.20.11 → zou-0.20.13}/zou/app/models/preview_file.py +0 -0
  178. {zou-0.20.11 → zou-0.20.13}/zou/app/models/project.py +0 -0
  179. {zou-0.20.11 → zou-0.20.13}/zou/app/models/project_status.py +0 -0
  180. {zou-0.20.11 → zou-0.20.13}/zou/app/models/schedule_item.py +0 -0
  181. {zou-0.20.11 → zou-0.20.13}/zou/app/models/search_filter.py +0 -0
  182. {zou-0.20.11 → zou-0.20.13}/zou/app/models/search_filter_group.py +0 -0
  183. {zou-0.20.11 → zou-0.20.13}/zou/app/models/serializer.py +0 -0
  184. {zou-0.20.11 → zou-0.20.13}/zou/app/models/software.py +0 -0
  185. {zou-0.20.11 → zou-0.20.13}/zou/app/models/status_automation.py +0 -0
  186. {zou-0.20.11 → zou-0.20.13}/zou/app/models/studio.py +0 -0
  187. {zou-0.20.11 → zou-0.20.13}/zou/app/models/subscription.py +0 -0
  188. {zou-0.20.11 → zou-0.20.13}/zou/app/models/task.py +0 -0
  189. {zou-0.20.11 → zou-0.20.13}/zou/app/models/task_status.py +0 -0
  190. {zou-0.20.11 → zou-0.20.13}/zou/app/models/task_type.py +0 -0
  191. {zou-0.20.11 → zou-0.20.13}/zou/app/models/time_spent.py +0 -0
  192. {zou-0.20.11 → zou-0.20.13}/zou/app/models/working_file.py +0 -0
  193. {zou-0.20.11 → zou-0.20.13}/zou/app/services/__init__.py +0 -0
  194. {zou-0.20.11 → zou-0.20.13}/zou/app/services/assets_service.py +0 -0
  195. {zou-0.20.11 → zou-0.20.13}/zou/app/services/auth_service.py +0 -0
  196. {zou-0.20.11 → zou-0.20.13}/zou/app/services/backup_service.py +0 -0
  197. {zou-0.20.11 → zou-0.20.13}/zou/app/services/base_service.py +0 -0
  198. {zou-0.20.11 → zou-0.20.13}/zou/app/services/breakdown_service.py +0 -0
  199. {zou-0.20.11 → zou-0.20.13}/zou/app/services/chats_service.py +0 -0
  200. {zou-0.20.11 → zou-0.20.13}/zou/app/services/concepts_service.py +0 -0
  201. {zou-0.20.11 → zou-0.20.13}/zou/app/services/custom_actions_service.py +0 -0
  202. {zou-0.20.11 → zou-0.20.13}/zou/app/services/deletion_service.py +0 -0
  203. {zou-0.20.11 → zou-0.20.13}/zou/app/services/edits_service.py +0 -0
  204. {zou-0.20.11 → zou-0.20.13}/zou/app/services/emails_service.py +0 -0
  205. {zou-0.20.11 → zou-0.20.13}/zou/app/services/entities_service.py +0 -0
  206. {zou-0.20.11 → zou-0.20.13}/zou/app/services/events_service.py +0 -0
  207. {zou-0.20.11 → zou-0.20.13}/zou/app/services/exception.py +0 -0
  208. {zou-0.20.11 → zou-0.20.13}/zou/app/services/file_tree_service.py +0 -0
  209. {zou-0.20.11 → zou-0.20.13}/zou/app/services/files_service.py +0 -0
  210. {zou-0.20.11 → zou-0.20.13}/zou/app/services/names_service.py +0 -0
  211. {zou-0.20.11 → zou-0.20.13}/zou/app/services/news_service.py +0 -0
  212. {zou-0.20.11 → zou-0.20.13}/zou/app/services/notifications_service.py +0 -0
  213. {zou-0.20.11 → zou-0.20.13}/zou/app/services/persons_service.py +0 -0
  214. {zou-0.20.11 → zou-0.20.13}/zou/app/services/playlists_service.py +0 -0
  215. {zou-0.20.11 → zou-0.20.13}/zou/app/services/preview_files_service.py +0 -0
  216. {zou-0.20.11 → zou-0.20.13}/zou/app/services/projects_service.py +0 -0
  217. {zou-0.20.11 → zou-0.20.13}/zou/app/services/scenes_service.py +0 -0
  218. {zou-0.20.11 → zou-0.20.13}/zou/app/services/schedule_service.py +0 -0
  219. {zou-0.20.11 → zou-0.20.13}/zou/app/services/shots_service.py +0 -0
  220. {zou-0.20.11 → zou-0.20.13}/zou/app/services/stats_service.py +0 -0
  221. {zou-0.20.11 → zou-0.20.13}/zou/app/services/status_automations_service.py +0 -0
  222. {zou-0.20.11 → zou-0.20.13}/zou/app/services/sync_service.py +0 -0
  223. {zou-0.20.11 → zou-0.20.13}/zou/app/services/telemetry_services.py +0 -0
  224. {zou-0.20.11 → zou-0.20.13}/zou/app/services/time_spents_service.py +0 -0
  225. {zou-0.20.11 → zou-0.20.13}/zou/app/stores/__init__.py +0 -0
  226. {zou-0.20.11 → zou-0.20.13}/zou/app/stores/auth_tokens_store.py +0 -0
  227. {zou-0.20.11 → zou-0.20.13}/zou/app/stores/file_store.py +0 -0
  228. {zou-0.20.11 → zou-0.20.13}/zou/app/stores/publisher_store.py +0 -0
  229. {zou-0.20.11 → zou-0.20.13}/zou/app/stores/queue_store.py +0 -0
  230. {zou-0.20.11 → zou-0.20.13}/zou/app/swagger.py +0 -0
  231. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/__init__.py +0 -0
  232. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/api.py +0 -0
  233. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/auth.py +0 -0
  234. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/cache.py +0 -0
  235. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/chats.py +0 -0
  236. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/colors.py +0 -0
  237. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/commands.py +0 -0
  238. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/csv_utils.py +0 -0
  239. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/date_helpers.py +0 -0
  240. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/dbhelpers.py +0 -0
  241. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/emails.py +0 -0
  242. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/env.py +0 -0
  243. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/events.py +0 -0
  244. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/fido.py +0 -0
  245. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/fields.py +0 -0
  246. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/flask.py +0 -0
  247. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/fs.py +0 -0
  248. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/git.py +0 -0
  249. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/logs.py +0 -0
  250. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/monitoring.py +0 -0
  251. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/permissions.py +0 -0
  252. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/query.py +0 -0
  253. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/redis.py +0 -0
  254. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/remote_job.py +0 -0
  255. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/saml.py +0 -0
  256. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/shell.py +0 -0
  257. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/string.py +0 -0
  258. {zou-0.20.11 → zou-0.20.13}/zou/app/utils/thumbnail.py +0 -0
  259. {zou-0.20.11 → zou-0.20.13}/zou/debug.py +0 -0
  260. {zou-0.20.11 → zou-0.20.13}/zou/event_stream.py +0 -0
  261. {zou-0.20.11 → zou-0.20.13}/zou/job_settings.py +0 -0
  262. {zou-0.20.11 → zou-0.20.13}/zou/migrations/README +0 -0
  263. {zou-0.20.11 → zou-0.20.13}/zou/migrations/__init__.py +0 -0
  264. {zou-0.20.11 → zou-0.20.13}/zou/migrations/alembic.ini +0 -0
  265. {zou-0.20.11 → zou-0.20.13}/zou/migrations/env.py +0 -0
  266. {zou-0.20.11 → zou-0.20.13}/zou/migrations/script.py.mako +0 -0
  267. {zou-0.20.11 → zou-0.20.13}/zou/migrations/utils/__init__.py +0 -0
  268. {zou-0.20.11 → zou-0.20.13}/zou/migrations/utils/base.py +0 -0
  269. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/003be8a91001_add_start_and_end_dates_to_projects.py +0 -0
  270. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/0596674df51d_add_department_mentions_to_comments.py +0 -0
  271. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/05ac7e8caa21_remove_unique_constraint_for_taskstatus_.py +0 -0
  272. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/05b7dc79a416_add_archived_fields_to_main_tables.py +0 -0
  273. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/0cf5e0e035fa_drop_column_tasktype_for_shots.py +0 -0
  274. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/0ec3762a745d_add_attachment_table.py +0 -0
  275. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/0ef6416a507b_.py +0 -0
  276. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/10cf267d95c9_fix_schedule_item.py +0 -0
  277. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/16328eae4b5f_add_new_constraint_for_timespent.py +0 -0
  278. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/16df47d76c64_add_some_indexes.py +0 -0
  279. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/17ef8f7be758_disallow_null_choicetype.py +0 -0
  280. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/1bb55759146f_add_table_studio.py +0 -0
  281. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/1cb44194db49_add_file_size_field_to_preview_file.py +0 -0
  282. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/1e150c2cea4d_add_nb_entities_out.py +0 -0
  283. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/1e2d77a2f0c4_add_hd_by_default_column.py +0 -0
  284. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/1fab8c420678_add_attachments_to_message_chats.py +0 -0
  285. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/20dfeb36142b_add_projecttaskstatuslink_roles_for_.py +0 -0
  286. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/23122f290ca2_add_entity_chat_models.py +0 -0
  287. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/269d41bfb73f_add_entity_entity_links.py +0 -0
  288. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/29df910f04a4_create_unique_constraint_project_id_.py +0 -0
  289. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/29fe01a6c9eb_add_status_automation_field.py +0 -0
  290. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/2adc020885fa_.py +0 -0
  291. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/2baede80b111_add_entity_status_field.py +0 -0
  292. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/306266361f4f_.py +0 -0
  293. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/328fd44c6347_add_entity_created_by.py +0 -0
  294. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/32f134ff1201_add_is_shared_flag_to_filters.py +0 -0
  295. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/346250b5304c_add_position_to_preview_files.py +0 -0
  296. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/3476e147e632_add_acks_to_comments.py +0 -0
  297. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/389cfb9de776_.py +0 -0
  298. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/38baa9a23b3d_.py +0 -0
  299. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/398150912a3f_validation_status_preview.py +0 -0
  300. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/3b0d1321079e_.py +0 -0
  301. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/3d5c93bafb9d_.py +0 -0
  302. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/3e0538ddf80f_.py +0 -0
  303. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/3fee3bd10f9d_.py +0 -0
  304. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/4095103c7d01_add_is_clients_isolated_flag_to_projects.py +0 -0
  305. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/40dea9555940_.py +0 -0
  306. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/42ec83db6a01_change_person_preferred_two_factor_.py +0 -0
  307. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/43d0cf0ed5e7_.py +0 -0
  308. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/443d1e78a932_.py +0 -0
  309. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/45c2de366e66_.py +0 -0
  310. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/45dafbb3f4e1_for_person_contract_type_disallow_null.py +0 -0
  311. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/4715c2586036_add_last_preview_file_fields.py +0 -0
  312. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/4e3738cdc34c_.py +0 -0
  313. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/4f2398ebcd49_.py +0 -0
  314. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/523ee9647bee_.py +0 -0
  315. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/54ee0d1d60ba_add_build_job_model.py +0 -0
  316. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/556526e47daa_.py +0 -0
  317. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/57222395f2be_add_statusautomation_import_last_revision.py +0 -0
  318. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/5798d2c9020b_change_person_role_to_choicetype.py +0 -0
  319. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/590aa1ffe731_add_notifications_enabled_flag.py +0 -0
  320. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/59a7445a966c_add_entity_is_shared.py +0 -0
  321. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/5a291251823c_add_max_retake_parameter.py +0 -0
  322. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/5ab9d7a75887_.py +0 -0
  323. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/5b0fcbb94f24_.py +0 -0
  324. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/5b7fa3e51701_add_is_client_allowed_flag_to_task_.py +0 -0
  325. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/5b980f0dc365_add_comment_links.py +0 -0
  326. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/5b9fd9ddfe43_add_homepage_and_contract_fields.py +0 -0
  327. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/5c0498e264bc_add_slack_fields.py +0 -0
  328. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/5e2ce62632a6_add_workflow_to_project.py +0 -0
  329. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/680c64565f9d_for_searchfiltergroup_is_shared.py +0 -0
  330. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/693cc511d28d_add_taskstatus_priority.py +0 -0
  331. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/6aa446ee4072_add_is_for_all_flage_to_playlists.py +0 -0
  332. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/6bd3b102d61b_.py +0 -0
  333. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/6c597e842afa_add_task_type_field_to_playlists.py +0 -0
  334. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/6d1b2c60f58b_add_milestone_model.py +0 -0
  335. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/6d7fa5a8e9a5_add_timesheets_locked_field_to_org.py +0 -0
  336. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/6eeaff945706_add_data_field_on_entity_links.py +0 -0
  337. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/6f6049877105_.py +0 -0
  338. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/7417c8eb70d8_add_for_entity_field_to_playlists.py +0 -0
  339. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/772a5e43f05b_.py +0 -0
  340. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/7748d3d22925_add_columns_to_searchfilter_table_to_.py +0 -0
  341. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/77d6820f494f_add_reply_to_notif.py +0 -0
  342. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/7b1f765677d8_.py +0 -0
  343. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/7bc746997e8d_add_slack_token_field_to_organisation.py +0 -0
  344. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/7dc79d4ed7cd_.py +0 -0
  345. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/818f7bda2528_.py +0 -0
  346. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/82e7f7a95e84_add_project_id_to_events.py +0 -0
  347. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/82ee682204ab_add_is_generated_from_ldap_column_to_.py +0 -0
  348. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/8588f254d6b8_add_archived_fields.py +0 -0
  349. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/8739ae9fa28b_add_for_client_field.py +0 -0
  350. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/87efceb6745b_add_ready_for_to_entity.py +0 -0
  351. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/892b264937ec_.py +0 -0
  352. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/8a1b4a1b7f4a_add_totp_columns_for_person.py +0 -0
  353. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/8e4f39e321f4_add_day_off_table.py +0 -0
  354. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/8e67c183bed7_add_preference_fields.py +0 -0
  355. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/8fbd40afbe5f_allow_to_set_float_values_for_.py +0 -0
  356. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/9010a64e5a2d_add_indices.py +0 -0
  357. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/9060dd4f6116_notification_uc.py +0 -0
  358. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/925771029620_.py +0 -0
  359. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/92b40d79ad3f_allow_message_attachments.py +0 -0
  360. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/92bdfe07e5f5_discord_integration.py +0 -0
  361. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/956659992419_add_columns_for_person_to_store_fido_.py +0 -0
  362. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/96c79d31e648_add_mail_otp_columns_for_person.py +0 -0
  363. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/96f58a4a2a58_person_partial_index_for_email_only_.py +0 -0
  364. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/971dbf5a0faf_add_short_name_for_asset_type_entity_.py +0 -0
  365. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/98c90621cf58_add_for_client_flag_to_playlist.py +0 -0
  366. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/99825b9cc778_.py +0 -0
  367. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/9a09467f9b2c_.py +0 -0
  368. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/9b85c14fa8a7_add_day_off_new_columns.py +0 -0
  369. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/9bd17364fc18_.py +0 -0
  370. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/9d3bb33c6fc6_add_department_keys_to_filter_models.py +0 -0
  371. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/9e5b3a9b0cee_add_new_column_metadatadescriptor_data_type_.py +0 -0
  372. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/9f8445f9b42c_add_man_days_fields.py +0 -0
  373. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/a23682ccc1f1_.py +0 -0
  374. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/a252a094e977_add_descriptions_for_entities_tasks_and_.py +0 -0
  375. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/a519c710877c_.py +0 -0
  376. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/a65bdadbae2f_.py +0 -0
  377. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/a66508788c53_add_nb_assets_ready.py +0 -0
  378. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/a6c25eed3ea1_add_login_failed_attemps_and_last_login_.py +0 -0
  379. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/a7c43f3fbc76_add_duration_column_to_the_preview_file.py +0 -0
  380. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/aa0a60033106_feedback_request.py +0 -0
  381. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/addbbefa7028_add_departments_link_to_metadata_.py +0 -0
  382. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/ae0127f2fc56_add_previewfile_width_and_previewfile_.py +0 -0
  383. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/af1790868e2c_.py +0 -0
  384. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/b45cb782bb9c_.py +0 -0
  385. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/b4dd0add5f79_.py +0 -0
  386. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/b8c0a0f9d054_drop_task_status_is_reviewable.py +0 -0
  387. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/b8ed0fb263f8_add_person_jti_and_jti_expiration_date.py +0 -0
  388. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/b97a71306fc8_add_is_casting_standby_column_to_entity.py +0 -0
  389. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/be56dc0fb760_for_is_shared_disallow_nullable.py +0 -0
  390. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/bf1347acdee2_.py +0 -0
  391. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/c49e41f1298b_add_previewbackground.py +0 -0
  392. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/c68c2a62cfac_add_mimetype_column_to_attachment.py +0 -0
  393. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/c726b98be194_.py +0 -0
  394. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/c81f3e83bdb5_.py +0 -0
  395. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/ca28796a2a62_add_is_done_field_to_the_task_model.py +0 -0
  396. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/cf3d365de164_add_entity_version_model.py +0 -0
  397. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/cf6cec6d6bf5_add_status_field_to_preview_file.py +0 -0
  398. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/d80267806131_task_status_new_column_is_default.py +0 -0
  399. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/d8dcd5196d57_add_casting_label.py +0 -0
  400. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/de8a3de227ef_.py +0 -0
  401. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/deeacd38d373_for_projecttaskstatuslink_set_default_.py +0 -0
  402. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/df1834485f57_.py +0 -0
  403. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/df9f8a147e80_change_file_size_to_big_integer.py +0 -0
  404. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/e1ef93f40d3d_.py +0 -0
  405. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/e29638428dfd_add_schedule_item_table.py +0 -0
  406. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/e3f6db74cc1e_.py +0 -0
  407. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/e839d6603c09_add_person_id_to_shot_history.py +0 -0
  408. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/ee2373fbe3a4_.py +0 -0
  409. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/f0567e8d0c62_.py +0 -0
  410. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/f0c6cbb61869_add_production_style_field.py +0 -0
  411. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/f344b867a911_for_description_of_entity_task_working_.py +0 -0
  412. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/f4ff5a73d283_add_person_ldap_uid.py +0 -0
  413. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/f5b113876a49_add_preferred_two_factor_authentication_.py +0 -0
  414. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/f5bdca075cdc_add_preview_download_flag_to_projects.py +0 -0
  415. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/f874ad5e898a_add_link_entity_type_task_type.py +0 -0
  416. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/f995b28fb749_.py +0 -0
  417. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/fb6b6f188497_.py +0 -0
  418. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/fb87feaaa094_add_missing_unique_constraints.py +0 -0
  419. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/fc322f908695_.py +0 -0
  420. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/fee7c696166e_.py +0 -0
  421. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/feffd3c5b806_introduce_concepts.py +0 -0
  422. {zou-0.20.11 → zou-0.20.13}/zou/migrations/versions/ffeed4956ab1_add_more_details_to_projects.py +0 -0
  423. {zou-0.20.11 → zou-0.20.13}/zou/remote/__init__.py +0 -0
  424. {zou-0.20.11 → zou-0.20.13}/zou/remote/config_payload.py +0 -0
  425. {zou-0.20.11 → zou-0.20.13}/zou/remote/normalize_movie.py +0 -0
  426. {zou-0.20.11 → zou-0.20.13}/zou/remote/playlist.py +0 -0
  427. {zou-0.20.11 → zou-0.20.13}/zou/utils/__init__.py +0 -0
  428. {zou-0.20.11 → zou-0.20.13}/zou/utils/movie.py +0 -0
  429. {zou-0.20.11 → zou-0.20.13}/zou.egg-info/dependency_links.txt +0 -0
  430. {zou-0.20.11 → zou-0.20.13}/zou.egg-info/entry_points.txt +0 -0
  431. {zou-0.20.11 → zou-0.20.13}/zou.egg-info/not-zip-safe +0 -0
  432. {zou-0.20.11 → zou-0.20.13}/zou.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: zou
3
- Version: 0.20.11
3
+ Version: 0.20.13
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
@@ -41,7 +41,7 @@ Requires-Dist: flask-jwt-extended==4.7.1
41
41
  Requires-Dist: flask-migrate==4.1.0
42
42
  Requires-Dist: flask-socketio==5.5.1
43
43
  Requires-Dist: flask==3.1.0
44
- Requires-Dist: gazu==0.10.22
44
+ Requires-Dist: gazu==0.10.25
45
45
  Requires-Dist: gevent-websocket==0.10.1
46
46
  Requires-Dist: gevent==24.11.1
47
47
  Requires-Dist: gunicorn==23.0.0
@@ -52,14 +52,14 @@ Requires-Dist: ldap3==2.9.1
52
52
  Requires-Dist: matterhook==0.2
53
53
  Requires-Dist: meilisearch==0.33.1
54
54
  Requires-Dist: numpy==2.0.1; python_version == "3.9"
55
- Requires-Dist: numpy==2.2.1; python_version >= "3.10"
56
- Requires-Dist: opencv-python==4.10.0.84
55
+ Requires-Dist: numpy==2.2.2; python_version >= "3.10"
56
+ Requires-Dist: opencv-python==4.11.0.86
57
57
  Requires-Dist: OpenTimelineIO==0.17.0
58
58
  Requires-Dist: OpenTimelineIO-Plugins==0.17.0
59
- Requires-Dist: orjson==3.10.14
59
+ Requires-Dist: orjson==3.10.15
60
60
  Requires-Dist: pillow==11.1.0
61
61
  Requires-Dist: psutil==6.1.1
62
- Requires-Dist: psycopg[binary]==3.2.3
62
+ Requires-Dist: psycopg[binary]==3.2.4
63
63
  Requires-Dist: pyotp==2.9.0
64
64
  Requires-Dist: pysaml2==7.5.0
65
65
  Requires-Dist: python-nomad==2.0.1
@@ -87,11 +87,11 @@ Requires-Dist: pytest==8.3.4; extra == "test"
87
87
  Provides-Extra: monitoring
88
88
  Requires-Dist: prometheus-flask-exporter==0.23.1; extra == "monitoring"
89
89
  Requires-Dist: pygelf==0.4.2; extra == "monitoring"
90
- Requires-Dist: sentry-sdk==2.19.2; extra == "monitoring"
90
+ Requires-Dist: sentry-sdk==2.20.0; extra == "monitoring"
91
91
  Provides-Extra: lint
92
92
  Requires-Dist: autoflake==2.3.1; extra == "lint"
93
93
  Requires-Dist: black==24.10.0; extra == "lint"
94
- Requires-Dist: pre-commit==4.0.1; extra == "lint"
94
+ Requires-Dist: pre-commit==4.1.0; extra == "lint"
95
95
  Dynamic: requires-python
96
96
 
97
97
  .. figure:: https://zou.cg-wire.com/kitsu.png
@@ -47,7 +47,7 @@ install_requires =
47
47
  flask-migrate==4.1.0
48
48
  flask-socketio==5.5.1
49
49
  flask==3.1.0
50
- gazu==0.10.22
50
+ gazu==0.10.25
51
51
  gevent-websocket==0.10.1
52
52
  gevent==24.11.1
53
53
  gunicorn==23.0.0
@@ -58,14 +58,14 @@ install_requires =
58
58
  matterhook==0.2
59
59
  meilisearch==0.33.1
60
60
  numpy==2.0.1; python_version == '3.9'
61
- numpy==2.2.1; python_version >= '3.10'
62
- opencv-python==4.10.0.84
61
+ numpy==2.2.2; python_version >= '3.10'
62
+ opencv-python==4.11.0.86
63
63
  OpenTimelineIO==0.17.0
64
64
  OpenTimelineIO-Plugins==0.17.0
65
- orjson==3.10.14
65
+ orjson==3.10.15
66
66
  pillow==11.1.0
67
67
  psutil==6.1.1
68
- psycopg[binary]==3.2.3
68
+ psycopg[binary]==3.2.4
69
69
  pyotp==2.9.0
70
70
  pysaml2==7.5.0
71
71
  python-nomad==2.0.1
@@ -101,11 +101,11 @@ test =
101
101
  monitoring =
102
102
  prometheus-flask-exporter==0.23.1
103
103
  pygelf==0.4.2
104
- sentry-sdk==2.19.2
104
+ sentry-sdk==2.20.0
105
105
  lint =
106
106
  autoflake==2.3.1
107
107
  black==24.10.0
108
- pre-commit==4.0.1
108
+ pre-commit==4.1.0
109
109
 
110
110
  [options.entry_points]
111
111
  console_scripts =
@@ -0,0 +1 @@
1
+ __version__ = "0.20.13"
@@ -25,6 +25,7 @@ from meilisearch.errors import (
25
25
 
26
26
  from zou.app import config, swagger
27
27
  from zou.app.stores import auth_tokens_store, file_store
28
+ from zou.app.indexer import indexing
28
29
  from zou.app.services.exception import (
29
30
  ModelWithRelationsDeletionException,
30
31
  PersonNotFoundException,
@@ -72,6 +73,9 @@ if config.SAML_ENABLED:
72
73
 
73
74
  app.extensions["fido_server"] = get_fido_server()
74
75
 
76
+ if config.INDEXER.get("key") is not None:
77
+ app.extensions["indexer_client"] = indexing.init_client()
78
+
75
79
 
76
80
  @app.teardown_appcontext
77
81
  def shutdown_session(exception=None):
@@ -484,7 +484,7 @@ class NewAssetResource(Resource, ArgsMixin):
484
484
  ("data", {}, False, dict),
485
485
  (
486
486
  "is_shared",
487
- True,
487
+ False,
488
488
  False,
489
489
  inputs.boolean,
490
490
  ),
@@ -98,7 +98,9 @@ class PreviewFileResource(BaseModelResource):
98
98
  instance_dict = instance.serialize()
99
99
  self.check_delete_permissions(instance_dict)
100
100
  self.pre_delete(instance_dict)
101
- deletion_service.remove_preview_file(instance)
101
+ deletion_service.remove_preview_file(
102
+ instance, force=self.get_force()
103
+ )
102
104
  self.emit_delete_event(instance_dict)
103
105
  self.post_delete(instance_dict)
104
106
 
@@ -171,7 +171,7 @@ class StatusResourcesResource(BaseStatusResource):
171
171
  }
172
172
 
173
173
  return {
174
- "date": datetime.now().isoformat(),
174
+ "date": datetime.datetime.now().isoformat(),
175
175
  "cpu": cpu_stats,
176
176
  "memory": memory_stats,
177
177
  "jobs": job_stats,
@@ -11,6 +11,7 @@ from zou.app.services import (
11
11
  )
12
12
  from zou.app.utils import permissions
13
13
  from zou.app.services.exception import WrongParameterException
14
+ from zou.app.models.metadata_descriptor import METADATA_DESCRIPTOR_TYPES
14
15
 
15
16
 
16
17
  class OpenProjectsResource(Resource, ArgsMixin):
@@ -715,6 +716,10 @@ class ProductionMetadataDescriptorsResource(Resource, ArgsMixin):
715
716
  if len(args["name"]) == 0:
716
717
  raise WrongParameterException("Name cannot be empty.")
717
718
 
719
+ types = [type_name for type_name, _ in METADATA_DESCRIPTOR_TYPES]
720
+ if args["data_type"] not in types:
721
+ raise WrongParameterException("Invalid data_type")
722
+
718
723
  return (
719
724
  projects_service.add_metadata_descriptor(
720
725
  project_id,
@@ -828,6 +833,10 @@ class ProductionMetadataDescriptorResource(Resource, ArgsMixin):
828
833
  if len(args["name"]) == 0:
829
834
  raise WrongParameterException("Name cannot be empty.")
830
835
 
836
+ types = [type_name for type_name, _ in METADATA_DESCRIPTOR_TYPES]
837
+ if args["data_type"] not in types:
838
+ raise WrongParameterException("Invalid data_type")
839
+
831
840
  args["for_client"] = args["for_client"] == "True"
832
841
 
833
842
  return projects_service.update_metadata_descriptor(descriptor_id, args)
@@ -123,6 +123,9 @@ class TaskTypeEstimationsCsvImportResource(BaseCsvProjectImportResource):
123
123
  new_data["start_date"], float(row["Estimation"]) - 1
124
124
  )
125
125
 
126
+ if row.get("Difficulty") not in [None, ""]:
127
+ new_data["difficulty"] = int(row["Difficulty"])
128
+
126
129
  tasks_service.update_task(self.tasks_map[entity_id], new_data)
127
130
 
128
131
 
@@ -78,7 +78,7 @@ class AddPreviewResource(Resource, ArgsMixin):
78
78
  return preview_file, 201
79
79
 
80
80
 
81
- class AddExtraPreviewResource(Resource):
81
+ class AddExtraPreviewResource(Resource, ArgsMixin):
82
82
  """
83
83
  Add a preview to given comment.
84
84
  """
@@ -160,7 +160,9 @@ class AddExtraPreviewResource(Resource):
160
160
  """
161
161
  task = tasks_service.get_task(task_id)
162
162
  user_service.check_project_access(task["project_id"])
163
- deletion_service.remove_preview_file_by_id(preview_file_id)
163
+ deletion_service.remove_preview_file_by_id(
164
+ preview_file_id, force=self.get_force()
165
+ )
164
166
  return "", 204
165
167
 
166
168
 
@@ -58,7 +58,7 @@ INDEXER = {
58
58
  "host": os.getenv("INDEXER_HOST", "localhost"),
59
59
  "port": os.getenv("INDEXER_PORT", "7700"),
60
60
  "protocol": os.getenv("INDEXER_PROTOCOL", "http"),
61
- "key": os.getenv("INDEXER_KEY", "masterkey"),
61
+ "key": os.getenv("INDEXER_KEY"),
62
62
  "timeout": int(os.getenv("INDEXER_TIMEOUT", 5000)),
63
63
  }
64
64
 
@@ -3,24 +3,35 @@ from meilisearch.errors import MeilisearchApiError
3
3
 
4
4
  from zou.app import config
5
5
  from zou.app.utils import cache
6
+ from flask import current_app
6
7
 
7
- client = None
8
8
 
9
-
10
- def init():
9
+ def init_client():
11
10
  """
12
11
  Configure Meilisearch client.
13
12
  """
14
- global client
15
- if client is None:
16
- protocol = config.INDEXER["protocol"]
17
- host = config.INDEXER["host"]
18
- port = config.INDEXER["port"]
19
- client = meilisearch.Client(
20
- f"{protocol}://{host}:{port}",
21
- config.INDEXER["key"],
22
- timeout=config.INDEXER["timeout"],
23
- )
13
+ protocol = config.INDEXER["protocol"]
14
+ host = config.INDEXER["host"]
15
+ port = config.INDEXER["port"]
16
+ return meilisearch.Client(
17
+ f"{protocol}://{host}:{port}",
18
+ config.INDEXER["key"],
19
+ timeout=config.INDEXER["timeout"],
20
+ )
21
+
22
+
23
+ class IndexerNotInitializedError(Exception):
24
+ pass
25
+
26
+
27
+ def get_client():
28
+ """
29
+ Get Meilisearch client.
30
+ """
31
+ try:
32
+ return current_app.extensions["indexer_client"]
33
+ except KeyError:
34
+ raise IndexerNotInitializedError()
24
35
 
25
36
 
26
37
  def create_index(index_name, searchable_fields=[], filterable_fields=[]):
@@ -34,6 +45,7 @@ def create_index(index_name, searchable_fields=[], filterable_fields=[]):
34
45
  except MeilisearchApiError:
35
46
  pass
36
47
  if index is None:
48
+ client = get_client()
37
49
  task = client.create_index(index_name, {"primaryKey": "id"})
38
50
  client.wait_for_task(
39
51
  task.task_uid, timeout_in_ms=config.INDEXER["timeout"]
@@ -57,8 +69,7 @@ def get_index(index_name):
57
69
  """
58
70
  Get index matching given name.
59
71
  """
60
- init()
61
- index = client.get_index(index_name)
72
+ index = get_client().get_index(index_name)
62
73
  return index
63
74
 
64
75
 
@@ -69,7 +80,7 @@ def clear_index(index_name):
69
80
  cache.cache.delete_memoized(get_index)
70
81
  index = get_index(index_name)
71
82
  task = index.delete_all_documents()
72
- client.wait_for_task(
83
+ get_client().wait_for_task(
73
84
  task.task_uid, timeout_in_ms=config.INDEXER["timeout"]
74
85
  )
75
86
  return index
@@ -80,7 +91,7 @@ def index_document(index, document):
80
91
  Add given document to given index.
81
92
  """
82
93
  task = index.add_documents([document])
83
- client.wait_for_task(
94
+ get_client().wait_for_task(
84
95
  task.task_uid, timeout_in_ms=config.INDEXER["timeout"]
85
96
  )
86
97
  return index
@@ -91,7 +102,7 @@ def index_documents(index, documents):
91
102
  Add given documents to given index.
92
103
  """
93
104
  task = index.add_documents(documents)
94
- client.wait_for_task(
105
+ get_client().wait_for_task(
95
106
  task.task_uid, timeout_in_ms=config.INDEXER["timeout"]
96
107
  )
97
108
  return documents
@@ -5,19 +5,28 @@ from zou.app.models.serializer import SerializerMixin
5
5
  from zou.app.models.base import BaseMixin
6
6
  from zou.app.models.task_type import TaskType
7
7
 
8
- task_type_link = db.Table(
9
- "task_type_asset_type_link",
10
- db.Column(
11
- "asset_type_id",
8
+
9
+ class TaskTypeAssetTypeLink(db.Model):
10
+ asset_type_id = db.Column(
12
11
  UUIDType(binary=False),
13
12
  db.ForeignKey("entity_type.id"),
14
- ),
15
- db.Column(
16
- "task_type_id",
13
+ index=True,
14
+ primary_key=True,
15
+ )
16
+ task_type_id = db.Column(
17
17
  UUIDType(binary=False),
18
18
  db.ForeignKey("task_type.id"),
19
- ),
20
- )
19
+ index=True,
20
+ primary_key=True,
21
+ )
22
+
23
+ __table_args__ = (
24
+ db.UniqueConstraint(
25
+ "asset_type_id",
26
+ "task_type_id",
27
+ name="task_type_asset_type_link_uc",
28
+ ),
29
+ )
21
30
 
22
31
 
23
32
  class EntityType(db.Model, BaseMixin, SerializerMixin):
@@ -30,7 +39,9 @@ class EntityType(db.Model, BaseMixin, SerializerMixin):
30
39
  short_name = db.Column(db.String(20))
31
40
  description = db.Column(db.Text())
32
41
  task_types = db.relationship(
33
- "TaskType", secondary=task_type_link, lazy="joined"
42
+ TaskType,
43
+ secondary=TaskTypeAssetTypeLink.__table__,
44
+ lazy="joined",
34
45
  )
35
46
  archived = db.Column(db.Boolean(), default=False)
36
47
 
@@ -4,18 +4,31 @@ from sqlalchemy.dialects.postgresql import JSONB
4
4
  from zou.app import db
5
5
  from zou.app.models.serializer import SerializerMixin
6
6
  from zou.app.models.base import BaseMixin
7
+ from zou.app.models.department import Department
7
8
 
8
- department_metadata_descriptor_link = db.Table(
9
- "department_metadata_descriptor_link",
10
- db.Column(
11
- "metadata_descriptor_id",
9
+
10
+ class DepartmentMetadataDescriptorLink(db.Model):
11
+ metadata_descriptor_id = db.Column(
12
12
  UUIDType(binary=False),
13
13
  db.ForeignKey("metadata_descriptor.id"),
14
- ),
15
- db.Column(
16
- "department_id", UUIDType(binary=False), db.ForeignKey("department.id")
17
- ),
18
- )
14
+ index=True,
15
+ primary_key=True,
16
+ )
17
+ department_id = db.Column(
18
+ UUIDType(binary=False),
19
+ db.ForeignKey("department.id"),
20
+ index=True,
21
+ primary_key=True,
22
+ )
23
+
24
+ __table_args__ = (
25
+ db.UniqueConstraint(
26
+ "metadata_descriptor_id",
27
+ "department_id",
28
+ name="department_metadata_descriptor_link_uc",
29
+ ),
30
+ )
31
+
19
32
 
20
33
  METADATA_DESCRIPTOR_TYPES = [
21
34
  ("string", "String"),
@@ -46,7 +59,8 @@ class MetadataDescriptor(db.Model, BaseMixin, SerializerMixin):
46
59
  choices = db.Column(JSONB)
47
60
  for_client = db.Column(db.Boolean(), default=False, index=True)
48
61
  departments = db.relationship(
49
- "Department", secondary=department_metadata_descriptor_link
62
+ Department,
63
+ secondary=DepartmentMetadataDescriptorLink.__table__,
50
64
  )
51
65
 
52
66
  __table_args__ = (
@@ -49,11 +49,21 @@ class DepartmentLink(db.Model):
49
49
  UUIDType(binary=False),
50
50
  db.ForeignKey("person.id"),
51
51
  primary_key=True,
52
+ index=True,
52
53
  )
53
54
  department_id = db.Column(
54
55
  UUIDType(binary=False),
55
56
  db.ForeignKey("department.id"),
56
57
  primary_key=True,
58
+ index=True,
59
+ )
60
+
61
+ __table_args__ = (
62
+ db.UniqueConstraint(
63
+ "person_id",
64
+ "department_id",
65
+ name="department_link_uc",
66
+ ),
57
67
  )
58
68
 
59
69
 
@@ -252,24 +252,25 @@ def _run_status_automation(automation, task, person_id):
252
252
  task["id"]
253
253
  )
254
254
  )
255
- preview_files = (
256
- preview_files_service.get_preview_files_for_revision(
257
- preview_file["task_id"], preview_file["revision"]
255
+ if preview_file is not None:
256
+ preview_files = (
257
+ preview_files_service.get_preview_files_for_revision(
258
+ preview_file["task_id"], preview_file["revision"]
259
+ )
258
260
  )
259
- )
260
261
 
261
- for preview_file in preview_files:
262
- new_preview_file = (
263
- tasks_service.add_preview_file_to_comment(
264
- new_comment["id"],
265
- new_comment["person_id"],
266
- task_to_update["id"],
262
+ for preview_file in preview_files:
263
+ new_preview_file = (
264
+ tasks_service.add_preview_file_to_comment(
265
+ new_comment["id"],
266
+ new_comment["person_id"],
267
+ task_to_update["id"],
268
+ )
267
269
  )
268
- )
269
270
 
270
- preview_files_service.copy_preview_file_in_another_one(
271
- preview_file["id"], new_preview_file["id"]
272
- )
271
+ preview_files_service.copy_preview_file_in_another_one(
272
+ preview_file["id"], new_preview_file["id"]
273
+ )
273
274
 
274
275
  elif automation["out_field_type"] == "ready_for":
275
276
  try:
@@ -12,9 +12,8 @@ from zou.app.services import (
12
12
 
13
13
  def get_index(index_name):
14
14
  """
15
- Retrieve whoosh index from disk. It is required to perform any operations.
15
+ Retrieve meilisearch index from disk. It is required to perform any operations.
16
16
  """
17
- indexing.init()
18
17
  return indexing.get_index(index_name)
19
18
 
20
19
 
@@ -193,9 +192,11 @@ def index_asset(asset):
193
192
  document = prepare_asset(asset)
194
193
  indexing.index_document(index, document)
195
194
  return document
195
+ except indexing.IndexerNotInitializedError:
196
+ pass
196
197
  except:
197
198
  app.logger.error("Indexer is not reachable, indexation failed.")
198
- return {}
199
+ return {}
199
200
 
200
201
 
201
202
  def index_person(person):
@@ -207,9 +208,11 @@ def index_person(person):
207
208
  document = prepare_person(person)
208
209
  indexing.index_document(index, document)
209
210
  return document
211
+ except indexing.IndexerNotInitializedError:
212
+ pass
210
213
  except:
211
214
  app.logger.error("Indexer is not reachable, indexation failed.")
212
- return {}
215
+ return {}
213
216
 
214
217
 
215
218
  def index_shot(shot):
@@ -221,9 +224,11 @@ def index_shot(shot):
221
224
  document = prepare_shot(shot)
222
225
  indexing.index_document(index, document)
223
226
  return document
227
+ except indexing.IndexerNotInitializedError:
228
+ pass
224
229
  except:
225
230
  app.logger.error("Indexer is not reachable, indexation failed.")
226
- return {}
231
+ return {}
227
232
 
228
233
 
229
234
  def prepare_asset(asset):
@@ -320,9 +325,11 @@ def remove_asset_index(asset_id):
320
325
  """
321
326
  try:
322
327
  return indexing.remove_document(get_asset_index(), asset_id)
328
+ except indexing.IndexerNotInitializedError:
329
+ pass
323
330
  except:
324
331
  app.logger.error("Indexer is not reachable, indexation failed.")
325
- return {}
332
+ return {}
326
333
 
327
334
 
328
335
  def remove_person_index(person_id):
@@ -331,9 +338,11 @@ def remove_person_index(person_id):
331
338
  """
332
339
  try:
333
340
  return indexing.remove_document(get_person_index(), person_id)
341
+ except indexing.IndexerNotInitializedError:
342
+ pass
334
343
  except:
335
344
  app.logger.error("Indexer is not reachable, indexation failed.")
336
- return {}
345
+ return {}
337
346
 
338
347
 
339
348
  def remove_shot_index(shot_id):
@@ -342,6 +351,8 @@ def remove_shot_index(shot_id):
342
351
  """
343
352
  try:
344
353
  return indexing.remove_document(get_shot_index(), shot_id)
354
+ except indexing.IndexerNotInitializedError:
355
+ pass
345
356
  except:
346
357
  app.logger.error("Indexer is not reachable, indexation failed.")
347
- return {}
358
+ return {}
@@ -376,25 +376,17 @@ def _get_entity_task_query():
376
376
 
377
377
 
378
378
  def _convert_rows_to_detailed_tasks(rows, relations=False):
379
- results = []
380
- for entry in rows:
381
- (
382
- task_object,
383
- project_name,
384
- task_type_name,
385
- task_status_name,
386
- entity_type_name,
387
- entity_name,
388
- ) = entry
389
-
390
- task = get_task(str(task_object.id), relations=relations)
391
- task["project_name"] = project_name
392
- task["task_type_name"] = task_type_name
393
- task["task_status_name"] = task_status_name
394
- task["entity_type_name"] = entity_type_name
395
- task["entity_name"] = entity_name
396
- results.append(task)
397
- return results
379
+ return [
380
+ {
381
+ **task_object.serialize(relations=relations),
382
+ "project_name": project_name,
383
+ "task_type_name": task_type_name,
384
+ "task_status_name": task_status_name,
385
+ "entity_type_name": entity_type_name,
386
+ "entity_name": entity_name,
387
+ }
388
+ for task_object, project_name, task_type_name, task_status_name, entity_type_name, entity_name in rows
389
+ ]
398
390
 
399
391
 
400
392
  def get_task_types_for_shot(shot_id):
@@ -1424,7 +1424,7 @@ def get_last_notifications(
1424
1424
  )
1425
1425
  reply_mentions = reply.get("mentions", []) or []
1426
1426
  reply_department_mentions = (
1427
- reply.get("departement_mentions", []) or []
1427
+ reply.get("department_mentions", []) or []
1428
1428
  )
1429
1429
  if reply is not None:
1430
1430
  reply_text = reply["text"]
@@ -507,14 +507,6 @@ def reset_search_index():
507
507
  commands.reset_search_index()
508
508
 
509
509
 
510
- @cli.command()
511
- def init_search_index():
512
- """
513
- Init search index.
514
- """
515
- commands.init_search_index()
516
-
517
-
518
510
  @cli.command()
519
511
  @click.option("--query", default="")
520
512
  def search_asset(query):