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
@@ -85,9 +85,6 @@ def send_storage_file(
85
85
 
86
86
 
87
87
  class WorkingFileFileResource(Resource):
88
- """
89
- Allow to download and store a working file.
90
- """
91
88
 
92
89
  def check_access(self, working_file_id):
93
90
  working_file = files_service.get_working_file(working_file_id)
@@ -105,10 +102,12 @@ class WorkingFileFileResource(Resource):
105
102
  @jwt_required()
106
103
  def get(self, working_file_id):
107
104
  """
108
- Download a working file.
105
+ Download working file
109
106
  ---
107
+ description: Download a working file from storage. Returns the file
108
+ content with appropriate headers for caching and attachment.
110
109
  tags:
111
- - Files
110
+ - Files
112
111
  parameters:
113
112
  - in: path
114
113
  name: working_file_id
@@ -116,29 +115,36 @@ class WorkingFileFileResource(Resource):
116
115
  schema:
117
116
  type: string
118
117
  format: uuid
118
+ description: Working file unique identifier
119
119
  example: a24a6ea4-ce75-4665-a070-57453082c25
120
120
  responses:
121
- '200':
122
- description: Working file downloaded
121
+ 200:
122
+ description: Working file downloaded successfully
123
123
  content:
124
124
  image/png:
125
125
  schema:
126
126
  type: string
127
127
  format: binary
128
+ description: PNG image file
129
+ example: "binary data"
128
130
  image/jpg:
129
131
  schema:
130
132
  type: string
131
133
  format: binary
134
+ description: JPEG image file
135
+ example: "binary data"
132
136
  image/gif:
133
137
  schema:
134
138
  type: string
135
139
  format: binary
140
+ description: GIF image file
141
+ example: "binary data"
136
142
  application/octet-stream:
137
143
  schema:
138
144
  type: string
139
145
  format: binary
140
- '404':
141
- description: Working file not found
146
+ description: Binary file content
147
+ example: "binary data"
142
148
  """
143
149
  working_file = self.check_access(working_file_id)
144
150
  return send_storage_file(
@@ -151,10 +157,12 @@ class WorkingFileFileResource(Resource):
151
157
  @jwt_required()
152
158
  def post(self, working_file_id):
153
159
  """
154
- Store a working file.
160
+ Store working file
155
161
  ---
162
+ description: Store a working file in the file storage system. Uploads
163
+ the file content and associates it with the working file record.
156
164
  tags:
157
- - Files
165
+ - Files
158
166
  parameters:
159
167
  - in: path
160
168
  name: working_file_id
@@ -162,6 +170,7 @@ class WorkingFileFileResource(Resource):
162
170
  schema:
163
171
  type: string
164
172
  format: uuid
173
+ description: Working file unique identifier
165
174
  example: a24a6ea4-ce75-4665-a070-57453082c25
166
175
  requestBody:
167
176
  required: true
@@ -176,21 +185,47 @@ class WorkingFileFileResource(Resource):
176
185
  type: string
177
186
  format: binary
178
187
  description: Working file to upload
188
+ example: "file content"
179
189
  responses:
180
- '201':
181
- description: Working file stored
190
+ 201:
191
+ description: Working file stored successfully
182
192
  content:
183
193
  application/json:
184
194
  schema:
185
195
  type: object
186
196
  properties:
187
- success:
188
- type: boolean
189
- example: true
190
- '400':
191
- description: Invalid file or parameters
192
- '404':
193
- description: Working file not found
197
+ id:
198
+ type: string
199
+ format: uuid
200
+ description: Working file unique identifier
201
+ example: a24a6ea4-ce75-4665-a070-57453082c25
202
+ name:
203
+ type: string
204
+ description: Working file name
205
+ example: "main"
206
+ path:
207
+ type: string
208
+ description: Working file path
209
+ example: "/project/asset/working/main_v001.blend"
210
+ revision:
211
+ type: integer
212
+ description: Working file revision
213
+ example: 1
214
+ task_id:
215
+ type: string
216
+ format: uuid
217
+ description: Task identifier
218
+ example: b35b7fb5-df86-5776-b181-68564193d36
219
+ created_at:
220
+ type: string
221
+ format: date-time
222
+ description: Creation timestamp
223
+ example: "2023-01-01T12:00:00Z"
224
+ updated_at:
225
+ type: string
226
+ format: date-time
227
+ description: Last update timestamp
228
+ example: "2023-01-01T12:30:00Z"
194
229
  """
195
230
  working_file = self.check_access(working_file_id)
196
231
  file_path = self.save_uploaded_file_in_temporary_folder(
@@ -206,12 +241,13 @@ class WorkingFilePathResource(Resource, ArgsMixin):
206
241
  @jwt_required()
207
242
  def post(self, task_id):
208
243
  """
209
- Generate a working file path from file tree template.
244
+ Generate working file path
210
245
  ---
246
+ description: Generate a working file path from file tree template based
247
+ on task parameters. Revision can be computed automatically if not
248
+ provided.
211
249
  tags:
212
- - Files
213
- description: Generate file path based on several parameters
214
- Revision can be computed automatically as next revision if not given.
250
+ - Files
215
251
  parameters:
216
252
  - in: path
217
253
  name: task_id
@@ -219,6 +255,7 @@ class WorkingFilePathResource(Resource, ArgsMixin):
219
255
  schema:
220
256
  type: string
221
257
  format: uuid
258
+ description: Task unique identifier
222
259
  example: a24a6ea4-ce75-4665-a070-57453082c25
223
260
  requestBody:
224
261
  required: true
@@ -229,29 +266,35 @@ class WorkingFilePathResource(Resource, ArgsMixin):
229
266
  properties:
230
267
  name:
231
268
  type: string
269
+ description: File name
232
270
  default: main
233
- example: main
271
+ example: "main"
234
272
  mode:
235
273
  type: string
274
+ description: File mode
236
275
  default: working
237
- example: working
276
+ example: "working"
238
277
  software_id:
239
278
  type: string
240
279
  format: uuid
280
+ description: Software identifier
241
281
  example: a24a6ea4-ce75-4665-a070-57453082c25
242
282
  comment:
243
283
  type: string
284
+ description: File comment
244
285
  example: "Updated lighting"
245
286
  revision:
246
287
  type: integer
288
+ description: File revision number
247
289
  example: 1
248
290
  separator:
249
291
  type: string
292
+ description: Path separator
250
293
  default: /
251
- example: /
294
+ example: "/"
252
295
  responses:
253
- '200':
254
- description: Working file path generated
296
+ 200:
297
+ description: Working file path generated successfully
255
298
  content:
256
299
  application/json:
257
300
  schema:
@@ -259,8 +302,13 @@ class WorkingFilePathResource(Resource, ArgsMixin):
259
302
  properties:
260
303
  path:
261
304
  type: string
305
+ description: Generated file path
262
306
  example: "/project/asset/working/main_v001.blend"
263
- '400':
307
+ name:
308
+ type: string
309
+ description: Generated file name
310
+ example: "main_v001.blend"
311
+ 400:
264
312
  description: Malformed file tree
265
313
  """
266
314
  (
@@ -337,12 +385,13 @@ class EntityOutputFilePathResource(Resource, ArgsMixin):
337
385
  @jwt_required()
338
386
  def post(self, entity_id):
339
387
  """
340
- Generate an output file path from file tree template
388
+ Generate entity output file path
341
389
  ---
390
+ description: Generate an output file path from file tree template
391
+ based on entity parameters. Revision can be computed automatically
392
+ if not provided.
342
393
  tags:
343
- - Files
344
- description: Generate file path based on several parameters entity, output type, task type, revision, mode, name and separator.
345
- Revision can be computed automatically as next revision if not given.
394
+ - Files
346
395
  parameters:
347
396
  - in: path
348
397
  name: entity_id
@@ -350,6 +399,7 @@ class EntityOutputFilePathResource(Resource, ArgsMixin):
350
399
  schema:
351
400
  type: string
352
401
  format: uuid
402
+ description: Entity unique identifier
353
403
  example: a24a6ea4-ce75-4665-a070-57453082c25
354
404
  requestBody:
355
405
  required: true
@@ -363,45 +413,58 @@ class EntityOutputFilePathResource(Resource, ArgsMixin):
363
413
  properties:
364
414
  name:
365
415
  type: string
416
+ description: File name
366
417
  default: main
367
- example: main
418
+ example: "main"
368
419
  mode:
369
420
  type: string
421
+ description: File mode
370
422
  default: output
371
- example: output
423
+ example: "output"
372
424
  output_type_id:
373
425
  type: string
374
426
  format: uuid
427
+ description: Output type identifier
375
428
  example: a24a6ea4-ce75-4665-a070-57453082c25
376
429
  task_type_id:
377
430
  type: string
378
431
  format: uuid
432
+ description: Task type identifier
379
433
  example: a24a6ea4-ce75-4665-a070-57453082c25
380
434
  extension:
381
435
  type: string
436
+ description: File extension
382
437
  example: ".mp4"
383
438
  representation:
384
439
  type: string
440
+ description: File representation
385
441
  example: "mp4"
386
442
  revision:
387
443
  type: integer
444
+ description: File revision number
388
445
  example: 1
389
446
  separator:
390
447
  type: string
448
+ description: Path separator
391
449
  default: /
392
- example: /
450
+ example: "/"
393
451
  responses:
394
- '200':
395
- description: Output file path generated
452
+ 200:
453
+ description: Output file path generated successfully
396
454
  content:
397
455
  application/json:
398
456
  schema:
399
457
  type: object
400
458
  properties:
401
- path:
459
+ folder_path:
402
460
  type: string
403
- example: "/project/asset/output/main_v001.mp4"
404
- '400':
461
+ description: Generated folder path
462
+ example: "/project/asset/output"
463
+ file_name:
464
+ type: string
465
+ description: Generated file name
466
+ example: "main_v001.mp4"
467
+ 400:
405
468
  description: Malformed file tree
406
469
  """
407
470
  args = self.get_arguments()
@@ -467,62 +530,93 @@ class InstanceOutputFilePathResource(Resource, ArgsMixin):
467
530
  @jwt_required()
468
531
  def post(self, asset_instance_id, temporal_entity_id):
469
532
  """
470
- Generate an output file path from file tree template
533
+ Generate instance output file path
471
534
  ---
535
+ description: Generate an output file path from file tree template
536
+ based on asset instance parameters. Revision can be computed
537
+ automatically if not provided.
472
538
  tags:
473
539
  - Files
474
- description: "Generate file path based on several parameters asset instance, output type, task type, revision, mode, name and separator.
475
- Revision can be computed automatically as next revision in case no revision is given in parameter."
476
540
  parameters:
477
541
  - in: path
478
542
  name: asset_instance_id
479
543
  required: true
480
- type: string
481
- format: uuid
544
+ schema:
545
+ type: string
546
+ format: uuid
547
+ description: Asset instance unique identifier
482
548
  example: a24a6ea4-ce75-4665-a070-57453082c25
483
549
  - in: path
484
550
  name: temporal_entity_id
485
551
  required: true
486
- type: string
487
- format: uuid
488
- example: a24a6ea4-ce75-4665-a070-57453082c25
489
- - in: body
490
- name: File
491
- description: Asset instance, output type, task type, revision, mode, name and separator.
492
552
  schema:
553
+ type: string
554
+ format: uuid
555
+ description: Temporal entity unique identifier
556
+ example: b35b7fb5-df86-5776-b181-68564193d36
557
+ requestBody:
558
+ required: true
559
+ content:
560
+ application/json:
561
+ schema:
493
562
  type: object
494
563
  required:
495
564
  - output_type_id
496
565
  - task_type_id
497
566
  properties:
498
- name:
499
- type: string
500
- default: main
501
- mode:
502
- type: string
503
- default: output
504
- output_type_id:
505
- type: string
506
- format: uuid
507
- example: a24a6ea4-ce75-4665-a070-57453082c25
508
- task_type_id:
509
- type: string
510
- format: uuid
511
- example: a24a6ea4-ce75-4665-a070-57453082c25
512
- extension:
513
- type: string
514
- representation:
515
- type: string
516
- revision:
517
- type: integer
518
- separator:
519
- type: string
520
- default: /
567
+ name:
568
+ type: string
569
+ description: File name
570
+ default: main
571
+ example: "main"
572
+ mode:
573
+ type: string
574
+ description: File mode
575
+ default: output
576
+ example: "output"
577
+ output_type_id:
578
+ type: string
579
+ format: uuid
580
+ description: Output type identifier
581
+ example: a24a6ea4-ce75-4665-a070-57453082c25
582
+ task_type_id:
583
+ type: string
584
+ format: uuid
585
+ description: Task type identifier
586
+ example: b35b7fb5-df86-5776-b181-68564193d36
587
+ extension:
588
+ type: string
589
+ description: File extension
590
+ example: ".mp4"
591
+ representation:
592
+ type: string
593
+ description: File representation
594
+ example: "mp4"
595
+ revision:
596
+ type: integer
597
+ description: File revision number
598
+ example: 1
599
+ separator:
600
+ type: string
601
+ description: Path separator
602
+ default: /
603
+ example: "/"
521
604
  responses:
522
- 200:
523
- description: Output file path generated
524
- 400:
525
- description: Malformed file tree
605
+ 200:
606
+ description: Output file path generated successfully
607
+ content:
608
+ application/json:
609
+ schema:
610
+ type: object
611
+ properties:
612
+ folder_path:
613
+ type: string
614
+ description: Generated folder path
615
+ example: "/project/asset/instance/output"
616
+ file_name:
617
+ type: string
618
+ description: Generated file name
619
+ example: "main_v001.mp4"
526
620
  """
527
621
  args = self.get_arguments()
528
622
 
@@ -581,17 +675,17 @@ class InstanceOutputFilePathResource(Resource, ArgsMixin):
581
675
 
582
676
 
583
677
  class LastWorkingFilesResource(Resource):
584
- """
585
- Return last working files revision for each file name for given task.
586
- """
587
678
 
588
679
  @jwt_required()
589
680
  def get(self, task_id):
590
681
  """
591
- Return last working files revision for each file name for given task.
682
+ Get last working files
592
683
  ---
684
+ description: Retrieve the last working file revisions for each file
685
+ name for a given task. Returns the most recent version of each
686
+ working file.
593
687
  tags:
594
- - Files
688
+ - Files
595
689
  parameters:
596
690
  - in: path
597
691
  name: task_id
@@ -599,10 +693,11 @@ class LastWorkingFilesResource(Resource):
599
693
  schema:
600
694
  type: string
601
695
  format: uuid
696
+ description: Task unique identifier
602
697
  example: a24a6ea4-ce75-4665-a070-57453082c25
603
698
  responses:
604
- '200':
605
- description: Last working files revision for each file name for given task
699
+ 200:
700
+ description: Last working file revisions for each file name
606
701
  content:
607
702
  application/json:
608
703
  schema:
@@ -613,15 +708,21 @@ class LastWorkingFilesResource(Resource):
613
708
  id:
614
709
  type: string
615
710
  format: uuid
711
+ description: Working file unique identifier
712
+ example: b35b7fb5-df86-5776-b181-68564193d36
616
713
  name:
617
714
  type: string
715
+ description: Working file name
716
+ example: "main"
618
717
  revision:
619
718
  type: integer
719
+ description: Working file revision
720
+ example: 3
620
721
  updated_at:
621
722
  type: string
622
723
  format: date-time
623
- '404':
624
- description: Task not found
724
+ description: Last update timestamp
725
+ example: "2023-01-01T12:00:00Z"
625
726
  """
626
727
  result = {}
627
728
  user_service.check_task_access(task_id)
@@ -631,17 +732,16 @@ class LastWorkingFilesResource(Resource):
631
732
 
632
733
 
633
734
  class TaskWorkingFilesResource(Resource):
634
- """
635
- Return all working file revisions for a given task.
636
- """
637
735
 
638
736
  @jwt_required()
639
737
  def get(self, task_id):
640
738
  """
641
- Return all working file revisions for a given task.
739
+ Get task working files
642
740
  ---
741
+ description: Retrieve all working file revisions for a given task.
742
+ Returns complete list of working files with their revisions.
643
743
  tags:
644
- - Files
744
+ - Files
645
745
  parameters:
646
746
  - in: path
647
747
  name: task_id
@@ -649,9 +749,10 @@ class TaskWorkingFilesResource(Resource):
649
749
  schema:
650
750
  type: string
651
751
  format: uuid
752
+ description: Task unique identifier
652
753
  example: a24a6ea4-ce75-4665-a070-57453082c25
653
754
  responses:
654
- '200':
755
+ 200:
655
756
  description: All working file revisions for given task
656
757
  content:
657
758
  application/json:
@@ -663,18 +764,26 @@ class TaskWorkingFilesResource(Resource):
663
764
  id:
664
765
  type: string
665
766
  format: uuid
767
+ description: Working file unique identifier
768
+ example: b35b7fb5-df86-5776-b181-68564193d36
666
769
  name:
667
770
  type: string
771
+ description: Working file name
772
+ example: "main"
668
773
  revision:
669
774
  type: integer
775
+ description: Working file revision
776
+ example: 1
670
777
  updated_at:
671
778
  type: string
672
779
  format: date-time
780
+ description: Last update timestamp
781
+ example: "2023-01-01T12:00:00Z"
673
782
  task_id:
674
783
  type: string
675
784
  format: uuid
676
- '404':
677
- description: Task not found
785
+ description: Task identifier
786
+ example: c46c8gc6-eg97-6887-c292-79675204e47
678
787
  """
679
788
  result = {}
680
789
  user_service.check_task_access(task_id)
@@ -684,24 +793,18 @@ class TaskWorkingFilesResource(Resource):
684
793
 
685
794
 
686
795
  class NewWorkingFileResource(Resource, ArgsMixin):
687
- """
688
- A working file is a file used to produce output files.
689
- It is the file the CG artist is working on.
690
- It is versioned, tied to a task and a software and requires a comment each time it is created.
691
- A path is generated for each file created. The path format is defined in the file tree template file.
692
- """
693
796
 
694
797
  @jwt_required()
695
798
  def post(self, task_id):
696
799
  """
697
- Create new working file.
800
+ Create new working file
698
801
  ---
802
+ description: Create a new working file for a task. Working files are
803
+ versioned files used by artists to produce output files. Each
804
+ file requires a comment and generates a path based on file tree
805
+ template.
699
806
  tags:
700
- - Files
701
- description: A working file is a file used to produce output files.
702
- It is the file the CG artist is working on.
703
- It is versioned, tied to a task and a software and requires a comment each time it is created.
704
- A path is generated for each file created. The path format is defined in the file tree template file.
807
+ - Files
705
808
  parameters:
706
809
  - in: path
707
810
  name: task_id
@@ -709,6 +812,7 @@ class NewWorkingFileResource(Resource, ArgsMixin):
709
812
  schema:
710
813
  type: string
711
814
  format: uuid
815
+ description: Task unique identifier
712
816
  example: a24a6ea4-ce75-4665-a070-57453082c25
713
817
  requestBody:
714
818
  required: true
@@ -721,35 +825,43 @@ class NewWorkingFileResource(Resource, ArgsMixin):
721
825
  properties:
722
826
  name:
723
827
  type: string
828
+ description: Working file name
724
829
  example: "main"
725
830
  mode:
726
831
  type: string
832
+ description: Working file mode
727
833
  default: working
728
- example: working
834
+ example: "working"
729
835
  description:
730
836
  type: string
837
+ description: Working file description
731
838
  example: "Main character model"
732
839
  comment:
733
840
  type: string
841
+ description: Working file comment
734
842
  example: "Updated lighting and materials"
735
843
  person_id:
736
844
  type: string
737
845
  format: uuid
846
+ description: Person identifier
738
847
  example: a24a6ea4-ce75-4665-a070-57453082c25
739
848
  software_id:
740
849
  type: string
741
850
  format: uuid
851
+ description: Software identifier
742
852
  example: a24a6ea4-ce75-4665-a070-57453082c25
743
853
  revision:
744
854
  type: integer
855
+ description: Working file revision
745
856
  example: 1
746
857
  sep:
747
858
  type: string
859
+ description: Path separator
748
860
  default: /
749
- example: /
861
+ example: "/"
750
862
  responses:
751
- '201':
752
- description: New working file created
863
+ 201:
864
+ description: New working file created successfully
753
865
  content:
754
866
  application/json:
755
867
  schema:
@@ -758,17 +870,35 @@ class NewWorkingFileResource(Resource, ArgsMixin):
758
870
  id:
759
871
  type: string
760
872
  format: uuid
873
+ description: Working file unique identifier
874
+ example: b35b7fb5-df86-5776-b181-68564193d36
761
875
  name:
762
876
  type: string
877
+ description: Working file name
878
+ example: "main"
763
879
  path:
764
880
  type: string
881
+ description: Working file path
882
+ example: "/project/asset/working/main_v001.blend"
765
883
  revision:
766
884
  type: integer
885
+ description: Working file revision
886
+ example: 1
767
887
  task_id:
768
888
  type: string
769
889
  format: uuid
770
- '400':
771
- description: Given working file already exists
890
+ description: Task identifier
891
+ example: c46c8gc6-eg97-6887-c292-79675204e47
892
+ created_at:
893
+ type: string
894
+ format: date-time
895
+ description: Creation timestamp
896
+ example: "2023-01-01T12:00:00Z"
897
+ updated_at:
898
+ type: string
899
+ format: date-time
900
+ description: Last update timestamp
901
+ example: "2023-01-01T12:30:00Z"
772
902
  """
773
903
  (
774
904
  name,
@@ -856,17 +986,16 @@ class NewWorkingFileResource(Resource, ArgsMixin):
856
986
 
857
987
 
858
988
  class ModifiedFileResource(Resource):
859
- """
860
- Update working file modification date with current date.
861
- """
862
989
 
863
990
  @jwt_required()
864
991
  def put(self, working_file_id):
865
992
  """
866
- Update working file modification date with current date.
993
+ Update working file modification date
867
994
  ---
995
+ description: Update the modification date of a working file to the
996
+ current timestamp. Used to track when the file was last modified.
868
997
  tags:
869
- - Files
998
+ - Files
870
999
  parameters:
871
1000
  - in: path
872
1001
  name: working_file_id
@@ -874,10 +1003,11 @@ class ModifiedFileResource(Resource):
874
1003
  schema:
875
1004
  type: string
876
1005
  format: uuid
1006
+ description: Working file unique identifier
877
1007
  example: a24a6ea4-ce75-4665-a070-57453082c25
878
1008
  responses:
879
- '200':
880
- description: Working file modification date updated
1009
+ 200:
1010
+ description: Working file modification date updated successfully
881
1011
  content:
882
1012
  application/json:
883
1013
  schema:
@@ -886,11 +1016,13 @@ class ModifiedFileResource(Resource):
886
1016
  id:
887
1017
  type: string
888
1018
  format: uuid
1019
+ description: Working file unique identifier
1020
+ example: b35b7fb5-df86-5776-b181-68564193d36
889
1021
  updated_at:
890
1022
  type: string
891
1023
  format: date-time
892
- '404':
893
- description: Working file not found
1024
+ description: Updated modification timestamp
1025
+ example: "2023-01-01T12:30:00Z"
894
1026
  """
895
1027
  working_file = files_service.get_working_file(working_file_id)
896
1028
  user_service.check_task_action_access(working_file["task_id"])
@@ -902,17 +1034,16 @@ class ModifiedFileResource(Resource):
902
1034
 
903
1035
 
904
1036
  class CommentWorkingFileResource(Resource, ArgsMixin):
905
- """
906
- Update comment on given working file.
907
- """
908
1037
 
909
1038
  @jwt_required()
910
1039
  def put(self, working_file_id):
911
1040
  """
912
- Update comment on given working file.
1041
+ Update working file comment
913
1042
  ---
1043
+ description: Update the comment on a specific working file. Comments
1044
+ provide context about changes made to the working file.
914
1045
  tags:
915
- - Files
1046
+ - Files
916
1047
  parameters:
917
1048
  - in: path
918
1049
  name: working_file_id
@@ -920,6 +1051,7 @@ class CommentWorkingFileResource(Resource, ArgsMixin):
920
1051
  schema:
921
1052
  type: string
922
1053
  format: uuid
1054
+ description: Working file unique identifier
923
1055
  example: a24a6ea4-ce75-4665-a070-57453082c25
924
1056
  requestBody:
925
1057
  required: true
@@ -932,10 +1064,11 @@ class CommentWorkingFileResource(Resource, ArgsMixin):
932
1064
  properties:
933
1065
  comment:
934
1066
  type: string
1067
+ description: Working file comment
935
1068
  example: "Updated lighting and materials"
936
1069
  responses:
937
- '200':
938
- description: Comment updated on given working file
1070
+ 200:
1071
+ description: Working file comment updated successfully
939
1072
  content:
940
1073
  application/json:
941
1074
  schema:
@@ -944,13 +1077,17 @@ class CommentWorkingFileResource(Resource, ArgsMixin):
944
1077
  id:
945
1078
  type: string
946
1079
  format: uuid
1080
+ description: Working file unique identifier
1081
+ example: b35b7fb5-df86-5776-b181-68564193d36
947
1082
  comment:
948
1083
  type: string
1084
+ description: Updated comment
1085
+ example: "Updated lighting and materials"
949
1086
  updated_at:
950
1087
  type: string
951
1088
  format: date-time
952
- '404':
953
- description: Working file not found
1089
+ description: Last update timestamp
1090
+ example: "2023-01-01T12:30:00Z"
954
1091
  """
955
1092
  args = self.get_args(
956
1093
  [
@@ -979,17 +1116,17 @@ class NewEntityOutputFileResource(Resource, ArgsMixin):
979
1116
  @jwt_required()
980
1117
  def post(self, entity_id):
981
1118
  """
982
- Create new output file linked to a given entity.
1119
+ Create new entity output file
983
1120
  ---
1121
+ description: Create a new output file linked to a specific entity.
1122
+ Output files are created when artists are satisfied with their
1123
+ working files. They track the source working file and require
1124
+ output type and task type for categorization. An output type is
1125
+ required for better categorization (textures, caches, ...).
1126
+ A task type can be set too to give the department related to the
1127
+ output file. The revision is automatically set.
984
1128
  tags:
985
- - Files
986
- description: Output files are linked to entities.
987
- Each time a CG artist is satisfied by what he did on a working file,
988
- he can create an output file that will be linked to a target entity (an asset, a shot, a sequence, ...).
989
- It keeps track of the working file at the origin of the output file.
990
- An output type is required for better categorization (textures, caches, ...).
991
- A task type can be set too to give the department related to the output file.
992
- Revision is automatically set.
1129
+ - Files
993
1130
  parameters:
994
1131
  - in: path
995
1132
  name: entity_id
@@ -997,6 +1134,7 @@ class NewEntityOutputFileResource(Resource, ArgsMixin):
997
1134
  schema:
998
1135
  type: string
999
1136
  format: uuid
1137
+ description: Entity unique identifier
1000
1138
  example: a24a6ea4-ce75-4665-a070-57453082c25
1001
1139
  requestBody:
1002
1140
  required: true
@@ -1010,54 +1148,67 @@ class NewEntityOutputFileResource(Resource, ArgsMixin):
1010
1148
  properties:
1011
1149
  name:
1012
1150
  type: string
1151
+ description: Output file name
1013
1152
  example: "main"
1014
1153
  mode:
1015
1154
  type: string
1155
+ description: Output file mode
1016
1156
  default: output
1017
- example: output
1157
+ example: "output"
1018
1158
  output_type_id:
1019
1159
  type: string
1020
1160
  format: uuid
1161
+ description: Output type identifier
1021
1162
  example: a24a6ea4-ce75-4665-a070-57453082c25
1022
1163
  task_type_id:
1023
1164
  type: string
1024
1165
  format: uuid
1166
+ description: Task type identifier
1025
1167
  example: a24a6ea4-ce75-4665-a070-57453082c25
1026
1168
  person_id:
1027
1169
  type: string
1028
1170
  format: uuid
1171
+ description: Person identifier
1029
1172
  example: a24a6ea4-ce75-4665-a070-57453082c25
1030
1173
  working_file_id:
1031
1174
  type: string
1032
1175
  format: uuid
1176
+ description: Source working file identifier
1033
1177
  example: a24a6ea4-ce75-4665-a070-57453082c25
1034
1178
  file_status_id:
1035
1179
  type: string
1036
1180
  format: uuid
1181
+ description: File status identifier
1037
1182
  example: a24a6ea4-ce75-4665-a070-57453082c25
1038
1183
  comment:
1039
1184
  type: string
1185
+ description: Output file comment
1040
1186
  example: "Final render"
1041
1187
  extension:
1042
1188
  type: string
1189
+ description: File extension
1043
1190
  example: ".mp4"
1044
1191
  representation:
1045
1192
  type: string
1193
+ description: File representation
1046
1194
  example: "mp4"
1047
1195
  revision:
1048
1196
  type: integer
1197
+ description: File revision number
1049
1198
  example: 1
1050
1199
  nb_elements:
1051
1200
  type: integer
1201
+ description: Number of elements
1052
1202
  default: 1
1053
1203
  example: 1
1054
1204
  sep:
1055
1205
  type: string
1206
+ description: Path separator
1056
1207
  default: /
1057
- example: /
1208
+ example: "/"
1058
1209
  responses:
1059
- '200':
1060
- description: New output file created
1210
+ 201:
1211
+ description: New output file created successfully
1061
1212
  content:
1062
1213
  application/json:
1063
1214
  schema:
@@ -1066,17 +1217,35 @@ class NewEntityOutputFileResource(Resource, ArgsMixin):
1066
1217
  id:
1067
1218
  type: string
1068
1219
  format: uuid
1220
+ description: Output file unique identifier
1221
+ example: b35b7fb5-df86-5776-b181-68564193d36
1069
1222
  name:
1070
1223
  type: string
1224
+ description: Output file name
1225
+ example: "main"
1071
1226
  path:
1072
1227
  type: string
1228
+ description: Output file path
1229
+ example: "/project/asset/output/main_v001.mp4"
1073
1230
  revision:
1074
1231
  type: integer
1232
+ description: Output file revision
1233
+ example: 1
1075
1234
  entity_id:
1076
1235
  type: string
1077
1236
  format: uuid
1078
- '400':
1079
- description: Given output file already exists, Given person not found, or Given output type not found
1237
+ description: Entity identifier
1238
+ example: c46c8gc6-eg97-6887-c292-79675204e47
1239
+ created_at:
1240
+ type: string
1241
+ format: date-time
1242
+ description: Creation timestamp
1243
+ example: "2023-01-01T12:00:00Z"
1244
+ updated_at:
1245
+ type: string
1246
+ format: date-time
1247
+ description: Last update timestamp
1248
+ example: "2023-01-01T12:30:00Z"
1080
1249
  """
1081
1250
  args = self.get_arguments()
1082
1251
 
@@ -1205,30 +1374,17 @@ class NewEntityOutputFileResource(Resource, ArgsMixin):
1205
1374
 
1206
1375
 
1207
1376
  class NewInstanceOutputFileResource(Resource, ArgsMixin):
1208
- """
1209
- Some output files are linked to assets through an instance of this asset
1210
- for a give shot. Each time a CG artist is satisfied by what he did on a
1211
- working file, he can create an output file that
1212
- will be linked to a target instance.
1213
- It keeps track of the working file at the origin of the output file.
1214
- An output type is required for better categorization (textures, caches,
1215
- ...). A task type can be set too to give the department related to the
1216
- output file.
1217
- """
1218
1377
 
1219
1378
  @jwt_required()
1220
1379
  def post(self, asset_instance_id, temporal_entity_id):
1221
1380
  """
1222
- Create new output file linked to assets through an instance of this asset for a given shot.
1381
+ Create new instance output file
1223
1382
  ---
1383
+ description: Create a new output file linked to an asset instance
1384
+ for a specific shot. Output files track the source working file
1385
+ and require output type and task type for categorization.
1224
1386
  tags:
1225
- - Files
1226
- description: Some output files are linked to assets through an instance of this asset for a given shot.
1227
- Each time a CG artist is satisfied by what he did on a working file,
1228
- he can create an output file that will be linked to a target instance.
1229
- It keeps track of the working file at the origin of the output file.
1230
- An output type is required for better categorization (textures, caches, ...).
1231
- A task type can be set too to give the department related to the output file.
1387
+ - Files
1232
1388
  parameters:
1233
1389
  - in: path
1234
1390
  name: asset_instance_id
@@ -1236,6 +1392,7 @@ class NewInstanceOutputFileResource(Resource, ArgsMixin):
1236
1392
  schema:
1237
1393
  type: string
1238
1394
  format: uuid
1395
+ description: Asset instance unique identifier
1239
1396
  example: a24a6ea4-ce75-4665-a070-57453082c25
1240
1397
  - in: path
1241
1398
  name: temporal_entity_id
@@ -1243,7 +1400,8 @@ class NewInstanceOutputFileResource(Resource, ArgsMixin):
1243
1400
  schema:
1244
1401
  type: string
1245
1402
  format: uuid
1246
- example: a24a6ea4-ce75-4665-a070-57453082c25
1403
+ description: Temporal entity unique identifier
1404
+ example: b35b7fb5-df86-5776-b181-68564193d36
1247
1405
  requestBody:
1248
1406
  required: true
1249
1407
  content:
@@ -1256,59 +1414,73 @@ class NewInstanceOutputFileResource(Resource, ArgsMixin):
1256
1414
  properties:
1257
1415
  name:
1258
1416
  type: string
1417
+ description: Output file name
1259
1418
  default: main
1260
- example: main
1419
+ example: "main"
1261
1420
  mode:
1262
1421
  type: string
1422
+ description: Output file mode
1263
1423
  default: output
1264
- example: output
1424
+ example: "output"
1265
1425
  output_type_id:
1266
1426
  type: string
1267
1427
  format: uuid
1428
+ description: Output type identifier
1268
1429
  example: a24a6ea4-ce75-4665-a070-57453082c25
1269
1430
  task_type_id:
1270
1431
  type: string
1271
1432
  format: uuid
1272
- example: a24a6ea4-ce75-4665-a070-57453082c25
1433
+ description: Task type identifier
1434
+ example: b35b7fb5-df86-5776-b181-68564193d36
1273
1435
  person_id:
1274
1436
  type: string
1275
1437
  format: uuid
1438
+ description: Person identifier
1276
1439
  example: a24a6ea4-ce75-4665-a070-57453082c25
1277
1440
  working_file_id:
1278
1441
  type: string
1279
1442
  format: uuid
1443
+ description: Source working file identifier
1280
1444
  example: a24a6ea4-ce75-4665-a070-57453082c25
1281
1445
  file_status_id:
1282
1446
  type: string
1283
1447
  format: uuid
1448
+ description: File status identifier
1284
1449
  example: a24a6ea4-ce75-4665-a070-57453082c25
1285
1450
  is_sequence:
1286
1451
  type: boolean
1452
+ description: Whether file is a sequence
1287
1453
  default: false
1288
1454
  example: false
1289
1455
  comment:
1290
1456
  type: string
1457
+ description: Output file comment
1291
1458
  example: "Final render"
1292
1459
  extension:
1293
1460
  type: string
1461
+ description: File extension
1294
1462
  example: ".mp4"
1295
1463
  representation:
1296
1464
  type: string
1465
+ description: File representation
1297
1466
  example: "mp4"
1298
1467
  revision:
1299
1468
  type: integer
1469
+ description: File revision number
1300
1470
  example: 1
1301
1471
  nb_elements:
1302
1472
  type: integer
1473
+ description: Number of elements
1303
1474
  default: 1
1304
1475
  example: 1
1305
1476
  sep:
1306
1477
  type: string
1478
+ description: Path separator
1307
1479
  default: /
1308
- example: /
1480
+ example: "/"
1309
1481
  responses:
1310
- '200':
1311
- description: New output file created
1482
+ 201:
1483
+ description: New output file created successfully
1312
1484
  content:
1313
1485
  application/json:
1314
1486
  schema:
@@ -1317,20 +1489,40 @@ class NewInstanceOutputFileResource(Resource, ArgsMixin):
1317
1489
  id:
1318
1490
  type: string
1319
1491
  format: uuid
1492
+ description: Output file unique identifier
1493
+ example: b35b7fb5-df86-5776-b181-68564193d36
1320
1494
  name:
1321
1495
  type: string
1496
+ description: Output file name
1497
+ example: "main"
1322
1498
  path:
1323
1499
  type: string
1500
+ description: Output file path
1501
+ example: "/project/asset/instance/output/main_v001.mp4"
1324
1502
  revision:
1325
1503
  type: integer
1504
+ description: Output file revision
1505
+ example: 1
1326
1506
  asset_instance_id:
1327
1507
  type: string
1328
1508
  format: uuid
1509
+ description: Asset instance identifier
1510
+ example: c46c8gc6-eg97-6887-c292-79675204e47
1329
1511
  temporal_entity_id:
1330
1512
  type: string
1331
1513
  format: uuid
1332
- '400':
1333
- description: Given output file already exists, Given person not found, or Given output type not found
1514
+ description: Temporal entity identifier
1515
+ example: d57d9hd7-fh08-7998-d403-80786315f58
1516
+ created_at:
1517
+ type: string
1518
+ format: date-time
1519
+ description: Creation timestamp
1520
+ example: "2023-01-01T12:00:00Z"
1521
+ updated_at:
1522
+ type: string
1523
+ format: date-time
1524
+ description: Last update timestamp
1525
+ example: "2023-01-01T12:30:00Z"
1334
1526
  """
1335
1527
  args = self.get_arguments()
1336
1528
 
@@ -1469,17 +1661,17 @@ class NewInstanceOutputFileResource(Resource, ArgsMixin):
1469
1661
 
1470
1662
 
1471
1663
  class GetNextEntityOutputFileRevisionResource(Resource, ArgsMixin):
1472
- """
1473
- Get next revision for given entity, output type, task type and name.
1474
- """
1475
1664
 
1476
1665
  @jwt_required()
1477
1666
  def post(self, entity_id):
1478
1667
  """
1479
- Get next revision for given entity, output type, task type and name.
1668
+ Get next entity output file revision
1480
1669
  ---
1670
+ description: Get the next revision number for an output file based
1671
+ on entity, output type, task type, and name. Used for automatic
1672
+ revision numbering.
1481
1673
  tags:
1482
- - Files
1674
+ - Files
1483
1675
  parameters:
1484
1676
  - in: path
1485
1677
  name: entity_id
@@ -1487,6 +1679,7 @@ class GetNextEntityOutputFileRevisionResource(Resource, ArgsMixin):
1487
1679
  schema:
1488
1680
  type: string
1489
1681
  format: uuid
1682
+ description: Entity unique identifier
1490
1683
  example: a24a6ea4-ce75-4665-a070-57453082c25
1491
1684
  requestBody:
1492
1685
  required: true
@@ -1500,19 +1693,22 @@ class GetNextEntityOutputFileRevisionResource(Resource, ArgsMixin):
1500
1693
  properties:
1501
1694
  name:
1502
1695
  type: string
1696
+ description: File name
1503
1697
  default: main
1504
- example: main
1698
+ example: "main"
1505
1699
  output_type_id:
1506
1700
  type: string
1507
1701
  format: uuid
1702
+ description: Output type identifier
1508
1703
  example: a24a6ea4-ce75-4665-a070-57453082c25
1509
1704
  task_type_id:
1510
1705
  type: string
1511
1706
  format: uuid
1512
- example: a24a6ea4-ce75-4665-a070-57453082c25
1707
+ description: Task type identifier
1708
+ example: b35b7fb5-df86-5776-b181-68564193d36
1513
1709
  responses:
1514
- '200':
1515
- description: Next revision for given entity, output type, task type and name
1710
+ 200:
1711
+ description: Next revision number for the output file
1516
1712
  content:
1517
1713
  application/json:
1518
1714
  schema:
@@ -1520,9 +1716,8 @@ class GetNextEntityOutputFileRevisionResource(Resource, ArgsMixin):
1520
1716
  properties:
1521
1717
  next_revision:
1522
1718
  type: integer
1719
+ description: Next available revision number
1523
1720
  example: 3
1524
- '404':
1525
- description: Entity, output type, or task type not found
1526
1721
  """
1527
1722
  args = self.get_arguments()
1528
1723
  entity = entities_service.get_entity(entity_id)
@@ -1547,53 +1742,71 @@ class GetNextEntityOutputFileRevisionResource(Resource, ArgsMixin):
1547
1742
 
1548
1743
 
1549
1744
  class GetNextInstanceOutputFileRevisionResource(Resource, ArgsMixin):
1550
- """
1551
- Get next revision for given asset instance, output type, task type and name.
1552
- """
1553
1745
 
1554
1746
  @jwt_required()
1555
1747
  def post(self, asset_instance_id, temporal_entity_id):
1556
1748
  """
1557
- Get next revision for given asset instance, output type, task type and name.
1749
+ Get next instance output file revision
1558
1750
  ---
1751
+ description: Get the next revision number for an output file based
1752
+ on asset instance, output type, task type, and name. Used for
1753
+ automatic revision numbering.
1559
1754
  tags:
1560
1755
  - Files
1561
1756
  parameters:
1562
1757
  - in: path
1563
1758
  name: asset_instance_id
1564
1759
  required: true
1565
- type: string
1566
- format: uuid
1760
+ schema:
1761
+ type: string
1762
+ format: uuid
1763
+ description: Asset instance unique identifier
1567
1764
  example: a24a6ea4-ce75-4665-a070-57453082c25
1568
1765
  - in: path
1569
1766
  name: temporal_entity_id
1570
1767
  required: true
1571
- type: string
1572
- format: uuid
1573
- example: a24a6ea4-ce75-4665-a070-57453082c25
1574
- - in: body
1575
- name: File
1576
- description: Name, output type ID, task type ID.
1577
1768
  schema:
1769
+ type: string
1770
+ format: uuid
1771
+ description: Temporal entity unique identifier
1772
+ example: b35b7fb5-df86-5776-b181-68564193d36
1773
+ requestBody:
1774
+ required: true
1775
+ content:
1776
+ application/json:
1777
+ schema:
1578
1778
  type: object
1579
1779
  required:
1580
1780
  - output_type_id
1581
1781
  - task_type_id
1582
1782
  properties:
1583
- name:
1584
- type: string
1585
- default: main
1586
- output_type_id:
1587
- type: string
1588
- format: uuid
1589
- example: a24a6ea4-ce75-4665-a070-57453082c25
1590
- task_type_id:
1591
- type: string
1592
- format: uuid
1593
- example: a24a6ea4-ce75-4665-a070-57453082c25
1783
+ name:
1784
+ type: string
1785
+ description: File name
1786
+ default: main
1787
+ example: "main"
1788
+ output_type_id:
1789
+ type: string
1790
+ format: uuid
1791
+ description: Output type identifier
1792
+ example: a24a6ea4-ce75-4665-a070-57453082c25
1793
+ task_type_id:
1794
+ type: string
1795
+ format: uuid
1796
+ description: Task type identifier
1797
+ example: b35b7fb5-df86-5776-b181-68564193d36
1594
1798
  responses:
1595
- 200:
1596
- description: Next revision for given asset instance, output type, task type and name
1799
+ 200:
1800
+ description: Next revision number for the instance output file
1801
+ content:
1802
+ application/json:
1803
+ schema:
1804
+ type: object
1805
+ properties:
1806
+ next_revision:
1807
+ type: integer
1808
+ description: Next available revision number
1809
+ example: 2
1597
1810
  """
1598
1811
  args = self.get_arguments()
1599
1812
 
@@ -1625,28 +1838,96 @@ class GetNextInstanceOutputFileRevisionResource(Resource, ArgsMixin):
1625
1838
 
1626
1839
 
1627
1840
  class LastEntityOutputFilesResource(Resource, ArgsMixin):
1628
- """
1629
- Last revisions of output files for given entity grouped by output type
1630
- and file name.
1631
- """
1632
1841
 
1633
1842
  @jwt_required()
1634
1843
  def get(self, entity_id):
1635
1844
  """
1636
- Get last revisions of output files for given entity grouped by output type and file name.
1845
+ Get last entity output files
1637
1846
  ---
1847
+ description: Retrieve the last revisions of output files for a given
1848
+ entity grouped by output type and file name. Returns the most
1849
+ recent version of each output file.
1638
1850
  tags:
1639
1851
  - Files
1640
1852
  parameters:
1641
1853
  - in: path
1642
1854
  name: entity_id
1643
1855
  required: true
1644
- type: string
1645
- format: uuid
1856
+ schema:
1857
+ type: string
1858
+ format: uuid
1859
+ description: Entity unique identifier
1646
1860
  example: a24a6ea4-ce75-4665-a070-57453082c25
1861
+ - in: query
1862
+ name: output_type_id
1863
+ required: false
1864
+ schema:
1865
+ type: string
1866
+ format: uuid
1867
+ description: Filter by output type
1868
+ example: b35b7fb5-df86-5776-b181-68564193d36
1869
+ - in: query
1870
+ name: task_type_id
1871
+ required: false
1872
+ schema:
1873
+ type: string
1874
+ format: uuid
1875
+ description: Filter by task type
1876
+ example: c46c8gc6-eg97-6887-c292-79675204e47
1877
+ - in: query
1878
+ name: representation
1879
+ required: false
1880
+ schema:
1881
+ type: string
1882
+ description: Filter by representation
1883
+ example: "mp4"
1884
+ - in: query
1885
+ name: file_status_id
1886
+ required: false
1887
+ schema:
1888
+ type: string
1889
+ format: uuid
1890
+ description: Filter by file status
1891
+ example: d57d9hd7-fh08-7998-d403-80786315f58
1892
+ - in: query
1893
+ name: name
1894
+ required: false
1895
+ schema:
1896
+ type: string
1897
+ description: Filter by file name
1898
+ example: "main"
1647
1899
  responses:
1648
- 200:
1649
- description: Last revisions of output files for given entity grouped by output type and file name
1900
+ 200:
1901
+ description: Last revisions of output files grouped by output type and file name
1902
+ content:
1903
+ application/json:
1904
+ schema:
1905
+ type: object
1906
+ additionalProperties:
1907
+ type: object
1908
+ properties:
1909
+ id:
1910
+ type: string
1911
+ format: uuid
1912
+ description: Output file unique identifier
1913
+ example: e68e0ie8-gi19-8009-e514-91897426g69
1914
+ name:
1915
+ type: string
1916
+ description: Output file name
1917
+ example: "main"
1918
+ revision:
1919
+ type: integer
1920
+ description: Output file revision
1921
+ example: 2
1922
+ path:
1923
+ type: string
1924
+ description: Output file path
1925
+ example: "/project/asset/output/main_v002.mp4"
1926
+ updated_at:
1927
+ type: string
1928
+ format: date-time
1929
+ description: Last update timestamp
1930
+ example: "2023-01-01T12:00:00Z"
1650
1931
  """
1651
1932
  args = self.get_args(
1652
1933
  [
@@ -1672,18 +1953,17 @@ class LastEntityOutputFilesResource(Resource, ArgsMixin):
1672
1953
 
1673
1954
 
1674
1955
  class LastInstanceOutputFilesResource(Resource, ArgsMixin):
1675
- """
1676
- Last revisions of output files for given instance grouped by output type
1677
- and file name.
1678
- """
1679
1956
 
1680
1957
  @jwt_required()
1681
1958
  def get(self, asset_instance_id, temporal_entity_id):
1682
1959
  """
1683
- Get last revisions of output files for given instance grouped by output type and file name.
1960
+ Get last instance output files
1684
1961
  ---
1962
+ description: Retrieve the last revisions of output files for a given
1963
+ instance grouped by output type and file name. Returns the most
1964
+ recent version of each output file.
1685
1965
  tags:
1686
- - Files
1966
+ - Files
1687
1967
  parameters:
1688
1968
  - in: path
1689
1969
  name: asset_instance_id
@@ -1691,6 +1971,7 @@ class LastInstanceOutputFilesResource(Resource, ArgsMixin):
1691
1971
  schema:
1692
1972
  type: string
1693
1973
  format: uuid
1974
+ description: Asset instance unique identifier
1694
1975
  example: a24a6ea4-ce75-4665-a070-57453082c25
1695
1976
  - in: path
1696
1977
  name: temporal_entity_id
@@ -1698,37 +1979,49 @@ class LastInstanceOutputFilesResource(Resource, ArgsMixin):
1698
1979
  schema:
1699
1980
  type: string
1700
1981
  format: uuid
1701
- example: a24a6ea4-ce75-4665-a070-57453082c25
1982
+ description: Temporal entity unique identifier
1983
+ example: b35b7fb5-df86-5776-b181-68564193d36
1702
1984
  - in: query
1703
1985
  name: output_type_id
1704
- required: true
1986
+ required: false
1705
1987
  schema:
1706
1988
  type: string
1707
1989
  format: uuid
1708
- example: a24a6ea4-ce75-4665-a070-57453082c25
1990
+ description: Filter by output type
1991
+ example: c46c8gc6-eg97-6887-c292-79675204e47
1709
1992
  - in: query
1710
1993
  name: task_type_id
1711
- required: true
1994
+ required: false
1712
1995
  schema:
1713
1996
  type: string
1714
1997
  format: uuid
1715
- example: a24a6ea4-ce75-4665-a070-57453082c25
1998
+ description: Filter by task type
1999
+ example: d57d9hd7-fh08-7998-d403-80786315f58
1716
2000
  - in: query
1717
2001
  name: file_status_id
1718
- required: true
2002
+ required: false
1719
2003
  schema:
1720
2004
  type: string
1721
2005
  format: uuid
1722
- example: a24a6ea4-ce75-4665-a070-57453082c25
2006
+ description: Filter by file status
2007
+ example: e68e0ie8-gi19-8009-e514-91897426g69
1723
2008
  - in: query
1724
2009
  name: representation
1725
- required: true
2010
+ required: false
2011
+ schema:
2012
+ type: string
2013
+ description: Filter by representation
2014
+ example: "cache"
2015
+ - in: query
2016
+ name: name
2017
+ required: false
1726
2018
  schema:
1727
2019
  type: string
1728
- example: cache
2020
+ description: Filter by file name
2021
+ example: "main"
1729
2022
  responses:
1730
- '200':
1731
- description: Last revisions of output files for given instance grouped by output type and file name
2023
+ 200:
2024
+ description: Last revisions of output files grouped by output type and file name
1732
2025
  content:
1733
2026
  application/json:
1734
2027
  schema:
@@ -1739,17 +2032,25 @@ class LastInstanceOutputFilesResource(Resource, ArgsMixin):
1739
2032
  id:
1740
2033
  type: string
1741
2034
  format: uuid
2035
+ description: Output file unique identifier
2036
+ example: f79f1jf9-hj20-9010-f625-a09008537h80
1742
2037
  name:
1743
2038
  type: string
2039
+ description: Output file name
2040
+ example: "main"
1744
2041
  revision:
1745
2042
  type: integer
2043
+ description: Output file revision
2044
+ example: 1
1746
2045
  path:
1747
2046
  type: string
2047
+ description: Output file path
2048
+ example: "/project/asset/instance/output/main_v001.mp4"
1748
2049
  updated_at:
1749
2050
  type: string
1750
2051
  format: date-time
1751
- '404':
1752
- description: Asset instance or temporal entity not found
2052
+ description: Last update timestamp
2053
+ example: "2023-01-01T12:00:00Z"
1753
2054
  """
1754
2055
  args = self.get_args(
1755
2056
  [
@@ -1777,27 +2078,59 @@ class LastInstanceOutputFilesResource(Resource, ArgsMixin):
1777
2078
 
1778
2079
 
1779
2080
  class EntityOutputTypesResource(Resource):
1780
- """
1781
- Return all types of output generated for given entity.
1782
- """
1783
2081
 
1784
2082
  @jwt_required()
1785
2083
  def get(self, entity_id):
1786
2084
  """
1787
- Return all types of output generated for given entity.
2085
+ Get entity output types
1788
2086
  ---
2087
+ description: Retrieve all types of output files generated for a
2088
+ given entity. Returns list of output types available for the
2089
+ entity.
1789
2090
  tags:
1790
2091
  - Files
1791
2092
  parameters:
1792
2093
  - in: path
1793
2094
  name: entity_id
1794
2095
  required: true
1795
- type: string
1796
- format: uuid
2096
+ schema:
2097
+ type: string
2098
+ format: uuid
2099
+ description: Entity unique identifier
1797
2100
  example: a24a6ea4-ce75-4665-a070-57453082c25
1798
2101
  responses:
1799
- 200:
1800
- description: All types of output generated for given entity
2102
+ 200:
2103
+ description: All types of output files generated for the entity
2104
+ content:
2105
+ application/json:
2106
+ schema:
2107
+ type: array
2108
+ items:
2109
+ type: object
2110
+ properties:
2111
+ id:
2112
+ type: string
2113
+ format: uuid
2114
+ description: Output type unique identifier
2115
+ example: b35b7fb5-df86-5776-b181-68564193d36
2116
+ name:
2117
+ type: string
2118
+ description: Output type name
2119
+ example: "Cache"
2120
+ short_name:
2121
+ type: string
2122
+ description: Output type short name
2123
+ example: "CACHE"
2124
+ created_at:
2125
+ type: string
2126
+ format: date-time
2127
+ description: Creation timestamp
2128
+ example: "2023-01-01T12:00:00Z"
2129
+ updated_at:
2130
+ type: string
2131
+ format: date-time
2132
+ description: Last update timestamp
2133
+ example: "2023-01-01T12:30:00Z"
1801
2134
  """
1802
2135
  entity = entities_service.get_entity(entity_id)
1803
2136
  user_service.check_project_access(entity["project_id"])
@@ -1805,34 +2138,67 @@ class EntityOutputTypesResource(Resource):
1805
2138
 
1806
2139
 
1807
2140
  class InstanceOutputTypesResource(Resource):
1808
- """
1809
- Return all types of output generated for given instance.
1810
- """
1811
2141
 
1812
2142
  @jwt_required()
1813
2143
  def get(self, asset_instance_id, temporal_entity_id):
1814
2144
  """
1815
- Return all types of output generated for given instance.
2145
+ Get instance output types
1816
2146
  ---
2147
+ description: Retrieve all types of output files generated for a
2148
+ given asset instance and temporal entity. Returns list of output
2149
+ types available for the instance.
1817
2150
  tags:
1818
2151
  - Files
1819
2152
  parameters:
1820
2153
  - in: path
1821
2154
  name: asset_instance_id
1822
2155
  required: true
1823
- type: string
1824
- format: uuid
2156
+ schema:
2157
+ type: string
2158
+ format: uuid
2159
+ description: Asset instance unique identifier
1825
2160
  example: a24a6ea4-ce75-4665-a070-57453082c25
1826
2161
  - in: path
1827
2162
  name: temporal_entity_id
1828
2163
  required: true
1829
- type: string
1830
- format: uuid
1831
- example: a24a6ea4-ce75-4665-a070-57453082c25
2164
+ schema:
2165
+ type: string
2166
+ format: uuid
2167
+ description: Temporal entity unique identifier
2168
+ example: b35b7fb5-df86-5776-b181-68564193d36
1832
2169
  responses:
1833
- 200:
1834
- description: All types of output generated for given instance
1835
- and temporal_entity
2170
+ 200:
2171
+ description: All types of output files generated for the instance
2172
+ content:
2173
+ application/json:
2174
+ schema:
2175
+ type: array
2176
+ items:
2177
+ type: object
2178
+ properties:
2179
+ id:
2180
+ type: string
2181
+ format: uuid
2182
+ description: Output type unique identifier
2183
+ example: c46c8gc6-eg97-6887-c292-79675204e47
2184
+ name:
2185
+ type: string
2186
+ description: Output type name
2187
+ example: "Render"
2188
+ short_name:
2189
+ type: string
2190
+ description: Output type short name
2191
+ example: "RENDER"
2192
+ created_at:
2193
+ type: string
2194
+ format: date-time
2195
+ description: Creation timestamp
2196
+ example: "2023-01-01T12:00:00Z"
2197
+ updated_at:
2198
+ type: string
2199
+ format: date-time
2200
+ description: Last update timestamp
2201
+ example: "2023-01-01T12:30:00Z"
1836
2202
  """
1837
2203
  asset_instance = assets_service.get_asset_instance(asset_instance_id)
1838
2204
  entity = entities_service.get_entity(asset_instance["asset_id"])
@@ -1843,33 +2209,77 @@ class InstanceOutputTypesResource(Resource):
1843
2209
 
1844
2210
 
1845
2211
  class EntityOutputTypeOutputFilesResource(Resource, ArgsMixin):
1846
- """
1847
- Get all output files for given entity and given output type.
1848
- """
1849
2212
 
1850
2213
  @jwt_required()
1851
2214
  def get(self, entity_id, output_type_id):
1852
2215
  """
1853
- Get all output files for given entity and given output type.
2216
+ Get entity output type files
1854
2217
  ---
2218
+ description: Retrieve all output files for a given entity and
2219
+ output type. Optionally filter by representation.
1855
2220
  tags:
1856
2221
  - Files
1857
2222
  parameters:
1858
2223
  - in: path
1859
2224
  name: entity_id
1860
2225
  required: true
1861
- type: string
1862
- format: uuid
2226
+ schema:
2227
+ type: string
2228
+ format: uuid
2229
+ description: Entity unique identifier
1863
2230
  example: a24a6ea4-ce75-4665-a070-57453082c25
1864
2231
  - in: path
1865
2232
  name: output_type_id
1866
2233
  required: true
1867
- type: string
1868
- format: uuid
1869
- example: a24a6ea4-ce75-4665-a070-57453082c25
2234
+ schema:
2235
+ type: string
2236
+ format: uuid
2237
+ description: Output type unique identifier
2238
+ example: b35b7fb5-df86-5776-b181-68564193d36
2239
+ - in: query
2240
+ name: representation
2241
+ required: false
2242
+ schema:
2243
+ type: string
2244
+ description: Filter by representation
2245
+ example: "mp4"
1870
2246
  responses:
1871
- 200:
1872
- description: All output files for given entity and given output type
2247
+ 200:
2248
+ description: All output files for the entity and output type
2249
+ content:
2250
+ application/json:
2251
+ schema:
2252
+ type: array
2253
+ items:
2254
+ type: object
2255
+ properties:
2256
+ id:
2257
+ type: string
2258
+ format: uuid
2259
+ description: Output file unique identifier
2260
+ example: c46c8gc6-eg97-6887-c292-79675204e47
2261
+ name:
2262
+ type: string
2263
+ description: Output file name
2264
+ example: "main"
2265
+ revision:
2266
+ type: integer
2267
+ description: Output file revision
2268
+ example: 1
2269
+ path:
2270
+ type: string
2271
+ description: Output file path
2272
+ example: "/project/asset/output/main_v001.mp4"
2273
+ updated_at:
2274
+ type: string
2275
+ format: date-time
2276
+ description: Last update timestamp
2277
+ example: "2023-01-01T12:00:00Z"
2278
+ entity_id:
2279
+ type: string
2280
+ format: uuid
2281
+ description: Entity identifier
2282
+ example: d57d9hd7-fh08-7998-d403-80786315f58
1873
2283
  """
1874
2284
  representation = self.get_text_parameter("representation")
1875
2285
 
@@ -1886,17 +2296,17 @@ class EntityOutputTypeOutputFilesResource(Resource, ArgsMixin):
1886
2296
 
1887
2297
 
1888
2298
  class InstanceOutputTypeOutputFilesResource(Resource, ArgsMixin):
1889
- """
1890
- Get all output files for given asset instance and given output type.
1891
- """
1892
2299
 
1893
2300
  @jwt_required()
1894
2301
  def get(self, asset_instance_id, temporal_entity_id, output_type_id):
1895
2302
  """
1896
- Get all output files for given asset instance and given output type.
2303
+ Get instance output type files
1897
2304
  ---
2305
+ description: Retrieve all output files for a given asset instance,
2306
+ temporal entity, and output type. Optionally filter by
2307
+ representation.
1898
2308
  tags:
1899
- - Files
2309
+ - Files
1900
2310
  parameters:
1901
2311
  - in: path
1902
2312
  name: asset_instance_id
@@ -1904,6 +2314,7 @@ class InstanceOutputTypeOutputFilesResource(Resource, ArgsMixin):
1904
2314
  schema:
1905
2315
  type: string
1906
2316
  format: uuid
2317
+ description: Asset instance unique identifier
1907
2318
  example: a24a6ea4-ce75-4665-a070-57453082c25
1908
2319
  - in: path
1909
2320
  name: temporal_entity_id
@@ -1911,17 +2322,26 @@ class InstanceOutputTypeOutputFilesResource(Resource, ArgsMixin):
1911
2322
  schema:
1912
2323
  type: string
1913
2324
  format: uuid
1914
- example: a24a6ea4-ce75-4665-a070-57453082c25
2325
+ description: Temporal entity unique identifier
2326
+ example: b35b7fb5-df86-5776-b181-68564193d36
1915
2327
  - in: path
1916
2328
  name: output_type_id
1917
2329
  required: true
1918
2330
  schema:
1919
2331
  type: string
1920
2332
  format: uuid
1921
- example: a24a6ea4-ce75-4665-a070-57453082c25
2333
+ description: Output type unique identifier
2334
+ example: c46c8gc6-eg97-6887-c292-79675204e47
2335
+ - in: query
2336
+ name: representation
2337
+ required: false
2338
+ schema:
2339
+ type: string
2340
+ description: Filter by representation
2341
+ example: "mp4"
1922
2342
  responses:
1923
- '200':
1924
- description: All output files for given asset instance and given output type
2343
+ 200:
2344
+ description: All output files for the asset instance and output type
1925
2345
  content:
1926
2346
  application/json:
1927
2347
  schema:
@@ -1932,23 +2352,35 @@ class InstanceOutputTypeOutputFilesResource(Resource, ArgsMixin):
1932
2352
  id:
1933
2353
  type: string
1934
2354
  format: uuid
2355
+ description: Output file unique identifier
2356
+ example: d57d9hd7-fh08-7998-d403-80786315f58
1935
2357
  name:
1936
2358
  type: string
2359
+ description: Output file name
2360
+ example: "main"
1937
2361
  revision:
1938
2362
  type: integer
2363
+ description: Output file revision
2364
+ example: 1
1939
2365
  path:
1940
2366
  type: string
2367
+ description: Output file path
2368
+ example: "/project/asset/instance/output/main_v001.mp4"
1941
2369
  updated_at:
1942
2370
  type: string
1943
2371
  format: date-time
2372
+ description: Last update timestamp
2373
+ example: "2023-01-01T12:00:00Z"
1944
2374
  asset_instance_id:
1945
2375
  type: string
1946
2376
  format: uuid
2377
+ description: Asset instance identifier
2378
+ example: e68e0ie8-gi19-8009-e514-91897426g69
1947
2379
  temporal_entity_id:
1948
2380
  type: string
1949
2381
  format: uuid
1950
- '404':
1951
- description: Asset instance, temporal entity, or output type not found
2382
+ description: Temporal entity identifier
2383
+ example: f79f1jf9-hj20-9010-f625-a09008537h80
1952
2384
  """
1953
2385
  representation = self.get_text_parameter("representation")
1954
2386
 
@@ -1968,13 +2400,17 @@ class InstanceOutputTypeOutputFilesResource(Resource, ArgsMixin):
1968
2400
 
1969
2401
 
1970
2402
  class ProjectOutputFilesResource(Resource, ArgsMixin):
2403
+
1971
2404
  @jwt_required()
1972
2405
  def get(self, project_id):
1973
2406
  """
1974
- Get all output files for given project.
2407
+ Get project output files
1975
2408
  ---
2409
+ description: Retrieve all output files for a given project with
2410
+ optional filtering by output type, task type, representation,
2411
+ file status, and name.
1976
2412
  tags:
1977
- - Files
2413
+ - Files
1978
2414
  parameters:
1979
2415
  - in: path
1980
2416
  name: project_id
@@ -1982,37 +2418,49 @@ class ProjectOutputFilesResource(Resource, ArgsMixin):
1982
2418
  schema:
1983
2419
  type: string
1984
2420
  format: uuid
2421
+ description: Project unique identifier
1985
2422
  example: a24a6ea4-ce75-4665-a070-57453082c25
1986
2423
  - in: query
1987
2424
  name: output_type_id
1988
- required: true
2425
+ required: false
1989
2426
  schema:
1990
2427
  type: string
1991
2428
  format: uuid
1992
- example: a24a6ea4-ce75-4665-a070-57453082c25
2429
+ description: Filter by output type
2430
+ example: b35b7fb5-df86-5776-b181-68564193d36
1993
2431
  - in: query
1994
2432
  name: task_type_id
1995
- required: true
2433
+ required: false
1996
2434
  schema:
1997
2435
  type: string
1998
2436
  format: uuid
1999
- example: a24a6ea4-ce75-4665-a070-57453082c25
2437
+ description: Filter by task type
2438
+ example: c46c8gc6-eg97-6887-c292-79675204e47
2000
2439
  - in: query
2001
2440
  name: file_status_id
2002
- required: true
2441
+ required: false
2003
2442
  schema:
2004
2443
  type: string
2005
2444
  format: uuid
2006
- example: a24a6ea4-ce75-4665-a070-57453082c25
2445
+ description: Filter by file status
2446
+ example: d57d9hd7-fh08-7998-d403-80786315f58
2007
2447
  - in: query
2008
2448
  name: representation
2009
- required: true
2449
+ required: false
2450
+ schema:
2451
+ type: string
2452
+ description: Filter by representation
2453
+ example: "cache"
2454
+ - in: query
2455
+ name: name
2456
+ required: false
2010
2457
  schema:
2011
2458
  type: string
2012
- example: cache
2459
+ description: Filter by file name
2460
+ example: "main"
2013
2461
  responses:
2014
- '200':
2015
- description: All output files for given project
2462
+ 200:
2463
+ description: All output files for the project
2016
2464
  content:
2017
2465
  application/json:
2018
2466
  schema:
@@ -2023,20 +2471,30 @@ class ProjectOutputFilesResource(Resource, ArgsMixin):
2023
2471
  id:
2024
2472
  type: string
2025
2473
  format: uuid
2474
+ description: Output file unique identifier
2475
+ example: e68e0ie8-gi19-8009-e514-91897426g69
2026
2476
  name:
2027
2477
  type: string
2478
+ description: Output file name
2479
+ example: "main"
2028
2480
  revision:
2029
2481
  type: integer
2482
+ description: Output file revision
2483
+ example: 1
2030
2484
  path:
2031
2485
  type: string
2486
+ description: Output file path
2487
+ example: "/project/asset/output/main_v001.mp4"
2032
2488
  updated_at:
2033
2489
  type: string
2034
2490
  format: date-time
2491
+ description: Last update timestamp
2492
+ example: "2023-01-01T12:00:00Z"
2035
2493
  project_id:
2036
2494
  type: string
2037
2495
  format: uuid
2038
- '404':
2039
- description: Project not found
2496
+ description: Project identifier
2497
+ example: f79f1jf9-hj20-9010-f625-a09008537h80
2040
2498
  """
2041
2499
  args = self.get_args(
2042
2500
  [
@@ -2060,17 +2518,17 @@ class ProjectOutputFilesResource(Resource, ArgsMixin):
2060
2518
 
2061
2519
 
2062
2520
  class EntityOutputFilesResource(Resource, ArgsMixin):
2063
- """
2064
- Get all output files for given asset instance and given output type.
2065
- """
2066
2521
 
2067
2522
  @jwt_required()
2068
2523
  def get(self, entity_id):
2069
2524
  """
2070
- Get all output files for given entity.
2525
+ Get entity output files
2071
2526
  ---
2527
+ description: Retrieve all output files for a given entity with
2528
+ optional filtering by output type, task type, representation,
2529
+ file status, and name.
2072
2530
  tags:
2073
- - Files
2531
+ - Files
2074
2532
  parameters:
2075
2533
  - in: path
2076
2534
  name: entity_id
@@ -2078,37 +2536,49 @@ class EntityOutputFilesResource(Resource, ArgsMixin):
2078
2536
  schema:
2079
2537
  type: string
2080
2538
  format: uuid
2539
+ description: Entity unique identifier
2081
2540
  example: a24a6ea4-ce75-4665-a070-57453082c25
2082
2541
  - in: query
2083
2542
  name: output_type_id
2084
- required: true
2543
+ required: false
2085
2544
  schema:
2086
2545
  type: string
2087
2546
  format: uuid
2088
- example: a24a6ea4-ce75-4665-a070-57453082c25
2547
+ description: Filter by output type
2548
+ example: b35b7fb5-df86-5776-b181-68564193d36
2089
2549
  - in: query
2090
2550
  name: task_type_id
2091
- required: true
2551
+ required: false
2092
2552
  schema:
2093
2553
  type: string
2094
2554
  format: uuid
2095
- example: a24a6ea4-ce75-4665-a070-57453082c25
2555
+ description: Filter by task type
2556
+ example: c46c8gc6-eg97-6887-c292-79675204e47
2096
2557
  - in: query
2097
2558
  name: file_status_id
2098
- required: true
2559
+ required: false
2099
2560
  schema:
2100
2561
  type: string
2101
2562
  format: uuid
2102
- example: a24a6ea4-ce75-4665-a070-57453082c25
2563
+ description: Filter by file status
2564
+ example: d57d9hd7-fh08-7998-d403-80786315f58
2103
2565
  - in: query
2104
2566
  name: representation
2105
- required: true
2567
+ required: false
2106
2568
  schema:
2107
2569
  type: string
2108
- example: cache
2570
+ description: Filter by representation
2571
+ example: "cache"
2572
+ - in: query
2573
+ name: name
2574
+ required: false
2575
+ schema:
2576
+ type: string
2577
+ description: Filter by file name
2578
+ example: "main"
2109
2579
  responses:
2110
- '200':
2111
- description: All output files for given entity
2580
+ 200:
2581
+ description: All output files for the entity
2112
2582
  content:
2113
2583
  application/json:
2114
2584
  schema:
@@ -2119,20 +2589,30 @@ class EntityOutputFilesResource(Resource, ArgsMixin):
2119
2589
  id:
2120
2590
  type: string
2121
2591
  format: uuid
2592
+ description: Output file unique identifier
2593
+ example: e68e0ie8-gi19-8009-e514-91897426g69
2122
2594
  name:
2123
2595
  type: string
2596
+ description: Output file name
2597
+ example: "main"
2124
2598
  revision:
2125
2599
  type: integer
2600
+ description: Output file revision
2601
+ example: 1
2126
2602
  path:
2127
2603
  type: string
2604
+ description: Output file path
2605
+ example: "/project/asset/output/main_v001.mp4"
2128
2606
  updated_at:
2129
2607
  type: string
2130
2608
  format: date-time
2609
+ description: Last update timestamp
2610
+ example: "2023-01-01T12:00:00Z"
2131
2611
  entity_id:
2132
2612
  type: string
2133
2613
  format: uuid
2134
- '404':
2135
- description: Entity not found
2614
+ description: Entity identifier
2615
+ example: f79f1jf9-hj20-9010-f625-a09008537h80
2136
2616
  """
2137
2617
  args = self.get_args(
2138
2618
  [
@@ -2158,17 +2638,17 @@ class EntityOutputFilesResource(Resource, ArgsMixin):
2158
2638
 
2159
2639
 
2160
2640
  class InstanceOutputFilesResource(Resource):
2161
- """
2162
- Get all output files for given asset instance and given output type.
2163
- """
2164
2641
 
2165
2642
  @jwt_required()
2166
2643
  def get(self, asset_instance_id):
2167
2644
  """
2168
- Get all output files for given asset instance and given output type.
2645
+ Get instance output files
2169
2646
  ---
2647
+ description: Retrieve all output files for a given asset instance
2648
+ and temporal entity with optional filtering by output type, task
2649
+ type, representation, file status, and name.
2170
2650
  tags:
2171
- - Files
2651
+ - Files
2172
2652
  parameters:
2173
2653
  - in: path
2174
2654
  name: asset_instance_id
@@ -2176,44 +2656,57 @@ class InstanceOutputFilesResource(Resource):
2176
2656
  schema:
2177
2657
  type: string
2178
2658
  format: uuid
2659
+ description: Asset instance unique identifier
2179
2660
  example: a24a6ea4-ce75-4665-a070-57453082c25
2180
2661
  - in: query
2181
2662
  name: temporal_entity_id
2182
- required: true
2663
+ required: false
2183
2664
  schema:
2184
2665
  type: string
2185
2666
  format: uuid
2186
- example: a24a6ea4-ce75-4665-a070-57453082c25
2667
+ description: Filter by temporal entity
2668
+ example: b35b7fb5-df86-5776-b181-68564193d36
2187
2669
  - in: query
2188
2670
  name: output_type_id
2189
- required: true
2671
+ required: false
2190
2672
  schema:
2191
2673
  type: string
2192
2674
  format: uuid
2193
- example: a24a6ea4-ce75-4665-a070-57453082c25
2675
+ description: Filter by output type
2676
+ example: c46c8gc6-eg97-6887-c292-79675204e47
2194
2677
  - in: query
2195
2678
  name: task_type_id
2196
- required: true
2679
+ required: false
2197
2680
  schema:
2198
2681
  type: string
2199
2682
  format: uuid
2200
- example: a24a6ea4-ce75-4665-a070-57453082c25
2683
+ description: Filter by task type
2684
+ example: d57d9hd7-fh08-7998-d403-80786315f58
2201
2685
  - in: query
2202
2686
  name: file_status_id
2203
- required: true
2687
+ required: false
2204
2688
  schema:
2205
2689
  type: string
2206
2690
  format: uuid
2207
- example: a24a6ea4-ce75-4665-a070-57453082c25
2691
+ description: Filter by file status
2692
+ example: e68e0ie8-gi19-8009-e514-91897426g69
2208
2693
  - in: query
2209
2694
  name: representation
2210
- required: true
2695
+ required: false
2211
2696
  schema:
2212
2697
  type: string
2213
- example: cache
2698
+ description: Filter by representation
2699
+ example: "cache"
2700
+ - in: query
2701
+ name: name
2702
+ required: false
2703
+ schema:
2704
+ type: string
2705
+ description: Filter by file name
2706
+ example: "main"
2214
2707
  responses:
2215
- '200':
2216
- description: All output files for given asset instance and given temporal entity (shot, sequence, etc.)
2708
+ 200:
2709
+ description: All output files for the asset instance and temporal entity
2217
2710
  content:
2218
2711
  application/json:
2219
2712
  schema:
@@ -2224,23 +2717,35 @@ class InstanceOutputFilesResource(Resource):
2224
2717
  id:
2225
2718
  type: string
2226
2719
  format: uuid
2720
+ description: Output file unique identifier
2721
+ example: f79f1jf9-hj20-9010-f625-a09008537h80
2227
2722
  name:
2228
2723
  type: string
2724
+ description: Output file name
2725
+ example: "main"
2229
2726
  revision:
2230
2727
  type: integer
2728
+ description: Output file revision
2729
+ example: 1
2231
2730
  path:
2232
2731
  type: string
2732
+ description: Output file path
2733
+ example: "/project/asset/instance/output/main_v001.mp4"
2233
2734
  updated_at:
2234
2735
  type: string
2235
2736
  format: date-time
2737
+ description: Last update timestamp
2738
+ example: "2023-01-01T12:00:00Z"
2236
2739
  asset_instance_id:
2237
2740
  type: string
2238
2741
  format: uuid
2742
+ description: Asset instance identifier
2743
+ example: a24a6ea4-ce75-4665-a070-57453082c25
2239
2744
  temporal_entity_id:
2240
2745
  type: string
2241
2746
  format: uuid
2242
- '404':
2243
- description: Asset instance or temporal entity not found
2747
+ description: Temporal entity identifier
2748
+ example: b35b7fb5-df86-5776-b181-68564193d36
2244
2749
  """
2245
2750
  args = self.get_args(
2246
2751
  [
@@ -2269,14 +2774,17 @@ class InstanceOutputFilesResource(Resource):
2269
2774
 
2270
2775
 
2271
2776
  class FileResource(Resource):
2777
+
2272
2778
  @jwt_required()
2273
2779
  def get(self, file_id):
2274
2780
  """
2275
- Get information about a file that could be a working file as much as an
2276
- output file.
2781
+ Get file information
2277
2782
  ---
2783
+ description: Retrieve information about a file that could be either
2784
+ a working file or an output file. Returns detailed file metadata
2785
+ and properties.
2278
2786
  tags:
2279
- - Files
2787
+ - Files
2280
2788
  parameters:
2281
2789
  - in: path
2282
2790
  name: file_id
@@ -2284,10 +2792,11 @@ class FileResource(Resource):
2284
2792
  schema:
2285
2793
  type: string
2286
2794
  format: uuid
2795
+ description: File unique identifier
2287
2796
  example: a24a6ea4-ce75-4665-a070-57453082c25
2288
2797
  responses:
2289
- '200':
2290
- description: Information about file
2798
+ 200:
2799
+ description: File information retrieved successfully
2291
2800
  content:
2292
2801
  application/json:
2293
2802
  schema:
@@ -2296,23 +2805,35 @@ class FileResource(Resource):
2296
2805
  id:
2297
2806
  type: string
2298
2807
  format: uuid
2808
+ description: File unique identifier
2809
+ example: b35b7fb5-df86-5776-b181-68564193d36
2299
2810
  name:
2300
2811
  type: string
2812
+ description: File name
2813
+ example: "main"
2301
2814
  path:
2302
2815
  type: string
2816
+ description: File path
2817
+ example: "/project/asset/working/main_v001.blend"
2303
2818
  revision:
2304
2819
  type: integer
2820
+ description: File revision
2821
+ example: 1
2305
2822
  updated_at:
2306
2823
  type: string
2307
2824
  format: date-time
2825
+ description: Last update timestamp
2826
+ example: "2023-01-01T12:00:00Z"
2308
2827
  task_id:
2309
2828
  type: string
2310
2829
  format: uuid
2830
+ description: Task identifier (for working files)
2831
+ example: c46c8gc6-eg97-6887-c292-79675204e47
2311
2832
  entity_id:
2312
2833
  type: string
2313
2834
  format: uuid
2314
- '404':
2315
- description: File not found
2835
+ description: Entity identifier (for output files)
2836
+ example: d57d9hd7-fh08-7998-d403-80786315f58
2316
2837
  """
2317
2838
  try:
2318
2839
  file_dict = files_service.get_working_file(file_id)
@@ -2328,21 +2849,17 @@ class FileResource(Resource):
2328
2849
 
2329
2850
 
2330
2851
  class SetTreeResource(Resource, ArgsMixin):
2331
- """
2332
- Define a template file to use for given project. Template files are located
2333
- on the server side. Each template has a name which means that you just have
2334
- to give a name to "select" the template to link with the project.
2335
- """
2336
2852
 
2337
2853
  @jwt_required()
2338
2854
  def post(self, project_id):
2339
2855
  """
2340
- Define a template file to use for given project.
2856
+ Set project file tree
2341
2857
  ---
2858
+ description: Define a template file to use for a given project.
2859
+ Template files are located on the server side and each template
2860
+ has a name for selection.
2342
2861
  tags:
2343
- - Files
2344
- description: Template files are located on the server side.
2345
- Each template has a name which means that you just have to give a name to "select" the template to link with the project.
2862
+ - Files
2346
2863
  parameters:
2347
2864
  - in: path
2348
2865
  name: project_id
@@ -2350,6 +2867,7 @@ class SetTreeResource(Resource, ArgsMixin):
2350
2867
  schema:
2351
2868
  type: string
2352
2869
  format: uuid
2870
+ description: Project unique identifier
2353
2871
  example: a24a6ea4-ce75-4665-a070-57453082c25
2354
2872
  requestBody:
2355
2873
  required: true
@@ -2362,23 +2880,34 @@ class SetTreeResource(Resource, ArgsMixin):
2362
2880
  properties:
2363
2881
  tree_name:
2364
2882
  type: string
2883
+ description: Name of the file tree template
2365
2884
  example: "default"
2366
2885
  responses:
2367
- '200':
2368
- description: Template file defined
2886
+ 200:
2887
+ description: File tree template set successfully
2369
2888
  content:
2370
2889
  application/json:
2371
2890
  schema:
2372
2891
  type: object
2373
2892
  properties:
2374
- success:
2375
- type: boolean
2376
- example: true
2377
- tree_name:
2893
+ id:
2378
2894
  type: string
2379
- example: "default"
2380
- '400':
2381
- description: Selected tree not available
2895
+ format: uuid
2896
+ description: Project unique identifier
2897
+ example: b35b7fb5-df86-5776-b181-68564193d36
2898
+ name:
2899
+ type: string
2900
+ description: Project name
2901
+ example: "My Project"
2902
+ file_tree:
2903
+ type: object
2904
+ description: File tree template configuration
2905
+ example: {"template": "default"}
2906
+ updated_at:
2907
+ type: string
2908
+ format: date-time
2909
+ description: Last update timestamp
2910
+ example: "2023-01-01T12:30:00Z"
2382
2911
  """
2383
2912
  args = self.get_args(
2384
2913
  [
@@ -2403,17 +2932,17 @@ class SetTreeResource(Resource, ArgsMixin):
2403
2932
 
2404
2933
 
2405
2934
  class EntityWorkingFilesResource(Resource, ArgsMixin):
2406
- """
2407
- Get all working files for a given entity and possibly a task and a name.
2408
- """
2409
2935
 
2410
2936
  @jwt_required()
2411
2937
  def get(self, entity_id):
2412
2938
  """
2413
- Get all working files for a given entity and possibly a task and a name.
2939
+ Get entity working files
2414
2940
  ---
2941
+ description: Retrieve all working files for a given entity with
2942
+ optional filtering by task and name. Returns complete list of
2943
+ working files with their revisions.
2415
2944
  tags:
2416
- - Files
2945
+ - Files
2417
2946
  parameters:
2418
2947
  - in: path
2419
2948
  name: entity_id
@@ -2421,6 +2950,7 @@ class EntityWorkingFilesResource(Resource, ArgsMixin):
2421
2950
  schema:
2422
2951
  type: string
2423
2952
  format: uuid
2953
+ description: Entity unique identifier
2424
2954
  example: a24a6ea4-ce75-4665-a070-57453082c25
2425
2955
  - in: query
2426
2956
  name: task_id
@@ -2428,16 +2958,18 @@ class EntityWorkingFilesResource(Resource, ArgsMixin):
2428
2958
  schema:
2429
2959
  type: string
2430
2960
  format: uuid
2431
- example: a24a6ea4-ce75-4665-a070-57453082c25
2961
+ description: Filter by task
2962
+ example: b35b7fb5-df86-5776-b181-68564193d36
2432
2963
  - in: query
2433
2964
  name: name
2434
2965
  required: false
2435
2966
  schema:
2436
2967
  type: string
2437
- example: main
2968
+ description: Filter by file name
2969
+ example: "main"
2438
2970
  responses:
2439
- '200':
2440
- description: All working files for given entity and possibly a task and a name
2971
+ 200:
2972
+ description: All working files for the entity
2441
2973
  content:
2442
2974
  application/json:
2443
2975
  schema:
@@ -2448,23 +2980,35 @@ class EntityWorkingFilesResource(Resource, ArgsMixin):
2448
2980
  id:
2449
2981
  type: string
2450
2982
  format: uuid
2983
+ description: Working file unique identifier
2984
+ example: c46c8gc6-eg97-6887-c292-79675204e47
2451
2985
  name:
2452
2986
  type: string
2987
+ description: Working file name
2988
+ example: "main"
2453
2989
  revision:
2454
2990
  type: integer
2991
+ description: Working file revision
2992
+ example: 1
2455
2993
  path:
2456
2994
  type: string
2995
+ description: Working file path
2996
+ example: "/project/asset/working/main_v001.blend"
2457
2997
  updated_at:
2458
2998
  type: string
2459
2999
  format: date-time
3000
+ description: Last update timestamp
3001
+ example: "2023-01-01T12:00:00Z"
2460
3002
  task_id:
2461
3003
  type: string
2462
3004
  format: uuid
3005
+ description: Task identifier
3006
+ example: d57d9hd7-fh08-7998-d403-80786315f58
2463
3007
  entity_id:
2464
3008
  type: string
2465
3009
  format: uuid
2466
- '404':
2467
- description: Entity not found
3010
+ description: Entity identifier
3011
+ example: e68e0ie8-gi19-8009-e514-91897426g69
2468
3012
  """
2469
3013
  args = self.get_args(
2470
3014
  [
@@ -2487,19 +3031,16 @@ class EntityWorkingFilesResource(Resource, ArgsMixin):
2487
3031
 
2488
3032
 
2489
3033
  class GuessFromPathResource(Resource, ArgsMixin):
2490
- """
2491
- Get list of possible project file tree templates matching a file path
2492
- and data ids corresponding to template tokens.
2493
- """
2494
3034
 
2495
3035
  @jwt_required()
2496
3036
  def post(self):
2497
3037
  """
2498
- Get list of possible project file tree templates matching a file path
2499
- and data ids corresponding to template tokens.
3038
+ Guess file tree template
2500
3039
  ---
3040
+ description: Get list of possible project file tree templates matching
3041
+ a file path and data ids corresponding to template tokens.
2501
3042
  tags:
2502
- - Files
3043
+ - Files
2503
3044
  requestBody:
2504
3045
  required: true
2505
3046
  content:
@@ -2513,16 +3054,19 @@ class GuessFromPathResource(Resource, ArgsMixin):
2513
3054
  project_id:
2514
3055
  type: string
2515
3056
  format: uuid
3057
+ description: Project unique identifier
2516
3058
  example: a24a6ea4-ce75-4665-a070-57453082c25
2517
3059
  file_path:
2518
3060
  type: string
3061
+ description: File path to analyze
2519
3062
  example: "/project/asset/working/main_v001.blend"
2520
3063
  sep:
2521
3064
  type: string
3065
+ description: Path separator
2522
3066
  default: /
2523
- example: /
3067
+ example: "/"
2524
3068
  responses:
2525
- '200':
3069
+ 200:
2526
3070
  description: List of possible project file tree templates matching the file path
2527
3071
  content:
2528
3072
  application/json:
@@ -2536,20 +3080,27 @@ class GuessFromPathResource(Resource, ArgsMixin):
2536
3080
  properties:
2537
3081
  template:
2538
3082
  type: string
3083
+ description: Template name
2539
3084
  example: "default"
2540
3085
  confidence:
2541
3086
  type: number
3087
+ description: Confidence score
2542
3088
  example: 0.95
2543
3089
  data:
2544
3090
  type: object
3091
+ description: Extracted data from path
2545
3092
  properties:
2546
3093
  project_id:
2547
3094
  type: string
2548
3095
  format: uuid
3096
+ description: Project identifier
3097
+ example: a24a6ea4-ce75-4665-a070-57453082c25
2549
3098
  entity_id:
2550
3099
  type: string
2551
3100
  format: uuid
2552
- '400':
3101
+ description: Entity identifier
3102
+ example: b35b7fb5-df86-5776-b181-68564193d36
3103
+ 400:
2553
3104
  description: Invalid project ID or file path
2554
3105
  """
2555
3106
  data = self.get_arguments()