zou 0.20.18__tar.gz → 0.20.20__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 (434) hide show
  1. {zou-0.20.18/zou.egg-info → zou-0.20.20}/PKG-INFO +4 -4
  2. {zou-0.20.18 → zou-0.20.20}/setup.cfg +3 -3
  3. zou-0.20.20/zou/__init__.py +1 -0
  4. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/comments/resources.py +2 -3
  5. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/comments.py +5 -0
  6. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/working_file.py +1 -1
  7. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/files/resources.py +2 -2
  8. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/previews/resources.py +4 -4
  9. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/tasks/resources.py +6 -2
  10. {zou-0.20.18 → zou-0.20.20}/zou/app/mixin.py +1 -1
  11. {zou-0.20.18 → zou-0.20.20}/zou/app/models/comment.py +6 -0
  12. {zou-0.20.18 → zou-0.20.20}/zou/app/services/sync_service.py +6 -0
  13. {zou-0.20.18 → zou-0.20.20}/zou/app/services/tasks_service.py +38 -3
  14. {zou-0.20.18 → zou-0.20.20}/zou/app/services/user_service.py +33 -8
  15. zou-0.20.20/zou/migrations/versions/06552e22f9e7_add_comment_updated_by.py +48 -0
  16. {zou-0.20.18 → zou-0.20.20/zou.egg-info}/PKG-INFO +4 -4
  17. {zou-0.20.18 → zou-0.20.20}/zou.egg-info/SOURCES.txt +1 -0
  18. {zou-0.20.18 → zou-0.20.20}/zou.egg-info/requires.txt +3 -3
  19. zou-0.20.18/zou/__init__.py +0 -1
  20. {zou-0.20.18 → zou-0.20.20}/LICENSE +0 -0
  21. {zou-0.20.18 → zou-0.20.20}/README.rst +0 -0
  22. {zou-0.20.18 → zou-0.20.20}/pyproject.toml +0 -0
  23. {zou-0.20.18 → zou-0.20.20}/setup.py +0 -0
  24. {zou-0.20.18 → zou-0.20.20}/zou/app/__init__.py +0 -0
  25. {zou-0.20.18 → zou-0.20.20}/zou/app/api.py +0 -0
  26. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/__init__.py +0 -0
  27. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/assets/__init__.py +0 -0
  28. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/assets/resources.py +0 -0
  29. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/auth/__init__.py +0 -0
  30. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/auth/resources.py +0 -0
  31. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/breakdown/__init__.py +0 -0
  32. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/breakdown/resources.py +0 -0
  33. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/chats/__init__.py +0 -0
  34. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/chats/resources.py +0 -0
  35. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/comments/__init__.py +0 -0
  36. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/concepts/__init__.py +0 -0
  37. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/concepts/resources.py +0 -0
  38. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/__init__.py +0 -0
  39. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/asset_instance.py +0 -0
  40. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/attachment_file.py +0 -0
  41. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/base.py +0 -0
  42. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/chat.py +0 -0
  43. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/chat_message.py +0 -0
  44. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/custom_action.py +0 -0
  45. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/day_off.py +0 -0
  46. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/department.py +0 -0
  47. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/entity.py +0 -0
  48. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/entity_link.py +0 -0
  49. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/entity_type.py +0 -0
  50. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/event.py +0 -0
  51. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/file_status.py +0 -0
  52. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/metadata_descriptor.py +0 -0
  53. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/milestone.py +0 -0
  54. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/news.py +0 -0
  55. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/notification.py +0 -0
  56. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/organisation.py +0 -0
  57. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/output_file.py +0 -0
  58. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/output_type.py +0 -0
  59. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/person.py +0 -0
  60. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/playlist.py +0 -0
  61. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/preview_background_file.py +0 -0
  62. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/preview_file.py +0 -0
  63. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/project.py +0 -0
  64. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/project_status.py +0 -0
  65. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/schedule_item.py +0 -0
  66. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/search_filter.py +0 -0
  67. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/search_filter_group.py +0 -0
  68. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/software.py +0 -0
  69. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/status_automation.py +0 -0
  70. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/studio.py +0 -0
  71. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/subscription.py +0 -0
  72. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/task.py +0 -0
  73. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/task_status.py +0 -0
  74. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/task_type.py +0 -0
  75. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/crud/time_spent.py +0 -0
  76. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/edits/__init__.py +0 -0
  77. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/edits/resources.py +0 -0
  78. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/entities/__init__.py +0 -0
  79. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/entities/resources.py +0 -0
  80. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/events/__init__.py +0 -0
  81. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/events/resources.py +0 -0
  82. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/export/__init__.py +0 -0
  83. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/export/csv/__init__.py +0 -0
  84. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/export/csv/assets.py +0 -0
  85. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/export/csv/base.py +0 -0
  86. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/export/csv/casting.py +0 -0
  87. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/export/csv/edits.py +0 -0
  88. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/export/csv/persons.py +0 -0
  89. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/export/csv/playlists.py +0 -0
  90. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/export/csv/projects.py +0 -0
  91. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/export/csv/shots.py +0 -0
  92. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/export/csv/task_types.py +0 -0
  93. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/export/csv/tasks.py +0 -0
  94. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/export/csv/time_spents.py +0 -0
  95. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/files/__init__.py +0 -0
  96. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/index/__init__.py +0 -0
  97. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/index/resources.py +0 -0
  98. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/news/__init__.py +0 -0
  99. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/news/resources.py +0 -0
  100. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/persons/__init__.py +0 -0
  101. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/persons/resources.py +0 -0
  102. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/playlists/__init__.py +0 -0
  103. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/playlists/resources.py +0 -0
  104. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/previews/__init__.py +0 -0
  105. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/projects/__init__.py +0 -0
  106. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/projects/resources.py +0 -0
  107. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/search/__init__.py +0 -0
  108. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/search/resources.py +0 -0
  109. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/shots/__init__.py +0 -0
  110. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/shots/resources.py +0 -0
  111. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/__init__.py +0 -0
  112. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/csv/__init__.py +0 -0
  113. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/csv/assets.py +0 -0
  114. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/csv/base.py +0 -0
  115. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/csv/casting.py +0 -0
  116. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/csv/edits.py +0 -0
  117. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/csv/persons.py +0 -0
  118. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/csv/shots.py +0 -0
  119. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/csv/task_type_estimations.py +0 -0
  120. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/kitsu.py +0 -0
  121. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/otio.py +0 -0
  122. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/shotgun/__init__.py +0 -0
  123. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/shotgun/assets.py +0 -0
  124. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/shotgun/base.py +0 -0
  125. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/shotgun/episode.py +0 -0
  126. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/shotgun/exception.py +0 -0
  127. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/shotgun/import_errors.py +0 -0
  128. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/shotgun/notes.py +0 -0
  129. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/shotgun/person.py +0 -0
  130. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/shotgun/project.py +0 -0
  131. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/shotgun/scene.py +0 -0
  132. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/shotgun/sequence.py +0 -0
  133. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/shotgun/shot.py +0 -0
  134. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/shotgun/status.py +0 -0
  135. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/shotgun/steps.py +0 -0
  136. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/shotgun/tasks.py +0 -0
  137. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/shotgun/team.py +0 -0
  138. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/source/shotgun/versions.py +0 -0
  139. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/tasks/__init__.py +0 -0
  140. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/user/__init__.py +0 -0
  141. {zou-0.20.18 → zou-0.20.20}/zou/app/blueprints/user/resources.py +0 -0
  142. {zou-0.20.18 → zou-0.20.20}/zou/app/config.py +0 -0
  143. {zou-0.20.18 → zou-0.20.20}/zou/app/file_trees/default.json +0 -0
  144. {zou-0.20.18 → zou-0.20.20}/zou/app/file_trees/simple.json +0 -0
  145. {zou-0.20.18 → zou-0.20.20}/zou/app/indexer/__init__.py +0 -0
  146. {zou-0.20.18 → zou-0.20.20}/zou/app/indexer/indexing.py +0 -0
  147. {zou-0.20.18 → zou-0.20.20}/zou/app/models/__init__.py +0 -0
  148. {zou-0.20.18 → zou-0.20.20}/zou/app/models/asset_instance.py +0 -0
  149. {zou-0.20.18 → zou-0.20.20}/zou/app/models/attachment_file.py +0 -0
  150. {zou-0.20.18 → zou-0.20.20}/zou/app/models/base.py +0 -0
  151. {zou-0.20.18 → zou-0.20.20}/zou/app/models/build_job.py +0 -0
  152. {zou-0.20.18 → zou-0.20.20}/zou/app/models/chat.py +0 -0
  153. {zou-0.20.18 → zou-0.20.20}/zou/app/models/chat_message.py +0 -0
  154. {zou-0.20.18 → zou-0.20.20}/zou/app/models/custom_action.py +0 -0
  155. {zou-0.20.18 → zou-0.20.20}/zou/app/models/data_import_error.py +0 -0
  156. {zou-0.20.18 → zou-0.20.20}/zou/app/models/day_off.py +0 -0
  157. {zou-0.20.18 → zou-0.20.20}/zou/app/models/department.py +0 -0
  158. {zou-0.20.18 → zou-0.20.20}/zou/app/models/desktop_login_log.py +0 -0
  159. {zou-0.20.18 → zou-0.20.20}/zou/app/models/entity.py +0 -0
  160. {zou-0.20.18 → zou-0.20.20}/zou/app/models/entity_type.py +0 -0
  161. {zou-0.20.18 → zou-0.20.20}/zou/app/models/event.py +0 -0
  162. {zou-0.20.18 → zou-0.20.20}/zou/app/models/file_status.py +0 -0
  163. {zou-0.20.18 → zou-0.20.20}/zou/app/models/login_log.py +0 -0
  164. {zou-0.20.18 → zou-0.20.20}/zou/app/models/metadata_descriptor.py +0 -0
  165. {zou-0.20.18 → zou-0.20.20}/zou/app/models/milestone.py +0 -0
  166. {zou-0.20.18 → zou-0.20.20}/zou/app/models/news.py +0 -0
  167. {zou-0.20.18 → zou-0.20.20}/zou/app/models/notification.py +0 -0
  168. {zou-0.20.18 → zou-0.20.20}/zou/app/models/organisation.py +0 -0
  169. {zou-0.20.18 → zou-0.20.20}/zou/app/models/output_file.py +0 -0
  170. {zou-0.20.18 → zou-0.20.20}/zou/app/models/output_type.py +0 -0
  171. {zou-0.20.18 → zou-0.20.20}/zou/app/models/person.py +0 -0
  172. {zou-0.20.18 → zou-0.20.20}/zou/app/models/playlist.py +0 -0
  173. {zou-0.20.18 → zou-0.20.20}/zou/app/models/preview_background_file.py +0 -0
  174. {zou-0.20.18 → zou-0.20.20}/zou/app/models/preview_file.py +0 -0
  175. {zou-0.20.18 → zou-0.20.20}/zou/app/models/project.py +0 -0
  176. {zou-0.20.18 → zou-0.20.20}/zou/app/models/project_status.py +0 -0
  177. {zou-0.20.18 → zou-0.20.20}/zou/app/models/schedule_item.py +0 -0
  178. {zou-0.20.18 → zou-0.20.20}/zou/app/models/search_filter.py +0 -0
  179. {zou-0.20.18 → zou-0.20.20}/zou/app/models/search_filter_group.py +0 -0
  180. {zou-0.20.18 → zou-0.20.20}/zou/app/models/serializer.py +0 -0
  181. {zou-0.20.18 → zou-0.20.20}/zou/app/models/software.py +0 -0
  182. {zou-0.20.18 → zou-0.20.20}/zou/app/models/status_automation.py +0 -0
  183. {zou-0.20.18 → zou-0.20.20}/zou/app/models/studio.py +0 -0
  184. {zou-0.20.18 → zou-0.20.20}/zou/app/models/subscription.py +0 -0
  185. {zou-0.20.18 → zou-0.20.20}/zou/app/models/task.py +0 -0
  186. {zou-0.20.18 → zou-0.20.20}/zou/app/models/task_status.py +0 -0
  187. {zou-0.20.18 → zou-0.20.20}/zou/app/models/task_type.py +0 -0
  188. {zou-0.20.18 → zou-0.20.20}/zou/app/models/time_spent.py +0 -0
  189. {zou-0.20.18 → zou-0.20.20}/zou/app/models/working_file.py +0 -0
  190. {zou-0.20.18 → zou-0.20.20}/zou/app/services/__init__.py +0 -0
  191. {zou-0.20.18 → zou-0.20.20}/zou/app/services/assets_service.py +0 -0
  192. {zou-0.20.18 → zou-0.20.20}/zou/app/services/auth_service.py +0 -0
  193. {zou-0.20.18 → zou-0.20.20}/zou/app/services/backup_service.py +0 -0
  194. {zou-0.20.18 → zou-0.20.20}/zou/app/services/base_service.py +0 -0
  195. {zou-0.20.18 → zou-0.20.20}/zou/app/services/breakdown_service.py +0 -0
  196. {zou-0.20.18 → zou-0.20.20}/zou/app/services/chats_service.py +0 -0
  197. {zou-0.20.18 → zou-0.20.20}/zou/app/services/comments_service.py +0 -0
  198. {zou-0.20.18 → zou-0.20.20}/zou/app/services/concepts_service.py +0 -0
  199. {zou-0.20.18 → zou-0.20.20}/zou/app/services/custom_actions_service.py +0 -0
  200. {zou-0.20.18 → zou-0.20.20}/zou/app/services/deletion_service.py +0 -0
  201. {zou-0.20.18 → zou-0.20.20}/zou/app/services/edits_service.py +0 -0
  202. {zou-0.20.18 → zou-0.20.20}/zou/app/services/emails_service.py +0 -0
  203. {zou-0.20.18 → zou-0.20.20}/zou/app/services/entities_service.py +0 -0
  204. {zou-0.20.18 → zou-0.20.20}/zou/app/services/events_service.py +0 -0
  205. {zou-0.20.18 → zou-0.20.20}/zou/app/services/exception.py +0 -0
  206. {zou-0.20.18 → zou-0.20.20}/zou/app/services/file_tree_service.py +0 -0
  207. {zou-0.20.18 → zou-0.20.20}/zou/app/services/files_service.py +0 -0
  208. {zou-0.20.18 → zou-0.20.20}/zou/app/services/index_service.py +0 -0
  209. {zou-0.20.18 → zou-0.20.20}/zou/app/services/names_service.py +0 -0
  210. {zou-0.20.18 → zou-0.20.20}/zou/app/services/news_service.py +0 -0
  211. {zou-0.20.18 → zou-0.20.20}/zou/app/services/notifications_service.py +0 -0
  212. {zou-0.20.18 → zou-0.20.20}/zou/app/services/persons_service.py +0 -0
  213. {zou-0.20.18 → zou-0.20.20}/zou/app/services/playlists_service.py +0 -0
  214. {zou-0.20.18 → zou-0.20.20}/zou/app/services/preview_files_service.py +0 -0
  215. {zou-0.20.18 → zou-0.20.20}/zou/app/services/projects_service.py +0 -0
  216. {zou-0.20.18 → zou-0.20.20}/zou/app/services/scenes_service.py +0 -0
  217. {zou-0.20.18 → zou-0.20.20}/zou/app/services/schedule_service.py +0 -0
  218. {zou-0.20.18 → zou-0.20.20}/zou/app/services/shots_service.py +0 -0
  219. {zou-0.20.18 → zou-0.20.20}/zou/app/services/stats_service.py +0 -0
  220. {zou-0.20.18 → zou-0.20.20}/zou/app/services/status_automations_service.py +0 -0
  221. {zou-0.20.18 → zou-0.20.20}/zou/app/services/telemetry_services.py +0 -0
  222. {zou-0.20.18 → zou-0.20.20}/zou/app/services/time_spents_service.py +0 -0
  223. {zou-0.20.18 → zou-0.20.20}/zou/app/stores/__init__.py +0 -0
  224. {zou-0.20.18 → zou-0.20.20}/zou/app/stores/auth_tokens_store.py +0 -0
  225. {zou-0.20.18 → zou-0.20.20}/zou/app/stores/file_store.py +0 -0
  226. {zou-0.20.18 → zou-0.20.20}/zou/app/stores/publisher_store.py +0 -0
  227. {zou-0.20.18 → zou-0.20.20}/zou/app/stores/queue_store.py +0 -0
  228. {zou-0.20.18 → zou-0.20.20}/zou/app/swagger.py +0 -0
  229. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/__init__.py +0 -0
  230. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/api.py +0 -0
  231. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/auth.py +0 -0
  232. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/cache.py +0 -0
  233. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/chats.py +0 -0
  234. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/colors.py +0 -0
  235. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/commands.py +0 -0
  236. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/csv_utils.py +0 -0
  237. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/date_helpers.py +0 -0
  238. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/dbhelpers.py +0 -0
  239. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/emails.py +0 -0
  240. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/env.py +0 -0
  241. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/events.py +0 -0
  242. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/fido.py +0 -0
  243. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/fields.py +0 -0
  244. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/flask.py +0 -0
  245. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/fs.py +0 -0
  246. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/git.py +0 -0
  247. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/logs.py +0 -0
  248. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/monitoring.py +0 -0
  249. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/permissions.py +0 -0
  250. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/query.py +0 -0
  251. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/redis.py +0 -0
  252. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/remote_job.py +0 -0
  253. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/saml.py +0 -0
  254. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/shell.py +0 -0
  255. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/string.py +0 -0
  256. {zou-0.20.18 → zou-0.20.20}/zou/app/utils/thumbnail.py +0 -0
  257. {zou-0.20.18 → zou-0.20.20}/zou/cli.py +0 -0
  258. {zou-0.20.18 → zou-0.20.20}/zou/debug.py +0 -0
  259. {zou-0.20.18 → zou-0.20.20}/zou/event_stream.py +0 -0
  260. {zou-0.20.18 → zou-0.20.20}/zou/job_settings.py +0 -0
  261. {zou-0.20.18 → zou-0.20.20}/zou/migrations/README +0 -0
  262. {zou-0.20.18 → zou-0.20.20}/zou/migrations/__init__.py +0 -0
  263. {zou-0.20.18 → zou-0.20.20}/zou/migrations/alembic.ini +0 -0
  264. {zou-0.20.18 → zou-0.20.20}/zou/migrations/env.py +0 -0
  265. {zou-0.20.18 → zou-0.20.20}/zou/migrations/script.py.mako +0 -0
  266. {zou-0.20.18 → zou-0.20.20}/zou/migrations/utils/__init__.py +0 -0
  267. {zou-0.20.18 → zou-0.20.20}/zou/migrations/utils/base.py +0 -0
  268. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/003be8a91001_add_start_and_end_dates_to_projects.py +0 -0
  269. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/0596674df51d_add_department_mentions_to_comments.py +0 -0
  270. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/05ac7e8caa21_remove_unique_constraint_for_taskstatus_.py +0 -0
  271. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/05b7dc79a416_add_archived_fields_to_main_tables.py +0 -0
  272. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/0cf5e0e035fa_drop_column_tasktype_for_shots.py +0 -0
  273. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/0ec3762a745d_add_attachment_table.py +0 -0
  274. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/0ef6416a507b_.py +0 -0
  275. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/10cf267d95c9_fix_schedule_item.py +0 -0
  276. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/16328eae4b5f_add_new_constraint_for_timespent.py +0 -0
  277. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/16df47d76c64_add_some_indexes.py +0 -0
  278. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/17ef8f7be758_disallow_null_choicetype.py +0 -0
  279. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/1bb55759146f_add_table_studio.py +0 -0
  280. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/1cb44194db49_add_file_size_field_to_preview_file.py +0 -0
  281. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/1e150c2cea4d_add_nb_entities_out.py +0 -0
  282. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/1e2d77a2f0c4_add_hd_by_default_column.py +0 -0
  283. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/1fab8c420678_add_attachments_to_message_chats.py +0 -0
  284. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/20a8ad264659_tasktypeassettypelink_.py +0 -0
  285. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/20dfeb36142b_add_projecttaskstatuslink_roles_for_.py +0 -0
  286. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/23122f290ca2_add_entity_chat_models.py +0 -0
  287. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/269d41bfb73f_add_entity_entity_links.py +0 -0
  288. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/29df910f04a4_create_unique_constraint_project_id_.py +0 -0
  289. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/29fe01a6c9eb_add_status_automation_field.py +0 -0
  290. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/2adc020885fa_.py +0 -0
  291. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/2baede80b111_add_entity_status_field.py +0 -0
  292. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/306266361f4f_.py +0 -0
  293. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/328fd44c6347_add_entity_created_by.py +0 -0
  294. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/32f134ff1201_add_is_shared_flag_to_filters.py +0 -0
  295. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/346250b5304c_add_position_to_preview_files.py +0 -0
  296. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/3476e147e632_add_acks_to_comments.py +0 -0
  297. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/389cfb9de776_.py +0 -0
  298. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/38baa9a23b3d_.py +0 -0
  299. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/398150912a3f_validation_status_preview.py +0 -0
  300. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/3b0d1321079e_.py +0 -0
  301. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/3d5c93bafb9d_.py +0 -0
  302. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/3e0538ddf80f_.py +0 -0
  303. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/3fee3bd10f9d_.py +0 -0
  304. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/4095103c7d01_add_is_clients_isolated_flag_to_projects.py +0 -0
  305. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/40dea9555940_.py +0 -0
  306. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/42ec83db6a01_change_person_preferred_two_factor_.py +0 -0
  307. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/43d0cf0ed5e7_.py +0 -0
  308. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/443d1e78a932_.py +0 -0
  309. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/45c2de366e66_.py +0 -0
  310. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/45dafbb3f4e1_for_person_contract_type_disallow_null.py +0 -0
  311. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/4715c2586036_add_last_preview_file_fields.py +0 -0
  312. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/4e3738cdc34c_.py +0 -0
  313. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/4f2398ebcd49_.py +0 -0
  314. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/523ee9647bee_.py +0 -0
  315. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/539a3a00c417_for_departmentlink_index_person_id_.py +0 -0
  316. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/54ee0d1d60ba_add_build_job_model.py +0 -0
  317. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/556526e47daa_.py +0 -0
  318. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/57222395f2be_add_statusautomation_import_last_revision.py +0 -0
  319. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/5798d2c9020b_change_person_role_to_choicetype.py +0 -0
  320. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/590aa1ffe731_add_notifications_enabled_flag.py +0 -0
  321. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/59a7445a966c_add_entity_is_shared.py +0 -0
  322. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/5a291251823c_add_max_retake_parameter.py +0 -0
  323. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/5ab9d7a75887_.py +0 -0
  324. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/5b0fcbb94f24_.py +0 -0
  325. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/5b7fa3e51701_add_is_client_allowed_flag_to_task_.py +0 -0
  326. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/5b980f0dc365_add_comment_links.py +0 -0
  327. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/5b9fd9ddfe43_add_homepage_and_contract_fields.py +0 -0
  328. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/5c0498e264bc_add_slack_fields.py +0 -0
  329. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/5e2ce62632a6_add_workflow_to_project.py +0 -0
  330. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/680c64565f9d_for_searchfiltergroup_is_shared.py +0 -0
  331. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/693cc511d28d_add_taskstatus_priority.py +0 -0
  332. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/6aa446ee4072_add_is_for_all_flage_to_playlists.py +0 -0
  333. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/6bd3b102d61b_.py +0 -0
  334. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/6c597e842afa_add_task_type_field_to_playlists.py +0 -0
  335. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/6d1b2c60f58b_add_milestone_model.py +0 -0
  336. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/6d7fa5a8e9a5_add_timesheets_locked_field_to_org.py +0 -0
  337. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/6eeaff945706_add_data_field_on_entity_links.py +0 -0
  338. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/6f6049877105_.py +0 -0
  339. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/7417c8eb70d8_add_for_entity_field_to_playlists.py +0 -0
  340. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/772a5e43f05b_.py +0 -0
  341. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/7748d3d22925_add_columns_to_searchfilter_table_to_.py +0 -0
  342. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/77d6820f494f_add_reply_to_notif.py +0 -0
  343. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/7b1f765677d8_.py +0 -0
  344. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/7bc746997e8d_add_slack_token_field_to_organisation.py +0 -0
  345. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/7dc79d4ed7cd_.py +0 -0
  346. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/818f7bda2528_.py +0 -0
  347. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/82e7f7a95e84_add_project_id_to_events.py +0 -0
  348. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/82ee682204ab_add_is_generated_from_ldap_column_to_.py +0 -0
  349. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/8588f254d6b8_add_archived_fields.py +0 -0
  350. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/8739ae9fa28b_add_for_client_field.py +0 -0
  351. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/87efceb6745b_add_ready_for_to_entity.py +0 -0
  352. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/892b264937ec_.py +0 -0
  353. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/8a1b4a1b7f4a_add_totp_columns_for_person.py +0 -0
  354. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/8e4f39e321f4_add_day_off_table.py +0 -0
  355. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/8e67c183bed7_add_preference_fields.py +0 -0
  356. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/8fbd40afbe5f_allow_to_set_float_values_for_.py +0 -0
  357. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/9010a64e5a2d_add_indices.py +0 -0
  358. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/9060dd4f6116_notification_uc.py +0 -0
  359. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/925771029620_.py +0 -0
  360. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/92b40d79ad3f_allow_message_attachments.py +0 -0
  361. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/92bdfe07e5f5_discord_integration.py +0 -0
  362. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/956659992419_add_columns_for_person_to_store_fido_.py +0 -0
  363. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/96c79d31e648_add_mail_otp_columns_for_person.py +0 -0
  364. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/96f58a4a2a58_person_partial_index_for_email_only_.py +0 -0
  365. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/971dbf5a0faf_add_short_name_for_asset_type_entity_.py +0 -0
  366. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/98c90621cf58_add_for_client_flag_to_playlist.py +0 -0
  367. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/99825b9cc778_.py +0 -0
  368. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/9a09467f9b2c_.py +0 -0
  369. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/9b85c14fa8a7_add_day_off_new_columns.py +0 -0
  370. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/9bd17364fc18_.py +0 -0
  371. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/9d3bb33c6fc6_add_department_keys_to_filter_models.py +0 -0
  372. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/9e5b3a9b0cee_add_new_column_metadatadescriptor_data_type_.py +0 -0
  373. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/9f8445f9b42c_add_man_days_fields.py +0 -0
  374. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/a23682ccc1f1_.py +0 -0
  375. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/a252a094e977_add_descriptions_for_entities_tasks_and_.py +0 -0
  376. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/a519c710877c_.py +0 -0
  377. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/a65bdadbae2f_.py +0 -0
  378. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/a66508788c53_add_nb_assets_ready.py +0 -0
  379. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/a6c25eed3ea1_add_login_failed_attemps_and_last_login_.py +0 -0
  380. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/a7c43f3fbc76_add_duration_column_to_the_preview_file.py +0 -0
  381. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/aa0a60033106_feedback_request.py +0 -0
  382. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/addbbefa7028_add_departments_link_to_metadata_.py +0 -0
  383. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/ae0127f2fc56_add_previewfile_width_and_previewfile_.py +0 -0
  384. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/af1790868e2c_.py +0 -0
  385. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/b45cb782bb9c_.py +0 -0
  386. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/b4dd0add5f79_.py +0 -0
  387. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/b8c0a0f9d054_drop_task_status_is_reviewable.py +0 -0
  388. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/b8ed0fb263f8_add_person_jti_and_jti_expiration_date.py +0 -0
  389. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/b97a71306fc8_add_is_casting_standby_column_to_entity.py +0 -0
  390. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/be56dc0fb760_for_is_shared_disallow_nullable.py +0 -0
  391. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/bf1347acdee2_.py +0 -0
  392. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/c49e41f1298b_add_previewbackground.py +0 -0
  393. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/c68c2a62cfac_add_mimetype_column_to_attachment.py +0 -0
  394. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/c726b98be194_.py +0 -0
  395. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/c81f3e83bdb5_.py +0 -0
  396. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/ca28796a2a62_add_is_done_field_to_the_task_model.py +0 -0
  397. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/cf3d365de164_add_entity_version_model.py +0 -0
  398. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/cf6cec6d6bf5_add_status_field_to_preview_file.py +0 -0
  399. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/d80267806131_task_status_new_column_is_default.py +0 -0
  400. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/d8dcd5196d57_add_casting_label.py +0 -0
  401. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/de8a3de227ef_.py +0 -0
  402. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/deeacd38d373_for_projecttaskstatuslink_set_default_.py +0 -0
  403. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/df1834485f57_.py +0 -0
  404. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/df9f8a147e80_change_file_size_to_big_integer.py +0 -0
  405. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/e1ef93f40d3d_.py +0 -0
  406. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/e29638428dfd_add_schedule_item_table.py +0 -0
  407. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/e3f6db74cc1e_.py +0 -0
  408. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/e839d6603c09_add_person_id_to_shot_history.py +0 -0
  409. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/ee2373fbe3a4_.py +0 -0
  410. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/f0567e8d0c62_.py +0 -0
  411. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/f0c6cbb61869_add_production_style_field.py +0 -0
  412. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/f344b867a911_for_description_of_entity_task_working_.py +0 -0
  413. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/f4ff5a73d283_add_person_ldap_uid.py +0 -0
  414. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/f5b113876a49_add_preferred_two_factor_authentication_.py +0 -0
  415. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/f5bdca075cdc_add_preview_download_flag_to_projects.py +0 -0
  416. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/f874ad5e898a_add_link_entity_type_task_type.py +0 -0
  417. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/f995b28fb749_.py +0 -0
  418. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/fb6b6f188497_.py +0 -0
  419. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/fb87feaaa094_add_missing_unique_constraints.py +0 -0
  420. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/fba149993140_add_missing_index.py +0 -0
  421. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/fc322f908695_.py +0 -0
  422. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/fee7c696166e_.py +0 -0
  423. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/feffd3c5b806_introduce_concepts.py +0 -0
  424. {zou-0.20.18 → zou-0.20.20}/zou/migrations/versions/ffeed4956ab1_add_more_details_to_projects.py +0 -0
  425. {zou-0.20.18 → zou-0.20.20}/zou/remote/__init__.py +0 -0
  426. {zou-0.20.18 → zou-0.20.20}/zou/remote/config_payload.py +0 -0
  427. {zou-0.20.18 → zou-0.20.20}/zou/remote/normalize_movie.py +0 -0
  428. {zou-0.20.18 → zou-0.20.20}/zou/remote/playlist.py +0 -0
  429. {zou-0.20.18 → zou-0.20.20}/zou/utils/__init__.py +0 -0
  430. {zou-0.20.18 → zou-0.20.20}/zou/utils/movie.py +0 -0
  431. {zou-0.20.18 → zou-0.20.20}/zou.egg-info/dependency_links.txt +0 -0
  432. {zou-0.20.18 → zou-0.20.20}/zou.egg-info/entry_points.txt +0 -0
  433. {zou-0.20.18 → zou-0.20.20}/zou.egg-info/not-zip-safe +0 -0
  434. {zou-0.20.18 → zou-0.20.20}/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.18
3
+ Version: 0.20.20
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
@@ -29,7 +29,7 @@ Requires-Dist: ffmpeg-python==0.2.0
29
29
  Requires-Dist: fido2==1.2.0
30
30
  Requires-Dist: flasgger==0.9.7.1
31
31
  Requires-Dist: flask_bcrypt==1.0.1
32
- Requires-Dist: flask_caching==2.3.0
32
+ Requires-Dist: flask_caching==2.3.1
33
33
  Requires-Dist: flask_fixtures==0.3.8
34
34
  Requires-Dist: flask_mail==0.10.0
35
35
  Requires-Dist: flask_principal==0.4.0
@@ -40,7 +40,7 @@ Requires-Dist: flask-jwt-extended==4.7.1
40
40
  Requires-Dist: flask-migrate==4.1.0
41
41
  Requires-Dist: flask-socketio==5.5.1
42
42
  Requires-Dist: flask==3.1.0
43
- Requires-Dist: gazu==0.10.28
43
+ Requires-Dist: gazu==0.10.29
44
44
  Requires-Dist: gevent-websocket==0.10.1
45
45
  Requires-Dist: gevent==24.11.1
46
46
  Requires-Dist: gunicorn==23.0.0
@@ -58,7 +58,7 @@ Requires-Dist: OpenTimelineIO-Plugins==0.17.0
58
58
  Requires-Dist: orjson==3.10.15
59
59
  Requires-Dist: pillow==11.1.0
60
60
  Requires-Dist: psutil==7.0.0
61
- Requires-Dist: psycopg[binary]==3.2.4
61
+ Requires-Dist: psycopg[binary]==3.2.5
62
62
  Requires-Dist: pyotp==2.9.0
63
63
  Requires-Dist: pysaml2==7.5.2
64
64
  Requires-Dist: python-nomad==2.1.0
@@ -35,7 +35,7 @@ install_requires =
35
35
  fido2==1.2.0
36
36
  flasgger==0.9.7.1
37
37
  flask_bcrypt==1.0.1
38
- flask_caching==2.3.0
38
+ flask_caching==2.3.1
39
39
  flask_fixtures==0.3.8
40
40
  flask_mail==0.10.0
41
41
  flask_principal==0.4.0
@@ -46,7 +46,7 @@ install_requires =
46
46
  flask-migrate==4.1.0
47
47
  flask-socketio==5.5.1
48
48
  flask==3.1.0
49
- gazu==0.10.28
49
+ gazu==0.10.29
50
50
  gevent-websocket==0.10.1
51
51
  gevent==24.11.1
52
52
  gunicorn==23.0.0
@@ -64,7 +64,7 @@ install_requires =
64
64
  orjson==3.10.15
65
65
  pillow==11.1.0
66
66
  psutil==7.0.0
67
- psycopg[binary]==3.2.4
67
+ psycopg[binary]==3.2.5
68
68
  pyotp==2.9.0
69
69
  pysaml2==7.5.2
70
70
  python-nomad==2.1.0
@@ -0,0 +1 @@
1
+ __version__ = "0.20.20"
@@ -190,7 +190,7 @@ class CommentTaskResource(Resource):
190
190
  links,
191
191
  ) = self.get_arguments()
192
192
 
193
- user_service.check_task_access(task_id)
193
+ user_service.check_task_action_access(task_id)
194
194
  user_service.check_task_status_access(task_status_id)
195
195
  files = request.files
196
196
 
@@ -491,7 +491,7 @@ class ReplyCommentResource(Resource, ArgsMixin):
491
491
  ]
492
492
  )
493
493
 
494
- user_service.check_task_access(task_id)
494
+ user_service.check_task_action_access(task_id)
495
495
  return comments_service.reply_comment(comment_id, args["text"])
496
496
 
497
497
 
@@ -530,7 +530,6 @@ class DeleteReplyCommentResource(Resource):
530
530
  200:
531
531
  description: Given comment reply deleted
532
532
  """
533
- user_service.check_task_access(task_id)
534
533
  reply = comments_service.get_reply(comment_id, reply_id)
535
534
  current_user = persons_service.get_current_user()
536
535
  if reply["person_id"] != current_user["id"]:
@@ -189,6 +189,11 @@ class CommentResource(BaseModelResource):
189
189
  )
190
190
  return comment
191
191
 
192
+ def update_data(self, data, instance_id):
193
+ data = super().update_data(data, instance_id)
194
+ data["updated_by"] = persons_service.get_current_user_raw().id
195
+ return data
196
+
192
197
  @jwt_required()
193
198
  def delete(self, instance_id):
194
199
  """
@@ -51,7 +51,7 @@ class WorkingFileResource(BaseModelResource):
51
51
 
52
52
  def check_update_permissions(self, instance, data):
53
53
  working_file = files_service.get_working_file(instance["id"])
54
- user_service.check_task_access(working_file["task_id"])
54
+ user_service.check_task_action_access(working_file["task_id"])
55
55
  return True
56
56
 
57
57
  @jwt_required()
@@ -768,7 +768,7 @@ class ModifiedFileResource(Resource):
768
768
  description: Working file modification date updated
769
769
  """
770
770
  working_file = files_service.get_working_file(working_file_id)
771
- user_service.check_task_access(working_file["task_id"])
771
+ user_service.check_task_action_access(working_file["task_id"])
772
772
  working_file = files_service.update_working_file(
773
773
  working_file_id,
774
774
  {"updated_at": date_helpers.get_utc_now_datetime()},
@@ -819,7 +819,7 @@ class CommentWorkingFileResource(Resource, ArgsMixin):
819
819
  )
820
820
 
821
821
  working_file = files_service.get_working_file(working_file_id)
822
- user_service.check_task_access(working_file["task_id"])
822
+ user_service.check_task_action_access(working_file["task_id"])
823
823
  working_file = self.update_comment(working_file_id, args["comment"])
824
824
  return working_file
825
825
 
@@ -419,7 +419,7 @@ class CreatePreviewFilePictureResource(
419
419
  raise PreviewFileReuploadNotAllowedException
420
420
 
421
421
  try:
422
- user_service.check_task_access(preview_file["task_id"])
422
+ user_service.check_task_action_access(preview_file["task_id"])
423
423
  return True
424
424
  except permissions.PermissionDenied:
425
425
  return False
@@ -474,14 +474,14 @@ class BaseBatchComment(BaseNewPreviewFilePicture, ArgsMixin):
474
474
  args = self.get_comments_args()
475
475
 
476
476
  if task_id is not None:
477
- user_service.check_task_access(task_id)
477
+ user_service.check_task_action_access(task_id)
478
478
 
479
479
  new_comments = []
480
480
  for i, comment in enumerate(args["comments"]):
481
481
  user_service.check_task_status_access(comment["task_status_id"])
482
482
 
483
483
  if task_id is None:
484
- user_service.check_task_access(comment["task_id"])
484
+ user_service.check_task_action_access(comment["task_id"])
485
485
 
486
486
  if not permissions.has_manager_permissions():
487
487
  comment["person_id"] = None
@@ -1322,7 +1322,7 @@ class UpdatePreviewPositionResource(Resource, ArgsMixin):
1322
1322
  """
1323
1323
  args = self.get_args([{"name": "position", "default": 0, "type": int}])
1324
1324
  preview_file = files_service.get_preview_file(preview_file_id)
1325
- user_service.check_task_access(preview_file["task_id"])
1325
+ user_service.check_task_action_access(preview_file["task_id"])
1326
1326
  return preview_files_service.update_preview_file_position(
1327
1327
  preview_file_id, args["position"]
1328
1328
  )
@@ -69,7 +69,7 @@ class AddPreviewResource(Resource, ArgsMixin):
69
69
  """
70
70
  args = self.get_args([("revision", 0, False, int)])
71
71
 
72
- user_service.check_task_access(task_id)
72
+ user_service.check_task_action_access(task_id)
73
73
 
74
74
  person = persons_service.get_current_user()
75
75
  preview_file = tasks_service.add_preview_file_to_comment(
@@ -117,7 +117,7 @@ class AddExtraPreviewResource(Resource, ArgsMixin):
117
117
  201:
118
118
  description: Preview added to given comment
119
119
  """
120
- user_service.check_task_access(task_id)
120
+ user_service.check_task_action_access(task_id)
121
121
  tasks_service.get_comment(comment_id)
122
122
 
123
123
  person = persons_service.get_current_user()
@@ -1734,6 +1734,8 @@ class OpenTasksResource(Resource, ArgsMixin):
1734
1734
  ("project_id", None, False, str),
1735
1735
  ("person_id", None, False, str),
1736
1736
  ("task_status_id", None, False, str),
1737
+ ("studio_id", None, False, str),
1738
+ ("department_id", None, False, str),
1737
1739
  ("start_date", None, False, str),
1738
1740
  ("due_date", None, False, str),
1739
1741
  ("priority", None, False, str),
@@ -1747,6 +1749,8 @@ class OpenTasksResource(Resource, ArgsMixin):
1747
1749
  project_id=args["project_id"],
1748
1750
  person_id=args["person_id"],
1749
1751
  task_status_id=args["task_status_id"],
1752
+ studio_id=args["studio_id"],
1753
+ department_id=args["department_id"],
1750
1754
  start_date=args["start_date"],
1751
1755
  due_date=args["due_date"],
1752
1756
  priority=args["priority"],
@@ -78,7 +78,7 @@ class ArgsMixin(object):
78
78
  Returns limit requested by the user as an integer.
79
79
  """
80
80
  options = request.args
81
- return int(options.get("limit", "-1"))
81
+ return int(options.get("limit", 0))
82
82
 
83
83
  def get_sort_by(self):
84
84
  """
@@ -101,6 +101,12 @@ class Comment(db.Model, BaseMixin, SerializerMixin):
101
101
  nullable=False,
102
102
  index=True,
103
103
  )
104
+ updated_by = db.Column(
105
+ UUIDType(binary=False),
106
+ db.ForeignKey("person.id"),
107
+ default=None,
108
+ index=True,
109
+ )
104
110
  preview_file_id = db.Column(
105
111
  UUIDType(binary=False), db.ForeignKey("preview_file.id")
106
112
  )
@@ -43,6 +43,7 @@ from zou.app.models.task_status import TaskStatus
43
43
  from zou.app.models.task_type import TaskType
44
44
  from zou.app.models.time_spent import TimeSpent
45
45
  from zou.app.models.studio import Studio
46
+ from zou.app.models.status_automation import StatusAutomation
46
47
 
47
48
  from zou.app.services import deletion_service, tasks_service, projects_service
48
49
  from zou.app.stores import file_store
@@ -103,6 +104,7 @@ event_name_model_map = {
103
104
  "subscription": Subscription,
104
105
  "search-filter": SearchFilter,
105
106
  "search-filter-group": SearchFilterGroup,
107
+ "status-automation": StatusAutomation,
106
108
  "studio": Studio,
107
109
  "task": Task,
108
110
  "task-status": TaskStatus,
@@ -142,6 +144,7 @@ event_name_model_path_map = {
142
144
  "search-filter": "search-filters",
143
145
  "search-filter-group": "search-filter-groups",
144
146
  "subscription": "subscriptions",
147
+ "status-automation": "status-automations",
145
148
  "studio": "studios",
146
149
  "task": "tasks",
147
150
  "task-status": "task-status",
@@ -176,6 +179,7 @@ main_events = [
176
179
  "department",
177
180
  "task-type",
178
181
  "task-status",
182
+ "status-automation",
179
183
  "custom-action",
180
184
  "organisation",
181
185
  "project-status",
@@ -286,6 +290,8 @@ def run_main_data_sync(project=None):
286
290
  Retrieve and import all cross-projects data from source instance.
287
291
  """
288
292
  for event in main_events:
293
+ if project is None and event == "project":
294
+ continue
289
295
  path = event_name_model_path_map[event]
290
296
  model = event_name_model_map[event]
291
297
  sync_entries(path, model, project=project)
@@ -587,11 +587,13 @@ def get_comments(task_id, is_client=False, is_manager=False):
587
587
 
588
588
 
589
589
  def _prepare_query(task_id, is_client, is_manager):
590
+ UpdatedBy = aliased(Person, name="updated_by")
590
591
  query = (
591
592
  Comment.query.order_by(Comment.created_at.desc())
592
593
  .filter_by(object_id=task_id)
593
594
  .join(Person, Comment.person_id == Person.id)
594
595
  .join(TaskStatus, Comment.task_status_id == TaskStatus.id)
596
+ .join(UpdatedBy, Comment.updated_by == UpdatedBy.id, isouter=True)
595
597
  .add_columns(
596
598
  TaskStatus.name,
597
599
  TaskStatus.short_name,
@@ -599,6 +601,9 @@ def _prepare_query(task_id, is_client, is_manager):
599
601
  Person.first_name,
600
602
  Person.last_name,
601
603
  Person.has_avatar,
604
+ UpdatedBy.first_name,
605
+ UpdatedBy.last_name,
606
+ UpdatedBy.has_avatar,
602
607
  )
603
608
  )
604
609
  if not is_manager and not is_client:
@@ -618,6 +623,9 @@ def _run_task_comments_query(query):
618
623
  person_first_name,
619
624
  person_last_name,
620
625
  person_has_avatar,
626
+ updated_by_first_name,
627
+ updated_by_last_name,
628
+ updated_by_has_avatar,
621
629
  ) = result
622
630
 
623
631
  comment_dict = comment.serialize()
@@ -627,6 +635,13 @@ def _run_task_comments_query(query):
627
635
  "has_avatar": person_has_avatar,
628
636
  "id": str(comment.person_id),
629
637
  }
638
+ if comment.updated_by is not None:
639
+ comment_dict["updated_by"] = {
640
+ "first_name": updated_by_first_name,
641
+ "last_name": updated_by_last_name,
642
+ "has_avatar": updated_by_has_avatar,
643
+ "id": str(comment.updated_by),
644
+ }
630
645
  comment_dict["task_status"] = {
631
646
  "name": task_status_name,
632
647
  "short_name": task_status_short_name,
@@ -1140,7 +1155,7 @@ def get_last_comment_map(task_ids):
1140
1155
  task_comment_map = {}
1141
1156
  comments = (
1142
1157
  Comment.query.filter(Comment.object_id.in_(task_ids))
1143
- .join(Person)
1158
+ .join(Person, Comment.person_id == Person.id)
1144
1159
  .filter(Person.role != "client")
1145
1160
  .order_by(Comment.object_id, Comment.created_at)
1146
1161
  .all()
@@ -1858,6 +1873,8 @@ def get_open_tasks(
1858
1873
  task_status_id=None,
1859
1874
  project_id=None,
1860
1875
  person_id=None,
1876
+ studio_id=None,
1877
+ department_id=None,
1861
1878
  start_date=None,
1862
1879
  due_date=None,
1863
1880
  priority=None,
@@ -1958,8 +1975,26 @@ def get_open_tasks(
1958
1975
  query = query.filter(Task.assignees == None)
1959
1976
  query_stats = query_stats.filter(Task.assignees == None)
1960
1977
  else:
1961
- query = query.filter(Task.assignees.any(id=person_id))
1962
- query_stats = query_stats.filter(Task.assignees.any(id=person_id))
1978
+ query = query.filter(
1979
+ Task.assignees.any(Person.id.in_(person_id.split(",")))
1980
+ )
1981
+ query_stats = query_stats.filter(
1982
+ Task.assignees.any(Person.id.in_(person_id.split(",")))
1983
+ )
1984
+
1985
+ if studio_id is not None:
1986
+ query = query.filter(Task.assignees.any(studio_id=studio_id))
1987
+ query_stats = query_stats.filter(
1988
+ Task.assignees.any(studio_id=studio_id)
1989
+ )
1990
+
1991
+ if department_id is not None:
1992
+ query = query.filter(
1993
+ Task.assignees.any(Person.departments.any(id=department_id))
1994
+ )
1995
+ query_stats = query_stats.filter(
1996
+ Task.assignees.any(Person.departments.any(id=department_id))
1997
+ )
1963
1998
 
1964
1999
  if start_date is not None:
1965
2000
  start_date = func.cast(start_date, Task.start_date.type)
@@ -1,5 +1,5 @@
1
1
  from sqlalchemy.orm import aliased
2
- from sqlalchemy import func, or_
2
+ from sqlalchemy import func, or_, and_
3
3
 
4
4
  from zou.app import config
5
5
  from zou.app.models.comment import Comment
@@ -488,6 +488,37 @@ def check_task_access(task_id):
488
488
  return True
489
489
 
490
490
 
491
+ def check_task_action_access(task_id):
492
+ """
493
+ Return true if current user can have access to a task action.
494
+ """
495
+ task = tasks_service.get_task(task_id, relations=True)
496
+ is_allowed = False
497
+ if permissions.has_admin_permissions():
498
+ is_allowed = True
499
+ elif check_belong_to_project(task["project_id"]):
500
+ if permissions.has_manager_permissions():
501
+ is_allowed = True
502
+ else:
503
+ user = persons_service.get_current_user(relations=True)
504
+ if permissions.has_supervisor_permissions():
505
+ is_allowed = (
506
+ user["departments"] == []
507
+ or tasks_service.get_task_type(task["task_type_id"])[
508
+ "department_id"
509
+ ]
510
+ in user["departments"]
511
+ )
512
+ else:
513
+ is_allowed = user["id"] in task["assignees"]
514
+ else:
515
+ is_allowed = False
516
+
517
+ if not is_allowed:
518
+ raise permissions.PermissionDenied
519
+ return is_allowed
520
+
521
+
491
522
  def check_comment_access(comment_id):
492
523
  """
493
524
  Return true if current user can have access to a comment.
@@ -797,10 +828,7 @@ def check_task_department_access_for_unassign(task_id, person_id=None):
797
828
  or task_type["department_id"] in user["departments"]
798
829
  )
799
830
  )
800
- or (
801
- user["id"] in task.get("assignees", [])
802
- and person_id == user["id"]
803
- )
831
+ or (user["id"] in task["assignees"] and person_id == user["id"])
804
832
  )
805
833
  )
806
834
  if not is_allowed:
@@ -1302,9 +1330,6 @@ def get_unread_notifications_count(notification_id=None):
1302
1330
  ).count()
1303
1331
 
1304
1332
 
1305
- from sqlalchemy import and_, func
1306
-
1307
-
1308
1333
  def get_last_notifications(
1309
1334
  notification_id=None,
1310
1335
  after=None,
@@ -0,0 +1,48 @@
1
+ """Add Comment.updated_by
2
+
3
+ Revision ID: 06552e22f9e7
4
+ Revises: fba149993140
5
+ Create Date: 2025-02-27 13:44:58.067787
6
+
7
+ """
8
+
9
+ from alembic import op
10
+ import sqlalchemy as sa
11
+ import sqlalchemy_utils
12
+ import sqlalchemy_utils
13
+ import uuid
14
+
15
+ # revision identifiers, used by Alembic.
16
+ revision = "06552e22f9e7"
17
+ down_revision = "fba149993140"
18
+ branch_labels = None
19
+ depends_on = None
20
+
21
+
22
+ def upgrade():
23
+ # ### commands auto generated by Alembic - please adjust! ###
24
+ with op.batch_alter_table("comment", schema=None) as batch_op:
25
+ batch_op.add_column(
26
+ sa.Column(
27
+ "updated_by",
28
+ sqlalchemy_utils.types.uuid.UUIDType(binary=False),
29
+ default=uuid.uuid4,
30
+ nullable=True,
31
+ )
32
+ )
33
+ batch_op.create_index(
34
+ batch_op.f("ix_comment_updated_by"), ["updated_by"], unique=False
35
+ )
36
+ batch_op.create_foreign_key(None, "person", ["updated_by"], ["id"])
37
+
38
+ # ### end Alembic commands ###
39
+
40
+
41
+ def downgrade():
42
+ # ### commands auto generated by Alembic - please adjust! ###
43
+ with op.batch_alter_table("comment", schema=None) as batch_op:
44
+ batch_op.drop_constraint(None, type_="foreignkey")
45
+ batch_op.drop_index(batch_op.f("ix_comment_updated_by"))
46
+ batch_op.drop_column("updated_by")
47
+
48
+ # ### end Alembic commands ###
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: zou
3
- Version: 0.20.18
3
+ Version: 0.20.20
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
@@ -29,7 +29,7 @@ Requires-Dist: ffmpeg-python==0.2.0
29
29
  Requires-Dist: fido2==1.2.0
30
30
  Requires-Dist: flasgger==0.9.7.1
31
31
  Requires-Dist: flask_bcrypt==1.0.1
32
- Requires-Dist: flask_caching==2.3.0
32
+ Requires-Dist: flask_caching==2.3.1
33
33
  Requires-Dist: flask_fixtures==0.3.8
34
34
  Requires-Dist: flask_mail==0.10.0
35
35
  Requires-Dist: flask_principal==0.4.0
@@ -40,7 +40,7 @@ Requires-Dist: flask-jwt-extended==4.7.1
40
40
  Requires-Dist: flask-migrate==4.1.0
41
41
  Requires-Dist: flask-socketio==5.5.1
42
42
  Requires-Dist: flask==3.1.0
43
- Requires-Dist: gazu==0.10.28
43
+ Requires-Dist: gazu==0.10.29
44
44
  Requires-Dist: gevent-websocket==0.10.1
45
45
  Requires-Dist: gevent==24.11.1
46
46
  Requires-Dist: gunicorn==23.0.0
@@ -58,7 +58,7 @@ Requires-Dist: OpenTimelineIO-Plugins==0.17.0
58
58
  Requires-Dist: orjson==3.10.15
59
59
  Requires-Dist: pillow==11.1.0
60
60
  Requires-Dist: psutil==7.0.0
61
- Requires-Dist: psycopg[binary]==3.2.4
61
+ Requires-Dist: psycopg[binary]==3.2.5
62
62
  Requires-Dist: pyotp==2.9.0
63
63
  Requires-Dist: pysaml2==7.5.2
64
64
  Requires-Dist: python-nomad==2.1.0
@@ -270,6 +270,7 @@ zou/migrations/versions/003be8a91001_add_start_and_end_dates_to_projects.py
270
270
  zou/migrations/versions/0596674df51d_add_department_mentions_to_comments.py
271
271
  zou/migrations/versions/05ac7e8caa21_remove_unique_constraint_for_taskstatus_.py
272
272
  zou/migrations/versions/05b7dc79a416_add_archived_fields_to_main_tables.py
273
+ zou/migrations/versions/06552e22f9e7_add_comment_updated_by.py
273
274
  zou/migrations/versions/0cf5e0e035fa_drop_column_tasktype_for_shots.py
274
275
  zou/migrations/versions/0ec3762a745d_add_attachment_table.py
275
276
  zou/migrations/versions/0ef6416a507b_.py
@@ -6,7 +6,7 @@ ffmpeg-python==0.2.0
6
6
  fido2==1.2.0
7
7
  flasgger==0.9.7.1
8
8
  flask_bcrypt==1.0.1
9
- flask_caching==2.3.0
9
+ flask_caching==2.3.1
10
10
  flask_fixtures==0.3.8
11
11
  flask_mail==0.10.0
12
12
  flask_principal==0.4.0
@@ -17,7 +17,7 @@ flask-jwt-extended==4.7.1
17
17
  flask-migrate==4.1.0
18
18
  flask-socketio==5.5.1
19
19
  flask==3.1.0
20
- gazu==0.10.28
20
+ gazu==0.10.29
21
21
  gevent-websocket==0.10.1
22
22
  gevent==24.11.1
23
23
  gunicorn==23.0.0
@@ -33,7 +33,7 @@ OpenTimelineIO-Plugins==0.17.0
33
33
  orjson==3.10.15
34
34
  pillow==11.1.0
35
35
  psutil==7.0.0
36
- psycopg[binary]==3.2.4
36
+ psycopg[binary]==3.2.5
37
37
  pyotp==2.9.0
38
38
  pysaml2==7.5.2
39
39
  python-nomad==2.1.0
@@ -1 +0,0 @@
1
- __version__ = "0.20.18"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes