zou 0.20.83__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.
- zou/__init__.py +1 -1
- zou/app/blueprints/comments/resources.py +32 -35
- zou/app/blueprints/concepts/resources.py +23 -8
- zou/app/blueprints/crud/asset_instance.py +272 -0
- zou/app/blueprints/crud/attachment_file.py +263 -0
- zou/app/blueprints/crud/base.py +176 -69
- zou/app/blueprints/crud/budget.py +278 -0
- zou/app/blueprints/crud/budget_entry.py +269 -0
- zou/app/blueprints/crud/chat.py +282 -0
- zou/app/blueprints/crud/chat_message.py +286 -0
- zou/app/blueprints/crud/comments.py +312 -1
- zou/app/blueprints/crud/custom_action.py +268 -0
- zou/app/blueprints/crud/day_off.py +298 -0
- zou/app/blueprints/crud/department.py +268 -0
- zou/app/blueprints/crud/entity.py +297 -3
- zou/app/blueprints/crud/entity_link.py +303 -0
- zou/app/blueprints/crud/entity_type.py +269 -0
- zou/app/blueprints/crud/event.py +197 -0
- zou/app/blueprints/crud/file_status.py +268 -0
- zou/app/blueprints/crud/hardware_item.py +268 -0
- zou/app/blueprints/crud/metadata_descriptor.py +312 -0
- zou/app/blueprints/crud/milestone.py +302 -1
- zou/app/blueprints/crud/news.py +285 -0
- zou/app/blueprints/crud/notification.py +287 -0
- zou/app/blueprints/crud/organisation.py +269 -0
- zou/app/blueprints/crud/output_file.py +34 -10
- zou/app/blueprints/crud/output_type.py +30 -10
- zou/app/blueprints/crud/person.py +407 -2
- zou/app/blueprints/crud/playlist.py +322 -4
- zou/app/blueprints/crud/plugin.py +269 -0
- zou/app/blueprints/crud/preview_background_file.py +272 -0
- zou/app/blueprints/crud/preview_file.py +280 -9
- zou/app/blueprints/crud/production_schedule_version.py +569 -0
- zou/app/blueprints/crud/project.py +440 -0
- zou/app/blueprints/crud/project_status.py +268 -0
- zou/app/blueprints/crud/salary_scale.py +185 -5
- zou/app/blueprints/crud/schedule_item.py +305 -0
- zou/app/blueprints/crud/search_filter.py +302 -0
- zou/app/blueprints/crud/search_filter_group.py +270 -0
- zou/app/blueprints/crud/software.py +30 -10
- zou/app/blueprints/crud/status_automation.py +296 -2
- zou/app/blueprints/crud/studio.py +268 -0
- zou/app/blueprints/crud/subscription.py +279 -0
- zou/app/blueprints/crud/task.py +325 -5
- zou/app/blueprints/crud/task_status.py +301 -0
- zou/app/blueprints/crud/task_type.py +283 -0
- zou/app/blueprints/crud/time_spent.py +327 -0
- zou/app/blueprints/crud/working_file.py +273 -10
- zou/app/blueprints/export/csv/assets.py +15 -5
- zou/app/blueprints/export/csv/base.py +12 -3
- zou/app/blueprints/export/csv/casting.py +32 -5
- zou/app/blueprints/export/csv/edits.py +15 -5
- zou/app/blueprints/export/csv/persons.py +24 -0
- zou/app/blueprints/export/csv/playlists.py +16 -5
- zou/app/blueprints/export/csv/projects.py +23 -0
- zou/app/blueprints/export/csv/shots.py +15 -5
- zou/app/blueprints/export/csv/task_types.py +23 -0
- zou/app/blueprints/export/csv/tasks.py +24 -0
- zou/app/blueprints/export/csv/time_spents.py +24 -0
- zou/app/blueprints/files/resources.py +928 -377
- zou/app/blueprints/news/resources.py +7 -5
- zou/app/blueprints/persons/resources.py +644 -271
- zou/app/blueprints/playlists/resources.py +154 -72
- zou/app/blueprints/previews/resources.py +473 -228
- zou/app/blueprints/projects/__init__.py +5 -0
- zou/app/blueprints/projects/resources.py +987 -420
- zou/app/blueprints/search/resources.py +44 -32
- zou/app/blueprints/shots/resources.py +1338 -88
- zou/app/blueprints/source/csv/assets.py +44 -6
- zou/app/blueprints/source/csv/casting.py +43 -6
- zou/app/blueprints/source/csv/edits.py +47 -9
- zou/app/blueprints/source/csv/persons.py +43 -4
- zou/app/blueprints/source/csv/shots.py +47 -6
- zou/app/blueprints/source/csv/task_type_estimations.py +95 -35
- zou/app/blueprints/source/kitsu.py +433 -11
- zou/app/blueprints/source/otio.py +215 -20
- zou/app/blueprints/source/shotgun/assets.py +146 -0
- zou/app/blueprints/source/shotgun/base.py +85 -14
- zou/app/blueprints/source/shotgun/episode.py +124 -0
- zou/app/blueprints/source/shotgun/import_errors.py +105 -14
- zou/app/blueprints/source/shotgun/notes.py +132 -0
- zou/app/blueprints/source/shotgun/person.py +163 -0
- zou/app/blueprints/source/shotgun/project.py +120 -0
- zou/app/blueprints/source/shotgun/scene.py +120 -0
- zou/app/blueprints/source/shotgun/sequence.py +134 -0
- zou/app/blueprints/source/shotgun/shot.py +166 -0
- zou/app/blueprints/source/shotgun/status.py +129 -0
- zou/app/blueprints/source/shotgun/steps.py +138 -0
- zou/app/blueprints/source/shotgun/tasks.py +199 -0
- zou/app/blueprints/source/shotgun/team.py +132 -0
- zou/app/blueprints/source/shotgun/versions.py +155 -0
- zou/app/blueprints/tasks/resources.py +1197 -308
- zou/app/models/metadata_descriptor.py +1 -0
- zou/app/services/persons_service.py +1 -1
- zou/app/services/projects_service.py +45 -1
- zou/app/services/time_spents_service.py +1 -1
- zou/migrations/versions/a1b2c3d4e5f6_add_position_to_metadata_descriptor.py +32 -0
- {zou-0.20.83.dist-info → zou-0.20.84.dist-info}/METADATA +18 -18
- {zou-0.20.83.dist-info → zou-0.20.84.dist-info}/RECORD +103 -102
- {zou-0.20.83.dist-info → zou-0.20.84.dist-info}/WHEEL +0 -0
- {zou-0.20.83.dist-info → zou-0.20.84.dist-info}/entry_points.txt +0 -0
- {zou-0.20.83.dist-info → zou-0.20.84.dist-info}/licenses/LICENSE +0 -0
- {zou-0.20.83.dist-info → zou-0.20.84.dist-info}/top_level.txt +0 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from flask_jwt_extended import jwt_required
|
|
2
|
+
|
|
1
3
|
from zou.app.models.metadata_descriptor import (
|
|
2
4
|
MetadataDescriptor,
|
|
3
5
|
METADATA_DESCRIPTOR_TYPES,
|
|
@@ -20,6 +22,157 @@ class MetadataDescriptorsResource(BaseModelsResource):
|
|
|
20
22
|
def check_read_permissions(self, options=None):
|
|
21
23
|
return not permissions.has_vendor_permissions()
|
|
22
24
|
|
|
25
|
+
@jwt_required()
|
|
26
|
+
def get(self):
|
|
27
|
+
"""
|
|
28
|
+
Get metadata descriptors
|
|
29
|
+
---
|
|
30
|
+
tags:
|
|
31
|
+
- Crud
|
|
32
|
+
description: Retrieve all metadata descriptors. Supports filtering
|
|
33
|
+
via query parameters and pagination. Vendor access is blocked.
|
|
34
|
+
Includes project permission filtering for non-admin users.
|
|
35
|
+
parameters:
|
|
36
|
+
- in: query
|
|
37
|
+
name: page
|
|
38
|
+
required: false
|
|
39
|
+
schema:
|
|
40
|
+
type: integer
|
|
41
|
+
example: 1
|
|
42
|
+
description: Page number for pagination
|
|
43
|
+
- in: query
|
|
44
|
+
name: limit
|
|
45
|
+
required: false
|
|
46
|
+
schema:
|
|
47
|
+
type: integer
|
|
48
|
+
example: 50
|
|
49
|
+
description: Number of results per page
|
|
50
|
+
- in: query
|
|
51
|
+
name: relations
|
|
52
|
+
required: false
|
|
53
|
+
schema:
|
|
54
|
+
type: boolean
|
|
55
|
+
default: true
|
|
56
|
+
example: true
|
|
57
|
+
description: Whether to include relations
|
|
58
|
+
responses:
|
|
59
|
+
200:
|
|
60
|
+
description: Metadata descriptors retrieved successfully
|
|
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
|
+
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
72
|
+
name:
|
|
73
|
+
type: string
|
|
74
|
+
example: Custom Field
|
|
75
|
+
field_name:
|
|
76
|
+
type: string
|
|
77
|
+
example: custom_field
|
|
78
|
+
data_type:
|
|
79
|
+
type: string
|
|
80
|
+
example: text
|
|
81
|
+
project_id:
|
|
82
|
+
type: string
|
|
83
|
+
format: uuid
|
|
84
|
+
example: b24a6ea4-ce75-4665-a070-57453082c25
|
|
85
|
+
created_at:
|
|
86
|
+
type: string
|
|
87
|
+
format: date-time
|
|
88
|
+
example: "2024-01-15T10:30:00Z"
|
|
89
|
+
updated_at:
|
|
90
|
+
type: string
|
|
91
|
+
format: date-time
|
|
92
|
+
example: "2024-01-15T10:30:00Z"
|
|
93
|
+
400:
|
|
94
|
+
description: Invalid filter format or query error
|
|
95
|
+
"""
|
|
96
|
+
return super().get()
|
|
97
|
+
|
|
98
|
+
@jwt_required()
|
|
99
|
+
def post(self):
|
|
100
|
+
"""
|
|
101
|
+
Create metadata descriptor
|
|
102
|
+
---
|
|
103
|
+
tags:
|
|
104
|
+
- Crud
|
|
105
|
+
description: Create a new metadata descriptor with data provided in
|
|
106
|
+
the request body. JSON format is expected. Validates data_type.
|
|
107
|
+
requestBody:
|
|
108
|
+
required: true
|
|
109
|
+
content:
|
|
110
|
+
application/json:
|
|
111
|
+
schema:
|
|
112
|
+
type: object
|
|
113
|
+
required:
|
|
114
|
+
- name
|
|
115
|
+
- field_name
|
|
116
|
+
- data_type
|
|
117
|
+
- project_id
|
|
118
|
+
properties:
|
|
119
|
+
name:
|
|
120
|
+
type: string
|
|
121
|
+
example: Custom Field
|
|
122
|
+
field_name:
|
|
123
|
+
type: string
|
|
124
|
+
example: custom_field
|
|
125
|
+
data_type:
|
|
126
|
+
type: string
|
|
127
|
+
example: text
|
|
128
|
+
project_id:
|
|
129
|
+
type: string
|
|
130
|
+
format: uuid
|
|
131
|
+
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
132
|
+
entity_type:
|
|
133
|
+
type: string
|
|
134
|
+
example: Asset
|
|
135
|
+
responses:
|
|
136
|
+
201:
|
|
137
|
+
description: Metadata descriptor created successfully
|
|
138
|
+
content:
|
|
139
|
+
application/json:
|
|
140
|
+
schema:
|
|
141
|
+
type: object
|
|
142
|
+
properties:
|
|
143
|
+
id:
|
|
144
|
+
type: string
|
|
145
|
+
format: uuid
|
|
146
|
+
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
147
|
+
name:
|
|
148
|
+
type: string
|
|
149
|
+
example: Custom Field
|
|
150
|
+
field_name:
|
|
151
|
+
type: string
|
|
152
|
+
example: custom_field
|
|
153
|
+
data_type:
|
|
154
|
+
type: string
|
|
155
|
+
example: text
|
|
156
|
+
project_id:
|
|
157
|
+
type: string
|
|
158
|
+
format: uuid
|
|
159
|
+
example: b24a6ea4-ce75-4665-a070-57453082c25
|
|
160
|
+
entity_type:
|
|
161
|
+
type: string
|
|
162
|
+
example: Asset
|
|
163
|
+
created_at:
|
|
164
|
+
type: string
|
|
165
|
+
format: date-time
|
|
166
|
+
example: "2024-01-15T10:30:00Z"
|
|
167
|
+
updated_at:
|
|
168
|
+
type: string
|
|
169
|
+
format: date-time
|
|
170
|
+
example: "2024-01-15T10:30:00Z"
|
|
171
|
+
400:
|
|
172
|
+
description: Invalid data format or invalid data_type
|
|
173
|
+
"""
|
|
174
|
+
return super().post()
|
|
175
|
+
|
|
23
176
|
def add_project_permission_filter(self, query):
|
|
24
177
|
if not permissions.has_admin_permissions():
|
|
25
178
|
query = query.join(Project).filter(
|
|
@@ -52,6 +205,165 @@ class MetadataDescriptorResource(BaseModelResource):
|
|
|
52
205
|
def __init__(self):
|
|
53
206
|
BaseModelResource.__init__(self, MetadataDescriptor)
|
|
54
207
|
|
|
208
|
+
@jwt_required()
|
|
209
|
+
def get(self, instance_id):
|
|
210
|
+
"""
|
|
211
|
+
Get metadata descriptor
|
|
212
|
+
---
|
|
213
|
+
tags:
|
|
214
|
+
- Crud
|
|
215
|
+
description: Retrieve a metadata descriptor by its ID and return
|
|
216
|
+
it as a JSON object. Supports including relations.
|
|
217
|
+
parameters:
|
|
218
|
+
- in: path
|
|
219
|
+
name: instance_id
|
|
220
|
+
required: true
|
|
221
|
+
schema:
|
|
222
|
+
type: string
|
|
223
|
+
format: uuid
|
|
224
|
+
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
225
|
+
- in: query
|
|
226
|
+
name: relations
|
|
227
|
+
required: false
|
|
228
|
+
schema:
|
|
229
|
+
type: boolean
|
|
230
|
+
default: true
|
|
231
|
+
example: true
|
|
232
|
+
description: Whether to include relations
|
|
233
|
+
responses:
|
|
234
|
+
200:
|
|
235
|
+
description: Metadata descriptor retrieved successfully
|
|
236
|
+
content:
|
|
237
|
+
application/json:
|
|
238
|
+
schema:
|
|
239
|
+
type: object
|
|
240
|
+
properties:
|
|
241
|
+
id:
|
|
242
|
+
type: string
|
|
243
|
+
format: uuid
|
|
244
|
+
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
245
|
+
name:
|
|
246
|
+
type: string
|
|
247
|
+
example: Custom Field
|
|
248
|
+
field_name:
|
|
249
|
+
type: string
|
|
250
|
+
example: custom_field
|
|
251
|
+
data_type:
|
|
252
|
+
type: string
|
|
253
|
+
example: text
|
|
254
|
+
project_id:
|
|
255
|
+
type: string
|
|
256
|
+
format: uuid
|
|
257
|
+
example: b24a6ea4-ce75-4665-a070-57453082c25
|
|
258
|
+
entity_type:
|
|
259
|
+
type: string
|
|
260
|
+
example: Asset
|
|
261
|
+
created_at:
|
|
262
|
+
type: string
|
|
263
|
+
format: date-time
|
|
264
|
+
example: "2024-01-15T10:30:00Z"
|
|
265
|
+
updated_at:
|
|
266
|
+
type: string
|
|
267
|
+
format: date-time
|
|
268
|
+
example: "2024-01-15T10:30:00Z"
|
|
269
|
+
400:
|
|
270
|
+
description: Invalid ID format or query error
|
|
271
|
+
"""
|
|
272
|
+
return super().get(instance_id)
|
|
273
|
+
|
|
274
|
+
@jwt_required()
|
|
275
|
+
def put(self, instance_id):
|
|
276
|
+
"""
|
|
277
|
+
Update metadata descriptor
|
|
278
|
+
---
|
|
279
|
+
tags:
|
|
280
|
+
- Crud
|
|
281
|
+
description: Update a metadata descriptor with data provided in the
|
|
282
|
+
request body. JSON format is expected. Validates data_type.
|
|
283
|
+
parameters:
|
|
284
|
+
- in: path
|
|
285
|
+
name: instance_id
|
|
286
|
+
required: true
|
|
287
|
+
schema:
|
|
288
|
+
type: string
|
|
289
|
+
format: uuid
|
|
290
|
+
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
291
|
+
requestBody:
|
|
292
|
+
required: true
|
|
293
|
+
content:
|
|
294
|
+
application/json:
|
|
295
|
+
schema:
|
|
296
|
+
type: object
|
|
297
|
+
properties:
|
|
298
|
+
name:
|
|
299
|
+
type: string
|
|
300
|
+
example: Updated Custom Field
|
|
301
|
+
data_type:
|
|
302
|
+
type: string
|
|
303
|
+
example: number
|
|
304
|
+
responses:
|
|
305
|
+
200:
|
|
306
|
+
description: Metadata descriptor updated successfully
|
|
307
|
+
content:
|
|
308
|
+
application/json:
|
|
309
|
+
schema:
|
|
310
|
+
type: object
|
|
311
|
+
properties:
|
|
312
|
+
id:
|
|
313
|
+
type: string
|
|
314
|
+
format: uuid
|
|
315
|
+
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
316
|
+
name:
|
|
317
|
+
type: string
|
|
318
|
+
example: Updated Custom Field
|
|
319
|
+
field_name:
|
|
320
|
+
type: string
|
|
321
|
+
example: custom_field
|
|
322
|
+
data_type:
|
|
323
|
+
type: string
|
|
324
|
+
example: number
|
|
325
|
+
project_id:
|
|
326
|
+
type: string
|
|
327
|
+
format: uuid
|
|
328
|
+
example: b24a6ea4-ce75-4665-a070-57453082c25
|
|
329
|
+
created_at:
|
|
330
|
+
type: string
|
|
331
|
+
format: date-time
|
|
332
|
+
example: "2024-01-15T10:30:00Z"
|
|
333
|
+
updated_at:
|
|
334
|
+
type: string
|
|
335
|
+
format: date-time
|
|
336
|
+
example: "2024-01-15T11:00:00Z"
|
|
337
|
+
400:
|
|
338
|
+
description: Invalid data format or invalid data_type
|
|
339
|
+
"""
|
|
340
|
+
return super().put(instance_id)
|
|
341
|
+
|
|
342
|
+
@jwt_required()
|
|
343
|
+
def delete(self, instance_id):
|
|
344
|
+
"""
|
|
345
|
+
Delete metadata descriptor
|
|
346
|
+
---
|
|
347
|
+
tags:
|
|
348
|
+
- Crud
|
|
349
|
+
description: Delete a metadata descriptor by its ID. Returns empty
|
|
350
|
+
response on success.
|
|
351
|
+
parameters:
|
|
352
|
+
- in: path
|
|
353
|
+
name: instance_id
|
|
354
|
+
required: true
|
|
355
|
+
schema:
|
|
356
|
+
type: string
|
|
357
|
+
format: uuid
|
|
358
|
+
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
359
|
+
responses:
|
|
360
|
+
204:
|
|
361
|
+
description: Metadata descriptor deleted successfully
|
|
362
|
+
400:
|
|
363
|
+
description: Integrity error or cannot delete
|
|
364
|
+
"""
|
|
365
|
+
return super().delete(instance_id)
|
|
366
|
+
|
|
55
367
|
def update_data(self, data, instance_id):
|
|
56
368
|
"""
|
|
57
369
|
Check if the data descriptor has a valid data_type and valid
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from flask_jwt_extended import jwt_required
|
|
2
|
+
|
|
1
3
|
from zou.app.models.milestone import Milestone
|
|
2
4
|
from zou.app.services import user_service
|
|
3
5
|
|
|
@@ -11,6 +13,143 @@ class MilestonesResource(BaseModelsResource):
|
|
|
11
13
|
def check_create_permissions(self, milestone):
|
|
12
14
|
user_service.check_manager_project_access(milestone["project_id"])
|
|
13
15
|
|
|
16
|
+
@jwt_required()
|
|
17
|
+
def get(self):
|
|
18
|
+
"""
|
|
19
|
+
Get milestones
|
|
20
|
+
---
|
|
21
|
+
tags:
|
|
22
|
+
- Crud
|
|
23
|
+
description: Retrieve all milestones. Supports filtering via query
|
|
24
|
+
parameters and pagination.
|
|
25
|
+
parameters:
|
|
26
|
+
- in: query
|
|
27
|
+
name: page
|
|
28
|
+
required: false
|
|
29
|
+
schema:
|
|
30
|
+
type: integer
|
|
31
|
+
example: 1
|
|
32
|
+
description: Page number for pagination
|
|
33
|
+
- in: query
|
|
34
|
+
name: limit
|
|
35
|
+
required: false
|
|
36
|
+
schema:
|
|
37
|
+
type: integer
|
|
38
|
+
example: 50
|
|
39
|
+
description: Number of results per page
|
|
40
|
+
- in: query
|
|
41
|
+
name: relations
|
|
42
|
+
required: false
|
|
43
|
+
schema:
|
|
44
|
+
type: boolean
|
|
45
|
+
default: false
|
|
46
|
+
example: false
|
|
47
|
+
description: Whether to include relations
|
|
48
|
+
responses:
|
|
49
|
+
200:
|
|
50
|
+
description: Milestones retrieved successfully
|
|
51
|
+
content:
|
|
52
|
+
application/json:
|
|
53
|
+
schema:
|
|
54
|
+
oneOf:
|
|
55
|
+
- type: array
|
|
56
|
+
items:
|
|
57
|
+
type: object
|
|
58
|
+
- type: object
|
|
59
|
+
properties:
|
|
60
|
+
data:
|
|
61
|
+
type: array
|
|
62
|
+
items:
|
|
63
|
+
type: object
|
|
64
|
+
example: []
|
|
65
|
+
total:
|
|
66
|
+
type: integer
|
|
67
|
+
example: 100
|
|
68
|
+
nb_pages:
|
|
69
|
+
type: integer
|
|
70
|
+
example: 2
|
|
71
|
+
limit:
|
|
72
|
+
type: integer
|
|
73
|
+
example: 50
|
|
74
|
+
offset:
|
|
75
|
+
type: integer
|
|
76
|
+
example: 0
|
|
77
|
+
page:
|
|
78
|
+
type: integer
|
|
79
|
+
example: 1
|
|
80
|
+
400:
|
|
81
|
+
description: Invalid filter format or query error
|
|
82
|
+
"""
|
|
83
|
+
return super().get()
|
|
84
|
+
|
|
85
|
+
@jwt_required()
|
|
86
|
+
def post(self):
|
|
87
|
+
"""
|
|
88
|
+
Create milestone
|
|
89
|
+
---
|
|
90
|
+
tags:
|
|
91
|
+
- Crud
|
|
92
|
+
description: Create a new milestone with data provided in the
|
|
93
|
+
request body. JSON format is expected. Requires manager access
|
|
94
|
+
to the project.
|
|
95
|
+
requestBody:
|
|
96
|
+
required: true
|
|
97
|
+
content:
|
|
98
|
+
application/json:
|
|
99
|
+
schema:
|
|
100
|
+
type: object
|
|
101
|
+
required:
|
|
102
|
+
- name
|
|
103
|
+
- project_id
|
|
104
|
+
- date
|
|
105
|
+
properties:
|
|
106
|
+
name:
|
|
107
|
+
type: string
|
|
108
|
+
example: Milestone Name
|
|
109
|
+
project_id:
|
|
110
|
+
type: string
|
|
111
|
+
format: uuid
|
|
112
|
+
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
113
|
+
date:
|
|
114
|
+
type: string
|
|
115
|
+
format: date
|
|
116
|
+
example: "2024-03-31"
|
|
117
|
+
responses:
|
|
118
|
+
201:
|
|
119
|
+
description: Milestone created successfully
|
|
120
|
+
content:
|
|
121
|
+
application/json:
|
|
122
|
+
schema:
|
|
123
|
+
type: object
|
|
124
|
+
properties:
|
|
125
|
+
id:
|
|
126
|
+
type: string
|
|
127
|
+
format: uuid
|
|
128
|
+
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
129
|
+
name:
|
|
130
|
+
type: string
|
|
131
|
+
example: Milestone Name
|
|
132
|
+
project_id:
|
|
133
|
+
type: string
|
|
134
|
+
format: uuid
|
|
135
|
+
example: b24a6ea4-ce75-4665-a070-57453082c25
|
|
136
|
+
date:
|
|
137
|
+
type: string
|
|
138
|
+
format: date
|
|
139
|
+
example: "2024-03-31"
|
|
140
|
+
created_at:
|
|
141
|
+
type: string
|
|
142
|
+
format: date-time
|
|
143
|
+
example: "2024-01-15T10:30:00Z"
|
|
144
|
+
updated_at:
|
|
145
|
+
type: string
|
|
146
|
+
format: date-time
|
|
147
|
+
example: "2024-01-15T10:30:00Z"
|
|
148
|
+
400:
|
|
149
|
+
description: Invalid data format or validation error
|
|
150
|
+
"""
|
|
151
|
+
return super().post()
|
|
152
|
+
|
|
14
153
|
|
|
15
154
|
class MilestoneResource(BaseModelResource):
|
|
16
155
|
def __init__(self):
|
|
@@ -20,5 +159,167 @@ class MilestoneResource(BaseModelResource):
|
|
|
20
159
|
user_service.check_project_access(milestone["project_id"])
|
|
21
160
|
user_service.block_access_to_vendor()
|
|
22
161
|
|
|
162
|
+
@jwt_required()
|
|
163
|
+
def get(self, instance_id):
|
|
164
|
+
"""
|
|
165
|
+
Get milestone
|
|
166
|
+
---
|
|
167
|
+
tags:
|
|
168
|
+
- Crud
|
|
169
|
+
description: Retrieve a milestone by its ID and return it as a
|
|
170
|
+
JSON object. Supports including relations. Vendor access is
|
|
171
|
+
blocked. Requires project access.
|
|
172
|
+
parameters:
|
|
173
|
+
- in: path
|
|
174
|
+
name: instance_id
|
|
175
|
+
required: true
|
|
176
|
+
schema:
|
|
177
|
+
type: string
|
|
178
|
+
format: uuid
|
|
179
|
+
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
180
|
+
- in: query
|
|
181
|
+
name: relations
|
|
182
|
+
required: false
|
|
183
|
+
schema:
|
|
184
|
+
type: boolean
|
|
185
|
+
default: true
|
|
186
|
+
example: true
|
|
187
|
+
description: Whether to include relations
|
|
188
|
+
responses:
|
|
189
|
+
200:
|
|
190
|
+
description: Milestone retrieved successfully
|
|
191
|
+
content:
|
|
192
|
+
application/json:
|
|
193
|
+
schema:
|
|
194
|
+
type: object
|
|
195
|
+
properties:
|
|
196
|
+
id:
|
|
197
|
+
type: string
|
|
198
|
+
format: uuid
|
|
199
|
+
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
200
|
+
name:
|
|
201
|
+
type: string
|
|
202
|
+
example: Milestone Name
|
|
203
|
+
project_id:
|
|
204
|
+
type: string
|
|
205
|
+
format: uuid
|
|
206
|
+
example: b24a6ea4-ce75-4665-a070-57453082c25
|
|
207
|
+
date:
|
|
208
|
+
type: string
|
|
209
|
+
format: date
|
|
210
|
+
example: "2024-03-31"
|
|
211
|
+
created_at:
|
|
212
|
+
type: string
|
|
213
|
+
format: date-time
|
|
214
|
+
example: "2024-01-15T10:30:00Z"
|
|
215
|
+
updated_at:
|
|
216
|
+
type: string
|
|
217
|
+
format: date-time
|
|
218
|
+
example: "2024-01-15T10:30:00Z"
|
|
219
|
+
400:
|
|
220
|
+
description: Invalid ID format or query error
|
|
221
|
+
"""
|
|
222
|
+
return super().get(instance_id)
|
|
223
|
+
|
|
224
|
+
@jwt_required()
|
|
225
|
+
def put(self, instance_id):
|
|
226
|
+
"""
|
|
227
|
+
Update milestone
|
|
228
|
+
---
|
|
229
|
+
tags:
|
|
230
|
+
- Crud
|
|
231
|
+
description: Update a milestone with data provided in the request
|
|
232
|
+
body. JSON format is expected. Requires manager access to the
|
|
233
|
+
project.
|
|
234
|
+
parameters:
|
|
235
|
+
- in: path
|
|
236
|
+
name: instance_id
|
|
237
|
+
required: true
|
|
238
|
+
schema:
|
|
239
|
+
type: string
|
|
240
|
+
format: uuid
|
|
241
|
+
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
242
|
+
requestBody:
|
|
243
|
+
required: true
|
|
244
|
+
content:
|
|
245
|
+
application/json:
|
|
246
|
+
schema:
|
|
247
|
+
type: object
|
|
248
|
+
properties:
|
|
249
|
+
name:
|
|
250
|
+
type: string
|
|
251
|
+
example: Updated Milestone Name
|
|
252
|
+
date:
|
|
253
|
+
type: string
|
|
254
|
+
format: date
|
|
255
|
+
example: "2024-04-30"
|
|
256
|
+
responses:
|
|
257
|
+
200:
|
|
258
|
+
description: Milestone updated successfully
|
|
259
|
+
content:
|
|
260
|
+
application/json:
|
|
261
|
+
schema:
|
|
262
|
+
type: object
|
|
263
|
+
properties:
|
|
264
|
+
id:
|
|
265
|
+
type: string
|
|
266
|
+
format: uuid
|
|
267
|
+
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
268
|
+
name:
|
|
269
|
+
type: string
|
|
270
|
+
example: Updated Milestone Name
|
|
271
|
+
project_id:
|
|
272
|
+
type: string
|
|
273
|
+
format: uuid
|
|
274
|
+
example: b24a6ea4-ce75-4665-a070-57453082c25
|
|
275
|
+
date:
|
|
276
|
+
type: string
|
|
277
|
+
format: date
|
|
278
|
+
example: "2024-04-30"
|
|
279
|
+
created_at:
|
|
280
|
+
type: string
|
|
281
|
+
format: date-time
|
|
282
|
+
example: "2024-01-15T10:30:00Z"
|
|
283
|
+
updated_at:
|
|
284
|
+
type: string
|
|
285
|
+
format: date-time
|
|
286
|
+
example: "2024-01-15T11:00:00Z"
|
|
287
|
+
400:
|
|
288
|
+
description: Invalid data format or validation error
|
|
289
|
+
"""
|
|
290
|
+
return super().put(instance_id)
|
|
291
|
+
|
|
292
|
+
@jwt_required()
|
|
293
|
+
def delete(self, instance_id):
|
|
294
|
+
"""
|
|
295
|
+
Delete milestone
|
|
296
|
+
---
|
|
297
|
+
tags:
|
|
298
|
+
- Crud
|
|
299
|
+
description: Delete a milestone by its ID. Returns empty response
|
|
300
|
+
on success.
|
|
301
|
+
parameters:
|
|
302
|
+
- in: path
|
|
303
|
+
name: instance_id
|
|
304
|
+
required: true
|
|
305
|
+
schema:
|
|
306
|
+
type: string
|
|
307
|
+
format: uuid
|
|
308
|
+
example: a24a6ea4-ce75-4665-a070-57453082c25
|
|
309
|
+
responses:
|
|
310
|
+
204:
|
|
311
|
+
description: Milestone deleted successfully
|
|
312
|
+
400:
|
|
313
|
+
description: Integrity error or cannot delete
|
|
314
|
+
"""
|
|
315
|
+
return super().delete(instance_id)
|
|
316
|
+
|
|
23
317
|
def check_update_permissions(self, milestone, data):
|
|
24
|
-
user_service.check_manager_project_access(
|
|
318
|
+
return user_service.check_manager_project_access(
|
|
319
|
+
milestone["project_id"]
|
|
320
|
+
)
|
|
321
|
+
|
|
322
|
+
def check_delete_permissions(self, milestone):
|
|
323
|
+
return user_service.check_manager_project_access(
|
|
324
|
+
milestone["project_id"]
|
|
325
|
+
)
|