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
@@ -15,21 +15,23 @@ class EntityNewsResource(Resource):
15
15
  @jwt_required()
16
16
  def get(self, entity_id):
17
17
  """
18
- Retrieve all news linked to a given entity.
18
+ Get entity news
19
19
  ---
20
+ description: Retrieve all news entries that are linked to a specific
21
+ entity.
20
22
  tags:
21
23
  - Entities
22
24
  parameters:
23
25
  - in: path
24
26
  name: entity_id
25
27
  required: true
26
- schema:
27
- type: string
28
- format: uuid
28
+ type: string
29
+ format: uuid
29
30
  example: a24a6ea4-ce75-4665-a070-57453082c25
31
+ description: Unique identifier of the entity
30
32
  responses:
31
- '200':
32
- description: All news linked to given entity
33
+ 200:
34
+ description: List of entity news successfully retrieved
33
35
  content:
34
36
  application/json:
35
37
  schema:
@@ -40,21 +42,42 @@ class EntityNewsResource(Resource):
40
42
  id:
41
43
  type: string
42
44
  format: uuid
43
- title:
44
- type: string
45
- content:
45
+ description: News unique identifier
46
+ example: a24a6ea4-ce75-4665-a070-57453082c25
47
+ change:
48
+ type: boolean
49
+ description: Whether this news represents a change
50
+ example: true
51
+ author_id:
46
52
  type: string
47
- created_at:
53
+ format: uuid
54
+ description: Author person identifier
55
+ example: b35b7fb5-df86-5776-b181-68564193d36
56
+ comment_id:
48
57
  type: string
49
- format: date-time
50
- author_id:
58
+ format: uuid
59
+ description: Comment identifier
60
+ example: c46c8gc6-eg97-6887-c292-79675204e47
61
+ task_id:
51
62
  type: string
52
63
  format: uuid
53
- entity_id:
64
+ description: Task identifier
65
+ example: d57d9hd7-fh08-7998-d403-80786315f58
66
+ preview_file_id:
54
67
  type: string
55
68
  format: uuid
56
- '404':
57
- description: Entity not found
69
+ description: Preview file identifier
70
+ example: e68e0ie8-gi19-8009-e514-91897426g69
71
+ created_at:
72
+ type: string
73
+ format: date-time
74
+ description: Creation timestamp
75
+ example: "2023-01-01T12:00:00Z"
76
+ updated_at:
77
+ type: string
78
+ format: date-time
79
+ description: Last update timestamp
80
+ example: "2023-01-01T12:30:00Z"
58
81
  """
59
82
  entity = entities_service.get_entity(entity_id)
60
83
  user_service.check_project_access(entity["project_id"])
@@ -65,21 +88,24 @@ class EntityPreviewFilesResource(Resource):
65
88
  @jwt_required()
66
89
  def get(self, entity_id):
67
90
  """
68
- Retrieve all preview files linked to a given entity.
91
+ Get entity preview files
69
92
  ---
93
+ description: Retrieve all preview files that are linked to a specific
94
+ entity. This includes images, videos, and other preview media
95
+ associated with the entity.
70
96
  tags:
71
97
  - Entities
72
98
  parameters:
73
99
  - in: path
74
100
  name: entity_id
75
101
  required: true
76
- schema:
77
- type: string
78
- format: uuid
102
+ type: string
103
+ format: uuid
79
104
  example: a24a6ea4-ce75-4665-a070-57453082c25
105
+ description: Unique identifier of the entity
80
106
  responses:
81
- '200':
82
- description: All preview files linked to given entity
107
+ 200:
108
+ description: List of entity preview files successfully retrieved
83
109
  content:
84
110
  application/json:
85
111
  schema:
@@ -90,23 +116,35 @@ class EntityPreviewFilesResource(Resource):
90
116
  id:
91
117
  type: string
92
118
  format: uuid
119
+ description: Preview file unique identifier
120
+ example: a24a6ea4-ce75-4665-a070-57453082c25
93
121
  name:
94
122
  type: string
123
+ description: Preview file name
124
+ example: "preview_001.jpg"
95
125
  path:
96
126
  type: string
127
+ description: File path
128
+ example: "/previews/entity/preview_001.jpg"
97
129
  revision:
98
130
  type: integer
131
+ description: File revision number
132
+ example: 1
99
133
  created_at:
100
134
  type: string
101
135
  format: date-time
136
+ description: Creation timestamp
137
+ example: "2023-01-01T12:00:00Z"
102
138
  entity_id:
103
139
  type: string
104
140
  format: uuid
141
+ description: Entity identifier
142
+ example: b35b7fb5-df86-5776-b181-68564193d36
105
143
  task_id:
106
144
  type: string
107
145
  format: uuid
108
- '404':
109
- description: Entity not found
146
+ description: Task identifier
147
+ example: c46c8gc6-eg97-6887-c292-79675204e47
110
148
  """
111
149
  entity = entities_service.get_entity(entity_id)
112
150
  user_service.check_project_access(entity["project_id"])
@@ -117,21 +155,23 @@ class EntityTimeSpentsResource(Resource):
117
155
  @jwt_required()
118
156
  def get(self, entity_id):
119
157
  """
120
- Retrieve all time spents linked to a given entity.
158
+ Get entity time spent
121
159
  ---
160
+ description: Retrieve all time spent entries that are linked to a
161
+ specific entity.
122
162
  tags:
123
163
  - Entities
124
164
  parameters:
125
165
  - in: path
126
166
  name: entity_id
127
167
  required: true
128
- schema:
129
- type: string
130
- format: uuid
168
+ type: string
169
+ format: uuid
131
170
  example: a24a6ea4-ce75-4665-a070-57453082c25
171
+ description: Unique identifier of the entity
132
172
  responses:
133
- '200':
134
- description: All time spents linked to given entity
173
+ 200:
174
+ description: List of entity time spent entries successfully retrieved
135
175
  content:
136
176
  application/json:
137
177
  schema:
@@ -142,25 +182,33 @@ class EntityTimeSpentsResource(Resource):
142
182
  id:
143
183
  type: string
144
184
  format: uuid
185
+ description: Time spent unique identifier
186
+ example: a24a6ea4-ce75-4665-a070-57453082c25
145
187
  duration:
146
188
  type: number
147
189
  format: float
190
+ description: Time duration in hours
148
191
  example: 2.5
149
192
  date:
150
193
  type: string
151
194
  format: date
195
+ description: Date when time was spent
152
196
  example: "2023-12-07"
153
197
  created_at:
154
198
  type: string
155
199
  format: date-time
200
+ description: Creation timestamp
201
+ example: "2023-01-01T12:00:00Z"
156
202
  person_id:
157
203
  type: string
158
204
  format: uuid
205
+ description: Person identifier who spent the time
206
+ example: b35b7fb5-df86-5776-b181-68564193d36
159
207
  entity_id:
160
208
  type: string
161
209
  format: uuid
162
- '404':
163
- description: Entity not found
210
+ description: Entity identifier
211
+ example: c46c8gc6-eg97-6887-c292-79675204e47
164
212
  """
165
213
  entity = entities_service.get_entity(entity_id)
166
214
  user_service.check_project_access(entity["project_id"])
@@ -171,21 +219,24 @@ class EntitiesLinkedWithTasksResource(Resource):
171
219
  @jwt_required()
172
220
  def get(self, entity_id):
173
221
  """
174
- Resource to retrieve the entities linked on a given entity.
222
+ Get linked entities
175
223
  ---
224
+ description: Retrieve all entities that are linked to a specific entity
225
+ along with their associated tasks. This includes related entities,
226
+ dependencies, and hierarchical relationships.
176
227
  tags:
177
228
  - Entities
178
229
  parameters:
179
230
  - in: path
180
231
  name: entity_id
181
232
  required: true
182
- schema:
183
- type: string
184
- format: uuid
233
+ type: string
234
+ format: uuid
185
235
  example: a24a6ea4-ce75-4665-a070-57453082c25
236
+ description: Unique identifier of the entity
186
237
  responses:
187
- '200':
188
- description: Entities linked on given entity
238
+ 200:
239
+ description: List of linked entities successfully retrieved
189
240
  content:
190
241
  application/json:
191
242
  schema:
@@ -196,17 +247,27 @@ class EntitiesLinkedWithTasksResource(Resource):
196
247
  id:
197
248
  type: string
198
249
  format: uuid
250
+ description: Entity unique identifier
251
+ example: a24a6ea4-ce75-4665-a070-57453082c25
199
252
  name:
200
253
  type: string
254
+ description: Entity name
255
+ example: "Character Model"
201
256
  entity_type_id:
202
257
  type: string
203
258
  format: uuid
259
+ description: Entity type identifier
260
+ example: b35b7fb5-df86-5776-b181-68564193d36
204
261
  project_id:
205
262
  type: string
206
263
  format: uuid
264
+ description: Project identifier
265
+ example: c46c8gc6-eg97-6887-c292-79675204e47
207
266
  parent_id:
208
267
  type: string
209
268
  format: uuid
269
+ description: Parent entity identifier
270
+ example: d57d9hd7-fh08-7998-d403-80786315f58
210
271
  tasks:
211
272
  type: array
212
273
  items:
@@ -215,13 +276,17 @@ class EntitiesLinkedWithTasksResource(Resource):
215
276
  id:
216
277
  type: string
217
278
  format: uuid
279
+ description: Task unique identifier
280
+ example: e68e0ie8-gi19-8009-e514-91897426g69
218
281
  name:
219
282
  type: string
283
+ description: Task name
284
+ example: "Modeling Task"
220
285
  task_type_id:
221
286
  type: string
222
287
  format: uuid
223
- '404':
224
- description: Entity not found
288
+ description: Task type identifier
289
+ example: f79f1jf9-hj20-9010-f625-02998537h80
225
290
  """
226
291
  entity = entities_service.get_entity(entity_id)
227
292
  user_service.check_project_access(entity["project_id"])
@@ -12,8 +12,11 @@ class EventsResource(Resource, ArgsMixin):
12
12
  @jwt_required()
13
13
  def get(self):
14
14
  """
15
- Retrieve last events.
15
+ Get events
16
16
  ---
17
+ description: Retrieve last events with filtering support. Filters can be
18
+ specified in the query string to narrow down results by date range,
19
+ project, or other criteria.
17
20
  tags:
18
21
  - Events
19
22
  parameters:
@@ -22,28 +25,74 @@ class EventsResource(Resource, ArgsMixin):
22
25
  type: string
23
26
  format: date
24
27
  example: "2022-07-12"
28
+ description: Filter events after this date
25
29
  - in: query
26
30
  name: before
27
31
  type: string
28
32
  format: date
29
33
  example: "2022-07-12"
34
+ description: Filter events before this date
30
35
  - in: query
31
36
  name: only_files
32
37
  type: boolean
33
- default: False
38
+ default: false
39
+ description: Return only file-related events
40
+ example: false
34
41
  - in: query
35
42
  name: limit
36
43
  type: integer
37
44
  default: 100
38
45
  example: 100
46
+ description: Maximum number of events to return
39
47
  - in: query
40
48
  name: project_id
41
49
  type: string
42
50
  format: uuid
43
51
  example: a24a6ea4-ce75-4665-a070-57453082c25
52
+ description: Filter events by specific project
53
+ - in: query
54
+ name: name
55
+ type: string
56
+ example: "user_login"
57
+ description: Filter events by event name
44
58
  responses:
45
- 200:
46
- description: All login logs
59
+ 200:
60
+ description: List of events successfully retrieved
61
+ content:
62
+ application/json:
63
+ schema:
64
+ type: array
65
+ items:
66
+ type: object
67
+ properties:
68
+ id:
69
+ type: string
70
+ format: uuid
71
+ description: Event unique identifier
72
+ example: a24a6ea4-ce75-4665-a070-57453082c25
73
+ name:
74
+ type: string
75
+ description: Event name
76
+ example: "user_login"
77
+ data:
78
+ type: object
79
+ description: Event data content
80
+ example: {"user_id": "b35b7fb5-df86-5776-b181-68564193d36"}
81
+ project_id:
82
+ type: string
83
+ format: uuid
84
+ description: Project identifier
85
+ example: c46c8gc6-eg97-6887-c292-79675204e47
86
+ created_at:
87
+ type: string
88
+ format: date-time
89
+ description: Event timestamp
90
+ example: "2023-01-01T12:00:00Z"
91
+ user_id:
92
+ type: string
93
+ format: uuid
94
+ description: User identifier who triggered the event
95
+ example: d57d9hd7-fh08-7998-d403-80786315f58
47
96
  """
48
97
  args = self.get_args(
49
98
  [
@@ -82,23 +131,62 @@ class LoginLogsResource(Resource, ArgsMixin):
82
131
  @jwt_required()
83
132
  def get(self):
84
133
  """
85
- Retrieve all login logs.
134
+ Get login logs
86
135
  ---
136
+ description: Retrieve all login logs with filtering support. Filters can
137
+ be specified in the query string to narrow down results by date range
138
+ and limit.
87
139
  tags:
88
140
  - Events
89
141
  parameters:
90
142
  - in: query
91
143
  name: before
92
144
  type: string
93
- format: date
145
+ format: date-time
94
146
  example: "2022-07-12T00:00:00"
147
+ description: Filter logs before this date and time
95
148
  - in: query
96
149
  name: limit
97
150
  type: integer
98
151
  example: 100
152
+ description: Maximum number of login logs to return
99
153
  responses:
100
- 200:
101
- description: All login logs
154
+ 200:
155
+ description: List of login logs successfully retrieved
156
+ content:
157
+ application/json:
158
+ schema:
159
+ type: array
160
+ items:
161
+ type: object
162
+ properties:
163
+ id:
164
+ type: string
165
+ format: uuid
166
+ description: Login log unique identifier
167
+ example: a24a6ea4-ce75-4665-a070-57453082c25
168
+ user_id:
169
+ type: string
170
+ format: uuid
171
+ description: User identifier
172
+ example: b35b7fb5-df86-5776-b181-68564193d36
173
+ ip_address:
174
+ type: string
175
+ description: IP address of the login
176
+ example: "192.168.1.100"
177
+ user_agent:
178
+ type: string
179
+ description: User agent string
180
+ example: "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
181
+ success:
182
+ type: boolean
183
+ description: Whether the login was successful
184
+ example: true
185
+ created_at:
186
+ type: string
187
+ format: date-time
188
+ description: Login timestamp
189
+ example: "2023-01-01T12:00:00Z"
102
190
  """
103
191
  args = self.get_args(["before", ("limit", 100)])
104
192
 
@@ -17,20 +17,30 @@ class AssetsCsvExport(Resource):
17
17
  @jwt_required()
18
18
  def get(self, project_id):
19
19
  """
20
- Export assets linked to a given project as csv.
20
+ Export assets csv
21
21
  ---
22
22
  tags:
23
23
  - Export
24
+ description: Export project assets as CSV file. Includes asset
25
+ information, task statuses, assignments, and metadata.
26
+ produces:
27
+ - text/csv
24
28
  parameters:
25
29
  - in: path
26
30
  name: project_id
27
- required: True
28
- type: string
29
- format: uuid
31
+ required: true
32
+ schema:
33
+ type: string
34
+ format: uuid
30
35
  example: a24a6ea4-ce75-4665-a070-57453082c25
31
36
  responses:
32
37
  200:
33
- description: Assets exported as csv
38
+ description: Assets exported as CSV successfully
39
+ content:
40
+ text/csv:
41
+ schema:
42
+ type: string
43
+ example: "Project,Type,Name,Description,Time Spent\nProject A,Character,Asset1,Description,10.50"
34
44
  """
35
45
  project = projects_service.get_project(project_id)
36
46
  self.check_permissions(project["id"])
@@ -20,13 +20,22 @@ class BaseCsvExport(Resource):
20
20
  @jwt_required()
21
21
  def get(self):
22
22
  """
23
- Export as csv.
23
+ Export csv
24
24
  ---
25
25
  tags:
26
- - Export
26
+ - Export
27
+ description: Export data as CSV file. Returns a CSV file with
28
+ formatted data based on the resource type.
29
+ produces:
30
+ - text/csv
27
31
  responses:
28
32
  200:
29
- description: Exported as csv
33
+ description: CSV file exported successfully
34
+ content:
35
+ text/csv:
36
+ schema:
37
+ type: string
38
+ example: "Header1,Header2\nValue1,Value2"
30
39
  """
31
40
  self.prepare_import()
32
41
  try:
@@ -16,20 +16,47 @@ class CastingCsvExport(Resource, ArgsMixin):
16
16
  @jwt_required()
17
17
  def get(self, project_id):
18
18
  """
19
- Export casting linked to a given project as csv.
19
+ Export casting csv
20
20
  ---
21
21
  tags:
22
22
  - Export
23
+ description: Export project casting links as CSV file. Includes
24
+ links between assets and shots, sequences, or episodes with
25
+ occurrence counts and labels.
26
+ produces:
27
+ - text/csv
23
28
  parameters:
24
29
  - in: path
25
30
  name: project_id
26
- required: True
27
- type: string
28
- format: uuid
31
+ required: true
32
+ schema:
33
+ type: string
34
+ format: uuid
29
35
  example: a24a6ea4-ce75-4665-a070-57453082c25
36
+ - in: query
37
+ name: episode_id
38
+ required: false
39
+ schema:
40
+ type: string
41
+ format: uuid
42
+ example: b24a6ea4-ce75-4665-a070-57453082c25
43
+ description: Episode ID to filter casting links
44
+ - in: query
45
+ name: is_shot_casting
46
+ required: false
47
+ schema:
48
+ type: boolean
49
+ default: false
50
+ example: false
51
+ description: Whether to export shot casting only
30
52
  responses:
31
53
  200:
32
- description: Casting exported as csv
54
+ description: Casting exported as CSV successfully
55
+ content:
56
+ text/csv:
57
+ schema:
58
+ type: string
59
+ example: "Parent,Name,Asset Type,Asset,Occurences,Label\nSequence1,SH010,Character,Asset1,1,fixed"
33
60
  """
34
61
  project = projects_service.get_project(project_id) # Check existence
35
62
  self.check_permissions(project_id)
@@ -16,20 +16,30 @@ class EditsCsvExport(Resource):
16
16
  @jwt_required()
17
17
  def get(self, project_id):
18
18
  """
19
- Export edits linked to a given project as csv.
19
+ Export edits csv
20
20
  ---
21
21
  tags:
22
22
  - Export
23
+ description: Export project edits as CSV file. Includes edit
24
+ information, task statuses, assignments, and metadata.
25
+ produces:
26
+ - text/csv
23
27
  parameters:
24
28
  - in: path
25
29
  name: project_id
26
- required: True
27
- type: string
28
- format: uuid
30
+ required: true
31
+ schema:
32
+ type: string
33
+ format: uuid
29
34
  example: a24a6ea4-ce75-4665-a070-57453082c25
30
35
  responses:
31
36
  200:
32
- description: Edits exported as csv
37
+ description: Edits exported as CSV successfully
38
+ content:
39
+ text/csv:
40
+ schema:
41
+ type: string
42
+ example: "Project,Episode,Name,Description,Time Spent\nProject A,EP01,Edit_001,Description,8.75"
33
43
  """
34
44
  self.task_type_map = tasks_service.get_task_type_map()
35
45
  self.task_status_map = tasks_service.get_task_status_map()
@@ -1,4 +1,5 @@
1
1
  from zou.app.blueprints.export.csv.base import BaseCsvExport
2
+ from flask_jwt_extended import jwt_required
2
3
 
3
4
  from zou.app.models.person import Person
4
5
 
@@ -8,6 +9,29 @@ class PersonsCsvExport(BaseCsvExport):
8
9
  BaseCsvExport.__init__(self)
9
10
  self.file_name = "people_export"
10
11
 
12
+ @jwt_required()
13
+ def get(self):
14
+ """
15
+ Export persons csv
16
+ ---
17
+ tags:
18
+ - Export
19
+ description: Export persons as CSV file. Includes person information
20
+ with last name, first name, email, phone, role, contract type,
21
+ and active status. Excludes bot accounts.
22
+ produces:
23
+ - text/csv
24
+ responses:
25
+ 200:
26
+ description: Persons exported as CSV successfully
27
+ content:
28
+ text/csv:
29
+ schema:
30
+ type: string
31
+ example: "Last Name,First Name,Email,Phone,Role,Contract Type,Active\nDoe,John,john.doe@example.com,+1234567890,user,freelance,yes"
32
+ """
33
+ return super().get()
34
+
11
35
  def build_headers(self):
12
36
  return [
13
37
  "Last Name",
@@ -22,20 +22,31 @@ class PlaylistCsvExport(Resource):
22
22
  @jwt_required()
23
23
  def get(self, playlist_id):
24
24
  """
25
- Export a given playlist as csv.
25
+ Export playlist csv
26
26
  ---
27
27
  tags:
28
28
  - Export
29
+ description: Export playlist as CSV file. Includes playlist shots
30
+ with preview information, task statuses, comments, and revision
31
+ details.
32
+ produces:
33
+ - text/csv
29
34
  parameters:
30
35
  - in: path
31
36
  name: playlist_id
32
- required: True
33
- type: string
34
- format: uuid
37
+ required: true
38
+ schema:
39
+ type: string
40
+ format: uuid
35
41
  example: a24a6ea4-ce75-4665-a070-57453082c25
36
42
  responses:
37
43
  200:
38
- description: Playlist exported as csv
44
+ description: Playlist exported as CSV successfully
45
+ content:
46
+ text/csv:
47
+ schema:
48
+ type: string
49
+ example: "Entity name,Nb Frames,Task Type,Retake count,Revision,Task Status,Last comment author,Last comment date,Last comment\nSH010,120,Animation,2,10,WIP,John Doe,2024-01-15,Good work"
39
50
  """
40
51
  user_service.block_access_to_vendor()
41
52
  playlist = playlists_service.get_playlist(playlist_id)