zou 0.20.60__tar.gz → 0.20.62__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 (486) hide show
  1. {zou-0.20.60/zou.egg-info → zou-0.20.62}/PKG-INFO +4 -4
  2. {zou-0.20.60 → zou-0.20.62}/setup.cfg +3 -3
  3. zou-0.20.62/zou/__init__.py +1 -0
  4. {zou-0.20.60 → zou-0.20.62}/zou/app/api.py +2 -0
  5. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/__init__.py +25 -1
  6. zou-0.20.62/zou/app/blueprints/crud/hardware_item.py +12 -0
  7. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/notification.py +0 -4
  8. zou-0.20.62/zou/app/blueprints/crud/production_schedule_version.py +114 -0
  9. zou-0.20.62/zou/app/blueprints/departments/__init__.py +35 -0
  10. zou-0.20.62/zou/app/blueprints/departments/resources.py +262 -0
  11. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/index/resources.py +2 -9
  12. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/persons/resources.py +1 -3
  13. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/projects/__init__.py +20 -0
  14. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/projects/resources.py +200 -0
  15. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/tasks/resources.py +5 -2
  16. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/user/resources.py +1 -3
  17. {zou-0.20.60 → zou-0.20.62}/zou/app/models/base.py +15 -4
  18. zou-0.20.62/zou/app/models/department.py +75 -0
  19. {zou-0.20.60 → zou-0.20.62}/zou/app/models/entity.py +3 -3
  20. zou-0.20.62/zou/app/models/hardware_item.py +15 -0
  21. {zou-0.20.60 → zou-0.20.62}/zou/app/models/person.py +1 -1
  22. zou-0.20.62/zou/app/models/production_schedule_version.py +81 -0
  23. {zou-0.20.60 → zou-0.20.62}/zou/app/models/project.py +17 -6
  24. {zou-0.20.60 → zou-0.20.62}/zou/app/models/software.py +5 -1
  25. {zou-0.20.60 → zou-0.20.62}/zou/app/models/task.py +7 -10
  26. {zou-0.20.60 → zou-0.20.62}/zou/app/services/assets_service.py +5 -6
  27. {zou-0.20.60 → zou-0.20.62}/zou/app/services/concepts_service.py +3 -4
  28. {zou-0.20.60 → zou-0.20.62}/zou/app/services/deletion_service.py +10 -18
  29. zou-0.20.62/zou/app/services/departments_service.py +153 -0
  30. {zou-0.20.60 → zou-0.20.62}/zou/app/services/edits_service.py +3 -4
  31. {zou-0.20.60 → zou-0.20.62}/zou/app/services/entities_service.py +5 -6
  32. {zou-0.20.60 → zou-0.20.62}/zou/app/services/exception.py +8 -0
  33. {zou-0.20.60 → zou-0.20.62}/zou/app/services/file_tree_service.py +2 -2
  34. {zou-0.20.60 → zou-0.20.62}/zou/app/services/preview_files_service.py +6 -2
  35. zou-0.20.62/zou/app/services/schedule_service.py +448 -0
  36. {zou-0.20.60 → zou-0.20.62}/zou/app/services/shots_service.py +3 -4
  37. {zou-0.20.60 → zou-0.20.62}/zou/app/services/tasks_service.py +5 -1
  38. {zou-0.20.60 → zou-0.20.62}/zou/app/services/user_service.py +57 -23
  39. {zou-0.20.60/zou/plugin_template → zou-0.20.62/zou}/migrations/alembic.ini +1 -1
  40. zou-0.20.62/zou/migrations/versions/0bd1e89f2a6f_add_productionscheduleversiontasklink_uc.py +58 -0
  41. zou-0.20.62/zou/migrations/versions/26f96f65cfa3_add_productionversionschedule_uc.py +40 -0
  42. zou-0.20.62/zou/migrations/versions/3d8e68dffeee_fix_task_person_link.py +56 -0
  43. zou-0.20.62/zou/migrations/versions/4368137b44e1_productionscheduleversion_add_on_delete_.py +188 -0
  44. zou-0.20.62/zou/migrations/versions/4bd9bfb73f11_add_fields_to_the_software_table.py +49 -0
  45. zou-0.20.62/zou/migrations/versions/5f715f2b6348_add_new_table_productionscheduleversion.py +128 -0
  46. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/7a16258f2fab_add_currency_field_to_budgets.py +2 -4
  47. zou-0.20.62/zou/migrations/versions/9683bd840dee_add_archived_field_to_software.py +33 -0
  48. zou-0.20.62/zou/migrations/versions/9af2df17a9d5_add_hardware_table.py +48 -0
  49. zou-0.20.62/zou/migrations/versions/ce7f46f445dc_add_column_estimation_for_.py +37 -0
  50. zou-0.20.62/zou/migrations/versions/d5665dca188b_add_version_field_to_software.py +35 -0
  51. zou-0.20.62/zou/migrations/versions/d97f2730bf7b_add_.py +101 -0
  52. zou-0.20.62/zou/migrations/versions/dde6be40f54f_add_departement_links_tables_for_.py +151 -0
  53. zou-0.20.62/zou/migrations/versions/e4b48ca33539_add_project_production_schedule_version_.py +56 -0
  54. zou-0.20.62/zou/migrations/versions/e8bc24998b34_remove_on_delete_cascade_for_.py +59 -0
  55. {zou-0.20.60 → zou-0.20.62/zou.egg-info}/PKG-INFO +4 -4
  56. {zou-0.20.60 → zou-0.20.62}/zou.egg-info/SOURCES.txt +21 -0
  57. {zou-0.20.60 → zou-0.20.62}/zou.egg-info/requires.txt +3 -3
  58. zou-0.20.60/zou/__init__.py +0 -1
  59. zou-0.20.60/zou/app/models/department.py +0 -13
  60. zou-0.20.60/zou/app/services/schedule_service.py +0 -206
  61. {zou-0.20.60 → zou-0.20.62}/LICENSE +0 -0
  62. {zou-0.20.60 → zou-0.20.62}/README.rst +0 -0
  63. {zou-0.20.60 → zou-0.20.62}/pyproject.toml +0 -0
  64. {zou-0.20.60 → zou-0.20.62}/setup.py +0 -0
  65. {zou-0.20.60 → zou-0.20.62}/zou/app/__init__.py +0 -0
  66. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/__init__.py +0 -0
  67. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/assets/__init__.py +0 -0
  68. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/assets/resources.py +0 -0
  69. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/auth/__init__.py +0 -0
  70. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/auth/resources.py +0 -0
  71. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/breakdown/__init__.py +0 -0
  72. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/breakdown/resources.py +0 -0
  73. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/chats/__init__.py +0 -0
  74. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/chats/resources.py +0 -0
  75. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/comments/__init__.py +0 -0
  76. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/comments/resources.py +0 -0
  77. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/concepts/__init__.py +0 -0
  78. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/concepts/resources.py +0 -0
  79. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/asset_instance.py +0 -0
  80. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/attachment_file.py +0 -0
  81. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/base.py +0 -0
  82. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/budget.py +0 -0
  83. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/budget_entry.py +0 -0
  84. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/chat.py +0 -0
  85. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/chat_message.py +0 -0
  86. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/comments.py +0 -0
  87. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/custom_action.py +0 -0
  88. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/day_off.py +0 -0
  89. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/department.py +0 -0
  90. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/entity.py +0 -0
  91. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/entity_link.py +0 -0
  92. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/entity_type.py +0 -0
  93. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/event.py +0 -0
  94. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/file_status.py +0 -0
  95. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/metadata_descriptor.py +0 -0
  96. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/milestone.py +0 -0
  97. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/news.py +0 -0
  98. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/organisation.py +0 -0
  99. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/output_file.py +0 -0
  100. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/output_type.py +0 -0
  101. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/person.py +0 -0
  102. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/playlist.py +0 -0
  103. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/plugin.py +0 -0
  104. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/preview_background_file.py +0 -0
  105. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/preview_file.py +0 -0
  106. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/project.py +0 -0
  107. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/project_status.py +0 -0
  108. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/salary_scale.py +0 -0
  109. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/schedule_item.py +0 -0
  110. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/search_filter.py +0 -0
  111. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/search_filter_group.py +0 -0
  112. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/software.py +0 -0
  113. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/status_automation.py +0 -0
  114. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/studio.py +0 -0
  115. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/subscription.py +0 -0
  116. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/task.py +0 -0
  117. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/task_status.py +0 -0
  118. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/task_type.py +0 -0
  119. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/time_spent.py +0 -0
  120. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/crud/working_file.py +0 -0
  121. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/edits/__init__.py +0 -0
  122. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/edits/resources.py +0 -0
  123. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/entities/__init__.py +0 -0
  124. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/entities/resources.py +0 -0
  125. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/events/__init__.py +0 -0
  126. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/events/resources.py +0 -0
  127. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/export/__init__.py +0 -0
  128. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/export/csv/__init__.py +0 -0
  129. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/export/csv/assets.py +0 -0
  130. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/export/csv/base.py +0 -0
  131. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/export/csv/casting.py +0 -0
  132. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/export/csv/edits.py +0 -0
  133. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/export/csv/persons.py +0 -0
  134. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/export/csv/playlists.py +0 -0
  135. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/export/csv/projects.py +0 -0
  136. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/export/csv/shots.py +0 -0
  137. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/export/csv/task_types.py +0 -0
  138. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/export/csv/tasks.py +0 -0
  139. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/export/csv/time_spents.py +0 -0
  140. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/files/__init__.py +0 -0
  141. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/files/resources.py +0 -0
  142. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/index/__init__.py +0 -0
  143. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/news/__init__.py +0 -0
  144. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/news/resources.py +0 -0
  145. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/persons/__init__.py +0 -0
  146. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/playlists/__init__.py +0 -0
  147. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/playlists/resources.py +0 -0
  148. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/previews/__init__.py +0 -0
  149. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/previews/resources.py +0 -0
  150. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/search/__init__.py +0 -0
  151. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/search/resources.py +0 -0
  152. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/shots/__init__.py +0 -0
  153. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/shots/resources.py +0 -0
  154. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/__init__.py +0 -0
  155. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/csv/__init__.py +0 -0
  156. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/csv/assets.py +0 -0
  157. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/csv/base.py +0 -0
  158. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/csv/casting.py +0 -0
  159. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/csv/edits.py +0 -0
  160. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/csv/persons.py +0 -0
  161. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/csv/shots.py +0 -0
  162. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/csv/task_type_estimations.py +0 -0
  163. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/kitsu.py +0 -0
  164. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/otio.py +0 -0
  165. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/shotgun/__init__.py +0 -0
  166. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/shotgun/assets.py +0 -0
  167. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/shotgun/base.py +0 -0
  168. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/shotgun/episode.py +0 -0
  169. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/shotgun/exception.py +0 -0
  170. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/shotgun/import_errors.py +0 -0
  171. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/shotgun/notes.py +0 -0
  172. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/shotgun/person.py +0 -0
  173. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/shotgun/project.py +0 -0
  174. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/shotgun/scene.py +0 -0
  175. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/shotgun/sequence.py +0 -0
  176. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/shotgun/shot.py +0 -0
  177. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/shotgun/status.py +0 -0
  178. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/shotgun/steps.py +0 -0
  179. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/shotgun/tasks.py +0 -0
  180. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/shotgun/team.py +0 -0
  181. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/source/shotgun/versions.py +0 -0
  182. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/tasks/__init__.py +0 -0
  183. {zou-0.20.60 → zou-0.20.62}/zou/app/blueprints/user/__init__.py +0 -0
  184. {zou-0.20.60 → zou-0.20.62}/zou/app/config.py +0 -0
  185. {zou-0.20.60 → zou-0.20.62}/zou/app/file_trees/default.json +0 -0
  186. {zou-0.20.60 → zou-0.20.62}/zou/app/file_trees/simple.json +0 -0
  187. {zou-0.20.60 → zou-0.20.62}/zou/app/indexer/__init__.py +0 -0
  188. {zou-0.20.60 → zou-0.20.62}/zou/app/indexer/indexing.py +0 -0
  189. {zou-0.20.60 → zou-0.20.62}/zou/app/mixin.py +0 -0
  190. {zou-0.20.60 → zou-0.20.62}/zou/app/models/__init__.py +0 -0
  191. {zou-0.20.60 → zou-0.20.62}/zou/app/models/asset_instance.py +0 -0
  192. {zou-0.20.60 → zou-0.20.62}/zou/app/models/attachment_file.py +0 -0
  193. {zou-0.20.60 → zou-0.20.62}/zou/app/models/budget.py +0 -0
  194. {zou-0.20.60 → zou-0.20.62}/zou/app/models/budget_entry.py +0 -0
  195. {zou-0.20.60 → zou-0.20.62}/zou/app/models/build_job.py +0 -0
  196. {zou-0.20.60 → zou-0.20.62}/zou/app/models/chat.py +0 -0
  197. {zou-0.20.60 → zou-0.20.62}/zou/app/models/chat_message.py +0 -0
  198. {zou-0.20.60 → zou-0.20.62}/zou/app/models/comment.py +0 -0
  199. {zou-0.20.60 → zou-0.20.62}/zou/app/models/custom_action.py +0 -0
  200. {zou-0.20.60 → zou-0.20.62}/zou/app/models/data_import_error.py +0 -0
  201. {zou-0.20.60 → zou-0.20.62}/zou/app/models/day_off.py +0 -0
  202. {zou-0.20.60 → zou-0.20.62}/zou/app/models/desktop_login_log.py +0 -0
  203. {zou-0.20.60 → zou-0.20.62}/zou/app/models/entity_type.py +0 -0
  204. {zou-0.20.60 → zou-0.20.62}/zou/app/models/event.py +0 -0
  205. {zou-0.20.60 → zou-0.20.62}/zou/app/models/file_status.py +0 -0
  206. {zou-0.20.60 → zou-0.20.62}/zou/app/models/login_log.py +0 -0
  207. {zou-0.20.60 → zou-0.20.62}/zou/app/models/metadata_descriptor.py +0 -0
  208. {zou-0.20.60 → zou-0.20.62}/zou/app/models/milestone.py +0 -0
  209. {zou-0.20.60 → zou-0.20.62}/zou/app/models/news.py +0 -0
  210. {zou-0.20.60 → zou-0.20.62}/zou/app/models/notification.py +0 -0
  211. {zou-0.20.60 → zou-0.20.62}/zou/app/models/organisation.py +0 -0
  212. {zou-0.20.60 → zou-0.20.62}/zou/app/models/output_file.py +0 -0
  213. {zou-0.20.60 → zou-0.20.62}/zou/app/models/output_type.py +0 -0
  214. {zou-0.20.60 → zou-0.20.62}/zou/app/models/playlist.py +0 -0
  215. {zou-0.20.60 → zou-0.20.62}/zou/app/models/plugin.py +0 -0
  216. {zou-0.20.60 → zou-0.20.62}/zou/app/models/preview_background_file.py +0 -0
  217. {zou-0.20.60 → zou-0.20.62}/zou/app/models/preview_file.py +0 -0
  218. {zou-0.20.60 → zou-0.20.62}/zou/app/models/project_status.py +0 -0
  219. {zou-0.20.60 → zou-0.20.62}/zou/app/models/salary_scale.py +0 -0
  220. {zou-0.20.60 → zou-0.20.62}/zou/app/models/schedule_item.py +0 -0
  221. {zou-0.20.60 → zou-0.20.62}/zou/app/models/search_filter.py +0 -0
  222. {zou-0.20.60 → zou-0.20.62}/zou/app/models/search_filter_group.py +0 -0
  223. {zou-0.20.60 → zou-0.20.62}/zou/app/models/serializer.py +0 -0
  224. {zou-0.20.60 → zou-0.20.62}/zou/app/models/status_automation.py +0 -0
  225. {zou-0.20.60 → zou-0.20.62}/zou/app/models/studio.py +0 -0
  226. {zou-0.20.60 → zou-0.20.62}/zou/app/models/subscription.py +0 -0
  227. {zou-0.20.60 → zou-0.20.62}/zou/app/models/task_status.py +0 -0
  228. {zou-0.20.60 → zou-0.20.62}/zou/app/models/task_type.py +0 -0
  229. {zou-0.20.60 → zou-0.20.62}/zou/app/models/time_spent.py +0 -0
  230. {zou-0.20.60 → zou-0.20.62}/zou/app/models/working_file.py +0 -0
  231. {zou-0.20.60 → zou-0.20.62}/zou/app/services/__init__.py +0 -0
  232. {zou-0.20.60 → zou-0.20.62}/zou/app/services/auth_service.py +0 -0
  233. {zou-0.20.60 → zou-0.20.62}/zou/app/services/backup_service.py +0 -0
  234. {zou-0.20.60 → zou-0.20.62}/zou/app/services/base_service.py +0 -0
  235. {zou-0.20.60 → zou-0.20.62}/zou/app/services/breakdown_service.py +0 -0
  236. {zou-0.20.60 → zou-0.20.62}/zou/app/services/budget_service.py +0 -0
  237. {zou-0.20.60 → zou-0.20.62}/zou/app/services/chats_service.py +0 -0
  238. {zou-0.20.60 → zou-0.20.62}/zou/app/services/comments_service.py +0 -0
  239. {zou-0.20.60 → zou-0.20.62}/zou/app/services/custom_actions_service.py +0 -0
  240. {zou-0.20.60 → zou-0.20.62}/zou/app/services/emails_service.py +0 -0
  241. {zou-0.20.60 → zou-0.20.62}/zou/app/services/events_service.py +0 -0
  242. {zou-0.20.60 → zou-0.20.62}/zou/app/services/files_service.py +0 -0
  243. {zou-0.20.60 → zou-0.20.62}/zou/app/services/index_service.py +0 -0
  244. {zou-0.20.60 → zou-0.20.62}/zou/app/services/names_service.py +0 -0
  245. {zou-0.20.60 → zou-0.20.62}/zou/app/services/news_service.py +0 -0
  246. {zou-0.20.60 → zou-0.20.62}/zou/app/services/notifications_service.py +0 -0
  247. {zou-0.20.60 → zou-0.20.62}/zou/app/services/persons_service.py +0 -0
  248. {zou-0.20.60 → zou-0.20.62}/zou/app/services/playlists_service.py +0 -0
  249. {zou-0.20.60 → zou-0.20.62}/zou/app/services/plugins_service.py +0 -0
  250. {zou-0.20.60 → zou-0.20.62}/zou/app/services/projects_service.py +0 -0
  251. {zou-0.20.60 → zou-0.20.62}/zou/app/services/scenes_service.py +0 -0
  252. {zou-0.20.60 → zou-0.20.62}/zou/app/services/stats_service.py +0 -0
  253. {zou-0.20.60 → zou-0.20.62}/zou/app/services/status_automations_service.py +0 -0
  254. {zou-0.20.60 → zou-0.20.62}/zou/app/services/sync_service.py +0 -0
  255. {zou-0.20.60 → zou-0.20.62}/zou/app/services/telemetry_services.py +0 -0
  256. {zou-0.20.60 → zou-0.20.62}/zou/app/services/time_spents_service.py +0 -0
  257. {zou-0.20.60 → zou-0.20.62}/zou/app/stores/__init__.py +0 -0
  258. {zou-0.20.60 → zou-0.20.62}/zou/app/stores/auth_tokens_store.py +0 -0
  259. {zou-0.20.60 → zou-0.20.62}/zou/app/stores/file_store.py +0 -0
  260. {zou-0.20.60 → zou-0.20.62}/zou/app/stores/publisher_store.py +0 -0
  261. {zou-0.20.60 → zou-0.20.62}/zou/app/stores/queue_store.py +0 -0
  262. {zou-0.20.60 → zou-0.20.62}/zou/app/swagger.py +0 -0
  263. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/__init__.py +0 -0
  264. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/api.py +0 -0
  265. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/auth.py +0 -0
  266. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/cache.py +0 -0
  267. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/chats.py +0 -0
  268. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/colors.py +0 -0
  269. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/commands.py +0 -0
  270. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/csv_utils.py +0 -0
  271. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/date_helpers.py +0 -0
  272. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/dbhelpers.py +0 -0
  273. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/emails.py +0 -0
  274. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/env.py +0 -0
  275. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/events.py +0 -0
  276. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/fido.py +0 -0
  277. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/fields.py +0 -0
  278. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/flask.py +0 -0
  279. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/fs.py +0 -0
  280. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/git.py +0 -0
  281. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/logs.py +0 -0
  282. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/monitoring.py +0 -0
  283. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/permissions.py +0 -0
  284. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/plugins.py +0 -0
  285. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/query.py +0 -0
  286. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/redis.py +0 -0
  287. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/remote_job.py +0 -0
  288. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/saml.py +0 -0
  289. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/shell.py +0 -0
  290. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/string.py +0 -0
  291. {zou-0.20.60 → zou-0.20.62}/zou/app/utils/thumbnail.py +0 -0
  292. {zou-0.20.60 → zou-0.20.62}/zou/cli.py +0 -0
  293. {zou-0.20.60 → zou-0.20.62}/zou/debug.py +0 -0
  294. {zou-0.20.60 → zou-0.20.62}/zou/event_stream.py +0 -0
  295. {zou-0.20.60 → zou-0.20.62}/zou/job_settings.py +0 -0
  296. {zou-0.20.60 → zou-0.20.62}/zou/migrations/README +0 -0
  297. {zou-0.20.60 → zou-0.20.62}/zou/migrations/__init__.py +0 -0
  298. {zou-0.20.60 → zou-0.20.62}/zou/migrations/env.py +0 -0
  299. {zou-0.20.60 → zou-0.20.62}/zou/migrations/script.py.mako +0 -0
  300. {zou-0.20.60 → zou-0.20.62}/zou/migrations/utils/__init__.py +0 -0
  301. {zou-0.20.60 → zou-0.20.62}/zou/migrations/utils/base.py +0 -0
  302. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/003be8a91001_add_start_and_end_dates_to_projects.py +0 -0
  303. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/0596674df51d_add_department_mentions_to_comments.py +0 -0
  304. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/05ac7e8caa21_remove_unique_constraint_for_taskstatus_.py +0 -0
  305. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/05b7dc79a416_add_archived_fields_to_main_tables.py +0 -0
  306. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/06552e22f9e7_add_comment_updated_by.py +0 -0
  307. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/0cf5e0e035fa_drop_column_tasktype_for_shots.py +0 -0
  308. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/0ec3762a745d_add_attachment_table.py +0 -0
  309. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/0ef6416a507b_.py +0 -0
  310. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/10cf267d95c9_fix_schedule_item.py +0 -0
  311. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/16328eae4b5f_add_new_constraint_for_timespent.py +0 -0
  312. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/16df47d76c64_add_some_indexes.py +0 -0
  313. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/17ef8f7be758_disallow_null_choicetype.py +0 -0
  314. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/1bb55759146f_add_table_studio.py +0 -0
  315. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/1cb44194db49_add_file_size_field_to_preview_file.py +0 -0
  316. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/1e150c2cea4d_add_nb_entities_out.py +0 -0
  317. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/1e2d77a2f0c4_add_hd_by_default_column.py +0 -0
  318. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/1fab8c420678_add_attachments_to_message_chats.py +0 -0
  319. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/20a8ad264659_tasktypeassettypelink_.py +0 -0
  320. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/20dfeb36142b_add_projecttaskstatuslink_roles_for_.py +0 -0
  321. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/23122f290ca2_add_entity_chat_models.py +0 -0
  322. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/269d41bfb73f_add_entity_entity_links.py +0 -0
  323. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/2762a797f1f9_add_people_salary_information.py +0 -0
  324. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/29df910f04a4_create_unique_constraint_project_id_.py +0 -0
  325. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/29fe01a6c9eb_add_status_automation_field.py +0 -0
  326. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/2adc020885fa_.py +0 -0
  327. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/2baede80b111_add_entity_status_field.py +0 -0
  328. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/306266361f4f_.py +0 -0
  329. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/307edd8c639d_change_comment_updated_by_in_comment_.py +0 -0
  330. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/328fd44c6347_add_entity_created_by.py +0 -0
  331. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/32f134ff1201_add_is_shared_flag_to_filters.py +0 -0
  332. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/346250b5304c_add_position_to_preview_files.py +0 -0
  333. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/3476e147e632_add_acks_to_comments.py +0 -0
  334. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/389cfb9de776_.py +0 -0
  335. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/38baa9a23b3d_.py +0 -0
  336. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/398150912a3f_validation_status_preview.py +0 -0
  337. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/3b0d1321079e_.py +0 -0
  338. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/3d5c93bafb9d_.py +0 -0
  339. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/3e0538ddf80f_.py +0 -0
  340. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/3fee3bd10f9d_.py +0 -0
  341. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/4095103c7d01_add_is_clients_isolated_flag_to_projects.py +0 -0
  342. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/40dea9555940_.py +0 -0
  343. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/42ec83db6a01_change_person_preferred_two_factor_.py +0 -0
  344. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/43d0cf0ed5e7_.py +0 -0
  345. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/443d1e78a932_.py +0 -0
  346. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/45c2de366e66_.py +0 -0
  347. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/45dafbb3f4e1_for_person_contract_type_disallow_null.py +0 -0
  348. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/45f739ef962a_add_people_salary_scale_table.py +0 -0
  349. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/4715c2586036_add_last_preview_file_fields.py +0 -0
  350. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/4aab1f84ad72_introduce_plugin_table.py +0 -0
  351. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/4d585b6956f2_add_taskstatus_is_wip.py +0 -0
  352. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/4e3738cdc34c_.py +0 -0
  353. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/4f2398ebcd49_.py +0 -0
  354. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/523ee9647bee_.py +0 -0
  355. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/539a3a00c417_for_departmentlink_index_person_id_.py +0 -0
  356. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/54ee0d1d60ba_add_build_job_model.py +0 -0
  357. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/556526e47daa_.py +0 -0
  358. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/57222395f2be_add_statusautomation_import_last_revision.py +0 -0
  359. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/5798d2c9020b_change_person_role_to_choicetype.py +0 -0
  360. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/590aa1ffe731_add_notifications_enabled_flag.py +0 -0
  361. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/59a7445a966c_add_entity_is_shared.py +0 -0
  362. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/5a291251823c_add_max_retake_parameter.py +0 -0
  363. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/5ab9d7a75887_.py +0 -0
  364. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/5b0fcbb94f24_.py +0 -0
  365. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/5b7fa3e51701_add_is_client_allowed_flag_to_task_.py +0 -0
  366. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/5b980f0dc365_add_comment_links.py +0 -0
  367. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/5b9fd9ddfe43_add_homepage_and_contract_fields.py +0 -0
  368. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/5c0498e264bc_add_slack_fields.py +0 -0
  369. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/5e2ce62632a6_add_workflow_to_project.py +0 -0
  370. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/680c64565f9d_for_searchfiltergroup_is_shared.py +0 -0
  371. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/693cc511d28d_add_taskstatus_priority.py +0 -0
  372. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/6aa446ee4072_add_is_for_all_flage_to_playlists.py +0 -0
  373. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/6bd3b102d61b_.py +0 -0
  374. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/6c597e842afa_add_task_type_field_to_playlists.py +0 -0
  375. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/6d1b2c60f58b_add_milestone_model.py +0 -0
  376. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/6d7fa5a8e9a5_add_timesheets_locked_field_to_org.py +0 -0
  377. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/6eeaff945706_add_data_field_on_entity_links.py +0 -0
  378. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/6f6049877105_.py +0 -0
  379. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/7417c8eb70d8_add_for_entity_field_to_playlists.py +0 -0
  380. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/772a5e43f05b_.py +0 -0
  381. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/7748d3d22925_add_columns_to_searchfilter_table_to_.py +0 -0
  382. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/77d6820f494f_add_reply_to_notif.py +0 -0
  383. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/7b1f765677d8_.py +0 -0
  384. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/7bc746997e8d_add_slack_token_field_to_organisation.py +0 -0
  385. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/7dc79d4ed7cd_.py +0 -0
  386. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/818f7bda2528_.py +0 -0
  387. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/82e7f7a95e84_add_project_id_to_events.py +0 -0
  388. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/82ee682204ab_add_is_generated_from_ldap_column_to_.py +0 -0
  389. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/83e2f33a9b14_add_project_bugdet_table.py +0 -0
  390. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/8588f254d6b8_add_archived_fields.py +0 -0
  391. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/8739ae9fa28b_add_for_client_field.py +0 -0
  392. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/87efceb6745b_add_ready_for_to_entity.py +0 -0
  393. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/892b264937ec_.py +0 -0
  394. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/8a1b4a1b7f4a_add_totp_columns_for_person.py +0 -0
  395. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/8ab98c178903_add_budget_entry_table.py +0 -0
  396. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/8e4f39e321f4_add_day_off_table.py +0 -0
  397. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/8e67c183bed7_add_preference_fields.py +0 -0
  398. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/8fbd40afbe5f_allow_to_set_float_values_for_.py +0 -0
  399. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/9010a64e5a2d_add_indices.py +0 -0
  400. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/9060dd4f6116_notification_uc.py +0 -0
  401. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/925771029620_.py +0 -0
  402. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/92b40d79ad3f_allow_message_attachments.py +0 -0
  403. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/92bdfe07e5f5_discord_integration.py +0 -0
  404. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/956659992419_add_columns_for_person_to_store_fido_.py +0 -0
  405. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/96c79d31e648_add_mail_otp_columns_for_person.py +0 -0
  406. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/96f58a4a2a58_person_partial_index_for_email_only_.py +0 -0
  407. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/971dbf5a0faf_add_short_name_for_asset_type_entity_.py +0 -0
  408. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/98c90621cf58_add_for_client_flag_to_playlist.py +0 -0
  409. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/99825b9cc778_.py +0 -0
  410. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/9a09467f9b2c_.py +0 -0
  411. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/9b85c14fa8a7_add_day_off_new_columns.py +0 -0
  412. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/9bd17364fc18_.py +0 -0
  413. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/9d3bb33c6fc6_add_department_keys_to_filter_models.py +0 -0
  414. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/9e5b3a9b0cee_add_new_column_metadatadescriptor_data_type_.py +0 -0
  415. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/9f8445f9b42c_add_man_days_fields.py +0 -0
  416. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/a23682ccc1f1_.py +0 -0
  417. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/a252a094e977_add_descriptions_for_entities_tasks_and_.py +0 -0
  418. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/a519c710877c_.py +0 -0
  419. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/a65bdadbae2f_.py +0 -0
  420. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/a66508788c53_add_nb_assets_ready.py +0 -0
  421. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/a6c25eed3ea1_add_login_failed_attemps_and_last_login_.py +0 -0
  422. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/a7c43f3fbc76_add_duration_column_to_the_preview_file.py +0 -0
  423. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/aa0a60033106_feedback_request.py +0 -0
  424. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/addbad59c706_allow_to_manage_drawings_instead_of_.py +0 -0
  425. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/addbbefa7028_add_departments_link_to_metadata_.py +0 -0
  426. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/ae0127f2fc56_add_previewfile_width_and_previewfile_.py +0 -0
  427. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/af1790868e2c_.py +0 -0
  428. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/b45cb782bb9c_.py +0 -0
  429. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/b4dd0add5f79_.py +0 -0
  430. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/b8c0a0f9d054_drop_task_status_is_reviewable.py +0 -0
  431. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/b8ed0fb263f8_add_person_jti_and_jti_expiration_date.py +0 -0
  432. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/b97a71306fc8_add_is_casting_standby_column_to_entity.py +0 -0
  433. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/be56dc0fb760_for_is_shared_disallow_nullable.py +0 -0
  434. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/bf1347acdee2_.py +0 -0
  435. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/c49e41f1298b_add_previewbackground.py +0 -0
  436. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/c68c2a62cfac_add_mimetype_column_to_attachment.py +0 -0
  437. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/c726b98be194_.py +0 -0
  438. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/c81f3e83bdb5_.py +0 -0
  439. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/ca28796a2a62_add_is_done_field_to_the_task_model.py +0 -0
  440. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/cf3d365de164_add_entity_version_model.py +0 -0
  441. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/cf6cec6d6bf5_add_status_field_to_preview_file.py +0 -0
  442. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/d25118cddcaa_modify_salary_scale_model.py +0 -0
  443. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/d80267806131_task_status_new_column_is_default.py +0 -0
  444. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/d80f02824047_add_plugin_revision.py +0 -0
  445. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/d8dcd5196d57_add_casting_label.py +0 -0
  446. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/de8a3de227ef_.py +0 -0
  447. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/deeacd38d373_for_projecttaskstatuslink_set_default_.py +0 -0
  448. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/df1834485f57_.py +0 -0
  449. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/df9f8a147e80_change_file_size_to_big_integer.py +0 -0
  450. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/e1ef93f40d3d_.py +0 -0
  451. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/e29638428dfd_add_schedule_item_table.py +0 -0
  452. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/e3f6db74cc1e_.py +0 -0
  453. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/e7e633bd6fa2_add_exceptions_to_budget_entries.py +0 -0
  454. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/e839d6603c09_add_person_id_to_shot_history.py +0 -0
  455. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/ee2373fbe3a4_.py +0 -0
  456. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/f0567e8d0c62_.py +0 -0
  457. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/f0c6cbb61869_add_production_style_field.py +0 -0
  458. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/f344b867a911_for_description_of_entity_task_working_.py +0 -0
  459. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/f4ff5a73d283_add_person_ldap_uid.py +0 -0
  460. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/f5b113876a49_add_preferred_two_factor_authentication_.py +0 -0
  461. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/f5bdca075cdc_add_preview_download_flag_to_projects.py +0 -0
  462. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/f874ad5e898a_add_link_entity_type_task_type.py +0 -0
  463. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/f995b28fb749_.py +0 -0
  464. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/fb6b6f188497_.py +0 -0
  465. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/fb87feaaa094_add_missing_unique_constraints.py +0 -0
  466. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/fba149993140_add_missing_index.py +0 -0
  467. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/fc322f908695_.py +0 -0
  468. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/fee7c696166e_.py +0 -0
  469. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/feffd3c5b806_introduce_concepts.py +0 -0
  470. {zou-0.20.60 → zou-0.20.62}/zou/migrations/versions/ffeed4956ab1_add_more_details_to_projects.py +0 -0
  471. {zou-0.20.60 → zou-0.20.62}/zou/plugin_template/__init__.py +0 -0
  472. {zou-0.20.60/zou → zou-0.20.62/zou/plugin_template}/migrations/alembic.ini +0 -0
  473. {zou-0.20.60 → zou-0.20.62}/zou/plugin_template/migrations/env.py +0 -0
  474. {zou-0.20.60 → zou-0.20.62}/zou/plugin_template/migrations/script.py.mako +0 -0
  475. {zou-0.20.60 → zou-0.20.62}/zou/plugin_template/models.py +0 -0
  476. {zou-0.20.60 → zou-0.20.62}/zou/plugin_template/routes.py +0 -0
  477. {zou-0.20.60 → zou-0.20.62}/zou/remote/__init__.py +0 -0
  478. {zou-0.20.60 → zou-0.20.62}/zou/remote/config_payload.py +0 -0
  479. {zou-0.20.60 → zou-0.20.62}/zou/remote/normalize_movie.py +0 -0
  480. {zou-0.20.60 → zou-0.20.62}/zou/remote/playlist.py +0 -0
  481. {zou-0.20.60 → zou-0.20.62}/zou/utils/__init__.py +0 -0
  482. {zou-0.20.60 → zou-0.20.62}/zou/utils/movie.py +0 -0
  483. {zou-0.20.60 → zou-0.20.62}/zou.egg-info/dependency_links.txt +0 -0
  484. {zou-0.20.60 → zou-0.20.62}/zou.egg-info/entry_points.txt +0 -0
  485. {zou-0.20.60 → zou-0.20.62}/zou.egg-info/not-zip-safe +0 -0
  486. {zou-0.20.60 → zou-0.20.62}/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.60
3
+ Version: 0.20.62
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
@@ -53,7 +53,7 @@ Requires-Dist: numpy==2.2.6
53
53
  Requires-Dist: opencv-python==4.12.0.88
54
54
  Requires-Dist: OpenTimelineIO==0.17.0
55
55
  Requires-Dist: OpenTimelineIO-Plugins==0.17.0
56
- Requires-Dist: orjson==3.10.18
56
+ Requires-Dist: orjson==3.11.0
57
57
  Requires-Dist: pillow==11.3.0
58
58
  Requires-Dist: psutil==7.0.0
59
59
  Requires-Dist: psycopg[binary]==3.2.9
@@ -65,7 +65,7 @@ Requires-Dist: python-socketio==5.13.0
65
65
  Requires-Dist: pytz==2025.2
66
66
  Requires-Dist: redis==5.2.1
67
67
  Requires-Dist: requests==2.32.4
68
- Requires-Dist: rq==2.4.0
68
+ Requires-Dist: rq==2.4.1
69
69
  Requires-Dist: semver==3.0.4
70
70
  Requires-Dist: slackclient==2.9.4
71
71
  Requires-Dist: spdx-license-list==3.27.0
@@ -88,7 +88,7 @@ Requires-Dist: pytest==8.4.1; extra == "test"
88
88
  Provides-Extra: monitoring
89
89
  Requires-Dist: prometheus-flask-exporter==0.23.2; extra == "monitoring"
90
90
  Requires-Dist: pygelf==0.4.3; extra == "monitoring"
91
- Requires-Dist: sentry-sdk==2.32.0; extra == "monitoring"
91
+ Requires-Dist: sentry-sdk==2.33.2; extra == "monitoring"
92
92
  Provides-Extra: lint
93
93
  Requires-Dist: autoflake==2.3.1; extra == "lint"
94
94
  Requires-Dist: black==25.1.0; extra == "lint"
@@ -59,7 +59,7 @@ install_requires =
59
59
  opencv-python==4.12.0.88
60
60
  OpenTimelineIO==0.17.0
61
61
  OpenTimelineIO-Plugins==0.17.0
62
- orjson==3.10.18
62
+ orjson==3.11.0
63
63
  pillow==11.3.0
64
64
  psutil==7.0.0
65
65
  psycopg[binary]==3.2.9
@@ -71,7 +71,7 @@ install_requires =
71
71
  pytz==2025.2
72
72
  redis==5.2.1
73
73
  requests==2.32.4
74
- rq==2.4.0
74
+ rq==2.4.1
75
75
  semver==3.0.4
76
76
  slackclient==2.9.4
77
77
  spdx-license-list==3.27.0
@@ -102,7 +102,7 @@ test =
102
102
  monitoring =
103
103
  prometheus-flask-exporter==0.23.2
104
104
  pygelf==0.4.3
105
- sentry-sdk==2.32.0
105
+ sentry-sdk==2.33.2
106
106
  lint =
107
107
  autoflake==2.3.1
108
108
  black==25.1.0
@@ -0,0 +1 @@
1
+ __version__ = "0.20.62"
@@ -6,6 +6,7 @@ from zou.app.blueprints.breakdown import blueprint as breakdown_blueprint
6
6
  from zou.app.blueprints.chats import blueprint as chats_blueprint
7
7
  from zou.app.blueprints.comments import blueprint as comments_blueprint
8
8
  from zou.app.blueprints.crud import blueprint as crud_blueprint
9
+ from zou.app.blueprints.departments import blueprint as departments_blueprint
9
10
  from zou.app.blueprints.entities import blueprint as entities_blueprint
10
11
  from zou.app.blueprints.events import blueprint as events_blueprint
11
12
  from zou.app.blueprints.export import blueprint as export_blueprint
@@ -51,6 +52,7 @@ def configure_api_routes(app):
51
52
  app.register_blueprint(chats_blueprint)
52
53
  app.register_blueprint(comments_blueprint)
53
54
  app.register_blueprint(crud_blueprint)
55
+ app.register_blueprint(departments_blueprint)
54
56
  app.register_blueprint(entities_blueprint)
55
57
  app.register_blueprint(export_blueprint)
56
58
  app.register_blueprint(events_blueprint)
@@ -98,6 +98,10 @@ from zou.app.blueprints.crud.search_filter_group import (
98
98
  SearchFilterGroupsResource,
99
99
  SearchFilterGroupResource,
100
100
  )
101
+ from zou.app.blueprints.crud.hardware_item import (
102
+ HardwareItemsResource,
103
+ HardwareItemResource,
104
+ )
101
105
  from zou.app.blueprints.crud.software import (
102
106
  SoftwaresResource,
103
107
  SoftwareResource,
@@ -133,8 +137,13 @@ from zou.app.blueprints.crud.salary_scale import (
133
137
  SalaryScalesResource,
134
138
  SalaryScaleResource,
135
139
  )
136
-
137
140
  from zou.app.blueprints.crud.plugin import PluginResource, PluginsResource
141
+ from zou.app.blueprints.crud.production_schedule_version import (
142
+ ProductionScheduleVersionResource,
143
+ ProductionScheduleVersionsResource,
144
+ ProductionScheduleVersionTaskLinkResource,
145
+ ProductionScheduleVersionTaskLinksResource,
146
+ )
138
147
 
139
148
  routes = [
140
149
  ("/data/persons", PersonsResource),
@@ -163,6 +172,8 @@ routes = [
163
172
  ("/data/file-status/<instance_id>", FileStatusResource),
164
173
  ("/data/softwares", SoftwaresResource),
165
174
  ("/data/softwares/<instance_id>", SoftwareResource),
175
+ ("/data/hardware-items", HardwareItemsResource),
176
+ ("/data/hardware-items/<instance_id>", HardwareItemResource),
166
177
  ("/data/output-files", OutputFilesResource),
167
178
  ("/data/output-files/<instance_id>", OutputFileResource),
168
179
  ("/data/output-types", OutputTypesResource),
@@ -222,6 +233,19 @@ routes = [
222
233
  ("/data/salary-scales/<instance_id>", SalaryScaleResource),
223
234
  ("/data/plugins/<instance_id>", PluginResource),
224
235
  ("/data/plugins", PluginsResource),
236
+ ("/data/production-schedule-versions", ProductionScheduleVersionsResource),
237
+ (
238
+ "/data/production-schedule-versions/<instance_id>",
239
+ ProductionScheduleVersionResource,
240
+ ),
241
+ (
242
+ "/data/production-schedule-version-task-links/<instance_id>",
243
+ ProductionScheduleVersionTaskLinkResource,
244
+ ),
245
+ (
246
+ "/data/production-schedule-version-task-links",
247
+ ProductionScheduleVersionTaskLinksResource,
248
+ ),
225
249
  ]
226
250
 
227
251
  blueprint = Blueprint("/data", "data")
@@ -0,0 +1,12 @@
1
+ from zou.app.models.hardware_item import HardwareItem
2
+ from zou.app.blueprints.crud.base import BaseModelResource, BaseModelsResource
3
+
4
+
5
+ class HardwareItemsResource(BaseModelsResource):
6
+ def __init__(self):
7
+ BaseModelsResource.__init__(self, HardwareItem)
8
+
9
+
10
+ class HardwareItemResource(BaseModelResource):
11
+ def __init__(self):
12
+ BaseModelResource.__init__(self, HardwareItem)
@@ -1,5 +1,4 @@
1
1
  from zou.app.models.notification import Notification
2
- from zou.app.utils import permissions
3
2
 
4
3
  from zou.app.blueprints.crud.base import BaseModelResource, BaseModelsResource
5
4
 
@@ -8,9 +7,6 @@ class NotificationsResource(BaseModelsResource):
8
7
  def __init__(self):
9
8
  BaseModelsResource.__init__(self, Notification)
10
9
 
11
- def check_create_permissions(self, data):
12
- return permissions.check_admin_permissions()
13
-
14
10
 
15
11
  class NotificationResource(BaseModelResource):
16
12
  def __init__(self):
@@ -0,0 +1,114 @@
1
+ from zou.app.models.production_schedule_version import (
2
+ ProductionScheduleVersion,
3
+ ProductionScheduleVersionTaskLink,
4
+ )
5
+
6
+ from zou.app.blueprints.crud.base import BaseModelsResource, BaseModelResource
7
+ from zou.app.services import user_service, tasks_service, schedule_service
8
+ from zou.app.utils import permissions
9
+ from zou.app.services.exception import WrongParameterException
10
+
11
+
12
+ class ProductionScheduleVersionsResource(BaseModelsResource):
13
+ def __init__(self):
14
+ BaseModelsResource.__init__(self, ProductionScheduleVersion)
15
+
16
+ def check_read_permissions(self, options=None):
17
+ if (
18
+ permissions.has_vendor_permissions()
19
+ or permissions.has_client_permissions()
20
+ ):
21
+ raise permissions.PermissionDenied
22
+ if "project_id" in options.keys():
23
+ return user_service.check_project_access(options["project_id"])
24
+ else:
25
+ return permissions.check_admin_permissions()
26
+
27
+ def check_create_permissions(self, data):
28
+ return user_service.check_manager_project_access(
29
+ project_id=data["project_id"]
30
+ )
31
+
32
+
33
+ class ProductionScheduleVersionResource(BaseModelResource):
34
+ def __init__(self):
35
+ BaseModelResource.__init__(self, ProductionScheduleVersion)
36
+
37
+ def check_read_permissions(self, instance_dict):
38
+ if (
39
+ permissions.has_vendor_permissions()
40
+ or permissions.has_client_permissions()
41
+ ):
42
+ raise permissions.PermissionDenied
43
+ return user_service.check_project_access(instance_dict["project_id"])
44
+
45
+ def check_update_permissions(self, instance_dict, data):
46
+ return user_service.check_manager_project_access(
47
+ project_id=instance_dict["project_id"]
48
+ )
49
+
50
+
51
+ class ProductionScheduleVersionTaskLinksResource(BaseModelsResource):
52
+ def __init__(self):
53
+ BaseModelsResource.__init__(self, ProductionScheduleVersionTaskLink)
54
+
55
+ def check_read_permissions(self, options=None):
56
+ if (
57
+ permissions.has_vendor_permissions()
58
+ or permissions.has_client_permissions()
59
+ ):
60
+ raise permissions.PermissionDenied
61
+ if "project_id" in options.keys():
62
+ return user_service.check_project_access(options["project_id"])
63
+ else:
64
+ return permissions.check_admin_permissions()
65
+
66
+ def check_create_permissions(self, data):
67
+ project_id_from_production_version_schedule = (
68
+ schedule_service.get_production_schedule_version(
69
+ data["production_schedule_version_id"]
70
+ )["project_id"]
71
+ )
72
+ project_id_from_task = tasks_service.get_task(data["task_id"])[
73
+ "project_id"
74
+ ]
75
+ if project_id_from_production_version_schedule != project_id_from_task:
76
+ raise WrongParameterException(
77
+ "The task and the production schedule version must be in the same project."
78
+ )
79
+ return user_service.check_manager_project_access(
80
+ project_id=project_id_from_production_version_schedule
81
+ )
82
+
83
+
84
+ class ProductionScheduleVersionTaskLinkResource(BaseModelResource):
85
+ def __init__(self):
86
+ BaseModelResource.__init__(self, ProductionScheduleVersionTaskLink)
87
+ self.protected_fields = [
88
+ "id",
89
+ "created_at",
90
+ "updated_at",
91
+ "task_id",
92
+ "production_schedule_version_id",
93
+ ]
94
+
95
+ def check_read_permissions(self, instance_dict):
96
+ if (
97
+ permissions.has_vendor_permissions()
98
+ or permissions.has_client_permissions()
99
+ ):
100
+ raise permissions.PermissionDenied
101
+ task = tasks_service.get_task(instance_dict["task_id"])
102
+ return user_service.check_project_access(task["project_id"])
103
+
104
+ def check_update_permissions(self, instance_dict, data):
105
+ task = tasks_service.get_task(instance_dict["task_id"])
106
+ return user_service.check_manager_project_access(
107
+ project_id=task["project_id"]
108
+ )
109
+
110
+ def check_delete_permissions(self, instance_dict):
111
+ task = tasks_service.get_task(instance_dict["task_id"])
112
+ return user_service.check_manager_project_access(
113
+ project_id=task["project_id"]
114
+ )
@@ -0,0 +1,35 @@
1
+ from flask import Blueprint
2
+ from zou.app.utils.api import configure_api_from_blueprint
3
+
4
+ from zou.app.blueprints.departments.resources import (
5
+ AllDepartmentSoftwareResource,
6
+ AddSoftwareToDepartmentResource,
7
+ SoftwareDepartmentResource,
8
+ AllDepartmentHardwareItemsResource,
9
+ AddHardwareItemToDepartmentResource,
10
+ HardwareItemDepartmentResource,
11
+ )
12
+
13
+ routes = [
14
+ ("/data/departments/software-licenses", AllDepartmentSoftwareResource),
15
+ (
16
+ "/data/departments/<department_id>/software-licenses",
17
+ AddSoftwareToDepartmentResource,
18
+ ),
19
+ (
20
+ "/data/departments/<department_id>/software-licenses/<software_id>",
21
+ SoftwareDepartmentResource,
22
+ ),
23
+ ("/data/departments/hardware-items", AllDepartmentHardwareItemsResource),
24
+ (
25
+ "/data/departments/<department_id>/hardware-items",
26
+ AddHardwareItemToDepartmentResource,
27
+ ),
28
+ (
29
+ "/data/departments/<department_id>/hardware-items/<hardware_item_id>",
30
+ HardwareItemDepartmentResource,
31
+ ),
32
+ ]
33
+
34
+ blueprint = Blueprint("departments", "departments")
35
+ api = configure_api_from_blueprint(blueprint, routes)
@@ -0,0 +1,262 @@
1
+ from flask_restful import Resource
2
+ from flask_jwt_extended import jwt_required
3
+
4
+ from zou.app.utils import permissions
5
+ from zou.app.mixin import ArgsMixin
6
+ from zou.app.services import (
7
+ departments_service,
8
+ )
9
+
10
+
11
+ class AllDepartmentSoftwareResource(Resource, ArgsMixin):
12
+
13
+ @jwt_required()
14
+ @permissions.require_admin
15
+ def get(self):
16
+ """
17
+ Get all software items for all departments.
18
+ ---
19
+ tags:
20
+ - Departments
21
+ responses:
22
+ 200:
23
+ description: A dictionary of departments with their software items
24
+ """
25
+ softwares = departments_service.get_all_software_for_departments()
26
+ return softwares, 200
27
+
28
+
29
+ class AddSoftwareToDepartmentResource(Resource, ArgsMixin):
30
+
31
+ @jwt_required()
32
+ @permissions.require_admin
33
+ def post(self, department_id):
34
+ """
35
+ Add a software item to given department.
36
+ ---
37
+ tags:
38
+ - Departments
39
+ parameters:
40
+ - in: path
41
+ name: department_id
42
+ required: True
43
+ type: string
44
+ format: UUID
45
+ x-example: a24a6ea4-ce75-4665-a070-57453082c25
46
+ - in: body
47
+ name: software_id
48
+ required: True
49
+ type: string
50
+ format: UUID
51
+ x-example: a24a6ea4-ce75-4665-a070-57453082c25
52
+ responses:
53
+ 201:
54
+ description: User added to given department
55
+ 404:
56
+ description: Department ID or Software ID matches no department or software
57
+ """
58
+ args = self.get_args(
59
+ [
60
+ ("software_id", None, True),
61
+ ]
62
+ )
63
+ self.check_id_parameter(department_id)
64
+ self.check_id_parameter(args["software_id"])
65
+ software = departments_service.add_software_to_department(
66
+ department_id, args["software_id"]
67
+ )
68
+ return software, 201
69
+
70
+
71
+ class SoftwareDepartmentResource(Resource, ArgsMixin):
72
+
73
+ @jwt_required()
74
+ @permissions.require_admin
75
+ def get(self, department_id):
76
+ """
77
+ Get all software items for a given department.
78
+ ---
79
+ tags:
80
+ - Departments
81
+ parameters:
82
+ - in: path
83
+ name: department_id
84
+ required: True
85
+ type: string
86
+ format: UUID
87
+ x-example: a24a6ea4-ce75-4665-a070-57453082c25
88
+ responses:
89
+ 200:
90
+ description: Software items for given department
91
+ 404:
92
+ description: Department ID matches no department
93
+ """
94
+ self.check_id_parameter(department_id)
95
+ softwares = departments_service.get_softwares_for_department(
96
+ department_id
97
+ )
98
+ return softwares, 200
99
+
100
+ @jwt_required()
101
+ @permissions.require_admin
102
+ def delete(self, department_id, software_id):
103
+ """
104
+ Remove a software item from given department.
105
+ ---
106
+ tags:
107
+ - Departments
108
+ parameters:
109
+ - in: path
110
+ name: software_id
111
+ required: True
112
+ type: string
113
+ format: UUID
114
+ x-example: a24a6ea4-ce75-4665-a070-57453082c25
115
+ - in: path
116
+ name: department_id
117
+ required: True
118
+ type: string
119
+ format: UUID
120
+ x-example: a24a6ea4-ce75-4665-a070-57453082c25
121
+ responses:
122
+ 204:
123
+ description: User removed from given department
124
+ 404:
125
+ description: Department or software ID matches no department or software
126
+ """
127
+ self.check_id_parameter(department_id)
128
+ self.check_id_parameter(software_id)
129
+ departments_service.remove_software_from_department(
130
+ department_id, software_id
131
+ )
132
+ return "", 204
133
+
134
+
135
+ class AllDepartmentHardwareItemsResource(Resource, ArgsMixin):
136
+
137
+ @jwt_required()
138
+ @permissions.require_admin
139
+ def get(self):
140
+ """
141
+ Get all hardware items for all departments.
142
+ ---
143
+ tags:
144
+ - Departments
145
+ responses:
146
+ 200:
147
+ description: A dictionary of departments with their hardware items
148
+ """
149
+ hardware_items = (
150
+ departments_service.get_all_hardware_items_for_departments()
151
+ )
152
+ return hardware_items, 200
153
+
154
+
155
+ class AddHardwareItemToDepartmentResource(Resource, ArgsMixin):
156
+
157
+ @jwt_required()
158
+ @permissions.require_admin
159
+ def post(self, department_id):
160
+ """
161
+ Add a hardware item to given department.
162
+ ---
163
+ tags:
164
+ - Departments
165
+ parameters:
166
+ - in: path
167
+ name: department_id
168
+ required: True
169
+ type: string
170
+ format: UUID
171
+ x-example: a24a6ea4-ce75-4665-a070-57453082c25
172
+ - in: body
173
+ name: hardware_item_id
174
+ required: True
175
+ type: string
176
+ format: UUID
177
+ x-example: a24a6ea4-ce75-4665-a070-57453082c25
178
+ responses:
179
+ 201:
180
+ description: Hardware item added to given department
181
+ 404:
182
+ description: Department ID matches no department
183
+ 400:
184
+ description: Hardware item ID matches no hardware item
185
+ """
186
+ args = self.get_args(
187
+ [
188
+ ("hardware_item_id", None, True),
189
+ ]
190
+ )
191
+ self.check_id_parameter(department_id)
192
+ self.check_id_parameter(args["hardware_item_id"])
193
+ hardware_item_link = (
194
+ departments_service.add_hardware_item_to_department(
195
+ department_id, args["hardware_item_id"]
196
+ )
197
+ )
198
+ return hardware_item_link, 201
199
+
200
+
201
+ class HardwareItemDepartmentResource(Resource, ArgsMixin):
202
+
203
+ @jwt_required()
204
+ @permissions.require_admin
205
+ def get(self, department_id):
206
+ """
207
+ Get all hardware items for a given department.
208
+ ---
209
+ tags:
210
+ - Departments
211
+ parameters:
212
+ - in: path
213
+ name: department_id
214
+ required: True
215
+ type: string
216
+ format: UUID
217
+ x-example: a24a6ea4-ce75-4665-a070-57453082c25
218
+ responses:
219
+ 200:
220
+ description: Hardware items for given department
221
+ 404:
222
+ description: Department ID matches no department
223
+ """
224
+ self.check_id_parameter(department_id)
225
+ hardware_items = departments_service.get_hardware_items_for_department(
226
+ department_id
227
+ )
228
+ return hardware_items, 200
229
+
230
+ @jwt_required()
231
+ @permissions.require_admin
232
+ def delete(self, department_id, hardware_item_id):
233
+ """
234
+ Remove a hardware item from given department.
235
+ ---
236
+ tags:
237
+ - Departments
238
+ parameters:
239
+ - in: path
240
+ name: department_id
241
+ required: True
242
+ type: string
243
+ format: UUID
244
+ x-example: a24a6ea4-ce75-4665-a070-57453082c25
245
+ - in: path
246
+ name: hardware_item_id
247
+ required: True
248
+ type: string
249
+ format: UUID
250
+ x-example: a24a6ea4-ce75-4665-a070-57453082c25
251
+ responses:
252
+ 204:
253
+ description: User removed from given department
254
+ 404:
255
+ description: Department or software ID matches no department or software
256
+ """
257
+ self.check_id_parameter(department_id)
258
+ self.check_id_parameter(hardware_item_id)
259
+ departments_service.remove_hardware_item_from_department(
260
+ department_id, hardware_item_id
261
+ )
262
+ return "", 204
@@ -52,10 +52,7 @@ class BaseStatusResource(Resource):
52
52
  is_es_up = True
53
53
  try:
54
54
  requests.get(
55
- "http://{host}:{port}".format(
56
- host=config.EVENT_STREAM_HOST,
57
- port=config.EVENT_STREAM_PORT,
58
- )
55
+ f"http://{config.EVENT_STREAM_HOST}:{config.EVENT_STREAM_PORT}"
59
56
  )
60
57
  except Exception:
61
58
  is_es_up = False
@@ -77,11 +74,7 @@ class BaseStatusResource(Resource):
77
74
  is_indexer_up = True
78
75
  try:
79
76
  requests.get(
80
- "{protocol}://{host}:{port}".format(
81
- protocol=config.INDEXER["protocol"],
82
- host=config.INDEXER["host"],
83
- port=config.INDEXER["port"],
84
- )
77
+ f"{config.INDEXER['protocol']}://{config.INDEXER['host']}:{config.INDEXER['port']}"
85
78
  )
86
79
  except Exception:
87
80
  is_indexer_up = False
@@ -172,9 +172,7 @@ class TimeSpentsResource(Resource, ArgsMixin):
172
172
  except WrongDateFormatException:
173
173
  abort(
174
174
  400,
175
- "Wrong date format for {} and/or {}".format(
176
- start_date, end_date
177
- ),
175
+ f"Wrong date format for {start_date} and/or {end_date}",
178
176
  )
179
177
 
180
178
 
@@ -31,6 +31,10 @@ from zou.app.blueprints.projects.resources import (
31
31
  ProductionBudgetEntriesResource,
32
32
  ProductionBudgetEntryResource,
33
33
  ProductionMonthTimeSpentsResource,
34
+ ProductionScheduleVersionTaskLinksResource,
35
+ ProductionScheduleVersionSetTaskLinksFromTasksResource,
36
+ ProductionScheduleVersionSetTaskLinksFromProductionScheduleVersionResource,
37
+ ProductionScheduleVersionApplyToProductionResource,
34
38
  )
35
39
 
36
40
  routes = [
@@ -132,6 +136,22 @@ routes = [
132
136
  "/data/projects/<project_id>/budgets/time-spents",
133
137
  ProductionMonthTimeSpentsResource,
134
138
  ),
139
+ (
140
+ "/data/production-schedule-versions/<production_schedule_version_id>/task-links",
141
+ ProductionScheduleVersionTaskLinksResource,
142
+ ),
143
+ (
144
+ "/actions/production-schedule-versions/<production_schedule_version_id>/set-task-links-from-production",
145
+ ProductionScheduleVersionSetTaskLinksFromTasksResource,
146
+ ),
147
+ (
148
+ "/actions/production-schedule-versions/<production_schedule_version_id>/set-task-links-from-production-schedule-version",
149
+ ProductionScheduleVersionSetTaskLinksFromProductionScheduleVersionResource,
150
+ ),
151
+ (
152
+ "/actions/production-schedule-versions/<production_schedule_version_id>/apply-to-production",
153
+ ProductionScheduleVersionApplyToProductionResource,
154
+ ),
135
155
  ]
136
156
 
137
157
  blueprint = Blueprint("projects", "projects")