zou 0.20.41__tar.gz → 0.20.43__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 (457) hide show
  1. {zou-0.20.41/zou.egg-info → zou-0.20.43}/PKG-INFO +9 -9
  2. {zou-0.20.41 → zou-0.20.43}/setup.cfg +8 -8
  3. zou-0.20.43/zou/__init__.py +1 -0
  4. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/assets/resources.py +32 -69
  5. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/projects/resources.py +7 -0
  6. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/csv/task_type_estimations.py +3 -0
  7. {zou-0.20.41 → zou-0.20.43}/zou/app/models/budget_entry.py +3 -0
  8. {zou-0.20.41 → zou-0.20.43}/zou/app/services/budget_service.py +15 -0
  9. zou-0.20.43/zou/migrations/versions/e7e633bd6fa2_add_exceptions_to_budget_entries.py +39 -0
  10. {zou-0.20.41 → zou-0.20.43/zou.egg-info}/PKG-INFO +9 -9
  11. {zou-0.20.41 → zou-0.20.43}/zou.egg-info/SOURCES.txt +1 -0
  12. {zou-0.20.41 → zou-0.20.43}/zou.egg-info/requires.txt +8 -8
  13. zou-0.20.41/zou/__init__.py +0 -1
  14. {zou-0.20.41 → zou-0.20.43}/LICENSE +0 -0
  15. {zou-0.20.41 → zou-0.20.43}/README.rst +0 -0
  16. {zou-0.20.41 → zou-0.20.43}/pyproject.toml +0 -0
  17. {zou-0.20.41 → zou-0.20.43}/setup.py +0 -0
  18. {zou-0.20.41 → zou-0.20.43}/zou/app/__init__.py +0 -0
  19. {zou-0.20.41 → zou-0.20.43}/zou/app/api.py +0 -0
  20. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/__init__.py +0 -0
  21. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/assets/__init__.py +0 -0
  22. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/auth/__init__.py +0 -0
  23. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/auth/resources.py +0 -0
  24. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/breakdown/__init__.py +0 -0
  25. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/breakdown/resources.py +0 -0
  26. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/chats/__init__.py +0 -0
  27. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/chats/resources.py +0 -0
  28. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/comments/__init__.py +0 -0
  29. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/comments/resources.py +0 -0
  30. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/concepts/__init__.py +0 -0
  31. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/concepts/resources.py +0 -0
  32. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/__init__.py +0 -0
  33. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/asset_instance.py +0 -0
  34. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/attachment_file.py +0 -0
  35. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/base.py +0 -0
  36. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/budget.py +0 -0
  37. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/budget_entry.py +0 -0
  38. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/chat.py +0 -0
  39. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/chat_message.py +0 -0
  40. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/comments.py +0 -0
  41. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/custom_action.py +0 -0
  42. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/day_off.py +0 -0
  43. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/department.py +0 -0
  44. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/entity.py +0 -0
  45. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/entity_link.py +0 -0
  46. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/entity_type.py +0 -0
  47. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/event.py +0 -0
  48. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/file_status.py +0 -0
  49. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/metadata_descriptor.py +0 -0
  50. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/milestone.py +0 -0
  51. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/news.py +0 -0
  52. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/notification.py +0 -0
  53. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/organisation.py +0 -0
  54. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/output_file.py +0 -0
  55. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/output_type.py +0 -0
  56. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/person.py +0 -0
  57. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/playlist.py +0 -0
  58. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/plugin.py +0 -0
  59. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/preview_background_file.py +0 -0
  60. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/preview_file.py +0 -0
  61. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/project.py +0 -0
  62. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/project_status.py +0 -0
  63. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/salary_scale.py +0 -0
  64. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/schedule_item.py +0 -0
  65. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/search_filter.py +0 -0
  66. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/search_filter_group.py +0 -0
  67. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/software.py +0 -0
  68. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/status_automation.py +0 -0
  69. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/studio.py +0 -0
  70. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/subscription.py +0 -0
  71. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/task.py +0 -0
  72. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/task_status.py +0 -0
  73. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/task_type.py +0 -0
  74. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/time_spent.py +0 -0
  75. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/crud/working_file.py +0 -0
  76. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/edits/__init__.py +0 -0
  77. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/edits/resources.py +0 -0
  78. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/entities/__init__.py +0 -0
  79. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/entities/resources.py +0 -0
  80. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/events/__init__.py +0 -0
  81. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/events/resources.py +0 -0
  82. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/export/__init__.py +0 -0
  83. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/export/csv/__init__.py +0 -0
  84. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/export/csv/assets.py +0 -0
  85. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/export/csv/base.py +0 -0
  86. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/export/csv/casting.py +0 -0
  87. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/export/csv/edits.py +0 -0
  88. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/export/csv/persons.py +0 -0
  89. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/export/csv/playlists.py +0 -0
  90. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/export/csv/projects.py +0 -0
  91. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/export/csv/shots.py +0 -0
  92. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/export/csv/task_types.py +0 -0
  93. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/export/csv/tasks.py +0 -0
  94. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/export/csv/time_spents.py +0 -0
  95. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/files/__init__.py +0 -0
  96. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/files/resources.py +0 -0
  97. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/index/__init__.py +0 -0
  98. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/index/resources.py +0 -0
  99. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/news/__init__.py +0 -0
  100. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/news/resources.py +0 -0
  101. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/persons/__init__.py +0 -0
  102. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/persons/resources.py +0 -0
  103. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/playlists/__init__.py +0 -0
  104. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/playlists/resources.py +0 -0
  105. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/previews/__init__.py +0 -0
  106. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/previews/resources.py +0 -0
  107. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/projects/__init__.py +0 -0
  108. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/search/__init__.py +0 -0
  109. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/search/resources.py +0 -0
  110. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/shots/__init__.py +0 -0
  111. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/shots/resources.py +0 -0
  112. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/__init__.py +0 -0
  113. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/csv/__init__.py +0 -0
  114. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/csv/assets.py +0 -0
  115. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/csv/base.py +0 -0
  116. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/csv/casting.py +0 -0
  117. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/csv/edits.py +0 -0
  118. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/csv/persons.py +0 -0
  119. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/csv/shots.py +0 -0
  120. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/kitsu.py +0 -0
  121. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/otio.py +0 -0
  122. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/shotgun/__init__.py +0 -0
  123. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/shotgun/assets.py +0 -0
  124. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/shotgun/base.py +0 -0
  125. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/shotgun/episode.py +0 -0
  126. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/shotgun/exception.py +0 -0
  127. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/shotgun/import_errors.py +0 -0
  128. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/shotgun/notes.py +0 -0
  129. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/shotgun/person.py +0 -0
  130. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/shotgun/project.py +0 -0
  131. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/shotgun/scene.py +0 -0
  132. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/shotgun/sequence.py +0 -0
  133. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/shotgun/shot.py +0 -0
  134. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/shotgun/status.py +0 -0
  135. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/shotgun/steps.py +0 -0
  136. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/shotgun/tasks.py +0 -0
  137. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/shotgun/team.py +0 -0
  138. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/source/shotgun/versions.py +0 -0
  139. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/tasks/__init__.py +0 -0
  140. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/tasks/resources.py +0 -0
  141. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/user/__init__.py +0 -0
  142. {zou-0.20.41 → zou-0.20.43}/zou/app/blueprints/user/resources.py +0 -0
  143. {zou-0.20.41 → zou-0.20.43}/zou/app/config.py +0 -0
  144. {zou-0.20.41 → zou-0.20.43}/zou/app/file_trees/default.json +0 -0
  145. {zou-0.20.41 → zou-0.20.43}/zou/app/file_trees/simple.json +0 -0
  146. {zou-0.20.41 → zou-0.20.43}/zou/app/indexer/__init__.py +0 -0
  147. {zou-0.20.41 → zou-0.20.43}/zou/app/indexer/indexing.py +0 -0
  148. {zou-0.20.41 → zou-0.20.43}/zou/app/mixin.py +0 -0
  149. {zou-0.20.41 → zou-0.20.43}/zou/app/models/__init__.py +0 -0
  150. {zou-0.20.41 → zou-0.20.43}/zou/app/models/asset_instance.py +0 -0
  151. {zou-0.20.41 → zou-0.20.43}/zou/app/models/attachment_file.py +0 -0
  152. {zou-0.20.41 → zou-0.20.43}/zou/app/models/base.py +0 -0
  153. {zou-0.20.41 → zou-0.20.43}/zou/app/models/budget.py +0 -0
  154. {zou-0.20.41 → zou-0.20.43}/zou/app/models/build_job.py +0 -0
  155. {zou-0.20.41 → zou-0.20.43}/zou/app/models/chat.py +0 -0
  156. {zou-0.20.41 → zou-0.20.43}/zou/app/models/chat_message.py +0 -0
  157. {zou-0.20.41 → zou-0.20.43}/zou/app/models/comment.py +0 -0
  158. {zou-0.20.41 → zou-0.20.43}/zou/app/models/custom_action.py +0 -0
  159. {zou-0.20.41 → zou-0.20.43}/zou/app/models/data_import_error.py +0 -0
  160. {zou-0.20.41 → zou-0.20.43}/zou/app/models/day_off.py +0 -0
  161. {zou-0.20.41 → zou-0.20.43}/zou/app/models/department.py +0 -0
  162. {zou-0.20.41 → zou-0.20.43}/zou/app/models/desktop_login_log.py +0 -0
  163. {zou-0.20.41 → zou-0.20.43}/zou/app/models/entity.py +0 -0
  164. {zou-0.20.41 → zou-0.20.43}/zou/app/models/entity_type.py +0 -0
  165. {zou-0.20.41 → zou-0.20.43}/zou/app/models/event.py +0 -0
  166. {zou-0.20.41 → zou-0.20.43}/zou/app/models/file_status.py +0 -0
  167. {zou-0.20.41 → zou-0.20.43}/zou/app/models/login_log.py +0 -0
  168. {zou-0.20.41 → zou-0.20.43}/zou/app/models/metadata_descriptor.py +0 -0
  169. {zou-0.20.41 → zou-0.20.43}/zou/app/models/milestone.py +0 -0
  170. {zou-0.20.41 → zou-0.20.43}/zou/app/models/news.py +0 -0
  171. {zou-0.20.41 → zou-0.20.43}/zou/app/models/notification.py +0 -0
  172. {zou-0.20.41 → zou-0.20.43}/zou/app/models/organisation.py +0 -0
  173. {zou-0.20.41 → zou-0.20.43}/zou/app/models/output_file.py +0 -0
  174. {zou-0.20.41 → zou-0.20.43}/zou/app/models/output_type.py +0 -0
  175. {zou-0.20.41 → zou-0.20.43}/zou/app/models/person.py +0 -0
  176. {zou-0.20.41 → zou-0.20.43}/zou/app/models/playlist.py +0 -0
  177. {zou-0.20.41 → zou-0.20.43}/zou/app/models/plugin.py +0 -0
  178. {zou-0.20.41 → zou-0.20.43}/zou/app/models/preview_background_file.py +0 -0
  179. {zou-0.20.41 → zou-0.20.43}/zou/app/models/preview_file.py +0 -0
  180. {zou-0.20.41 → zou-0.20.43}/zou/app/models/project.py +0 -0
  181. {zou-0.20.41 → zou-0.20.43}/zou/app/models/project_status.py +0 -0
  182. {zou-0.20.41 → zou-0.20.43}/zou/app/models/salary_scale.py +0 -0
  183. {zou-0.20.41 → zou-0.20.43}/zou/app/models/schedule_item.py +0 -0
  184. {zou-0.20.41 → zou-0.20.43}/zou/app/models/search_filter.py +0 -0
  185. {zou-0.20.41 → zou-0.20.43}/zou/app/models/search_filter_group.py +0 -0
  186. {zou-0.20.41 → zou-0.20.43}/zou/app/models/serializer.py +0 -0
  187. {zou-0.20.41 → zou-0.20.43}/zou/app/models/software.py +0 -0
  188. {zou-0.20.41 → zou-0.20.43}/zou/app/models/status_automation.py +0 -0
  189. {zou-0.20.41 → zou-0.20.43}/zou/app/models/studio.py +0 -0
  190. {zou-0.20.41 → zou-0.20.43}/zou/app/models/subscription.py +0 -0
  191. {zou-0.20.41 → zou-0.20.43}/zou/app/models/task.py +0 -0
  192. {zou-0.20.41 → zou-0.20.43}/zou/app/models/task_status.py +0 -0
  193. {zou-0.20.41 → zou-0.20.43}/zou/app/models/task_type.py +0 -0
  194. {zou-0.20.41 → zou-0.20.43}/zou/app/models/time_spent.py +0 -0
  195. {zou-0.20.41 → zou-0.20.43}/zou/app/models/working_file.py +0 -0
  196. {zou-0.20.41 → zou-0.20.43}/zou/app/services/__init__.py +0 -0
  197. {zou-0.20.41 → zou-0.20.43}/zou/app/services/assets_service.py +0 -0
  198. {zou-0.20.41 → zou-0.20.43}/zou/app/services/auth_service.py +0 -0
  199. {zou-0.20.41 → zou-0.20.43}/zou/app/services/backup_service.py +0 -0
  200. {zou-0.20.41 → zou-0.20.43}/zou/app/services/base_service.py +0 -0
  201. {zou-0.20.41 → zou-0.20.43}/zou/app/services/breakdown_service.py +0 -0
  202. {zou-0.20.41 → zou-0.20.43}/zou/app/services/chats_service.py +0 -0
  203. {zou-0.20.41 → zou-0.20.43}/zou/app/services/comments_service.py +0 -0
  204. {zou-0.20.41 → zou-0.20.43}/zou/app/services/concepts_service.py +0 -0
  205. {zou-0.20.41 → zou-0.20.43}/zou/app/services/custom_actions_service.py +0 -0
  206. {zou-0.20.41 → zou-0.20.43}/zou/app/services/deletion_service.py +0 -0
  207. {zou-0.20.41 → zou-0.20.43}/zou/app/services/edits_service.py +0 -0
  208. {zou-0.20.41 → zou-0.20.43}/zou/app/services/emails_service.py +0 -0
  209. {zou-0.20.41 → zou-0.20.43}/zou/app/services/entities_service.py +0 -0
  210. {zou-0.20.41 → zou-0.20.43}/zou/app/services/events_service.py +0 -0
  211. {zou-0.20.41 → zou-0.20.43}/zou/app/services/exception.py +0 -0
  212. {zou-0.20.41 → zou-0.20.43}/zou/app/services/file_tree_service.py +0 -0
  213. {zou-0.20.41 → zou-0.20.43}/zou/app/services/files_service.py +0 -0
  214. {zou-0.20.41 → zou-0.20.43}/zou/app/services/index_service.py +0 -0
  215. {zou-0.20.41 → zou-0.20.43}/zou/app/services/names_service.py +0 -0
  216. {zou-0.20.41 → zou-0.20.43}/zou/app/services/news_service.py +0 -0
  217. {zou-0.20.41 → zou-0.20.43}/zou/app/services/notifications_service.py +0 -0
  218. {zou-0.20.41 → zou-0.20.43}/zou/app/services/persons_service.py +0 -0
  219. {zou-0.20.41 → zou-0.20.43}/zou/app/services/playlists_service.py +0 -0
  220. {zou-0.20.41 → zou-0.20.43}/zou/app/services/plugins_service.py +0 -0
  221. {zou-0.20.41 → zou-0.20.43}/zou/app/services/preview_files_service.py +0 -0
  222. {zou-0.20.41 → zou-0.20.43}/zou/app/services/projects_service.py +0 -0
  223. {zou-0.20.41 → zou-0.20.43}/zou/app/services/scenes_service.py +0 -0
  224. {zou-0.20.41 → zou-0.20.43}/zou/app/services/schedule_service.py +0 -0
  225. {zou-0.20.41 → zou-0.20.43}/zou/app/services/shots_service.py +0 -0
  226. {zou-0.20.41 → zou-0.20.43}/zou/app/services/stats_service.py +0 -0
  227. {zou-0.20.41 → zou-0.20.43}/zou/app/services/status_automations_service.py +0 -0
  228. {zou-0.20.41 → zou-0.20.43}/zou/app/services/sync_service.py +0 -0
  229. {zou-0.20.41 → zou-0.20.43}/zou/app/services/tasks_service.py +0 -0
  230. {zou-0.20.41 → zou-0.20.43}/zou/app/services/telemetry_services.py +0 -0
  231. {zou-0.20.41 → zou-0.20.43}/zou/app/services/time_spents_service.py +0 -0
  232. {zou-0.20.41 → zou-0.20.43}/zou/app/services/user_service.py +0 -0
  233. {zou-0.20.41 → zou-0.20.43}/zou/app/stores/__init__.py +0 -0
  234. {zou-0.20.41 → zou-0.20.43}/zou/app/stores/auth_tokens_store.py +0 -0
  235. {zou-0.20.41 → zou-0.20.43}/zou/app/stores/file_store.py +0 -0
  236. {zou-0.20.41 → zou-0.20.43}/zou/app/stores/publisher_store.py +0 -0
  237. {zou-0.20.41 → zou-0.20.43}/zou/app/stores/queue_store.py +0 -0
  238. {zou-0.20.41 → zou-0.20.43}/zou/app/swagger.py +0 -0
  239. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/__init__.py +0 -0
  240. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/api.py +0 -0
  241. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/auth.py +0 -0
  242. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/cache.py +0 -0
  243. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/chats.py +0 -0
  244. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/colors.py +0 -0
  245. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/commands.py +0 -0
  246. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/csv_utils.py +0 -0
  247. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/date_helpers.py +0 -0
  248. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/dbhelpers.py +0 -0
  249. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/emails.py +0 -0
  250. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/env.py +0 -0
  251. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/events.py +0 -0
  252. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/fido.py +0 -0
  253. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/fields.py +0 -0
  254. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/flask.py +0 -0
  255. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/fs.py +0 -0
  256. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/git.py +0 -0
  257. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/logs.py +0 -0
  258. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/monitoring.py +0 -0
  259. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/permissions.py +0 -0
  260. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/plugins.py +0 -0
  261. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/query.py +0 -0
  262. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/redis.py +0 -0
  263. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/remote_job.py +0 -0
  264. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/saml.py +0 -0
  265. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/shell.py +0 -0
  266. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/string.py +0 -0
  267. {zou-0.20.41 → zou-0.20.43}/zou/app/utils/thumbnail.py +0 -0
  268. {zou-0.20.41 → zou-0.20.43}/zou/cli.py +0 -0
  269. {zou-0.20.41 → zou-0.20.43}/zou/debug.py +0 -0
  270. {zou-0.20.41 → zou-0.20.43}/zou/event_stream.py +0 -0
  271. {zou-0.20.41 → zou-0.20.43}/zou/job_settings.py +0 -0
  272. {zou-0.20.41 → zou-0.20.43}/zou/migrations/README +0 -0
  273. {zou-0.20.41 → zou-0.20.43}/zou/migrations/__init__.py +0 -0
  274. {zou-0.20.41 → zou-0.20.43}/zou/migrations/alembic.ini +0 -0
  275. {zou-0.20.41 → zou-0.20.43}/zou/migrations/env.py +0 -0
  276. {zou-0.20.41 → zou-0.20.43}/zou/migrations/script.py.mako +0 -0
  277. {zou-0.20.41 → zou-0.20.43}/zou/migrations/utils/__init__.py +0 -0
  278. {zou-0.20.41 → zou-0.20.43}/zou/migrations/utils/base.py +0 -0
  279. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/003be8a91001_add_start_and_end_dates_to_projects.py +0 -0
  280. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/0596674df51d_add_department_mentions_to_comments.py +0 -0
  281. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/05ac7e8caa21_remove_unique_constraint_for_taskstatus_.py +0 -0
  282. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/05b7dc79a416_add_archived_fields_to_main_tables.py +0 -0
  283. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/06552e22f9e7_add_comment_updated_by.py +0 -0
  284. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/0cf5e0e035fa_drop_column_tasktype_for_shots.py +0 -0
  285. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/0ec3762a745d_add_attachment_table.py +0 -0
  286. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/0ef6416a507b_.py +0 -0
  287. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/10cf267d95c9_fix_schedule_item.py +0 -0
  288. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/16328eae4b5f_add_new_constraint_for_timespent.py +0 -0
  289. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/16df47d76c64_add_some_indexes.py +0 -0
  290. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/17ef8f7be758_disallow_null_choicetype.py +0 -0
  291. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/1bb55759146f_add_table_studio.py +0 -0
  292. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/1cb44194db49_add_file_size_field_to_preview_file.py +0 -0
  293. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/1e150c2cea4d_add_nb_entities_out.py +0 -0
  294. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/1e2d77a2f0c4_add_hd_by_default_column.py +0 -0
  295. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/1fab8c420678_add_attachments_to_message_chats.py +0 -0
  296. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/20a8ad264659_tasktypeassettypelink_.py +0 -0
  297. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/20dfeb36142b_add_projecttaskstatuslink_roles_for_.py +0 -0
  298. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/23122f290ca2_add_entity_chat_models.py +0 -0
  299. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/269d41bfb73f_add_entity_entity_links.py +0 -0
  300. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/2762a797f1f9_add_people_salary_information.py +0 -0
  301. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/29df910f04a4_create_unique_constraint_project_id_.py +0 -0
  302. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/29fe01a6c9eb_add_status_automation_field.py +0 -0
  303. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/2adc020885fa_.py +0 -0
  304. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/2baede80b111_add_entity_status_field.py +0 -0
  305. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/306266361f4f_.py +0 -0
  306. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/307edd8c639d_change_comment_updated_by_in_comment_.py +0 -0
  307. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/328fd44c6347_add_entity_created_by.py +0 -0
  308. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/32f134ff1201_add_is_shared_flag_to_filters.py +0 -0
  309. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/346250b5304c_add_position_to_preview_files.py +0 -0
  310. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/3476e147e632_add_acks_to_comments.py +0 -0
  311. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/389cfb9de776_.py +0 -0
  312. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/38baa9a23b3d_.py +0 -0
  313. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/398150912a3f_validation_status_preview.py +0 -0
  314. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/3b0d1321079e_.py +0 -0
  315. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/3d5c93bafb9d_.py +0 -0
  316. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/3e0538ddf80f_.py +0 -0
  317. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/3fee3bd10f9d_.py +0 -0
  318. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/4095103c7d01_add_is_clients_isolated_flag_to_projects.py +0 -0
  319. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/40dea9555940_.py +0 -0
  320. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/42ec83db6a01_change_person_preferred_two_factor_.py +0 -0
  321. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/43d0cf0ed5e7_.py +0 -0
  322. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/443d1e78a932_.py +0 -0
  323. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/45c2de366e66_.py +0 -0
  324. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/45dafbb3f4e1_for_person_contract_type_disallow_null.py +0 -0
  325. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/45f739ef962a_add_people_salary_scale_table.py +0 -0
  326. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/4715c2586036_add_last_preview_file_fields.py +0 -0
  327. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/4aab1f84ad72_introduce_plugin_table.py +0 -0
  328. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/4e3738cdc34c_.py +0 -0
  329. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/4f2398ebcd49_.py +0 -0
  330. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/523ee9647bee_.py +0 -0
  331. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/539a3a00c417_for_departmentlink_index_person_id_.py +0 -0
  332. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/54ee0d1d60ba_add_build_job_model.py +0 -0
  333. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/556526e47daa_.py +0 -0
  334. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/57222395f2be_add_statusautomation_import_last_revision.py +0 -0
  335. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/5798d2c9020b_change_person_role_to_choicetype.py +0 -0
  336. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/590aa1ffe731_add_notifications_enabled_flag.py +0 -0
  337. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/59a7445a966c_add_entity_is_shared.py +0 -0
  338. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/5a291251823c_add_max_retake_parameter.py +0 -0
  339. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/5ab9d7a75887_.py +0 -0
  340. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/5b0fcbb94f24_.py +0 -0
  341. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/5b7fa3e51701_add_is_client_allowed_flag_to_task_.py +0 -0
  342. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/5b980f0dc365_add_comment_links.py +0 -0
  343. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/5b9fd9ddfe43_add_homepage_and_contract_fields.py +0 -0
  344. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/5c0498e264bc_add_slack_fields.py +0 -0
  345. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/5e2ce62632a6_add_workflow_to_project.py +0 -0
  346. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/680c64565f9d_for_searchfiltergroup_is_shared.py +0 -0
  347. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/693cc511d28d_add_taskstatus_priority.py +0 -0
  348. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/6aa446ee4072_add_is_for_all_flage_to_playlists.py +0 -0
  349. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/6bd3b102d61b_.py +0 -0
  350. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/6c597e842afa_add_task_type_field_to_playlists.py +0 -0
  351. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/6d1b2c60f58b_add_milestone_model.py +0 -0
  352. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/6d7fa5a8e9a5_add_timesheets_locked_field_to_org.py +0 -0
  353. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/6eeaff945706_add_data_field_on_entity_links.py +0 -0
  354. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/6f6049877105_.py +0 -0
  355. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/7417c8eb70d8_add_for_entity_field_to_playlists.py +0 -0
  356. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/772a5e43f05b_.py +0 -0
  357. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/7748d3d22925_add_columns_to_searchfilter_table_to_.py +0 -0
  358. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/77d6820f494f_add_reply_to_notif.py +0 -0
  359. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/7a16258f2fab_add_currency_field_to_budgets.py +0 -0
  360. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/7b1f765677d8_.py +0 -0
  361. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/7bc746997e8d_add_slack_token_field_to_organisation.py +0 -0
  362. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/7dc79d4ed7cd_.py +0 -0
  363. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/818f7bda2528_.py +0 -0
  364. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/82e7f7a95e84_add_project_id_to_events.py +0 -0
  365. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/82ee682204ab_add_is_generated_from_ldap_column_to_.py +0 -0
  366. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/83e2f33a9b14_add_project_bugdet_table.py +0 -0
  367. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/8588f254d6b8_add_archived_fields.py +0 -0
  368. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/8739ae9fa28b_add_for_client_field.py +0 -0
  369. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/87efceb6745b_add_ready_for_to_entity.py +0 -0
  370. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/892b264937ec_.py +0 -0
  371. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/8a1b4a1b7f4a_add_totp_columns_for_person.py +0 -0
  372. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/8ab98c178903_add_budget_entry_table.py +0 -0
  373. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/8e4f39e321f4_add_day_off_table.py +0 -0
  374. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/8e67c183bed7_add_preference_fields.py +0 -0
  375. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/8fbd40afbe5f_allow_to_set_float_values_for_.py +0 -0
  376. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/9010a64e5a2d_add_indices.py +0 -0
  377. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/9060dd4f6116_notification_uc.py +0 -0
  378. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/925771029620_.py +0 -0
  379. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/92b40d79ad3f_allow_message_attachments.py +0 -0
  380. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/92bdfe07e5f5_discord_integration.py +0 -0
  381. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/956659992419_add_columns_for_person_to_store_fido_.py +0 -0
  382. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/96c79d31e648_add_mail_otp_columns_for_person.py +0 -0
  383. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/96f58a4a2a58_person_partial_index_for_email_only_.py +0 -0
  384. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/971dbf5a0faf_add_short_name_for_asset_type_entity_.py +0 -0
  385. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/98c90621cf58_add_for_client_flag_to_playlist.py +0 -0
  386. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/99825b9cc778_.py +0 -0
  387. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/9a09467f9b2c_.py +0 -0
  388. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/9b85c14fa8a7_add_day_off_new_columns.py +0 -0
  389. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/9bd17364fc18_.py +0 -0
  390. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/9d3bb33c6fc6_add_department_keys_to_filter_models.py +0 -0
  391. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/9e5b3a9b0cee_add_new_column_metadatadescriptor_data_type_.py +0 -0
  392. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/9f8445f9b42c_add_man_days_fields.py +0 -0
  393. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/a23682ccc1f1_.py +0 -0
  394. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/a252a094e977_add_descriptions_for_entities_tasks_and_.py +0 -0
  395. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/a519c710877c_.py +0 -0
  396. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/a65bdadbae2f_.py +0 -0
  397. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/a66508788c53_add_nb_assets_ready.py +0 -0
  398. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/a6c25eed3ea1_add_login_failed_attemps_and_last_login_.py +0 -0
  399. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/a7c43f3fbc76_add_duration_column_to_the_preview_file.py +0 -0
  400. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/aa0a60033106_feedback_request.py +0 -0
  401. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/addbad59c706_allow_to_manage_drawings_instead_of_.py +0 -0
  402. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/addbbefa7028_add_departments_link_to_metadata_.py +0 -0
  403. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/ae0127f2fc56_add_previewfile_width_and_previewfile_.py +0 -0
  404. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/af1790868e2c_.py +0 -0
  405. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/b45cb782bb9c_.py +0 -0
  406. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/b4dd0add5f79_.py +0 -0
  407. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/b8c0a0f9d054_drop_task_status_is_reviewable.py +0 -0
  408. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/b8ed0fb263f8_add_person_jti_and_jti_expiration_date.py +0 -0
  409. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/b97a71306fc8_add_is_casting_standby_column_to_entity.py +0 -0
  410. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/be56dc0fb760_for_is_shared_disallow_nullable.py +0 -0
  411. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/bf1347acdee2_.py +0 -0
  412. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/c49e41f1298b_add_previewbackground.py +0 -0
  413. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/c68c2a62cfac_add_mimetype_column_to_attachment.py +0 -0
  414. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/c726b98be194_.py +0 -0
  415. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/c81f3e83bdb5_.py +0 -0
  416. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/ca28796a2a62_add_is_done_field_to_the_task_model.py +0 -0
  417. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/cf3d365de164_add_entity_version_model.py +0 -0
  418. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/cf6cec6d6bf5_add_status_field_to_preview_file.py +0 -0
  419. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/d25118cddcaa_modify_salary_scale_model.py +0 -0
  420. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/d80267806131_task_status_new_column_is_default.py +0 -0
  421. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/d8dcd5196d57_add_casting_label.py +0 -0
  422. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/de8a3de227ef_.py +0 -0
  423. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/deeacd38d373_for_projecttaskstatuslink_set_default_.py +0 -0
  424. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/df1834485f57_.py +0 -0
  425. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/df9f8a147e80_change_file_size_to_big_integer.py +0 -0
  426. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/e1ef93f40d3d_.py +0 -0
  427. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/e29638428dfd_add_schedule_item_table.py +0 -0
  428. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/e3f6db74cc1e_.py +0 -0
  429. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/e839d6603c09_add_person_id_to_shot_history.py +0 -0
  430. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/ee2373fbe3a4_.py +0 -0
  431. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/f0567e8d0c62_.py +0 -0
  432. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/f0c6cbb61869_add_production_style_field.py +0 -0
  433. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/f344b867a911_for_description_of_entity_task_working_.py +0 -0
  434. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/f4ff5a73d283_add_person_ldap_uid.py +0 -0
  435. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/f5b113876a49_add_preferred_two_factor_authentication_.py +0 -0
  436. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/f5bdca075cdc_add_preview_download_flag_to_projects.py +0 -0
  437. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/f874ad5e898a_add_link_entity_type_task_type.py +0 -0
  438. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/f995b28fb749_.py +0 -0
  439. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/fb6b6f188497_.py +0 -0
  440. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/fb87feaaa094_add_missing_unique_constraints.py +0 -0
  441. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/fba149993140_add_missing_index.py +0 -0
  442. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/fc322f908695_.py +0 -0
  443. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/fee7c696166e_.py +0 -0
  444. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/feffd3c5b806_introduce_concepts.py +0 -0
  445. {zou-0.20.41 → zou-0.20.43}/zou/migrations/versions/ffeed4956ab1_add_more_details_to_projects.py +0 -0
  446. {zou-0.20.41 → zou-0.20.43}/zou/plugin_template/__init__.py +0 -0
  447. {zou-0.20.41 → zou-0.20.43}/zou/plugin_template/routes.py +0 -0
  448. {zou-0.20.41 → zou-0.20.43}/zou/remote/__init__.py +0 -0
  449. {zou-0.20.41 → zou-0.20.43}/zou/remote/config_payload.py +0 -0
  450. {zou-0.20.41 → zou-0.20.43}/zou/remote/normalize_movie.py +0 -0
  451. {zou-0.20.41 → zou-0.20.43}/zou/remote/playlist.py +0 -0
  452. {zou-0.20.41 → zou-0.20.43}/zou/utils/__init__.py +0 -0
  453. {zou-0.20.41 → zou-0.20.43}/zou/utils/movie.py +0 -0
  454. {zou-0.20.41 → zou-0.20.43}/zou.egg-info/dependency_links.txt +0 -0
  455. {zou-0.20.41 → zou-0.20.43}/zou.egg-info/entry_points.txt +0 -0
  456. {zou-0.20.41 → zou-0.20.43}/zou.egg-info/not-zip-safe +0 -0
  457. {zou-0.20.41 → zou-0.20.43}/zou.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: zou
3
- Version: 0.20.41
3
+ Version: 0.20.43
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
@@ -39,10 +39,10 @@ Requires-Dist: flask-fs2[s3,swift]==0.7.29
39
39
  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
- Requires-Dist: flask==3.1.0
42
+ Requires-Dist: flask==3.1.1
43
43
  Requires-Dist: gazu==0.10.31
44
44
  Requires-Dist: gevent-websocket==0.10.1
45
- Requires-Dist: gevent==25.4.2
45
+ Requires-Dist: gevent==25.5.1
46
46
  Requires-Dist: gunicorn==23.0.0
47
47
  Requires-Dist: isoweek==1.3.3
48
48
  Requires-Dist: itsdangerous==2.2.0
@@ -51,14 +51,14 @@ Requires-Dist: ldap3==2.9.1
51
51
  Requires-Dist: matterhook==0.2
52
52
  Requires-Dist: meilisearch==0.34.1
53
53
  Requires-Dist: numpy==2.0.1; python_version == "3.9"
54
- Requires-Dist: numpy==2.2.5; python_version >= "3.10"
54
+ Requires-Dist: numpy==2.2.6; python_version >= "3.10"
55
55
  Requires-Dist: opencv-python==4.11.0.86
56
56
  Requires-Dist: OpenTimelineIO==0.17.0
57
57
  Requires-Dist: OpenTimelineIO-Plugins==0.17.0
58
58
  Requires-Dist: orjson==3.10.18
59
59
  Requires-Dist: pillow==11.2.1
60
60
  Requires-Dist: psutil==7.0.0
61
- Requires-Dist: psycopg[binary]==3.2.7
61
+ Requires-Dist: psycopg[binary]==3.2.9
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
@@ -67,12 +67,12 @@ Requires-Dist: python-socketio==5.13.0
67
67
  Requires-Dist: pytz==2025.2
68
68
  Requires-Dist: redis==5.2.1
69
69
  Requires-Dist: requests==2.32.3
70
- Requires-Dist: rq==2.3.2
70
+ Requires-Dist: rq==2.3.3
71
71
  Requires-Dist: semver==3.0.4
72
72
  Requires-Dist: slackclient==2.9.4
73
73
  Requires-Dist: spdx-license-list==3.26.0
74
74
  Requires-Dist: sqlalchemy_utils==0.41.2
75
- Requires-Dist: sqlalchemy==2.0.40
75
+ Requires-Dist: sqlalchemy==2.0.41
76
76
  Requires-Dist: tabulate==0.9.0
77
77
  Requires-Dist: tomlkit==0.13.2
78
78
  Requires-Dist: ua-parser==1.0.1
@@ -83,14 +83,14 @@ Requires-Dist: gevent; extra == "prod"
83
83
  Provides-Extra: dev
84
84
  Requires-Dist: wheel; extra == "dev"
85
85
  Provides-Extra: test
86
- Requires-Dist: fakeredis==2.28.1; extra == "test"
86
+ Requires-Dist: fakeredis==2.29.0; extra == "test"
87
87
  Requires-Dist: mixer==7.2.2; extra == "test"
88
88
  Requires-Dist: pytest-cov==6.1.1; extra == "test"
89
89
  Requires-Dist: pytest==8.3.5; extra == "test"
90
90
  Provides-Extra: monitoring
91
91
  Requires-Dist: prometheus-flask-exporter==0.23.2; extra == "monitoring"
92
92
  Requires-Dist: pygelf==0.4.2; extra == "monitoring"
93
- Requires-Dist: sentry-sdk==2.27.0; extra == "monitoring"
93
+ Requires-Dist: sentry-sdk==2.29.1; extra == "monitoring"
94
94
  Provides-Extra: lint
95
95
  Requires-Dist: autoflake==2.3.1; extra == "lint"
96
96
  Requires-Dist: black==25.1.0; extra == "lint"
@@ -45,10 +45,10 @@ install_requires =
45
45
  flask-jwt-extended==4.7.1
46
46
  flask-migrate==4.1.0
47
47
  flask-socketio==5.5.1
48
- flask==3.1.0
48
+ flask==3.1.1
49
49
  gazu==0.10.31
50
50
  gevent-websocket==0.10.1
51
- gevent==25.4.2
51
+ gevent==25.5.1
52
52
  gunicorn==23.0.0
53
53
  isoweek==1.3.3
54
54
  itsdangerous==2.2.0
@@ -57,14 +57,14 @@ install_requires =
57
57
  matterhook==0.2
58
58
  meilisearch==0.34.1
59
59
  numpy==2.0.1; python_version == '3.9'
60
- numpy==2.2.5; python_version >= '3.10'
60
+ numpy==2.2.6; python_version >= '3.10'
61
61
  opencv-python==4.11.0.86
62
62
  OpenTimelineIO==0.17.0
63
63
  OpenTimelineIO-Plugins==0.17.0
64
64
  orjson==3.10.18
65
65
  pillow==11.2.1
66
66
  psutil==7.0.0
67
- psycopg[binary]==3.2.7
67
+ psycopg[binary]==3.2.9
68
68
  pyotp==2.9.0
69
69
  pysaml2==7.5.2
70
70
  python-nomad==2.1.0
@@ -73,12 +73,12 @@ install_requires =
73
73
  pytz==2025.2
74
74
  redis==5.2.1
75
75
  requests==2.32.3
76
- rq==2.3.2
76
+ rq==2.3.3
77
77
  semver==3.0.4
78
78
  slackclient==2.9.4
79
79
  spdx-license-list==3.26.0
80
80
  sqlalchemy_utils==0.41.2
81
- sqlalchemy==2.0.40
81
+ sqlalchemy==2.0.41
82
82
  tabulate==0.9.0
83
83
  tomlkit==0.13.2
84
84
  ua-parser==1.0.1
@@ -97,14 +97,14 @@ prod =
97
97
  dev =
98
98
  wheel
99
99
  test =
100
- fakeredis==2.28.1
100
+ fakeredis==2.29.0
101
101
  mixer==7.2.2
102
102
  pytest-cov==6.1.1
103
103
  pytest==8.3.5
104
104
  monitoring =
105
105
  prometheus-flask-exporter==0.23.2
106
106
  pygelf==0.4.2
107
- sentry-sdk==2.27.0
107
+ sentry-sdk==2.29.1
108
108
  lint =
109
109
  autoflake==2.3.1
110
110
  black==25.1.0
@@ -0,0 +1 @@
1
+ __version__ = "0.20.43"
@@ -29,9 +29,6 @@ def check_criterion_access(criterions):
29
29
 
30
30
 
31
31
  class AssetResource(Resource, ArgsMixin):
32
- """
33
- Retrieve or delete given asset.
34
- """
35
32
 
36
33
  @jwt_required()
37
34
  def get(self, asset_id):
@@ -72,7 +69,7 @@ class AssetResource(Resource, ArgsMixin):
72
69
  required: True
73
70
  responses:
74
71
  204:
75
- description: Given asset deleted
72
+ description: Empty response
76
73
  """
77
74
  force = self.get_force()
78
75
 
@@ -87,15 +84,11 @@ class AssetResource(Resource, ArgsMixin):
87
84
 
88
85
 
89
86
  class AllAssetsResource(Resource):
90
- """
91
- Retrieve all entities that are not shot or sequence.
92
- Adds project name and asset type name.
93
- """
94
87
 
95
88
  @jwt_required()
96
89
  def get(self):
97
90
  """
98
- Retrieve all entities that are not shot or sequence.
91
+ Retrieve all entities that are not shot, sequence, episode, or edit.
99
92
  Adds project name and asset type name.
100
93
  ---
101
94
  tags:
@@ -121,18 +114,15 @@ class AllAssetsAliasResource(AllAssetsResource):
121
114
 
122
115
 
123
116
  class AssetsAndTasksResource(Resource, ArgsMixin):
124
- """
125
- Retrieve all entities that are not shot or sequence.
126
- """
127
117
 
128
118
  @jwt_required()
129
119
  def get(self):
130
120
  """
131
- Retrieve all entities that are not shot or sequence.
121
+ Retrieve all entities that are not shot, sequence, episode, or edit.
122
+ Adds project name and asset type name and all related tasks.
123
+ If episode_id is given as parameter, it returns assets not linked
124
+ to an episode and assets linked to given episode.
132
125
  ---
133
- description: Adds project name and asset type name and all related tasks.
134
- If episode_id is given as parameter, it returns assets not linked
135
- to an episode and assets linked to given episode.
136
126
  tags:
137
127
  - Assets
138
128
  responses:
@@ -153,9 +143,6 @@ class AssetsAndTasksResource(Resource, ArgsMixin):
153
143
 
154
144
 
155
145
  class AssetTypeResource(Resource):
156
- """
157
- Retrieve given asset type.
158
- """
159
146
 
160
147
  @jwt_required()
161
148
  def get(self, asset_type_id):
@@ -179,9 +166,6 @@ class AssetTypeResource(Resource):
179
166
 
180
167
 
181
168
  class AssetTypesResource(Resource):
182
- """
183
- Retrieve all asset types (entity types that are not shot, sequence or episode).
184
- """
185
169
 
186
170
  @jwt_required()
187
171
  def get(self):
@@ -199,9 +183,6 @@ class AssetTypesResource(Resource):
199
183
 
200
184
 
201
185
  class ProjectAssetTypesResource(Resource):
202
- """
203
- Retrieve all asset types for given project.
204
- """
205
186
 
206
187
  @jwt_required()
207
188
  def get(self, project_id):
@@ -226,14 +207,11 @@ class ProjectAssetTypesResource(Resource):
226
207
 
227
208
 
228
209
  class ShotAssetTypesResource(Resource):
229
- """
230
- Retrieve all asset shots for given shot.
231
- """
232
210
 
233
211
  @jwt_required()
234
212
  def get(self, shot_id):
235
213
  """
236
- Retrieve all asset shots for given shot.
214
+ Retrieve all asset types of assets casted in given shot.
237
215
  ---
238
216
  tags:
239
217
  - Assets
@@ -246,7 +224,7 @@ class ShotAssetTypesResource(Resource):
246
224
  required: True
247
225
  responses:
248
226
  200:
249
- description: All asset shots for given shot
227
+ description: All asset types of assets casted in given shot
250
228
  """
251
229
  shot = shots_service.get_shot(shot_id)
252
230
  user_service.check_project_access(shot["project_id"])
@@ -254,9 +232,6 @@ class ShotAssetTypesResource(Resource):
254
232
 
255
233
 
256
234
  class ProjectAssetsResource(Resource):
257
- """
258
- Retrieve all assets for given project.
259
- """
260
235
 
261
236
  @jwt_required()
262
237
  def get(self, project_id):
@@ -287,14 +262,11 @@ class ProjectAssetsResource(Resource):
287
262
 
288
263
 
289
264
  class ProjectAssetTypeAssetsResource(Resource):
290
- """
291
- Retrieve all assets for given project and entity type.
292
- """
293
265
 
294
266
  @jwt_required()
295
267
  def get(self, project_id, asset_type_id):
296
268
  """
297
- Retrieve all assets for given project and entity type.
269
+ Retrieve all assets for given project and asset type.
298
270
  ---
299
271
  tags:
300
272
  - Assets
@@ -313,7 +285,7 @@ class ProjectAssetTypeAssetsResource(Resource):
313
285
  x-example: a24a6ea4-ce75-4665-a070-57453082c25
314
286
  responses:
315
287
  200:
316
- description: All assets for given project and entity type
288
+ description: All assets for given project and asset type
317
289
  """
318
290
  user_service.check_project_access(project_id)
319
291
  criterions = query.get_query_criterions_from_request(request)
@@ -327,14 +299,11 @@ class ProjectAssetTypeAssetsResource(Resource):
327
299
 
328
300
 
329
301
  class AssetAssetsResource(Resource):
330
- """
331
- Retrieve all assets for a given asset.
332
- """
333
302
 
334
303
  @jwt_required()
335
304
  def get(self, asset_id):
336
305
  """
337
- Retrieve all assets for a given asset.
306
+ Retrieve all assets linked to given asset.
338
307
  ---
339
308
  tags:
340
309
  - Assets
@@ -347,7 +316,7 @@ class AssetAssetsResource(Resource):
347
316
  x-example: a24a6ea4-ce75-4665-a070-57453082c25
348
317
  responses:
349
318
  200:
350
- description: All assets for a given asset
319
+ description: All assets linked to given asset
351
320
  """
352
321
  asset = assets_service.get_asset(asset_id)
353
322
  user_service.check_project_access(asset["project_id"])
@@ -356,10 +325,11 @@ class AssetAssetsResource(Resource):
356
325
 
357
326
 
358
327
  class AssetTasksResource(Resource, ArgsMixin):
328
+
359
329
  @jwt_required()
360
330
  def get(self, asset_id):
361
331
  """
362
- Retrieve all tasks related to a given shot.
332
+ Retrieve all tasks related to given asset.
363
333
  ---
364
334
  tags:
365
335
  - Assets
@@ -372,7 +342,7 @@ class AssetTasksResource(Resource, ArgsMixin):
372
342
  x-example: a24a6ea4-ce75-4665-a070-57453082c25
373
343
  responses:
374
344
  200:
375
- description: All tasks related to given shot
345
+ description: All tasks related to given asset
376
346
  """
377
347
  asset = assets_service.get_asset(asset_id)
378
348
  user_service.check_project_access(asset["project_id"])
@@ -382,10 +352,11 @@ class AssetTasksResource(Resource, ArgsMixin):
382
352
 
383
353
 
384
354
  class AssetTaskTypesResource(Resource):
355
+
385
356
  @jwt_required()
386
357
  def get(self, asset_id):
387
358
  """
388
- Retrieve all task types related to a given asset.
359
+ Retrieve all task types of tasks related to given asset.
389
360
  ---
390
361
  tags:
391
362
  - Assets
@@ -398,7 +369,7 @@ class AssetTaskTypesResource(Resource):
398
369
  x-example: a24a6ea4-ce75-4665-a070-57453082c25
399
370
  responses:
400
371
  200:
401
- description: All task types related to given asset
372
+ description: All task types of tasks related to given asset
402
373
  """
403
374
  asset = assets_service.get_asset(asset_id)
404
375
  user_service.check_project_access(asset["project_id"])
@@ -406,14 +377,11 @@ class AssetTaskTypesResource(Resource):
406
377
 
407
378
 
408
379
  class NewAssetResource(Resource, ArgsMixin):
409
- """
410
- Create new asset resource.
411
- """
412
380
 
413
381
  @jwt_required()
414
382
  def post(self, project_id, asset_type_id):
415
383
  """
416
- Create new asset resource.
384
+ Create new asset with given parameters.
417
385
  ---
418
386
  tags:
419
387
  - Assets
@@ -503,10 +471,11 @@ class NewAssetResource(Resource, ArgsMixin):
503
471
 
504
472
 
505
473
  class AssetCastingResource(Resource):
474
+
506
475
  @jwt_required()
507
476
  def get(self, asset_id):
508
477
  """
509
- Resource to retrieve the casting of a given asset.
478
+ Retrieve the casting of a given asset.
510
479
  ---
511
480
  tags:
512
481
  - Assets
@@ -529,7 +498,7 @@ class AssetCastingResource(Resource):
529
498
  @jwt_required()
530
499
  def put(self, asset_id):
531
500
  """
532
- Resource to allow the modification of assets linked to a asset.
501
+ Modify the casting of given asset.
533
502
  ---
534
503
  tags:
535
504
  - Assets
@@ -551,10 +520,11 @@ class AssetCastingResource(Resource):
551
520
 
552
521
 
553
522
  class AssetCastInResource(Resource):
523
+
554
524
  @jwt_required()
555
525
  def get(self, asset_id):
556
526
  """
557
- Resource to retrieve the casting of a given asset.
527
+ Retrieve the list of shots that cast given asset.
558
528
  ---
559
529
  tags:
560
530
  - Assets
@@ -567,7 +537,7 @@ class AssetCastInResource(Resource):
567
537
  x-example: a24a6ea4-ce75-4665-a070-57453082c25
568
538
  responses:
569
539
  200:
570
- description: Casting of given asset
540
+ description: List of shots that cast given asset
571
541
  """
572
542
  asset = assets_service.get_asset(asset_id)
573
543
  user_service.check_project_access(asset["project_id"])
@@ -576,10 +546,11 @@ class AssetCastInResource(Resource):
576
546
 
577
547
 
578
548
  class AssetShotAssetInstancesResource(Resource):
549
+
579
550
  @jwt_required()
580
551
  def get(self, asset_id):
581
552
  """
582
- Retrieve all shot asset instances linked to asset.
553
+ Retrieve all shot asset instances linked to given asset.
583
554
  ---
584
555
  tags:
585
556
  - Assets
@@ -592,7 +563,7 @@ class AssetShotAssetInstancesResource(Resource):
592
563
  x-example: a24a6ea4-ce75-4665-a070-57453082c25
593
564
  responses:
594
565
  200:
595
- description: All shot asset instances linked to asset
566
+ description: All shot asset instances linked to given asset
596
567
  """
597
568
  asset = assets_service.get_asset(asset_id)
598
569
  user_service.check_project_access(asset["project_id"])
@@ -603,7 +574,7 @@ class AssetSceneAssetInstancesResource(Resource):
603
574
  @jwt_required()
604
575
  def get(self, asset_id):
605
576
  """
606
- Retrieve all scene asset instances linked to asset.
577
+ Retrieve all scene asset instances linked to given asset.
607
578
  ---
608
579
  tags:
609
580
  - Assets
@@ -616,7 +587,7 @@ class AssetSceneAssetInstancesResource(Resource):
616
587
  x-example: a24a6ea4-ce75-4665-a070-57453082c25
617
588
  responses:
618
589
  200:
619
- description: All scene asset instances linked to asset
590
+ description: All scene asset instances linked to given asset
620
591
  """
621
592
  asset = assets_service.get_asset(asset_id)
622
593
  user_service.check_project_access(asset["project_id"])
@@ -627,7 +598,7 @@ class AssetAssetInstancesResource(Resource, ArgsMixin):
627
598
  @jwt_required()
628
599
  def get(self, asset_id):
629
600
  """
630
- Retrieve all asset instances instantiated inside this asset.
601
+ Retrieve all asset instances instantiated inside given asset.
631
602
  ---
632
603
  tags:
633
604
  - Assets
@@ -702,9 +673,6 @@ class BaseSetSharedAssetsResource(Resource, ArgsMixin):
702
673
 
703
674
 
704
675
  class SetSharedProjectAssetsResource(BaseSetSharedAssetsResource):
705
- """
706
- Share or unshare all assets (or a list of assets) for given project.
707
- """
708
676
 
709
677
  @jwt_required()
710
678
  def post(self, project_id):
@@ -754,9 +722,6 @@ class SetSharedProjectAssetsResource(BaseSetSharedAssetsResource):
754
722
 
755
723
 
756
724
  class SetSharedProjectAssetTypeAssetsResource(BaseSetSharedAssetsResource):
757
- """
758
- Share or unshare all assets for given project and asset type.
759
- """
760
725
 
761
726
  @jwt_required()
762
727
  def post(self, project_id, asset_type_id):
@@ -794,9 +759,6 @@ class SetSharedProjectAssetTypeAssetsResource(BaseSetSharedAssetsResource):
794
759
 
795
760
 
796
761
  class SetSharedAssetsResource(BaseSetSharedAssetsResource):
797
- """
798
- Share or unshare all assets (or a list of assets) for given project.
799
- """
800
762
 
801
763
  @jwt_required()
802
764
  def post(self):
@@ -868,6 +830,7 @@ class ProjectAssetsSharedUsedResource(Resource):
868
830
 
869
831
 
870
832
  class ProjectEpisodeAssetsSharedUsedResource(Resource):
833
+
871
834
  @jwt_required()
872
835
  def get(self, project_id, episode_id):
873
836
  """
@@ -1447,6 +1447,13 @@ class ProductionBudgetEntryResource(Resource, ArgsMixin):
1447
1447
  ("daily_salary", None, False),
1448
1448
  ("position", None, False),
1449
1449
  ("seniority", None, False),
1450
+ {
1451
+ "name": "exceptions",
1452
+ "required": False,
1453
+ "default": {},
1454
+ "type": dict,
1455
+ "help": "Map of amount exceptions. Key is the date and value is the amount. Example: {'2025-01-01': 1000, '2025-02-01': 2000}",
1456
+ },
1450
1457
  ]
1451
1458
  )
1452
1459
  return budget_service.update_budget_entry(entry_id, data)
@@ -109,6 +109,9 @@ class TaskTypeEstimationsCsvImportResource(BaseCsvProjectImportResource):
109
109
  * 60
110
110
  )
111
111
 
112
+ if row.get("Drawings") not in [None, ""]:
113
+ new_data["nb_drawings"] = int(row["Drawings"])
114
+
112
115
  if row.get("Start date") not in [None, ""]:
113
116
  new_data["start_date"] = date_helpers.get_date_from_string(
114
117
  row["Start date"]
@@ -2,6 +2,7 @@ from sqlalchemy_utils import (
2
2
  UUIDType,
3
3
  ChoiceType,
4
4
  )
5
+ from sqlalchemy.dialects.postgresql import JSONB
5
6
 
6
7
  from zou.app import db
7
8
  from zou.app.models.serializer import SerializerMixin
@@ -40,6 +41,7 @@ class BudgetEntry(db.Model, BaseMixin, SerializerMixin):
40
41
  daily_salary = db.Column(db.Float, nullable=False)
41
42
  position = db.Column(ChoiceType(POSITION_TYPES), default="artist")
42
43
  seniority = db.Column(ChoiceType(SENIORITY_TYPES), default="mid")
44
+ exceptions = db.Column(JSONB)
43
45
 
44
46
  def __repr__(self):
45
47
  return "<BudgetEntry of %s - %d %s %s>" % (
@@ -61,5 +63,6 @@ class BudgetEntry(db.Model, BaseMixin, SerializerMixin):
61
63
  "daily_salary": self.daily_salary,
62
64
  "position": self.position,
63
65
  "seniority": self.seniority,
66
+ "exceptions": self.exceptions,
64
67
  }
65
68
  )
@@ -156,6 +156,7 @@ def create_budget_entry(
156
156
  daily_salary=daily_salary,
157
157
  position=position,
158
158
  seniority=seniority,
159
+ exceptions={},
159
160
  )
160
161
  events.emit(
161
162
  "budget-entry:create",
@@ -171,6 +172,7 @@ def update_budget_entry(budget_entry_id, data):
171
172
  """
172
173
  budget_entry = get_budget_entry_raw(budget_entry_id)
173
174
  budget = get_budget_raw(str(budget_entry.budget_id))
175
+ data = _clean_exceptions(data)
174
176
  budget_entry.update(data)
175
177
  events.emit(
176
178
  "budget-entry:update",
@@ -180,6 +182,19 @@ def update_budget_entry(budget_entry_id, data):
180
182
  return budget_entry.serialize()
181
183
 
182
184
 
185
+ def _clean_exceptions(data):
186
+ if "exceptions" in data:
187
+ if data["exceptions"] is None:
188
+ data["exceptions"] = {}
189
+ else:
190
+ data["exceptions"] = {
191
+ k: int(v)
192
+ for k, v in data["exceptions"].items()
193
+ if v is not None and int(v) > 0
194
+ }
195
+ return data
196
+
197
+
183
198
  def delete_budget_entry(budget_entry_id):
184
199
  """
185
200
  Delete budget entry corresponding to given budget entry ID.
@@ -0,0 +1,39 @@
1
+ """add exceptions to budget entries
2
+
3
+ Revision ID: e7e633bd6fa2
4
+ Revises: 4aab1f84ad72
5
+ Create Date: 2025-05-12 18:47:21.506153
6
+
7
+ """
8
+
9
+ from alembic import op
10
+ import sqlalchemy as sa
11
+ from sqlalchemy.dialects import postgresql
12
+
13
+ # revision identifiers, used by Alembic.
14
+ revision = "e7e633bd6fa2"
15
+ down_revision = "4aab1f84ad72"
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("budget_entry", schema=None) as batch_op:
23
+ batch_op.add_column(
24
+ sa.Column(
25
+ "exceptions",
26
+ postgresql.JSONB(astext_type=sa.Text()),
27
+ nullable=True,
28
+ )
29
+ )
30
+ # ### end Alembic commands ###
31
+
32
+
33
+ def downgrade():
34
+ # ### commands auto generated by Alembic - please adjust! ###
35
+ with op.batch_alter_table("task", schema=None) as batch_op:
36
+ batch_op.alter_column(
37
+ "difficulty", existing_type=sa.INTEGER(), nullable=True
38
+ )
39
+ # ### end Alembic commands ###
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: zou
3
- Version: 0.20.41
3
+ Version: 0.20.43
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
@@ -39,10 +39,10 @@ Requires-Dist: flask-fs2[s3,swift]==0.7.29
39
39
  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
- Requires-Dist: flask==3.1.0
42
+ Requires-Dist: flask==3.1.1
43
43
  Requires-Dist: gazu==0.10.31
44
44
  Requires-Dist: gevent-websocket==0.10.1
45
- Requires-Dist: gevent==25.4.2
45
+ Requires-Dist: gevent==25.5.1
46
46
  Requires-Dist: gunicorn==23.0.0
47
47
  Requires-Dist: isoweek==1.3.3
48
48
  Requires-Dist: itsdangerous==2.2.0
@@ -51,14 +51,14 @@ Requires-Dist: ldap3==2.9.1
51
51
  Requires-Dist: matterhook==0.2
52
52
  Requires-Dist: meilisearch==0.34.1
53
53
  Requires-Dist: numpy==2.0.1; python_version == "3.9"
54
- Requires-Dist: numpy==2.2.5; python_version >= "3.10"
54
+ Requires-Dist: numpy==2.2.6; python_version >= "3.10"
55
55
  Requires-Dist: opencv-python==4.11.0.86
56
56
  Requires-Dist: OpenTimelineIO==0.17.0
57
57
  Requires-Dist: OpenTimelineIO-Plugins==0.17.0
58
58
  Requires-Dist: orjson==3.10.18
59
59
  Requires-Dist: pillow==11.2.1
60
60
  Requires-Dist: psutil==7.0.0
61
- Requires-Dist: psycopg[binary]==3.2.7
61
+ Requires-Dist: psycopg[binary]==3.2.9
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
@@ -67,12 +67,12 @@ Requires-Dist: python-socketio==5.13.0
67
67
  Requires-Dist: pytz==2025.2
68
68
  Requires-Dist: redis==5.2.1
69
69
  Requires-Dist: requests==2.32.3
70
- Requires-Dist: rq==2.3.2
70
+ Requires-Dist: rq==2.3.3
71
71
  Requires-Dist: semver==3.0.4
72
72
  Requires-Dist: slackclient==2.9.4
73
73
  Requires-Dist: spdx-license-list==3.26.0
74
74
  Requires-Dist: sqlalchemy_utils==0.41.2
75
- Requires-Dist: sqlalchemy==2.0.40
75
+ Requires-Dist: sqlalchemy==2.0.41
76
76
  Requires-Dist: tabulate==0.9.0
77
77
  Requires-Dist: tomlkit==0.13.2
78
78
  Requires-Dist: ua-parser==1.0.1
@@ -83,14 +83,14 @@ Requires-Dist: gevent; extra == "prod"
83
83
  Provides-Extra: dev
84
84
  Requires-Dist: wheel; extra == "dev"
85
85
  Provides-Extra: test
86
- Requires-Dist: fakeredis==2.28.1; extra == "test"
86
+ Requires-Dist: fakeredis==2.29.0; extra == "test"
87
87
  Requires-Dist: mixer==7.2.2; extra == "test"
88
88
  Requires-Dist: pytest-cov==6.1.1; extra == "test"
89
89
  Requires-Dist: pytest==8.3.5; extra == "test"
90
90
  Provides-Extra: monitoring
91
91
  Requires-Dist: prometheus-flask-exporter==0.23.2; extra == "monitoring"
92
92
  Requires-Dist: pygelf==0.4.2; extra == "monitoring"
93
- Requires-Dist: sentry-sdk==2.27.0; extra == "monitoring"
93
+ Requires-Dist: sentry-sdk==2.29.1; extra == "monitoring"
94
94
  Provides-Extra: lint
95
95
  Requires-Dist: autoflake==2.3.1; extra == "lint"
96
96
  Requires-Dist: black==25.1.0; extra == "lint"
@@ -427,6 +427,7 @@ zou/migrations/versions/df9f8a147e80_change_file_size_to_big_integer.py
427
427
  zou/migrations/versions/e1ef93f40d3d_.py
428
428
  zou/migrations/versions/e29638428dfd_add_schedule_item_table.py
429
429
  zou/migrations/versions/e3f6db74cc1e_.py
430
+ zou/migrations/versions/e7e633bd6fa2_add_exceptions_to_budget_entries.py
430
431
  zou/migrations/versions/e839d6603c09_add_person_id_to_shot_history.py
431
432
  zou/migrations/versions/ee2373fbe3a4_.py
432
433
  zou/migrations/versions/f0567e8d0c62_.py