zou 0.20.12__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.12/zou.egg-info → zou-0.20.13}/PKG-INFO +3 -3
  2. {zou-0.20.12 → zou-0.20.13}/setup.cfg +2 -2
  3. zou-0.20.13/zou/__init__.py +1 -0
  4. {zou-0.20.12 → zou-0.20.13}/zou/app/__init__.py +4 -0
  5. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/assets/resources.py +1 -1
  6. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/preview_file.py +3 -1
  7. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/index/resources.py +1 -1
  8. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/csv/task_type_estimations.py +3 -0
  9. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/tasks/resources.py +4 -2
  10. {zou-0.20.12 → zou-0.20.13}/zou/app/config.py +1 -1
  11. {zou-0.20.12 → zou-0.20.13}/zou/app/indexer/indexing.py +29 -18
  12. {zou-0.20.12 → zou-0.20.13}/zou/app/models/entity_type.py +21 -10
  13. {zou-0.20.12 → zou-0.20.13}/zou/app/models/metadata_descriptor.py +24 -10
  14. {zou-0.20.12 → zou-0.20.13}/zou/app/services/comments_service.py +15 -14
  15. {zou-0.20.12 → zou-0.20.13}/zou/app/services/index_service.py +19 -8
  16. {zou-0.20.12 → zou-0.20.13}/zou/app/services/tasks_service.py +11 -19
  17. {zou-0.20.12 → zou-0.20.13}/zou/cli.py +0 -8
  18. zou-0.20.13/zou/migrations/versions/20a8ad264659_tasktypeassettypelink_.py +132 -0
  19. {zou-0.20.12 → zou-0.20.13/zou.egg-info}/PKG-INFO +3 -3
  20. {zou-0.20.12 → zou-0.20.13}/zou.egg-info/SOURCES.txt +1 -0
  21. {zou-0.20.12 → zou-0.20.13}/zou.egg-info/requires.txt +2 -2
  22. zou-0.20.12/zou/__init__.py +0 -1
  23. {zou-0.20.12 → zou-0.20.13}/LICENSE +0 -0
  24. {zou-0.20.12 → zou-0.20.13}/README.rst +0 -0
  25. {zou-0.20.12 → zou-0.20.13}/pyproject.toml +0 -0
  26. {zou-0.20.12 → zou-0.20.13}/setup.py +0 -0
  27. {zou-0.20.12 → zou-0.20.13}/zou/app/api.py +0 -0
  28. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/__init__.py +0 -0
  29. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/assets/__init__.py +0 -0
  30. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/auth/__init__.py +0 -0
  31. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/auth/resources.py +0 -0
  32. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/breakdown/__init__.py +0 -0
  33. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/breakdown/resources.py +0 -0
  34. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/chats/__init__.py +0 -0
  35. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/chats/resources.py +0 -0
  36. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/comments/__init__.py +0 -0
  37. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/comments/resources.py +0 -0
  38. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/concepts/__init__.py +0 -0
  39. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/concepts/resources.py +0 -0
  40. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/__init__.py +0 -0
  41. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/asset_instance.py +0 -0
  42. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/attachment_file.py +0 -0
  43. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/base.py +0 -0
  44. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/chat.py +0 -0
  45. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/chat_message.py +0 -0
  46. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/comments.py +0 -0
  47. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/custom_action.py +0 -0
  48. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/day_off.py +0 -0
  49. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/department.py +0 -0
  50. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/entity.py +0 -0
  51. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/entity_link.py +0 -0
  52. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/entity_type.py +0 -0
  53. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/event.py +0 -0
  54. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/file_status.py +0 -0
  55. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/metadata_descriptor.py +0 -0
  56. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/milestone.py +0 -0
  57. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/news.py +0 -0
  58. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/notification.py +0 -0
  59. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/organisation.py +0 -0
  60. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/output_file.py +0 -0
  61. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/output_type.py +0 -0
  62. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/person.py +0 -0
  63. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/playlist.py +0 -0
  64. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/preview_background_file.py +0 -0
  65. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/project.py +0 -0
  66. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/project_status.py +0 -0
  67. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/schedule_item.py +0 -0
  68. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/search_filter.py +0 -0
  69. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/search_filter_group.py +0 -0
  70. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/software.py +0 -0
  71. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/status_automation.py +0 -0
  72. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/studio.py +0 -0
  73. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/subscription.py +0 -0
  74. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/task.py +0 -0
  75. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/task_status.py +0 -0
  76. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/task_type.py +0 -0
  77. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/time_spent.py +0 -0
  78. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/crud/working_file.py +0 -0
  79. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/edits/__init__.py +0 -0
  80. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/edits/resources.py +0 -0
  81. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/entities/__init__.py +0 -0
  82. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/entities/resources.py +0 -0
  83. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/events/__init__.py +0 -0
  84. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/events/resources.py +0 -0
  85. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/export/__init__.py +0 -0
  86. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/export/csv/__init__.py +0 -0
  87. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/export/csv/assets.py +0 -0
  88. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/export/csv/base.py +0 -0
  89. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/export/csv/casting.py +0 -0
  90. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/export/csv/edits.py +0 -0
  91. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/export/csv/persons.py +0 -0
  92. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/export/csv/playlists.py +0 -0
  93. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/export/csv/projects.py +0 -0
  94. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/export/csv/shots.py +0 -0
  95. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/export/csv/task_types.py +0 -0
  96. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/export/csv/tasks.py +0 -0
  97. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/export/csv/time_spents.py +0 -0
  98. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/files/__init__.py +0 -0
  99. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/files/resources.py +0 -0
  100. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/index/__init__.py +0 -0
  101. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/news/__init__.py +0 -0
  102. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/news/resources.py +0 -0
  103. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/persons/__init__.py +0 -0
  104. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/persons/resources.py +0 -0
  105. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/playlists/__init__.py +0 -0
  106. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/playlists/resources.py +0 -0
  107. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/previews/__init__.py +0 -0
  108. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/previews/resources.py +0 -0
  109. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/projects/__init__.py +0 -0
  110. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/projects/resources.py +0 -0
  111. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/search/__init__.py +0 -0
  112. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/search/resources.py +0 -0
  113. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/shots/__init__.py +0 -0
  114. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/shots/resources.py +0 -0
  115. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/__init__.py +0 -0
  116. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/csv/__init__.py +0 -0
  117. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/csv/assets.py +0 -0
  118. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/csv/base.py +0 -0
  119. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/csv/casting.py +0 -0
  120. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/csv/edits.py +0 -0
  121. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/csv/persons.py +0 -0
  122. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/csv/shots.py +0 -0
  123. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/kitsu.py +0 -0
  124. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/otio.py +0 -0
  125. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/shotgun/__init__.py +0 -0
  126. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/shotgun/assets.py +0 -0
  127. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/shotgun/base.py +0 -0
  128. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/shotgun/episode.py +0 -0
  129. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/shotgun/exception.py +0 -0
  130. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/shotgun/import_errors.py +0 -0
  131. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/shotgun/notes.py +0 -0
  132. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/shotgun/person.py +0 -0
  133. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/shotgun/project.py +0 -0
  134. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/shotgun/scene.py +0 -0
  135. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/shotgun/sequence.py +0 -0
  136. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/shotgun/shot.py +0 -0
  137. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/shotgun/status.py +0 -0
  138. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/shotgun/steps.py +0 -0
  139. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/shotgun/tasks.py +0 -0
  140. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/shotgun/team.py +0 -0
  141. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/source/shotgun/versions.py +0 -0
  142. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/tasks/__init__.py +0 -0
  143. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/user/__init__.py +0 -0
  144. {zou-0.20.12 → zou-0.20.13}/zou/app/blueprints/user/resources.py +0 -0
  145. {zou-0.20.12 → zou-0.20.13}/zou/app/file_trees/default.json +0 -0
  146. {zou-0.20.12 → zou-0.20.13}/zou/app/file_trees/simple.json +0 -0
  147. {zou-0.20.12 → zou-0.20.13}/zou/app/indexer/__init__.py +0 -0
  148. {zou-0.20.12 → zou-0.20.13}/zou/app/mixin.py +0 -0
  149. {zou-0.20.12 → zou-0.20.13}/zou/app/models/__init__.py +0 -0
  150. {zou-0.20.12 → zou-0.20.13}/zou/app/models/asset_instance.py +0 -0
  151. {zou-0.20.12 → zou-0.20.13}/zou/app/models/attachment_file.py +0 -0
  152. {zou-0.20.12 → zou-0.20.13}/zou/app/models/base.py +0 -0
  153. {zou-0.20.12 → zou-0.20.13}/zou/app/models/build_job.py +0 -0
  154. {zou-0.20.12 → zou-0.20.13}/zou/app/models/chat.py +0 -0
  155. {zou-0.20.12 → zou-0.20.13}/zou/app/models/chat_message.py +0 -0
  156. {zou-0.20.12 → zou-0.20.13}/zou/app/models/comment.py +0 -0
  157. {zou-0.20.12 → zou-0.20.13}/zou/app/models/custom_action.py +0 -0
  158. {zou-0.20.12 → zou-0.20.13}/zou/app/models/data_import_error.py +0 -0
  159. {zou-0.20.12 → zou-0.20.13}/zou/app/models/day_off.py +0 -0
  160. {zou-0.20.12 → zou-0.20.13}/zou/app/models/department.py +0 -0
  161. {zou-0.20.12 → zou-0.20.13}/zou/app/models/desktop_login_log.py +0 -0
  162. {zou-0.20.12 → zou-0.20.13}/zou/app/models/entity.py +0 -0
  163. {zou-0.20.12 → zou-0.20.13}/zou/app/models/event.py +0 -0
  164. {zou-0.20.12 → zou-0.20.13}/zou/app/models/file_status.py +0 -0
  165. {zou-0.20.12 → zou-0.20.13}/zou/app/models/login_log.py +0 -0
  166. {zou-0.20.12 → zou-0.20.13}/zou/app/models/milestone.py +0 -0
  167. {zou-0.20.12 → zou-0.20.13}/zou/app/models/news.py +0 -0
  168. {zou-0.20.12 → zou-0.20.13}/zou/app/models/notification.py +0 -0
  169. {zou-0.20.12 → zou-0.20.13}/zou/app/models/organisation.py +0 -0
  170. {zou-0.20.12 → zou-0.20.13}/zou/app/models/output_file.py +0 -0
  171. {zou-0.20.12 → zou-0.20.13}/zou/app/models/output_type.py +0 -0
  172. {zou-0.20.12 → zou-0.20.13}/zou/app/models/person.py +0 -0
  173. {zou-0.20.12 → zou-0.20.13}/zou/app/models/playlist.py +0 -0
  174. {zou-0.20.12 → zou-0.20.13}/zou/app/models/preview_background_file.py +0 -0
  175. {zou-0.20.12 → zou-0.20.13}/zou/app/models/preview_file.py +0 -0
  176. {zou-0.20.12 → zou-0.20.13}/zou/app/models/project.py +0 -0
  177. {zou-0.20.12 → zou-0.20.13}/zou/app/models/project_status.py +0 -0
  178. {zou-0.20.12 → zou-0.20.13}/zou/app/models/schedule_item.py +0 -0
  179. {zou-0.20.12 → zou-0.20.13}/zou/app/models/search_filter.py +0 -0
  180. {zou-0.20.12 → zou-0.20.13}/zou/app/models/search_filter_group.py +0 -0
  181. {zou-0.20.12 → zou-0.20.13}/zou/app/models/serializer.py +0 -0
  182. {zou-0.20.12 → zou-0.20.13}/zou/app/models/software.py +0 -0
  183. {zou-0.20.12 → zou-0.20.13}/zou/app/models/status_automation.py +0 -0
  184. {zou-0.20.12 → zou-0.20.13}/zou/app/models/studio.py +0 -0
  185. {zou-0.20.12 → zou-0.20.13}/zou/app/models/subscription.py +0 -0
  186. {zou-0.20.12 → zou-0.20.13}/zou/app/models/task.py +0 -0
  187. {zou-0.20.12 → zou-0.20.13}/zou/app/models/task_status.py +0 -0
  188. {zou-0.20.12 → zou-0.20.13}/zou/app/models/task_type.py +0 -0
  189. {zou-0.20.12 → zou-0.20.13}/zou/app/models/time_spent.py +0 -0
  190. {zou-0.20.12 → zou-0.20.13}/zou/app/models/working_file.py +0 -0
  191. {zou-0.20.12 → zou-0.20.13}/zou/app/services/__init__.py +0 -0
  192. {zou-0.20.12 → zou-0.20.13}/zou/app/services/assets_service.py +0 -0
  193. {zou-0.20.12 → zou-0.20.13}/zou/app/services/auth_service.py +0 -0
  194. {zou-0.20.12 → zou-0.20.13}/zou/app/services/backup_service.py +0 -0
  195. {zou-0.20.12 → zou-0.20.13}/zou/app/services/base_service.py +0 -0
  196. {zou-0.20.12 → zou-0.20.13}/zou/app/services/breakdown_service.py +0 -0
  197. {zou-0.20.12 → zou-0.20.13}/zou/app/services/chats_service.py +0 -0
  198. {zou-0.20.12 → zou-0.20.13}/zou/app/services/concepts_service.py +0 -0
  199. {zou-0.20.12 → zou-0.20.13}/zou/app/services/custom_actions_service.py +0 -0
  200. {zou-0.20.12 → zou-0.20.13}/zou/app/services/deletion_service.py +0 -0
  201. {zou-0.20.12 → zou-0.20.13}/zou/app/services/edits_service.py +0 -0
  202. {zou-0.20.12 → zou-0.20.13}/zou/app/services/emails_service.py +0 -0
  203. {zou-0.20.12 → zou-0.20.13}/zou/app/services/entities_service.py +0 -0
  204. {zou-0.20.12 → zou-0.20.13}/zou/app/services/events_service.py +0 -0
  205. {zou-0.20.12 → zou-0.20.13}/zou/app/services/exception.py +0 -0
  206. {zou-0.20.12 → zou-0.20.13}/zou/app/services/file_tree_service.py +0 -0
  207. {zou-0.20.12 → zou-0.20.13}/zou/app/services/files_service.py +0 -0
  208. {zou-0.20.12 → zou-0.20.13}/zou/app/services/names_service.py +0 -0
  209. {zou-0.20.12 → zou-0.20.13}/zou/app/services/news_service.py +0 -0
  210. {zou-0.20.12 → zou-0.20.13}/zou/app/services/notifications_service.py +0 -0
  211. {zou-0.20.12 → zou-0.20.13}/zou/app/services/persons_service.py +0 -0
  212. {zou-0.20.12 → zou-0.20.13}/zou/app/services/playlists_service.py +0 -0
  213. {zou-0.20.12 → zou-0.20.13}/zou/app/services/preview_files_service.py +0 -0
  214. {zou-0.20.12 → zou-0.20.13}/zou/app/services/projects_service.py +0 -0
  215. {zou-0.20.12 → zou-0.20.13}/zou/app/services/scenes_service.py +0 -0
  216. {zou-0.20.12 → zou-0.20.13}/zou/app/services/schedule_service.py +0 -0
  217. {zou-0.20.12 → zou-0.20.13}/zou/app/services/shots_service.py +0 -0
  218. {zou-0.20.12 → zou-0.20.13}/zou/app/services/stats_service.py +0 -0
  219. {zou-0.20.12 → zou-0.20.13}/zou/app/services/status_automations_service.py +0 -0
  220. {zou-0.20.12 → zou-0.20.13}/zou/app/services/sync_service.py +0 -0
  221. {zou-0.20.12 → zou-0.20.13}/zou/app/services/telemetry_services.py +0 -0
  222. {zou-0.20.12 → zou-0.20.13}/zou/app/services/time_spents_service.py +0 -0
  223. {zou-0.20.12 → zou-0.20.13}/zou/app/services/user_service.py +0 -0
  224. {zou-0.20.12 → zou-0.20.13}/zou/app/stores/__init__.py +0 -0
  225. {zou-0.20.12 → zou-0.20.13}/zou/app/stores/auth_tokens_store.py +0 -0
  226. {zou-0.20.12 → zou-0.20.13}/zou/app/stores/file_store.py +0 -0
  227. {zou-0.20.12 → zou-0.20.13}/zou/app/stores/publisher_store.py +0 -0
  228. {zou-0.20.12 → zou-0.20.13}/zou/app/stores/queue_store.py +0 -0
  229. {zou-0.20.12 → zou-0.20.13}/zou/app/swagger.py +0 -0
  230. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/__init__.py +0 -0
  231. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/api.py +0 -0
  232. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/auth.py +0 -0
  233. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/cache.py +0 -0
  234. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/chats.py +0 -0
  235. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/colors.py +0 -0
  236. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/commands.py +0 -0
  237. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/csv_utils.py +0 -0
  238. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/date_helpers.py +0 -0
  239. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/dbhelpers.py +0 -0
  240. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/emails.py +0 -0
  241. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/env.py +0 -0
  242. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/events.py +0 -0
  243. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/fido.py +0 -0
  244. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/fields.py +0 -0
  245. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/flask.py +0 -0
  246. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/fs.py +0 -0
  247. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/git.py +0 -0
  248. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/logs.py +0 -0
  249. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/monitoring.py +0 -0
  250. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/permissions.py +0 -0
  251. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/query.py +0 -0
  252. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/redis.py +0 -0
  253. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/remote_job.py +0 -0
  254. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/saml.py +0 -0
  255. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/shell.py +0 -0
  256. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/string.py +0 -0
  257. {zou-0.20.12 → zou-0.20.13}/zou/app/utils/thumbnail.py +0 -0
  258. {zou-0.20.12 → zou-0.20.13}/zou/debug.py +0 -0
  259. {zou-0.20.12 → zou-0.20.13}/zou/event_stream.py +0 -0
  260. {zou-0.20.12 → zou-0.20.13}/zou/job_settings.py +0 -0
  261. {zou-0.20.12 → zou-0.20.13}/zou/migrations/README +0 -0
  262. {zou-0.20.12 → zou-0.20.13}/zou/migrations/__init__.py +0 -0
  263. {zou-0.20.12 → zou-0.20.13}/zou/migrations/alembic.ini +0 -0
  264. {zou-0.20.12 → zou-0.20.13}/zou/migrations/env.py +0 -0
  265. {zou-0.20.12 → zou-0.20.13}/zou/migrations/script.py.mako +0 -0
  266. {zou-0.20.12 → zou-0.20.13}/zou/migrations/utils/__init__.py +0 -0
  267. {zou-0.20.12 → zou-0.20.13}/zou/migrations/utils/base.py +0 -0
  268. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/003be8a91001_add_start_and_end_dates_to_projects.py +0 -0
  269. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/0596674df51d_add_department_mentions_to_comments.py +0 -0
  270. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/05ac7e8caa21_remove_unique_constraint_for_taskstatus_.py +0 -0
  271. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/05b7dc79a416_add_archived_fields_to_main_tables.py +0 -0
  272. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/0cf5e0e035fa_drop_column_tasktype_for_shots.py +0 -0
  273. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/0ec3762a745d_add_attachment_table.py +0 -0
  274. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/0ef6416a507b_.py +0 -0
  275. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/10cf267d95c9_fix_schedule_item.py +0 -0
  276. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/16328eae4b5f_add_new_constraint_for_timespent.py +0 -0
  277. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/16df47d76c64_add_some_indexes.py +0 -0
  278. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/17ef8f7be758_disallow_null_choicetype.py +0 -0
  279. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/1bb55759146f_add_table_studio.py +0 -0
  280. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/1cb44194db49_add_file_size_field_to_preview_file.py +0 -0
  281. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/1e150c2cea4d_add_nb_entities_out.py +0 -0
  282. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/1e2d77a2f0c4_add_hd_by_default_column.py +0 -0
  283. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/1fab8c420678_add_attachments_to_message_chats.py +0 -0
  284. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/20dfeb36142b_add_projecttaskstatuslink_roles_for_.py +0 -0
  285. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/23122f290ca2_add_entity_chat_models.py +0 -0
  286. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/269d41bfb73f_add_entity_entity_links.py +0 -0
  287. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/29df910f04a4_create_unique_constraint_project_id_.py +0 -0
  288. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/29fe01a6c9eb_add_status_automation_field.py +0 -0
  289. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/2adc020885fa_.py +0 -0
  290. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/2baede80b111_add_entity_status_field.py +0 -0
  291. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/306266361f4f_.py +0 -0
  292. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/328fd44c6347_add_entity_created_by.py +0 -0
  293. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/32f134ff1201_add_is_shared_flag_to_filters.py +0 -0
  294. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/346250b5304c_add_position_to_preview_files.py +0 -0
  295. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/3476e147e632_add_acks_to_comments.py +0 -0
  296. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/389cfb9de776_.py +0 -0
  297. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/38baa9a23b3d_.py +0 -0
  298. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/398150912a3f_validation_status_preview.py +0 -0
  299. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/3b0d1321079e_.py +0 -0
  300. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/3d5c93bafb9d_.py +0 -0
  301. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/3e0538ddf80f_.py +0 -0
  302. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/3fee3bd10f9d_.py +0 -0
  303. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/4095103c7d01_add_is_clients_isolated_flag_to_projects.py +0 -0
  304. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/40dea9555940_.py +0 -0
  305. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/42ec83db6a01_change_person_preferred_two_factor_.py +0 -0
  306. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/43d0cf0ed5e7_.py +0 -0
  307. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/443d1e78a932_.py +0 -0
  308. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/45c2de366e66_.py +0 -0
  309. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/45dafbb3f4e1_for_person_contract_type_disallow_null.py +0 -0
  310. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/4715c2586036_add_last_preview_file_fields.py +0 -0
  311. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/4e3738cdc34c_.py +0 -0
  312. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/4f2398ebcd49_.py +0 -0
  313. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/523ee9647bee_.py +0 -0
  314. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/539a3a00c417_for_departmentlink_index_person_id_.py +0 -0
  315. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/54ee0d1d60ba_add_build_job_model.py +0 -0
  316. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/556526e47daa_.py +0 -0
  317. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/57222395f2be_add_statusautomation_import_last_revision.py +0 -0
  318. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/5798d2c9020b_change_person_role_to_choicetype.py +0 -0
  319. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/590aa1ffe731_add_notifications_enabled_flag.py +0 -0
  320. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/59a7445a966c_add_entity_is_shared.py +0 -0
  321. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/5a291251823c_add_max_retake_parameter.py +0 -0
  322. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/5ab9d7a75887_.py +0 -0
  323. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/5b0fcbb94f24_.py +0 -0
  324. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/5b7fa3e51701_add_is_client_allowed_flag_to_task_.py +0 -0
  325. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/5b980f0dc365_add_comment_links.py +0 -0
  326. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/5b9fd9ddfe43_add_homepage_and_contract_fields.py +0 -0
  327. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/5c0498e264bc_add_slack_fields.py +0 -0
  328. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/5e2ce62632a6_add_workflow_to_project.py +0 -0
  329. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/680c64565f9d_for_searchfiltergroup_is_shared.py +0 -0
  330. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/693cc511d28d_add_taskstatus_priority.py +0 -0
  331. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/6aa446ee4072_add_is_for_all_flage_to_playlists.py +0 -0
  332. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/6bd3b102d61b_.py +0 -0
  333. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/6c597e842afa_add_task_type_field_to_playlists.py +0 -0
  334. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/6d1b2c60f58b_add_milestone_model.py +0 -0
  335. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/6d7fa5a8e9a5_add_timesheets_locked_field_to_org.py +0 -0
  336. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/6eeaff945706_add_data_field_on_entity_links.py +0 -0
  337. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/6f6049877105_.py +0 -0
  338. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/7417c8eb70d8_add_for_entity_field_to_playlists.py +0 -0
  339. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/772a5e43f05b_.py +0 -0
  340. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/7748d3d22925_add_columns_to_searchfilter_table_to_.py +0 -0
  341. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/77d6820f494f_add_reply_to_notif.py +0 -0
  342. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/7b1f765677d8_.py +0 -0
  343. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/7bc746997e8d_add_slack_token_field_to_organisation.py +0 -0
  344. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/7dc79d4ed7cd_.py +0 -0
  345. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/818f7bda2528_.py +0 -0
  346. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/82e7f7a95e84_add_project_id_to_events.py +0 -0
  347. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/82ee682204ab_add_is_generated_from_ldap_column_to_.py +0 -0
  348. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/8588f254d6b8_add_archived_fields.py +0 -0
  349. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/8739ae9fa28b_add_for_client_field.py +0 -0
  350. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/87efceb6745b_add_ready_for_to_entity.py +0 -0
  351. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/892b264937ec_.py +0 -0
  352. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/8a1b4a1b7f4a_add_totp_columns_for_person.py +0 -0
  353. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/8e4f39e321f4_add_day_off_table.py +0 -0
  354. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/8e67c183bed7_add_preference_fields.py +0 -0
  355. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/8fbd40afbe5f_allow_to_set_float_values_for_.py +0 -0
  356. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/9010a64e5a2d_add_indices.py +0 -0
  357. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/9060dd4f6116_notification_uc.py +0 -0
  358. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/925771029620_.py +0 -0
  359. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/92b40d79ad3f_allow_message_attachments.py +0 -0
  360. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/92bdfe07e5f5_discord_integration.py +0 -0
  361. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/956659992419_add_columns_for_person_to_store_fido_.py +0 -0
  362. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/96c79d31e648_add_mail_otp_columns_for_person.py +0 -0
  363. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/96f58a4a2a58_person_partial_index_for_email_only_.py +0 -0
  364. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/971dbf5a0faf_add_short_name_for_asset_type_entity_.py +0 -0
  365. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/98c90621cf58_add_for_client_flag_to_playlist.py +0 -0
  366. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/99825b9cc778_.py +0 -0
  367. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/9a09467f9b2c_.py +0 -0
  368. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/9b85c14fa8a7_add_day_off_new_columns.py +0 -0
  369. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/9bd17364fc18_.py +0 -0
  370. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/9d3bb33c6fc6_add_department_keys_to_filter_models.py +0 -0
  371. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/9e5b3a9b0cee_add_new_column_metadatadescriptor_data_type_.py +0 -0
  372. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/9f8445f9b42c_add_man_days_fields.py +0 -0
  373. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/a23682ccc1f1_.py +0 -0
  374. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/a252a094e977_add_descriptions_for_entities_tasks_and_.py +0 -0
  375. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/a519c710877c_.py +0 -0
  376. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/a65bdadbae2f_.py +0 -0
  377. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/a66508788c53_add_nb_assets_ready.py +0 -0
  378. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/a6c25eed3ea1_add_login_failed_attemps_and_last_login_.py +0 -0
  379. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/a7c43f3fbc76_add_duration_column_to_the_preview_file.py +0 -0
  380. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/aa0a60033106_feedback_request.py +0 -0
  381. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/addbbefa7028_add_departments_link_to_metadata_.py +0 -0
  382. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/ae0127f2fc56_add_previewfile_width_and_previewfile_.py +0 -0
  383. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/af1790868e2c_.py +0 -0
  384. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/b45cb782bb9c_.py +0 -0
  385. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/b4dd0add5f79_.py +0 -0
  386. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/b8c0a0f9d054_drop_task_status_is_reviewable.py +0 -0
  387. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/b8ed0fb263f8_add_person_jti_and_jti_expiration_date.py +0 -0
  388. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/b97a71306fc8_add_is_casting_standby_column_to_entity.py +0 -0
  389. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/be56dc0fb760_for_is_shared_disallow_nullable.py +0 -0
  390. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/bf1347acdee2_.py +0 -0
  391. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/c49e41f1298b_add_previewbackground.py +0 -0
  392. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/c68c2a62cfac_add_mimetype_column_to_attachment.py +0 -0
  393. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/c726b98be194_.py +0 -0
  394. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/c81f3e83bdb5_.py +0 -0
  395. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/ca28796a2a62_add_is_done_field_to_the_task_model.py +0 -0
  396. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/cf3d365de164_add_entity_version_model.py +0 -0
  397. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/cf6cec6d6bf5_add_status_field_to_preview_file.py +0 -0
  398. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/d80267806131_task_status_new_column_is_default.py +0 -0
  399. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/d8dcd5196d57_add_casting_label.py +0 -0
  400. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/de8a3de227ef_.py +0 -0
  401. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/deeacd38d373_for_projecttaskstatuslink_set_default_.py +0 -0
  402. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/df1834485f57_.py +0 -0
  403. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/df9f8a147e80_change_file_size_to_big_integer.py +0 -0
  404. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/e1ef93f40d3d_.py +0 -0
  405. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/e29638428dfd_add_schedule_item_table.py +0 -0
  406. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/e3f6db74cc1e_.py +0 -0
  407. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/e839d6603c09_add_person_id_to_shot_history.py +0 -0
  408. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/ee2373fbe3a4_.py +0 -0
  409. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/f0567e8d0c62_.py +0 -0
  410. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/f0c6cbb61869_add_production_style_field.py +0 -0
  411. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/f344b867a911_for_description_of_entity_task_working_.py +0 -0
  412. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/f4ff5a73d283_add_person_ldap_uid.py +0 -0
  413. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/f5b113876a49_add_preferred_two_factor_authentication_.py +0 -0
  414. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/f5bdca075cdc_add_preview_download_flag_to_projects.py +0 -0
  415. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/f874ad5e898a_add_link_entity_type_task_type.py +0 -0
  416. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/f995b28fb749_.py +0 -0
  417. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/fb6b6f188497_.py +0 -0
  418. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/fb87feaaa094_add_missing_unique_constraints.py +0 -0
  419. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/fc322f908695_.py +0 -0
  420. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/fee7c696166e_.py +0 -0
  421. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/feffd3c5b806_introduce_concepts.py +0 -0
  422. {zou-0.20.12 → zou-0.20.13}/zou/migrations/versions/ffeed4956ab1_add_more_details_to_projects.py +0 -0
  423. {zou-0.20.12 → zou-0.20.13}/zou/remote/__init__.py +0 -0
  424. {zou-0.20.12 → zou-0.20.13}/zou/remote/config_payload.py +0 -0
  425. {zou-0.20.12 → zou-0.20.13}/zou/remote/normalize_movie.py +0 -0
  426. {zou-0.20.12 → zou-0.20.13}/zou/remote/playlist.py +0 -0
  427. {zou-0.20.12 → zou-0.20.13}/zou/utils/__init__.py +0 -0
  428. {zou-0.20.12 → zou-0.20.13}/zou/utils/movie.py +0 -0
  429. {zou-0.20.12 → zou-0.20.13}/zou.egg-info/dependency_links.txt +0 -0
  430. {zou-0.20.12 → zou-0.20.13}/zou.egg-info/entry_points.txt +0 -0
  431. {zou-0.20.12 → zou-0.20.13}/zou.egg-info/not-zip-safe +0 -0
  432. {zou-0.20.12 → 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.12
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.23
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
@@ -91,7 +91,7 @@ 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.23
50
+ gazu==0.10.25
51
51
  gevent-websocket==0.10.1
52
52
  gevent==24.11.1
53
53
  gunicorn==23.0.0
@@ -105,7 +105,7 @@ monitoring =
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,
@@ -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__ = (
@@ -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):
@@ -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):
@@ -0,0 +1,132 @@
1
+ """TaskTypeAssetTypeLink/DepartmentMetadataDescriptorLink add index, pkey and constraint
2
+
3
+ Revision ID: 20a8ad264659
4
+ Revises: 539a3a00c417
5
+ Create Date: 2025-01-26 23:15:27.665887
6
+
7
+ """
8
+
9
+ from alembic import op
10
+ import sqlalchemy as sa
11
+
12
+
13
+ # revision identifiers, used by Alembic.
14
+ revision = "20a8ad264659"
15
+ down_revision = "539a3a00c417"
16
+ branch_labels = None
17
+ depends_on = None
18
+
19
+
20
+ def upgrade():
21
+ # ### commands auto generated by Alembic - please adjust! ###
22
+ with op.batch_alter_table(
23
+ "department_metadata_descriptor_link", schema=None
24
+ ) as batch_op:
25
+ batch_op.alter_column(
26
+ "metadata_descriptor_id", existing_type=sa.UUID(), nullable=False
27
+ )
28
+ batch_op.alter_column(
29
+ "department_id", existing_type=sa.UUID(), nullable=False
30
+ )
31
+ batch_op.create_unique_constraint(
32
+ "department_metadata_descriptor_link_uc",
33
+ ["metadata_descriptor_id", "department_id"],
34
+ )
35
+ batch_op.create_index(
36
+ batch_op.f("ix_department_metadata_descriptor_link_department_id"),
37
+ ["department_id"],
38
+ unique=False,
39
+ )
40
+ batch_op.create_index(
41
+ batch_op.f(
42
+ "ix_department_metadata_descriptor_link_metadata_descriptor_id"
43
+ ),
44
+ ["metadata_descriptor_id"],
45
+ unique=False,
46
+ )
47
+
48
+ batch_op.create_primary_key(
49
+ "department_metadata_descriptor_link_pkey",
50
+ ["metadata_descriptor_id", "department_id"],
51
+ )
52
+
53
+ with op.batch_alter_table(
54
+ "task_type_asset_type_link", schema=None
55
+ ) as batch_op:
56
+ batch_op.alter_column(
57
+ "asset_type_id", existing_type=sa.UUID(), nullable=False
58
+ )
59
+ batch_op.alter_column(
60
+ "task_type_id", existing_type=sa.UUID(), nullable=False
61
+ )
62
+ batch_op.create_index(
63
+ batch_op.f("ix_task_type_asset_type_link_asset_type_id"),
64
+ ["asset_type_id"],
65
+ unique=False,
66
+ )
67
+ batch_op.create_index(
68
+ batch_op.f("ix_task_type_asset_type_link_task_type_id"),
69
+ ["task_type_id"],
70
+ unique=False,
71
+ )
72
+ batch_op.create_unique_constraint(
73
+ "task_type_asset_type_link_uc", ["asset_type_id", "task_type_id"]
74
+ )
75
+
76
+ batch_op.create_primary_key(
77
+ "task_type_asset_type_link_pkey", ["asset_type_id", "task_type_id"]
78
+ )
79
+
80
+ # ### end Alembic commands ###
81
+
82
+
83
+ def downgrade():
84
+ # ### commands auto generated by Alembic - please adjust! ###
85
+ with op.batch_alter_table(
86
+ "task_type_asset_type_link", schema=None
87
+ ) as batch_op:
88
+ batch_op.drop_constraint(
89
+ "task_type_asset_type_link_pkey", type_="primary"
90
+ )
91
+ batch_op.drop_constraint(
92
+ "task_type_asset_type_link_uc", type_="unique"
93
+ )
94
+ batch_op.drop_index(
95
+ batch_op.f("ix_task_type_asset_type_link_task_type_id")
96
+ )
97
+ batch_op.drop_index(
98
+ batch_op.f("ix_task_type_asset_type_link_asset_type_id")
99
+ )
100
+
101
+ batch_op.alter_column(
102
+ "task_type_id", existing_type=sa.UUID(), nullable=True
103
+ )
104
+ batch_op.alter_column(
105
+ "asset_type_id", existing_type=sa.UUID(), nullable=True
106
+ )
107
+
108
+ with op.batch_alter_table(
109
+ "department_metadata_descriptor_link", schema=None
110
+ ) as batch_op:
111
+ batch_op.drop_index(
112
+ batch_op.f(
113
+ "ix_department_metadata_descriptor_link_metadata_descriptor_id"
114
+ )
115
+ )
116
+ batch_op.drop_index(
117
+ batch_op.f("ix_department_metadata_descriptor_link_department_id")
118
+ )
119
+ batch_op.drop_constraint(
120
+ "department_metadata_descriptor_link_pkey", type_="primary"
121
+ )
122
+ batch_op.drop_constraint(
123
+ "department_metadata_descriptor_link_uc", type_="unique"
124
+ )
125
+ batch_op.alter_column(
126
+ "department_id", existing_type=sa.UUID(), nullable=True
127
+ )
128
+ batch_op.alter_column(
129
+ "metadata_descriptor_id", existing_type=sa.UUID(), nullable=True
130
+ )
131
+
132
+ # ### end Alembic commands ###
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: zou
3
- Version: 0.20.12
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.23
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
@@ -91,7 +91,7 @@ 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