zou 1.0.2__tar.gz → 1.0.4__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 (491) hide show
  1. {zou-1.0.2/zou.egg-info → zou-1.0.4}/PKG-INFO +1 -1
  2. zou-1.0.4/zou/__init__.py +1 -0
  3. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/playlist.py +30 -6
  4. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/events/resources.py +24 -9
  5. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/previews/resources.py +35 -1
  6. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/tasks/resources.py +1 -0
  7. {zou-1.0.2 → zou-1.0.4}/zou/app/models/playlist.py +6 -0
  8. {zou-1.0.2 → zou-1.0.4}/zou/app/services/events_service.py +12 -2
  9. {zou-1.0.2 → zou-1.0.4}/zou/app/services/preview_files_service.py +18 -3
  10. zou-1.0.4/zou/migrations/versions/a0f668430352_add_created_by_field_to_playlists.py +36 -0
  11. {zou-1.0.2 → zou-1.0.4/zou.egg-info}/PKG-INFO +1 -1
  12. {zou-1.0.2 → zou-1.0.4}/zou.egg-info/SOURCES.txt +1 -0
  13. zou-1.0.2/zou/__init__.py +0 -1
  14. {zou-1.0.2 → zou-1.0.4}/LICENSE +0 -0
  15. {zou-1.0.2 → zou-1.0.4}/README.rst +0 -0
  16. {zou-1.0.2 → zou-1.0.4}/pyproject.toml +0 -0
  17. {zou-1.0.2 → zou-1.0.4}/setup.cfg +0 -0
  18. {zou-1.0.2 → zou-1.0.4}/setup.py +0 -0
  19. {zou-1.0.2 → zou-1.0.4}/zou/app/__init__.py +0 -0
  20. {zou-1.0.2 → zou-1.0.4}/zou/app/api.py +0 -0
  21. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/__init__.py +0 -0
  22. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/assets/__init__.py +0 -0
  23. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/assets/resources.py +0 -0
  24. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/auth/__init__.py +0 -0
  25. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/auth/resources.py +0 -0
  26. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/breakdown/__init__.py +0 -0
  27. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/breakdown/resources.py +0 -0
  28. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/chats/__init__.py +0 -0
  29. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/chats/resources.py +0 -0
  30. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/comments/__init__.py +0 -0
  31. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/comments/resources.py +0 -0
  32. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/concepts/__init__.py +0 -0
  33. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/concepts/resources.py +0 -0
  34. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/__init__.py +0 -0
  35. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/asset_instance.py +0 -0
  36. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/attachment_file.py +0 -0
  37. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/base.py +0 -0
  38. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/budget.py +0 -0
  39. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/budget_entry.py +0 -0
  40. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/chat.py +0 -0
  41. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/chat_message.py +0 -0
  42. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/comments.py +0 -0
  43. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/custom_action.py +0 -0
  44. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/day_off.py +0 -0
  45. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/department.py +0 -0
  46. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/entity.py +0 -0
  47. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/entity_link.py +0 -0
  48. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/entity_type.py +0 -0
  49. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/event.py +0 -0
  50. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/file_status.py +0 -0
  51. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/hardware_item.py +0 -0
  52. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/metadata_descriptor.py +0 -0
  53. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/milestone.py +0 -0
  54. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/news.py +0 -0
  55. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/notification.py +0 -0
  56. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/organisation.py +0 -0
  57. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/output_file.py +0 -0
  58. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/output_type.py +0 -0
  59. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/person.py +0 -0
  60. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/plugin.py +0 -0
  61. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/preview_background_file.py +0 -0
  62. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/preview_file.py +0 -0
  63. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/production_schedule_version.py +0 -0
  64. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/project.py +0 -0
  65. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/project_status.py +0 -0
  66. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/salary_scale.py +0 -0
  67. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/schedule_item.py +0 -0
  68. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/search_filter.py +0 -0
  69. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/search_filter_group.py +0 -0
  70. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/software.py +0 -0
  71. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/status_automation.py +0 -0
  72. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/studio.py +0 -0
  73. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/subscription.py +0 -0
  74. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/task.py +0 -0
  75. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/task_status.py +0 -0
  76. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/task_type.py +0 -0
  77. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/time_spent.py +0 -0
  78. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/crud/working_file.py +0 -0
  79. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/departments/__init__.py +0 -0
  80. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/departments/resources.py +0 -0
  81. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/edits/__init__.py +0 -0
  82. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/edits/resources.py +0 -0
  83. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/entities/__init__.py +0 -0
  84. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/entities/resources.py +0 -0
  85. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/events/__init__.py +0 -0
  86. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/export/__init__.py +0 -0
  87. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/export/csv/__init__.py +0 -0
  88. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/export/csv/assets.py +0 -0
  89. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/export/csv/base.py +0 -0
  90. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/export/csv/casting.py +0 -0
  91. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/export/csv/edits.py +0 -0
  92. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/export/csv/persons.py +0 -0
  93. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/export/csv/playlists.py +0 -0
  94. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/export/csv/projects.py +0 -0
  95. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/export/csv/shots.py +0 -0
  96. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/export/csv/task_types.py +0 -0
  97. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/export/csv/tasks.py +0 -0
  98. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/export/csv/time_spents.py +0 -0
  99. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/files/__init__.py +0 -0
  100. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/files/resources.py +0 -0
  101. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/index/__init__.py +0 -0
  102. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/index/resources.py +0 -0
  103. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/news/__init__.py +0 -0
  104. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/news/resources.py +0 -0
  105. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/persons/__init__.py +0 -0
  106. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/persons/resources.py +0 -0
  107. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/playlists/__init__.py +0 -0
  108. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/playlists/resources.py +0 -0
  109. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/previews/__init__.py +0 -0
  110. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/projects/__init__.py +0 -0
  111. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/projects/resources.py +0 -0
  112. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/search/__init__.py +0 -0
  113. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/search/resources.py +0 -0
  114. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/shots/__init__.py +0 -0
  115. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/shots/resources.py +0 -0
  116. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/__init__.py +0 -0
  117. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/csv/__init__.py +0 -0
  118. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/csv/assets.py +0 -0
  119. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/csv/base.py +0 -0
  120. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/csv/casting.py +0 -0
  121. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/csv/edits.py +0 -0
  122. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/csv/persons.py +0 -0
  123. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/csv/shots.py +0 -0
  124. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/csv/task_type_estimations.py +0 -0
  125. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/kitsu.py +0 -0
  126. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/otio.py +0 -0
  127. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/shotgun/__init__.py +0 -0
  128. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/shotgun/assets.py +0 -0
  129. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/shotgun/base.py +0 -0
  130. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/shotgun/episode.py +0 -0
  131. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/shotgun/exception.py +0 -0
  132. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/shotgun/import_errors.py +0 -0
  133. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/shotgun/notes.py +0 -0
  134. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/shotgun/person.py +0 -0
  135. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/shotgun/project.py +0 -0
  136. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/shotgun/scene.py +0 -0
  137. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/shotgun/sequence.py +0 -0
  138. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/shotgun/shot.py +0 -0
  139. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/shotgun/status.py +0 -0
  140. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/shotgun/steps.py +0 -0
  141. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/shotgun/tasks.py +0 -0
  142. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/shotgun/team.py +0 -0
  143. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/source/shotgun/versions.py +0 -0
  144. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/tasks/__init__.py +0 -0
  145. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/user/__init__.py +0 -0
  146. {zou-1.0.2 → zou-1.0.4}/zou/app/blueprints/user/resources.py +0 -0
  147. {zou-1.0.2 → zou-1.0.4}/zou/app/config.py +0 -0
  148. {zou-1.0.2 → zou-1.0.4}/zou/app/file_trees/default.json +0 -0
  149. {zou-1.0.2 → zou-1.0.4}/zou/app/file_trees/simple.json +0 -0
  150. {zou-1.0.2 → zou-1.0.4}/zou/app/indexer/__init__.py +0 -0
  151. {zou-1.0.2 → zou-1.0.4}/zou/app/indexer/indexing.py +0 -0
  152. {zou-1.0.2 → zou-1.0.4}/zou/app/mixin.py +0 -0
  153. {zou-1.0.2 → zou-1.0.4}/zou/app/models/__init__.py +0 -0
  154. {zou-1.0.2 → zou-1.0.4}/zou/app/models/asset_instance.py +0 -0
  155. {zou-1.0.2 → zou-1.0.4}/zou/app/models/attachment_file.py +0 -0
  156. {zou-1.0.2 → zou-1.0.4}/zou/app/models/base.py +0 -0
  157. {zou-1.0.2 → zou-1.0.4}/zou/app/models/budget.py +0 -0
  158. {zou-1.0.2 → zou-1.0.4}/zou/app/models/budget_entry.py +0 -0
  159. {zou-1.0.2 → zou-1.0.4}/zou/app/models/build_job.py +0 -0
  160. {zou-1.0.2 → zou-1.0.4}/zou/app/models/chat.py +0 -0
  161. {zou-1.0.2 → zou-1.0.4}/zou/app/models/chat_message.py +0 -0
  162. {zou-1.0.2 → zou-1.0.4}/zou/app/models/comment.py +0 -0
  163. {zou-1.0.2 → zou-1.0.4}/zou/app/models/custom_action.py +0 -0
  164. {zou-1.0.2 → zou-1.0.4}/zou/app/models/data_import_error.py +0 -0
  165. {zou-1.0.2 → zou-1.0.4}/zou/app/models/day_off.py +0 -0
  166. {zou-1.0.2 → zou-1.0.4}/zou/app/models/department.py +0 -0
  167. {zou-1.0.2 → zou-1.0.4}/zou/app/models/desktop_login_log.py +0 -0
  168. {zou-1.0.2 → zou-1.0.4}/zou/app/models/entity.py +0 -0
  169. {zou-1.0.2 → zou-1.0.4}/zou/app/models/entity_type.py +0 -0
  170. {zou-1.0.2 → zou-1.0.4}/zou/app/models/event.py +0 -0
  171. {zou-1.0.2 → zou-1.0.4}/zou/app/models/file_status.py +0 -0
  172. {zou-1.0.2 → zou-1.0.4}/zou/app/models/hardware_item.py +0 -0
  173. {zou-1.0.2 → zou-1.0.4}/zou/app/models/login_log.py +0 -0
  174. {zou-1.0.2 → zou-1.0.4}/zou/app/models/metadata_descriptor.py +0 -0
  175. {zou-1.0.2 → zou-1.0.4}/zou/app/models/milestone.py +0 -0
  176. {zou-1.0.2 → zou-1.0.4}/zou/app/models/news.py +0 -0
  177. {zou-1.0.2 → zou-1.0.4}/zou/app/models/notification.py +0 -0
  178. {zou-1.0.2 → zou-1.0.4}/zou/app/models/organisation.py +0 -0
  179. {zou-1.0.2 → zou-1.0.4}/zou/app/models/output_file.py +0 -0
  180. {zou-1.0.2 → zou-1.0.4}/zou/app/models/output_type.py +0 -0
  181. {zou-1.0.2 → zou-1.0.4}/zou/app/models/person.py +0 -0
  182. {zou-1.0.2 → zou-1.0.4}/zou/app/models/plugin.py +0 -0
  183. {zou-1.0.2 → zou-1.0.4}/zou/app/models/preview_background_file.py +0 -0
  184. {zou-1.0.2 → zou-1.0.4}/zou/app/models/preview_file.py +0 -0
  185. {zou-1.0.2 → zou-1.0.4}/zou/app/models/production_schedule_version.py +0 -0
  186. {zou-1.0.2 → zou-1.0.4}/zou/app/models/project.py +0 -0
  187. {zou-1.0.2 → zou-1.0.4}/zou/app/models/project_status.py +0 -0
  188. {zou-1.0.2 → zou-1.0.4}/zou/app/models/salary_scale.py +0 -0
  189. {zou-1.0.2 → zou-1.0.4}/zou/app/models/schedule_item.py +0 -0
  190. {zou-1.0.2 → zou-1.0.4}/zou/app/models/search_filter.py +0 -0
  191. {zou-1.0.2 → zou-1.0.4}/zou/app/models/search_filter_group.py +0 -0
  192. {zou-1.0.2 → zou-1.0.4}/zou/app/models/serializer.py +0 -0
  193. {zou-1.0.2 → zou-1.0.4}/zou/app/models/software.py +0 -0
  194. {zou-1.0.2 → zou-1.0.4}/zou/app/models/status_automation.py +0 -0
  195. {zou-1.0.2 → zou-1.0.4}/zou/app/models/studio.py +0 -0
  196. {zou-1.0.2 → zou-1.0.4}/zou/app/models/subscription.py +0 -0
  197. {zou-1.0.2 → zou-1.0.4}/zou/app/models/task.py +0 -0
  198. {zou-1.0.2 → zou-1.0.4}/zou/app/models/task_status.py +0 -0
  199. {zou-1.0.2 → zou-1.0.4}/zou/app/models/task_type.py +0 -0
  200. {zou-1.0.2 → zou-1.0.4}/zou/app/models/time_spent.py +0 -0
  201. {zou-1.0.2 → zou-1.0.4}/zou/app/models/working_file.py +0 -0
  202. {zou-1.0.2 → zou-1.0.4}/zou/app/services/__init__.py +0 -0
  203. {zou-1.0.2 → zou-1.0.4}/zou/app/services/assets_service.py +0 -0
  204. {zou-1.0.2 → zou-1.0.4}/zou/app/services/auth_service.py +0 -0
  205. {zou-1.0.2 → zou-1.0.4}/zou/app/services/backup_service.py +0 -0
  206. {zou-1.0.2 → zou-1.0.4}/zou/app/services/base_service.py +0 -0
  207. {zou-1.0.2 → zou-1.0.4}/zou/app/services/breakdown_service.py +0 -0
  208. {zou-1.0.2 → zou-1.0.4}/zou/app/services/budget_service.py +0 -0
  209. {zou-1.0.2 → zou-1.0.4}/zou/app/services/chats_service.py +0 -0
  210. {zou-1.0.2 → zou-1.0.4}/zou/app/services/comments_service.py +0 -0
  211. {zou-1.0.2 → zou-1.0.4}/zou/app/services/concepts_service.py +0 -0
  212. {zou-1.0.2 → zou-1.0.4}/zou/app/services/custom_actions_service.py +0 -0
  213. {zou-1.0.2 → zou-1.0.4}/zou/app/services/deletion_service.py +0 -0
  214. {zou-1.0.2 → zou-1.0.4}/zou/app/services/departments_service.py +0 -0
  215. {zou-1.0.2 → zou-1.0.4}/zou/app/services/edits_service.py +0 -0
  216. {zou-1.0.2 → zou-1.0.4}/zou/app/services/emails_service.py +0 -0
  217. {zou-1.0.2 → zou-1.0.4}/zou/app/services/entities_service.py +0 -0
  218. {zou-1.0.2 → zou-1.0.4}/zou/app/services/exception.py +0 -0
  219. {zou-1.0.2 → zou-1.0.4}/zou/app/services/file_tree_service.py +0 -0
  220. {zou-1.0.2 → zou-1.0.4}/zou/app/services/files_service.py +0 -0
  221. {zou-1.0.2 → zou-1.0.4}/zou/app/services/index_service.py +0 -0
  222. {zou-1.0.2 → zou-1.0.4}/zou/app/services/names_service.py +0 -0
  223. {zou-1.0.2 → zou-1.0.4}/zou/app/services/news_service.py +0 -0
  224. {zou-1.0.2 → zou-1.0.4}/zou/app/services/notifications_service.py +0 -0
  225. {zou-1.0.2 → zou-1.0.4}/zou/app/services/persons_service.py +0 -0
  226. {zou-1.0.2 → zou-1.0.4}/zou/app/services/playlists_service.py +0 -0
  227. {zou-1.0.2 → zou-1.0.4}/zou/app/services/plugins_service.py +0 -0
  228. {zou-1.0.2 → zou-1.0.4}/zou/app/services/projects_service.py +0 -0
  229. {zou-1.0.2 → zou-1.0.4}/zou/app/services/scenes_service.py +0 -0
  230. {zou-1.0.2 → zou-1.0.4}/zou/app/services/schedule_service.py +0 -0
  231. {zou-1.0.2 → zou-1.0.4}/zou/app/services/shots_service.py +0 -0
  232. {zou-1.0.2 → zou-1.0.4}/zou/app/services/stats_service.py +0 -0
  233. {zou-1.0.2 → zou-1.0.4}/zou/app/services/status_automations_service.py +0 -0
  234. {zou-1.0.2 → zou-1.0.4}/zou/app/services/sync_service.py +0 -0
  235. {zou-1.0.2 → zou-1.0.4}/zou/app/services/tasks_service.py +0 -0
  236. {zou-1.0.2 → zou-1.0.4}/zou/app/services/telemetry_services.py +0 -0
  237. {zou-1.0.2 → zou-1.0.4}/zou/app/services/templates_service.py +0 -0
  238. {zou-1.0.2 → zou-1.0.4}/zou/app/services/time_spents_service.py +0 -0
  239. {zou-1.0.2 → zou-1.0.4}/zou/app/services/user_service.py +0 -0
  240. {zou-1.0.2 → zou-1.0.4}/zou/app/stores/__init__.py +0 -0
  241. {zou-1.0.2 → zou-1.0.4}/zou/app/stores/auth_tokens_store.py +0 -0
  242. {zou-1.0.2 → zou-1.0.4}/zou/app/stores/file_store.py +0 -0
  243. {zou-1.0.2 → zou-1.0.4}/zou/app/stores/publisher_store.py +0 -0
  244. {zou-1.0.2 → zou-1.0.4}/zou/app/stores/queue_store.py +0 -0
  245. {zou-1.0.2 → zou-1.0.4}/zou/app/swagger.py +0 -0
  246. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/__init__.py +0 -0
  247. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/api.py +0 -0
  248. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/auth.py +0 -0
  249. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/cache.py +0 -0
  250. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/chats.py +0 -0
  251. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/colors.py +0 -0
  252. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/commands.py +0 -0
  253. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/csv_utils.py +0 -0
  254. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/date_helpers.py +0 -0
  255. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/dbhelpers.py +0 -0
  256. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/emails.py +0 -0
  257. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/env.py +0 -0
  258. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/events.py +0 -0
  259. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/fido.py +0 -0
  260. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/fields.py +0 -0
  261. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/flask.py +0 -0
  262. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/fs.py +0 -0
  263. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/git.py +0 -0
  264. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/logs.py +0 -0
  265. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/monitoring.py +0 -0
  266. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/permissions.py +0 -0
  267. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/plugins.py +0 -0
  268. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/query.py +0 -0
  269. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/redis.py +0 -0
  270. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/remote_job.py +0 -0
  271. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/saml.py +0 -0
  272. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/shell.py +0 -0
  273. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/string.py +0 -0
  274. {zou-1.0.2 → zou-1.0.4}/zou/app/utils/thumbnail.py +0 -0
  275. {zou-1.0.2 → zou-1.0.4}/zou/cli.py +0 -0
  276. {zou-1.0.2 → zou-1.0.4}/zou/debug.py +0 -0
  277. {zou-1.0.2 → zou-1.0.4}/zou/event_stream.py +0 -0
  278. {zou-1.0.2 → zou-1.0.4}/zou/job_settings.py +0 -0
  279. {zou-1.0.2 → zou-1.0.4}/zou/migrations/README +0 -0
  280. {zou-1.0.2 → zou-1.0.4}/zou/migrations/__init__.py +0 -0
  281. {zou-1.0.2 → zou-1.0.4}/zou/migrations/alembic.ini +0 -0
  282. {zou-1.0.2 → zou-1.0.4}/zou/migrations/env.py +0 -0
  283. {zou-1.0.2 → zou-1.0.4}/zou/migrations/script.py.mako +0 -0
  284. {zou-1.0.2 → zou-1.0.4}/zou/migrations/utils/__init__.py +0 -0
  285. {zou-1.0.2 → zou-1.0.4}/zou/migrations/utils/base.py +0 -0
  286. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/003be8a91001_add_start_and_end_dates_to_projects.py +0 -0
  287. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/0596674df51d_add_department_mentions_to_comments.py +0 -0
  288. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/05ac7e8caa21_remove_unique_constraint_for_taskstatus_.py +0 -0
  289. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/05b7dc79a416_add_archived_fields_to_main_tables.py +0 -0
  290. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/06552e22f9e7_add_comment_updated_by.py +0 -0
  291. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/0bd1e89f2a6f_add_productionscheduleversiontasklink_uc.py +0 -0
  292. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/0c05b22194f3_add_performance_indexes.py +0 -0
  293. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/0cf5e0e035fa_drop_column_tasktype_for_shots.py +0 -0
  294. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/0ec3762a745d_add_attachment_table.py +0 -0
  295. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/0ef6416a507b_.py +0 -0
  296. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/10cf267d95c9_fix_schedule_item.py +0 -0
  297. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/16328eae4b5f_add_new_constraint_for_timespent.py +0 -0
  298. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/16df47d76c64_add_some_indexes.py +0 -0
  299. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/17ef8f7be758_disallow_null_choicetype.py +0 -0
  300. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/1b0ab951adca_add_reply_id_to_attachments.py +0 -0
  301. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/1bb55759146f_add_table_studio.py +0 -0
  302. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/1cb44194db49_add_file_size_field_to_preview_file.py +0 -0
  303. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/1e150c2cea4d_add_nb_entities_out.py +0 -0
  304. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/1e2d77a2f0c4_add_hd_by_default_column.py +0 -0
  305. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/1fab8c420678_add_attachments_to_message_chats.py +0 -0
  306. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/20a8ad264659_tasktypeassettypelink_.py +0 -0
  307. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/20dfeb36142b_add_projecttaskstatuslink_roles_for_.py +0 -0
  308. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/23122f290ca2_add_entity_chat_models.py +0 -0
  309. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/269d41bfb73f_add_entity_entity_links.py +0 -0
  310. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/26f96f65cfa3_add_productionversionschedule_uc.py +0 -0
  311. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/2762a797f1f9_add_people_salary_information.py +0 -0
  312. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/29df910f04a4_create_unique_constraint_project_id_.py +0 -0
  313. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/29fe01a6c9eb_add_status_automation_field.py +0 -0
  314. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/2adc020885fa_.py +0 -0
  315. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/2baede80b111_add_entity_status_field.py +0 -0
  316. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/306266361f4f_.py +0 -0
  317. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/307edd8c639d_change_comment_updated_by_in_comment_.py +0 -0
  318. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/328fd44c6347_add_entity_created_by.py +0 -0
  319. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/32f134ff1201_add_is_shared_flag_to_filters.py +0 -0
  320. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/346250b5304c_add_position_to_preview_files.py +0 -0
  321. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/3476e147e632_add_acks_to_comments.py +0 -0
  322. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/389cfb9de776_.py +0 -0
  323. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/38baa9a23b3d_.py +0 -0
  324. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/398150912a3f_validation_status_preview.py +0 -0
  325. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/3b0d1321079e_.py +0 -0
  326. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/3d5c93bafb9d_.py +0 -0
  327. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/3d8e68dffeee_fix_task_person_link.py +0 -0
  328. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/3e0538ddf80f_.py +0 -0
  329. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/3fee3bd10f9d_.py +0 -0
  330. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/4095103c7d01_add_is_clients_isolated_flag_to_projects.py +0 -0
  331. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/40dea9555940_.py +0 -0
  332. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/42ec83db6a01_change_person_preferred_two_factor_.py +0 -0
  333. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/4368137b44e1_productionscheduleversion_add_on_delete_.py +0 -0
  334. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/43d0cf0ed5e7_.py +0 -0
  335. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/443d1e78a932_.py +0 -0
  336. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/45c2de366e66_.py +0 -0
  337. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/45dafbb3f4e1_for_person_contract_type_disallow_null.py +0 -0
  338. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/45f739ef962a_add_people_salary_scale_table.py +0 -0
  339. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/4715c2586036_add_last_preview_file_fields.py +0 -0
  340. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/4aab1f84ad72_introduce_plugin_table.py +0 -0
  341. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/4bd9bfb73f11_add_fields_to_the_software_table.py +0 -0
  342. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/4d585b6956f2_add_taskstatus_is_wip.py +0 -0
  343. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/4e3738cdc34c_.py +0 -0
  344. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/4f2398ebcd49_.py +0 -0
  345. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/523ee9647bee_.py +0 -0
  346. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/539a3a00c417_for_departmentlink_index_person_id_.py +0 -0
  347. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/54ee0d1d60ba_add_build_job_model.py +0 -0
  348. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/556526e47daa_.py +0 -0
  349. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/57222395f2be_add_statusautomation_import_last_revision.py +0 -0
  350. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/5798d2c9020b_change_person_role_to_choicetype.py +0 -0
  351. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/590aa1ffe731_add_notifications_enabled_flag.py +0 -0
  352. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/59a7445a966c_add_entity_is_shared.py +0 -0
  353. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/5a291251823c_add_max_retake_parameter.py +0 -0
  354. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/5ab9d7a75887_.py +0 -0
  355. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/5b0fcbb94f24_.py +0 -0
  356. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/5b7fa3e51701_add_is_client_allowed_flag_to_task_.py +0 -0
  357. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/5b980f0dc365_add_comment_links.py +0 -0
  358. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/5b9fd9ddfe43_add_homepage_and_contract_fields.py +0 -0
  359. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/5c0498e264bc_add_slack_fields.py +0 -0
  360. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/5e2ce62632a6_add_workflow_to_project.py +0 -0
  361. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/5f1620d191af_add_playlist_id_field_to_notification.py +0 -0
  362. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/5f715f2b6348_add_new_table_productionscheduleversion.py +0 -0
  363. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/680c64565f9d_for_searchfiltergroup_is_shared.py +0 -0
  364. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/693cc511d28d_add_taskstatus_priority.py +0 -0
  365. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/6aa446ee4072_add_is_for_all_flage_to_playlists.py +0 -0
  366. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/6bd3b102d61b_.py +0 -0
  367. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/6c597e842afa_add_task_type_field_to_playlists.py +0 -0
  368. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/6d1b2c60f58b_add_milestone_model.py +0 -0
  369. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/6d7fa5a8e9a5_add_timesheets_locked_field_to_org.py +0 -0
  370. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/6eeaff945706_add_data_field_on_entity_links.py +0 -0
  371. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/6f6049877105_.py +0 -0
  372. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/71d546ace0ee_add_performance_indexes.py +0 -0
  373. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/7417c8eb70d8_add_for_entity_field_to_playlists.py +0 -0
  374. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/772a5e43f05b_.py +0 -0
  375. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/7748d3d22925_add_columns_to_searchfilter_table_to_.py +0 -0
  376. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/77d6820f494f_add_reply_to_notif.py +0 -0
  377. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/7a16258f2fab_add_currency_field_to_budgets.py +0 -0
  378. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/7b1f765677d8_.py +0 -0
  379. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/7bc746997e8d_add_slack_token_field_to_organisation.py +0 -0
  380. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/7dc79d4ed7cd_.py +0 -0
  381. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/818f7bda2528_.py +0 -0
  382. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/82e7f7a95e84_add_project_id_to_events.py +0 -0
  383. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/82ee682204ab_add_is_generated_from_ldap_column_to_.py +0 -0
  384. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/83e2f33a9b14_add_project_bugdet_table.py +0 -0
  385. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/8588f254d6b8_add_archived_fields.py +0 -0
  386. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/8739ae9fa28b_add_for_client_field.py +0 -0
  387. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/87efceb6745b_add_ready_for_to_entity.py +0 -0
  388. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/892b264937ec_.py +0 -0
  389. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/8a1b4a1b7f4a_add_totp_columns_for_person.py +0 -0
  390. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/8ab98c178903_add_budget_entry_table.py +0 -0
  391. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/8e4f39e321f4_add_day_off_table.py +0 -0
  392. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/8e67c183bed7_add_preference_fields.py +0 -0
  393. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/8fbd40afbe5f_allow_to_set_float_values_for_.py +0 -0
  394. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/9010a64e5a2d_add_indices.py +0 -0
  395. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/9060dd4f6116_notification_uc.py +0 -0
  396. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/925771029620_.py +0 -0
  397. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/92b40d79ad3f_allow_message_attachments.py +0 -0
  398. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/92bdfe07e5f5_discord_integration.py +0 -0
  399. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/956659992419_add_columns_for_person_to_store_fido_.py +0 -0
  400. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/9683bd840dee_add_archived_field_to_software.py +0 -0
  401. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/96c79d31e648_add_mail_otp_columns_for_person.py +0 -0
  402. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/96f58a4a2a58_person_partial_index_for_email_only_.py +0 -0
  403. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/971dbf5a0faf_add_short_name_for_asset_type_entity_.py +0 -0
  404. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/98c90621cf58_add_for_client_flag_to_playlist.py +0 -0
  405. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/99825b9cc778_.py +0 -0
  406. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/9a09467f9b2c_.py +0 -0
  407. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/9af2df17a9d5_add_hardware_table.py +0 -0
  408. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/9b85c14fa8a7_add_day_off_new_columns.py +0 -0
  409. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/9bd17364fc18_.py +0 -0
  410. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/9d3bb33c6fc6_add_department_keys_to_filter_models.py +0 -0
  411. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/9e5b3a9b0cee_add_new_column_metadatadescriptor_data_type_.py +0 -0
  412. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/9f8445f9b42c_add_man_days_fields.py +0 -0
  413. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/a1b2c3d4e5f6_add_position_to_metadata_descriptor.py +0 -0
  414. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/a23682ccc1f1_.py +0 -0
  415. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/a252a094e977_add_descriptions_for_entities_tasks_and_.py +0 -0
  416. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/a519c710877c_.py +0 -0
  417. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/a65bdadbae2f_.py +0 -0
  418. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/a66508788c53_add_nb_assets_ready.py +0 -0
  419. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/a6c25eed3ea1_add_login_failed_attemps_and_last_login_.py +0 -0
  420. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/a7c43f3fbc76_add_duration_column_to_the_preview_file.py +0 -0
  421. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/aa0a60033106_feedback_request.py +0 -0
  422. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/addbad59c706_allow_to_manage_drawings_instead_of_.py +0 -0
  423. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/addbbefa7028_add_departments_link_to_metadata_.py +0 -0
  424. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/ae0127f2fc56_add_previewfile_width_and_previewfile_.py +0 -0
  425. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/af1790868e2c_.py +0 -0
  426. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/b45cb782bb9c_.py +0 -0
  427. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/b4dd0add5f79_.py +0 -0
  428. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/b8c0a0f9d054_drop_task_status_is_reviewable.py +0 -0
  429. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/b8ed0fb263f8_add_person_jti_and_jti_expiration_date.py +0 -0
  430. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/b97a71306fc8_add_is_casting_standby_column_to_entity.py +0 -0
  431. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/be56dc0fb760_for_is_shared_disallow_nullable.py +0 -0
  432. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/bf1347acdee2_.py +0 -0
  433. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/c49e41f1298b_add_previewbackground.py +0 -0
  434. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/c68c2a62cfac_add_mimetype_column_to_attachment.py +0 -0
  435. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/c726b98be194_.py +0 -0
  436. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/c81f3e83bdb5_.py +0 -0
  437. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/ca28796a2a62_add_is_done_field_to_the_task_model.py +0 -0
  438. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/ce7f46f445dc_add_column_estimation_for_.py +0 -0
  439. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/cf3d365de164_add_entity_version_model.py +0 -0
  440. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/cf6cec6d6bf5_add_status_field_to_preview_file.py +0 -0
  441. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/d25118cddcaa_modify_salary_scale_model.py +0 -0
  442. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/d5665dca188b_add_version_field_to_software.py +0 -0
  443. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/d80267806131_task_status_new_column_is_default.py +0 -0
  444. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/d80f02824047_add_plugin_revision.py +0 -0
  445. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/d8dcd5196d57_add_casting_label.py +0 -0
  446. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/d97f2730bf7b_add_.py +0 -0
  447. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/dde6be40f54f_add_departement_links_tables_for_.py +0 -0
  448. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/de8a3de227ef_.py +0 -0
  449. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/deeacd38d373_for_projecttaskstatuslink_set_default_.py +0 -0
  450. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/df1834485f57_.py +0 -0
  451. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/df9f8a147e80_change_file_size_to_big_integer.py +0 -0
  452. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/e1ef93f40d3d_.py +0 -0
  453. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/e29638428dfd_add_schedule_item_table.py +0 -0
  454. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/e3f6db74cc1e_.py +0 -0
  455. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/e4b48ca33539_add_project_production_schedule_version_.py +0 -0
  456. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/e7e633bd6fa2_add_exceptions_to_budget_entries.py +0 -0
  457. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/e839d6603c09_add_person_id_to_shot_history.py +0 -0
  458. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/e8bc24998b34_remove_on_delete_cascade_for_.py +0 -0
  459. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/ee2373fbe3a4_.py +0 -0
  460. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/f0567e8d0c62_.py +0 -0
  461. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/f0c6cbb61869_add_production_style_field.py +0 -0
  462. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/f344b867a911_for_description_of_entity_task_working_.py +0 -0
  463. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/f4ff5a73d283_add_person_ldap_uid.py +0 -0
  464. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/f5b113876a49_add_preferred_two_factor_authentication_.py +0 -0
  465. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/f5bdca075cdc_add_preview_download_flag_to_projects.py +0 -0
  466. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/f874ad5e898a_add_link_entity_type_task_type.py +0 -0
  467. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/f995b28fb749_.py +0 -0
  468. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/fb6b6f188497_.py +0 -0
  469. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/fb87feaaa094_add_missing_unique_constraints.py +0 -0
  470. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/fba149993140_add_missing_index.py +0 -0
  471. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/fc322f908695_.py +0 -0
  472. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/fee7c696166e_.py +0 -0
  473. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/feffd3c5b806_introduce_concepts.py +0 -0
  474. {zou-1.0.2 → zou-1.0.4}/zou/migrations/versions/ffeed4956ab1_add_more_details_to_projects.py +0 -0
  475. {zou-1.0.2 → zou-1.0.4}/zou/plugin_template/__init__.py +0 -0
  476. {zou-1.0.2 → zou-1.0.4}/zou/plugin_template/migrations/alembic.ini +0 -0
  477. {zou-1.0.2 → zou-1.0.4}/zou/plugin_template/migrations/env.py +0 -0
  478. {zou-1.0.2 → zou-1.0.4}/zou/plugin_template/migrations/script.py.mako +0 -0
  479. {zou-1.0.2 → zou-1.0.4}/zou/plugin_template/models.py +0 -0
  480. {zou-1.0.2 → zou-1.0.4}/zou/plugin_template/routes.py +0 -0
  481. {zou-1.0.2 → zou-1.0.4}/zou/remote/__init__.py +0 -0
  482. {zou-1.0.2 → zou-1.0.4}/zou/remote/config_payload.py +0 -0
  483. {zou-1.0.2 → zou-1.0.4}/zou/remote/normalize_movie.py +0 -0
  484. {zou-1.0.2 → zou-1.0.4}/zou/remote/playlist.py +0 -0
  485. {zou-1.0.2 → zou-1.0.4}/zou/utils/__init__.py +0 -0
  486. {zou-1.0.2 → zou-1.0.4}/zou/utils/movie.py +0 -0
  487. {zou-1.0.2 → zou-1.0.4}/zou.egg-info/dependency_links.txt +0 -0
  488. {zou-1.0.2 → zou-1.0.4}/zou.egg-info/entry_points.txt +0 -0
  489. {zou-1.0.2 → zou-1.0.4}/zou.egg-info/not-zip-safe +0 -0
  490. {zou-1.0.2 → zou-1.0.4}/zou.egg-info/requires.txt +0 -0
  491. {zou-1.0.2 → zou-1.0.4}/zou.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: zou
3
- Version: 1.0.2
3
+ Version: 1.0.4
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
@@ -0,0 +1 @@
1
+ __version__ = "1.0.4"
@@ -1,10 +1,11 @@
1
1
  from flask_jwt_extended import jwt_required
2
2
 
3
3
  from zou.app.models.playlist import Playlist
4
- from zou.app.services import user_service, playlists_service
4
+ from zou.app.models.build_job import BuildJob
5
+ from zou.app.services import user_service, playlists_service, persons_service
5
6
 
6
7
  from zou.app.blueprints.crud.base import BaseModelResource, BaseModelsResource
7
- from zou.app.utils import fields
8
+ from zou.app.utils import fields, permissions
8
9
 
9
10
 
10
11
  class PlaylistsResource(BaseModelsResource):
@@ -169,6 +170,7 @@ class PlaylistsResource(BaseModelsResource):
169
170
  data["task_type_id"]
170
171
  ):
171
172
  data["task_type_id"] = None
173
+ data["created_by"] = persons_service.get_current_user()["id"]
172
174
  return data
173
175
 
174
176
 
@@ -353,12 +355,23 @@ class PlaylistResource(BaseModelResource):
353
355
  400:
354
356
  description: Integrity error or cannot delete
355
357
  """
356
- playlists_service.remove_playlist(instance_id)
357
- return "", 204
358
+ return super().delete(instance_id)
359
+
360
+ def pre_delete(self, playlist):
361
+ query = BuildJob.query.filter_by(playlist_id=playlist["id"])
362
+ for job in query.all():
363
+ playlists_service.remove_build_job(playlist, job.id)
358
364
 
359
365
  def check_update_permissions(self, playlist, data):
360
- user_service.check_project_access(playlist["project_id"])
361
- user_service.block_access_to_vendor()
366
+ if user_service.has_manager_project_access(playlist["project_id"]):
367
+ return True
368
+ elif permissions.has_supervisor_permissions() and (
369
+ playlist["created_by"]
370
+ in [None, persons_service.get_current_user()["id"]]
371
+ ):
372
+ return True
373
+ else:
374
+ raise permissions.PermissionDenied()
362
375
 
363
376
  def pre_update(self, instance_dict, data):
364
377
  if "shots" in data:
@@ -372,3 +385,14 @@ class PlaylistResource(BaseModelResource):
372
385
  ]
373
386
  data["shots"] = shots
374
387
  return data
388
+
389
+ def check_delete_permissions(self, playlist):
390
+ if user_service.has_manager_project_access(playlist["project_id"]):
391
+ return True
392
+ elif permissions.has_supervisor_permissions() and (
393
+ playlist["created_by"]
394
+ in [None, persons_service.get_current_user()["id"]]
395
+ ):
396
+ return True
397
+ else:
398
+ raise permissions.PermissionDenied()
@@ -38,6 +38,13 @@ class EventsResource(Resource, ArgsMixin):
38
38
  default: false
39
39
  description: Return only file-related events
40
40
  example: false
41
+ - in: query
42
+ name: cursor_event_id
43
+ required: False
44
+ type: string
45
+ format: uuid
46
+ example: a24a6ea4-ce75-4665-a070-57453082c25
47
+ description: ID of the last event from previous page for cursor-based pagination
41
48
  - in: query
42
49
  name: limit
43
50
  type: integer
@@ -99,7 +106,8 @@ class EventsResource(Resource, ArgsMixin):
99
106
  ("after", None, False),
100
107
  ("before", None, False),
101
108
  ("only_files", False, False),
102
- ("limit", 100, False),
109
+ ("cursor_event_id", None, False),
110
+ ("limit", 100, False, int),
103
111
  ("project_id", None, False),
104
112
  ("name", None, False),
105
113
  ],
@@ -108,6 +116,7 @@ class EventsResource(Resource, ArgsMixin):
108
116
  permissions.check_manager_permissions()
109
117
  before = self.parse_date_parameter(args["before"])
110
118
  after = self.parse_date_parameter(args["after"])
119
+ cursor_event_id = args["cursor_event_id"]
111
120
  limit = args["limit"]
112
121
  only_files = args["only_files"] == "true"
113
122
  project_id = args.get("project_id", None)
@@ -116,15 +125,21 @@ class EventsResource(Resource, ArgsMixin):
116
125
  raise WrongParameterException(
117
126
  "The project_id parameter is not a valid id"
118
127
  )
119
- else:
120
- return events_service.get_last_events(
121
- after=after,
122
- before=before,
123
- limit=limit,
124
- only_files=only_files,
125
- project_id=project_id,
126
- name=name,
128
+ if cursor_event_id is not None and not fields.is_valid_id(
129
+ cursor_event_id
130
+ ):
131
+ raise WrongParameterException(
132
+ "The cursor_event_id parameter is not a valid id"
127
133
  )
134
+ return events_service.get_last_events(
135
+ after=after,
136
+ before=before,
137
+ cursor_event_id=cursor_event_id,
138
+ limit=limit,
139
+ only_files=only_files,
140
+ project_id=project_id,
141
+ name=name,
142
+ )
128
143
 
129
144
 
130
145
  class LoginLogsResource(Resource, ArgsMixin):
@@ -27,6 +27,7 @@ from zou.app.services import (
27
27
  from zou.app.stores import queue_store
28
28
  from zou.utils import movie
29
29
  from zou.app.utils import (
30
+ fields,
30
31
  fs,
31
32
  events,
32
33
  permissions,
@@ -1567,6 +1568,20 @@ class RunningPreviewFiles(Resource, ArgsMixin):
1567
1568
  states equal to processing or broken.
1568
1569
  tags:
1569
1570
  - Previews
1571
+ parameters:
1572
+ - in: query
1573
+ name: cursor_preview_file_id
1574
+ required: false
1575
+ type: string
1576
+ format: uuid
1577
+ description: ID of the last preview file from previous page for cursor-based pagination
1578
+ example: a24a6ea4-ce75-4665-a070-57453082c25
1579
+ - in: query
1580
+ name: limit
1581
+ required: false
1582
+ type: integer
1583
+ description: Maximum number of preview files to return
1584
+ example: 100
1570
1585
  responses:
1571
1586
  200:
1572
1587
  description: All preview files from open productions with processing or broken states
@@ -1588,7 +1603,26 @@ class RunningPreviewFiles(Resource, ArgsMixin):
1588
1603
  example: "processing"
1589
1604
  """
1590
1605
  permissions.check_admin_permissions()
1591
- return preview_files_service.get_running_preview_files()
1606
+ args = self.get_args(
1607
+ [
1608
+ ("cursor_preview_file_id", None, False),
1609
+ ("limit", None, False, int),
1610
+ ],
1611
+ )
1612
+ cursor_preview_file_id = args["cursor_preview_file_id"]
1613
+ limit = args["limit"]
1614
+
1615
+ if cursor_preview_file_id is not None and not fields.is_valid_id(
1616
+ cursor_preview_file_id
1617
+ ):
1618
+ raise WrongParameterException(
1619
+ "The cursor_preview_file_id parameter is not a valid id"
1620
+ )
1621
+
1622
+ return preview_files_service.get_running_preview_files(
1623
+ cursor_preview_file_id=cursor_preview_file_id,
1624
+ limit=limit,
1625
+ )
1592
1626
 
1593
1627
 
1594
1628
  class ExtractFrameFromPreview(Resource, ArgsMixin):
@@ -2681,6 +2681,7 @@ class SetTaskMainPreviewResource(Resource):
2681
2681
  preview_file = preview_files_service.get_last_preview_file_for_task(
2682
2682
  task_id
2683
2683
  )
2684
+ entity = None
2684
2685
  if preview_file is not None:
2685
2686
  entity = entities_service.update_entity_preview(
2686
2687
  task["entity_id"], preview_file["id"]
@@ -30,6 +30,12 @@ class Playlist(db.Model, BaseMixin, SerializerMixin):
30
30
 
31
31
  build_jobs = relationship("BuildJob")
32
32
 
33
+ created_by = db.Column(
34
+ UUIDType(binary=False),
35
+ db.ForeignKey("person.id"),
36
+ nullable=True,
37
+ )
38
+
33
39
  __table_args__ = (
34
40
  db.UniqueConstraint(
35
41
  "name", "project_id", "episode_id", name="playlist_uc"
@@ -1,20 +1,22 @@
1
1
  from zou.app.models.event import ApiEvent
2
2
  from zou.app.models.login_log import LoginLog
3
3
  from zou.app.utils import fields
4
+ from zou.app.services.exception import WrongParameterException
4
5
  from sqlalchemy import func
5
6
 
6
7
 
7
8
  def get_last_events(
8
9
  after=None,
9
10
  before=None,
11
+ cursor_event_id=None,
10
12
  limit=100,
11
13
  only_files=False,
12
14
  project_id=None,
13
15
  name=None,
14
16
  ):
15
17
  """
16
- Return last 100 events published. If before parameter is set, it returns
17
- last 100 events before this date.
18
+ Return paginated events using cursor-based pagination.
19
+ If cursor_event_id is set, it returns events older than this event.
18
20
  """
19
21
  query = ApiEvent.query.order_by(ApiEvent.created_at.desc())
20
22
 
@@ -46,6 +48,14 @@ def get_last_events(
46
48
  if name is not None:
47
49
  query = query.filter(ApiEvent.name == name)
48
50
 
51
+ if cursor_event_id is not None:
52
+ cursor_event = ApiEvent.query.get(cursor_event_id)
53
+ if cursor_event is None:
54
+ raise WrongParameterException(
55
+ f"No event found with id: {cursor_event_id}"
56
+ )
57
+ query = query.filter(ApiEvent.created_at < cursor_event.created_at)
58
+
49
59
  events = query.limit(limit).all()
50
60
  return [
51
61
  fields.serialize_dict(
@@ -551,12 +551,12 @@ def _clear_empty_annotations(annotations):
551
551
  ]
552
552
 
553
553
 
554
- def get_running_preview_files():
554
+ def get_running_preview_files(cursor_preview_file_id=None, limit=None):
555
555
  """
556
556
  Return preview files for all productions with status equals to broken
557
- or processing.
557
+ or processing using cursor-based pagination.
558
558
  """
559
- entries = (
559
+ query = (
560
560
  PreviewFile.query.join(Task)
561
561
  .join(Project)
562
562
  .join(ProjectStatus, ProjectStatus.id == Project.project_status_id)
@@ -566,6 +566,21 @@ def get_running_preview_files():
566
566
  .order_by(PreviewFile.created_at.desc())
567
567
  )
568
568
 
569
+ if cursor_preview_file_id is not None:
570
+ cursor_preview_file = PreviewFile.query.get(cursor_preview_file_id)
571
+ if cursor_preview_file is None:
572
+ raise WrongParameterException(
573
+ f"No preview file found with id: {cursor_preview_file_id}"
574
+ )
575
+ query = query.filter(
576
+ PreviewFile.created_at < cursor_preview_file.created_at
577
+ )
578
+
579
+ if limit is not None:
580
+ query = query.limit(limit)
581
+
582
+ entries = query.all()
583
+
569
584
  results = []
570
585
  for preview_file, project_id, task_type_id, entity_id in entries:
571
586
  result = preview_file.serialize()
@@ -0,0 +1,36 @@
1
+ """add created_by field to playlists
2
+
3
+ Revision ID: a0f668430352
4
+ Revises: a1b2c3d4e5f6
5
+ Create Date: 2025-12-03 12:10:52.626583
6
+
7
+ """
8
+ from alembic import op
9
+ import sqlalchemy as sa
10
+ import sqlalchemy_utils
11
+ import sqlalchemy_utils
12
+ import uuid
13
+
14
+ # revision identifiers, used by Alembic.
15
+ revision = 'a0f668430352'
16
+ down_revision = 'a1b2c3d4e5f6'
17
+ branch_labels = None
18
+ depends_on = None
19
+
20
+
21
+ def upgrade():
22
+ # ### commands auto generated by Alembic - please adjust! ###
23
+ with op.batch_alter_table('playlist', schema=None) as batch_op:
24
+ batch_op.add_column(sa.Column('created_by', sqlalchemy_utils.types.uuid.UUIDType(binary=False), default=uuid.uuid4, nullable=True))
25
+ batch_op.create_foreign_key(None, 'person', ['created_by'], ['id'])
26
+
27
+ # ### end Alembic commands ###
28
+
29
+
30
+ def downgrade():
31
+ # ### commands auto generated by Alembic - please adjust! ###
32
+ with op.batch_alter_table('playlist', schema=None) as batch_op:
33
+ batch_op.drop_constraint(None, type_='foreignkey')
34
+ batch_op.drop_column('created_by')
35
+
36
+ # ### end Alembic commands ###
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: zou
3
- Version: 1.0.2
3
+ Version: 1.0.4
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
@@ -412,6 +412,7 @@ zou/migrations/versions/9bd17364fc18_.py
412
412
  zou/migrations/versions/9d3bb33c6fc6_add_department_keys_to_filter_models.py
413
413
  zou/migrations/versions/9e5b3a9b0cee_add_new_column_metadatadescriptor_data_type_.py
414
414
  zou/migrations/versions/9f8445f9b42c_add_man_days_fields.py
415
+ zou/migrations/versions/a0f668430352_add_created_by_field_to_playlists.py
415
416
  zou/migrations/versions/a1b2c3d4e5f6_add_position_to_metadata_descriptor.py
416
417
  zou/migrations/versions/a23682ccc1f1_.py
417
418
  zou/migrations/versions/a252a094e977_add_descriptions_for_entities_tasks_and_.py
zou-1.0.2/zou/__init__.py DELETED
@@ -1 +0,0 @@
1
- __version__ = "1.0.2"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes