zou 0.20.82__py3-none-any.whl → 0.20.84__py3-none-any.whl

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 (114) hide show
  1. zou/__init__.py +1 -1
  2. zou/app/blueprints/assets/resources.py +1060 -153
  3. zou/app/blueprints/auth/resources.py +368 -238
  4. zou/app/blueprints/breakdown/resources.py +584 -94
  5. zou/app/blueprints/chats/resources.py +176 -37
  6. zou/app/blueprints/comments/resources.py +409 -150
  7. zou/app/blueprints/concepts/resources.py +443 -63
  8. zou/app/blueprints/crud/asset_instance.py +272 -0
  9. zou/app/blueprints/crud/attachment_file.py +263 -0
  10. zou/app/blueprints/crud/base.py +176 -69
  11. zou/app/blueprints/crud/budget.py +278 -0
  12. zou/app/blueprints/crud/budget_entry.py +269 -0
  13. zou/app/blueprints/crud/chat.py +282 -0
  14. zou/app/blueprints/crud/chat_message.py +286 -0
  15. zou/app/blueprints/crud/comments.py +312 -1
  16. zou/app/blueprints/crud/custom_action.py +268 -0
  17. zou/app/blueprints/crud/day_off.py +298 -0
  18. zou/app/blueprints/crud/department.py +268 -0
  19. zou/app/blueprints/crud/entity.py +297 -3
  20. zou/app/blueprints/crud/entity_link.py +303 -0
  21. zou/app/blueprints/crud/entity_type.py +269 -0
  22. zou/app/blueprints/crud/event.py +197 -0
  23. zou/app/blueprints/crud/file_status.py +268 -0
  24. zou/app/blueprints/crud/hardware_item.py +268 -0
  25. zou/app/blueprints/crud/metadata_descriptor.py +312 -0
  26. zou/app/blueprints/crud/milestone.py +302 -1
  27. zou/app/blueprints/crud/news.py +285 -0
  28. zou/app/blueprints/crud/notification.py +287 -0
  29. zou/app/blueprints/crud/organisation.py +269 -0
  30. zou/app/blueprints/crud/output_file.py +34 -10
  31. zou/app/blueprints/crud/output_type.py +30 -10
  32. zou/app/blueprints/crud/person.py +407 -2
  33. zou/app/blueprints/crud/playlist.py +322 -4
  34. zou/app/blueprints/crud/plugin.py +269 -0
  35. zou/app/blueprints/crud/preview_background_file.py +272 -0
  36. zou/app/blueprints/crud/preview_file.py +280 -9
  37. zou/app/blueprints/crud/production_schedule_version.py +569 -0
  38. zou/app/blueprints/crud/project.py +440 -0
  39. zou/app/blueprints/crud/project_status.py +268 -0
  40. zou/app/blueprints/crud/salary_scale.py +185 -5
  41. zou/app/blueprints/crud/schedule_item.py +305 -0
  42. zou/app/blueprints/crud/search_filter.py +302 -0
  43. zou/app/blueprints/crud/search_filter_group.py +270 -0
  44. zou/app/blueprints/crud/software.py +30 -10
  45. zou/app/blueprints/crud/status_automation.py +296 -2
  46. zou/app/blueprints/crud/studio.py +268 -0
  47. zou/app/blueprints/crud/subscription.py +279 -0
  48. zou/app/blueprints/crud/task.py +325 -5
  49. zou/app/blueprints/crud/task_status.py +301 -0
  50. zou/app/blueprints/crud/task_type.py +283 -0
  51. zou/app/blueprints/crud/time_spent.py +327 -0
  52. zou/app/blueprints/crud/working_file.py +273 -10
  53. zou/app/blueprints/departments/resources.py +302 -68
  54. zou/app/blueprints/edits/resources.py +651 -81
  55. zou/app/blueprints/entities/resources.py +104 -39
  56. zou/app/blueprints/events/resources.py +96 -8
  57. zou/app/blueprints/export/csv/assets.py +15 -5
  58. zou/app/blueprints/export/csv/base.py +12 -3
  59. zou/app/blueprints/export/csv/casting.py +32 -5
  60. zou/app/blueprints/export/csv/edits.py +15 -5
  61. zou/app/blueprints/export/csv/persons.py +24 -0
  62. zou/app/blueprints/export/csv/playlists.py +16 -5
  63. zou/app/blueprints/export/csv/projects.py +23 -0
  64. zou/app/blueprints/export/csv/shots.py +15 -5
  65. zou/app/blueprints/export/csv/task_types.py +23 -0
  66. zou/app/blueprints/export/csv/tasks.py +24 -0
  67. zou/app/blueprints/export/csv/time_spents.py +24 -0
  68. zou/app/blueprints/files/resources.py +928 -377
  69. zou/app/blueprints/index/resources.py +49 -42
  70. zou/app/blueprints/news/resources.py +47 -27
  71. zou/app/blueprints/persons/resources.py +644 -271
  72. zou/app/blueprints/playlists/resources.py +154 -72
  73. zou/app/blueprints/previews/resources.py +473 -228
  74. zou/app/blueprints/projects/__init__.py +5 -0
  75. zou/app/blueprints/projects/resources.py +987 -420
  76. zou/app/blueprints/search/resources.py +44 -32
  77. zou/app/blueprints/shots/resources.py +1338 -88
  78. zou/app/blueprints/source/csv/assets.py +44 -6
  79. zou/app/blueprints/source/csv/casting.py +43 -6
  80. zou/app/blueprints/source/csv/edits.py +47 -9
  81. zou/app/blueprints/source/csv/persons.py +43 -4
  82. zou/app/blueprints/source/csv/shots.py +47 -6
  83. zou/app/blueprints/source/csv/task_type_estimations.py +95 -35
  84. zou/app/blueprints/source/kitsu.py +433 -11
  85. zou/app/blueprints/source/otio.py +215 -20
  86. zou/app/blueprints/source/shotgun/assets.py +146 -0
  87. zou/app/blueprints/source/shotgun/base.py +85 -14
  88. zou/app/blueprints/source/shotgun/episode.py +124 -0
  89. zou/app/blueprints/source/shotgun/import_errors.py +105 -14
  90. zou/app/blueprints/source/shotgun/notes.py +132 -0
  91. zou/app/blueprints/source/shotgun/person.py +163 -0
  92. zou/app/blueprints/source/shotgun/project.py +120 -0
  93. zou/app/blueprints/source/shotgun/scene.py +120 -0
  94. zou/app/blueprints/source/shotgun/sequence.py +134 -0
  95. zou/app/blueprints/source/shotgun/shot.py +166 -0
  96. zou/app/blueprints/source/shotgun/status.py +129 -0
  97. zou/app/blueprints/source/shotgun/steps.py +138 -0
  98. zou/app/blueprints/source/shotgun/tasks.py +199 -0
  99. zou/app/blueprints/source/shotgun/team.py +132 -0
  100. zou/app/blueprints/source/shotgun/versions.py +155 -0
  101. zou/app/blueprints/tasks/resources.py +1197 -308
  102. zou/app/blueprints/user/resources.py +1808 -215
  103. zou/app/models/metadata_descriptor.py +1 -0
  104. zou/app/services/persons_service.py +1 -1
  105. zou/app/services/projects_service.py +45 -1
  106. zou/app/services/time_spents_service.py +1 -1
  107. zou/app/swagger.py +100 -27
  108. zou/migrations/versions/a1b2c3d4e5f6_add_position_to_metadata_descriptor.py +32 -0
  109. {zou-0.20.82.dist-info → zou-0.20.84.dist-info}/METADATA +18 -18
  110. {zou-0.20.82.dist-info → zou-0.20.84.dist-info}/RECORD +114 -113
  111. {zou-0.20.82.dist-info → zou-0.20.84.dist-info}/WHEEL +0 -0
  112. {zou-0.20.82.dist-info → zou-0.20.84.dist-info}/entry_points.txt +0 -0
  113. {zou-0.20.82.dist-info → zou-0.20.84.dist-info}/licenses/LICENSE +0 -0
  114. {zou-0.20.82.dist-info → zou-0.20.84.dist-info}/top_level.txt +0 -0
@@ -25,6 +25,151 @@ class ProjectsResource(BaseModelsResource):
25
25
  def __init__(self):
26
26
  BaseModelsResource.__init__(self, Project)
27
27
 
28
+ @jwt_required()
29
+ def get(self):
30
+ """
31
+ Get projects
32
+ ---
33
+ tags:
34
+ - Crud
35
+ description: Retrieve all projects. Supports filtering via query
36
+ parameters and pagination. Includes project permission filtering
37
+ for non-admin users.
38
+ parameters:
39
+ - in: query
40
+ name: page
41
+ required: false
42
+ schema:
43
+ type: integer
44
+ example: 1
45
+ description: Page number for pagination
46
+ - in: query
47
+ name: limit
48
+ required: false
49
+ schema:
50
+ type: integer
51
+ example: 50
52
+ description: Number of results per page
53
+ - in: query
54
+ name: relations
55
+ required: false
56
+ schema:
57
+ type: boolean
58
+ default: false
59
+ example: false
60
+ description: Whether to include relations
61
+ responses:
62
+ 200:
63
+ description: Projects retrieved successfully
64
+ content:
65
+ application/json:
66
+ schema:
67
+ oneOf:
68
+ - type: array
69
+ items:
70
+ type: object
71
+ - type: object
72
+ properties:
73
+ data:
74
+ type: array
75
+ items:
76
+ type: object
77
+ example: []
78
+ total:
79
+ type: integer
80
+ example: 100
81
+ nb_pages:
82
+ type: integer
83
+ example: 2
84
+ limit:
85
+ type: integer
86
+ example: 50
87
+ offset:
88
+ type: integer
89
+ example: 0
90
+ page:
91
+ type: integer
92
+ example: 1
93
+ 400:
94
+ description: Invalid filter format or query error
95
+ """
96
+ return super().get()
97
+
98
+ @jwt_required()
99
+ def post(self):
100
+ """
101
+ Create project
102
+ ---
103
+ tags:
104
+ - Crud
105
+ description: Create a new project with data provided in the
106
+ request body. JSON format is expected. Validates production_style.
107
+ For tvshow production type, automatically creates first episode.
108
+ requestBody:
109
+ required: true
110
+ content:
111
+ application/json:
112
+ schema:
113
+ type: object
114
+ required:
115
+ - name
116
+ properties:
117
+ name:
118
+ type: string
119
+ example: Project Name
120
+ production_type:
121
+ type: string
122
+ example: feature
123
+ production_style:
124
+ type: string
125
+ default: 2d3d
126
+ example: 2d3d
127
+ project_status_id:
128
+ type: string
129
+ format: uuid
130
+ example: a24a6ea4-ce75-4665-a070-57453082c25
131
+ responses:
132
+ 201:
133
+ description: Project created successfully
134
+ content:
135
+ application/json:
136
+ schema:
137
+ type: object
138
+ properties:
139
+ id:
140
+ type: string
141
+ format: uuid
142
+ example: a24a6ea4-ce75-4665-a070-57453082c25
143
+ name:
144
+ type: string
145
+ example: Project Name
146
+ production_type:
147
+ type: string
148
+ example: feature
149
+ production_style:
150
+ type: string
151
+ example: 2d3d
152
+ project_status_id:
153
+ type: string
154
+ format: uuid
155
+ example: b24a6ea4-ce75-4665-a070-57453082c25
156
+ first_episode_id:
157
+ type: string
158
+ format: uuid
159
+ example: c24a6ea4-ce75-4665-a070-57453082c25
160
+ created_at:
161
+ type: string
162
+ format: date-time
163
+ example: "2024-01-15T10:30:00Z"
164
+ updated_at:
165
+ type: string
166
+ format: date-time
167
+ example: "2024-01-15T10:30:00Z"
168
+ 400:
169
+ description: Invalid data format or invalid production_style
170
+ """
171
+ return super().post()
172
+
28
173
  def add_project_permission_filter(self, query):
29
174
  if permissions.has_admin_permissions():
30
175
  return query
@@ -100,6 +245,149 @@ class ProjectResource(BaseModelResource, ArgsMixin):
100
245
  def check_read_permissions(self, project):
101
246
  return user_service.check_project_access(project["id"])
102
247
 
248
+ @jwt_required()
249
+ def get(self, instance_id):
250
+ """
251
+ Get project
252
+ ---
253
+ tags:
254
+ - Crud
255
+ description: Retrieve a project by its ID and return it as a JSON
256
+ object. Supports including relations. Requires project access.
257
+ parameters:
258
+ - in: path
259
+ name: instance_id
260
+ required: true
261
+ schema:
262
+ type: string
263
+ format: uuid
264
+ example: a24a6ea4-ce75-4665-a070-57453082c25
265
+ - in: query
266
+ name: relations
267
+ required: false
268
+ schema:
269
+ type: boolean
270
+ default: true
271
+ example: true
272
+ description: Whether to include relations
273
+ responses:
274
+ 200:
275
+ description: Project retrieved successfully
276
+ content:
277
+ application/json:
278
+ schema:
279
+ type: object
280
+ properties:
281
+ id:
282
+ type: string
283
+ format: uuid
284
+ example: a24a6ea4-ce75-4665-a070-57453082c25
285
+ name:
286
+ type: string
287
+ example: Project Name
288
+ production_type:
289
+ type: string
290
+ example: feature
291
+ production_style:
292
+ type: string
293
+ example: 2d3d
294
+ project_status_id:
295
+ type: string
296
+ format: uuid
297
+ example: b24a6ea4-ce75-4665-a070-57453082c25
298
+ project_status_name:
299
+ type: string
300
+ example: Open
301
+ created_at:
302
+ type: string
303
+ format: date-time
304
+ example: "2024-01-15T10:30:00Z"
305
+ updated_at:
306
+ type: string
307
+ format: date-time
308
+ example: "2024-01-15T10:30:00Z"
309
+ 400:
310
+ description: Invalid ID format or query error
311
+ """
312
+ return super().get(instance_id)
313
+
314
+ @jwt_required()
315
+ def put(self, instance_id):
316
+ """
317
+ Update project
318
+ ---
319
+ tags:
320
+ - Crud
321
+ description: Update a project with data provided in the request
322
+ body. JSON format is expected. Requires manager access to the
323
+ project. Validates production_style.
324
+ parameters:
325
+ - in: path
326
+ name: instance_id
327
+ required: true
328
+ schema:
329
+ type: string
330
+ format: uuid
331
+ example: a24a6ea4-ce75-4665-a070-57453082c25
332
+ requestBody:
333
+ required: true
334
+ content:
335
+ application/json:
336
+ schema:
337
+ type: object
338
+ properties:
339
+ name:
340
+ type: string
341
+ example: Updated Project Name
342
+ production_style:
343
+ type: string
344
+ example: 2d
345
+ preview_background_file_id:
346
+ type: string
347
+ format: uuid
348
+ example: b24a6ea4-ce75-4665-a070-57453082c25
349
+ responses:
350
+ 200:
351
+ description: Project updated successfully
352
+ content:
353
+ application/json:
354
+ schema:
355
+ type: object
356
+ properties:
357
+ id:
358
+ type: string
359
+ format: uuid
360
+ example: a24a6ea4-ce75-4665-a070-57453082c25
361
+ name:
362
+ type: string
363
+ example: Updated Project Name
364
+ production_type:
365
+ type: string
366
+ example: feature
367
+ production_style:
368
+ type: string
369
+ example: 2d
370
+ project_status_id:
371
+ type: string
372
+ format: uuid
373
+ example: b24a6ea4-ce75-4665-a070-57453082c25
374
+ first_episode_id:
375
+ type: string
376
+ format: uuid
377
+ example: c24a6ea4-ce75-4665-a070-57453082c25
378
+ created_at:
379
+ type: string
380
+ format: date-time
381
+ example: "2024-01-15T10:30:00Z"
382
+ updated_at:
383
+ type: string
384
+ format: date-time
385
+ example: "2024-01-15T11:00:00Z"
386
+ 400:
387
+ description: Invalid data format or invalid production_style
388
+ """
389
+ return super().put(instance_id)
390
+
103
391
  def check_update_permissions(self, project, data):
104
392
  return user_service.check_manager_project_access(project["id"])
105
393
 
@@ -176,6 +464,35 @@ class ProjectResource(BaseModelResource, ArgsMixin):
176
464
 
177
465
  @jwt_required()
178
466
  def delete(self, instance_id):
467
+ """
468
+ Delete project
469
+ ---
470
+ tags:
471
+ - Crud
472
+ description: Delete a project by its ID. Only closed projects can
473
+ be deleted. Returns empty response on success.
474
+ parameters:
475
+ - in: path
476
+ name: instance_id
477
+ required: true
478
+ schema:
479
+ type: string
480
+ format: uuid
481
+ example: a24a6ea4-ce75-4665-a070-57453082c25
482
+ - in: query
483
+ name: force
484
+ required: false
485
+ schema:
486
+ type: boolean
487
+ default: false
488
+ example: false
489
+ description: Force deletion with cascading removal
490
+ responses:
491
+ 204:
492
+ description: Project deleted successfully
493
+ 400:
494
+ description: Only closed projects can be deleted or integrity error
495
+ """
179
496
  force = self.get_force()
180
497
 
181
498
  project = self.get_model_or_404(instance_id)
@@ -199,6 +516,62 @@ class ProjectResource(BaseModelResource, ArgsMixin):
199
516
  class ProjectTaskTypeLinksResource(Resource, ArgsMixin):
200
517
  @jwt_required()
201
518
  def post(self):
519
+ """
520
+ Create project task type link
521
+ ---
522
+ tags:
523
+ - Crud
524
+ description: Create a link between a project and a task type.
525
+ Sets the priority of the task type within the project.
526
+ requestBody:
527
+ required: true
528
+ content:
529
+ application/json:
530
+ schema:
531
+ type: object
532
+ required:
533
+ - project_id
534
+ - task_type_id
535
+ properties:
536
+ project_id:
537
+ type: string
538
+ format: uuid
539
+ example: a24a6ea4-ce75-4665-a070-57453082c25
540
+ task_type_id:
541
+ type: string
542
+ format: uuid
543
+ example: b24a6ea4-ce75-4665-a070-57453082c25
544
+ priority:
545
+ type: integer
546
+ default: 1
547
+ example: 1
548
+ description: Priority of the task type in the project
549
+ responses:
550
+ 201:
551
+ description: Project task type link created successfully
552
+ content:
553
+ application/json:
554
+ schema:
555
+ type: object
556
+ properties:
557
+ id:
558
+ type: string
559
+ format: uuid
560
+ example: c24a6ea4-ce75-4665-a070-57453082c25
561
+ project_id:
562
+ type: string
563
+ format: uuid
564
+ example: a24a6ea4-ce75-4665-a070-57453082c25
565
+ task_type_id:
566
+ type: string
567
+ format: uuid
568
+ example: b24a6ea4-ce75-4665-a070-57453082c25
569
+ priority:
570
+ type: integer
571
+ example: 1
572
+ 400:
573
+ description: Invalid project or task type
574
+ """
202
575
  args = self.get_args(
203
576
  [
204
577
  ("project_id", "", True),
@@ -221,6 +594,73 @@ class ProjectTaskTypeLinksResource(Resource, ArgsMixin):
221
594
  class ProjectTaskStatusLinksResource(Resource, ArgsMixin):
222
595
  @jwt_required()
223
596
  def post(self):
597
+ """
598
+ Create project task status link
599
+ ---
600
+ tags:
601
+ - Crud
602
+ description: Create a link between a project and a task status.
603
+ Sets the priority and roles that can view it on the board.
604
+ requestBody:
605
+ required: true
606
+ content:
607
+ application/json:
608
+ schema:
609
+ type: object
610
+ required:
611
+ - project_id
612
+ - task_status_id
613
+ properties:
614
+ project_id:
615
+ type: string
616
+ format: uuid
617
+ example: a24a6ea4-ce75-4665-a070-57453082c25
618
+ task_status_id:
619
+ type: string
620
+ format: uuid
621
+ example: b24a6ea4-ce75-4665-a070-57453082c25
622
+ priority:
623
+ type: integer
624
+ default: 1
625
+ example: 1
626
+ description: Priority of the task status in the project
627
+ roles_for_board:
628
+ type: array
629
+ items:
630
+ type: string
631
+ example: ["admin", "manager"]
632
+ description: Roles allowed to see this status on the board
633
+ responses:
634
+ 201:
635
+ description: Project task status link created successfully
636
+ content:
637
+ application/json:
638
+ schema:
639
+ type: object
640
+ properties:
641
+ id:
642
+ type: string
643
+ format: uuid
644
+ example: c24a6ea4-ce75-4665-a070-57453082c25
645
+ project_id:
646
+ type: string
647
+ format: uuid
648
+ example: a24a6ea4-ce75-4665-a070-57453082c25
649
+ task_status_id:
650
+ type: string
651
+ format: uuid
652
+ example: b24a6ea4-ce75-4665-a070-57453082c25
653
+ priority:
654
+ type: integer
655
+ example: 1
656
+ roles_for_board:
657
+ type: array
658
+ items:
659
+ type: string
660
+ example: ["admin", "manager"]
661
+ 400:
662
+ description: Invalid project or task status
663
+ """
224
664
  args = self.get_args(
225
665
  [
226
666
  ("project_id", "", True),