zou 0.20.83__py3-none-any.whl → 0.20.85__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 (103) hide show
  1. zou/__init__.py +1 -1
  2. zou/app/blueprints/comments/resources.py +32 -35
  3. zou/app/blueprints/concepts/resources.py +23 -8
  4. zou/app/blueprints/crud/asset_instance.py +272 -0
  5. zou/app/blueprints/crud/attachment_file.py +263 -0
  6. zou/app/blueprints/crud/base.py +176 -69
  7. zou/app/blueprints/crud/budget.py +278 -0
  8. zou/app/blueprints/crud/budget_entry.py +269 -0
  9. zou/app/blueprints/crud/chat.py +282 -0
  10. zou/app/blueprints/crud/chat_message.py +286 -0
  11. zou/app/blueprints/crud/comments.py +312 -1
  12. zou/app/blueprints/crud/custom_action.py +268 -0
  13. zou/app/blueprints/crud/day_off.py +298 -0
  14. zou/app/blueprints/crud/department.py +268 -0
  15. zou/app/blueprints/crud/entity.py +297 -3
  16. zou/app/blueprints/crud/entity_link.py +303 -0
  17. zou/app/blueprints/crud/entity_type.py +269 -0
  18. zou/app/blueprints/crud/event.py +197 -0
  19. zou/app/blueprints/crud/file_status.py +268 -0
  20. zou/app/blueprints/crud/hardware_item.py +268 -0
  21. zou/app/blueprints/crud/metadata_descriptor.py +312 -0
  22. zou/app/blueprints/crud/milestone.py +302 -1
  23. zou/app/blueprints/crud/news.py +285 -0
  24. zou/app/blueprints/crud/notification.py +287 -0
  25. zou/app/blueprints/crud/organisation.py +269 -0
  26. zou/app/blueprints/crud/output_file.py +34 -10
  27. zou/app/blueprints/crud/output_type.py +30 -10
  28. zou/app/blueprints/crud/person.py +407 -2
  29. zou/app/blueprints/crud/playlist.py +322 -4
  30. zou/app/blueprints/crud/plugin.py +269 -0
  31. zou/app/blueprints/crud/preview_background_file.py +272 -0
  32. zou/app/blueprints/crud/preview_file.py +280 -9
  33. zou/app/blueprints/crud/production_schedule_version.py +569 -0
  34. zou/app/blueprints/crud/project.py +440 -0
  35. zou/app/blueprints/crud/project_status.py +268 -0
  36. zou/app/blueprints/crud/salary_scale.py +185 -5
  37. zou/app/blueprints/crud/schedule_item.py +305 -0
  38. zou/app/blueprints/crud/search_filter.py +302 -0
  39. zou/app/blueprints/crud/search_filter_group.py +270 -0
  40. zou/app/blueprints/crud/software.py +30 -10
  41. zou/app/blueprints/crud/status_automation.py +296 -2
  42. zou/app/blueprints/crud/studio.py +268 -0
  43. zou/app/blueprints/crud/subscription.py +279 -0
  44. zou/app/blueprints/crud/task.py +325 -5
  45. zou/app/blueprints/crud/task_status.py +301 -0
  46. zou/app/blueprints/crud/task_type.py +283 -0
  47. zou/app/blueprints/crud/time_spent.py +327 -0
  48. zou/app/blueprints/crud/working_file.py +273 -10
  49. zou/app/blueprints/export/csv/assets.py +15 -5
  50. zou/app/blueprints/export/csv/base.py +12 -3
  51. zou/app/blueprints/export/csv/casting.py +32 -5
  52. zou/app/blueprints/export/csv/edits.py +15 -5
  53. zou/app/blueprints/export/csv/persons.py +24 -0
  54. zou/app/blueprints/export/csv/playlists.py +16 -5
  55. zou/app/blueprints/export/csv/projects.py +23 -0
  56. zou/app/blueprints/export/csv/shots.py +15 -5
  57. zou/app/blueprints/export/csv/task_types.py +23 -0
  58. zou/app/blueprints/export/csv/tasks.py +24 -0
  59. zou/app/blueprints/export/csv/time_spents.py +24 -0
  60. zou/app/blueprints/files/resources.py +928 -377
  61. zou/app/blueprints/news/resources.py +7 -5
  62. zou/app/blueprints/persons/resources.py +644 -271
  63. zou/app/blueprints/playlists/resources.py +154 -72
  64. zou/app/blueprints/previews/resources.py +473 -228
  65. zou/app/blueprints/projects/__init__.py +5 -0
  66. zou/app/blueprints/projects/resources.py +987 -420
  67. zou/app/blueprints/search/resources.py +44 -32
  68. zou/app/blueprints/shots/resources.py +1338 -88
  69. zou/app/blueprints/source/csv/assets.py +44 -6
  70. zou/app/blueprints/source/csv/casting.py +43 -6
  71. zou/app/blueprints/source/csv/edits.py +47 -9
  72. zou/app/blueprints/source/csv/persons.py +43 -4
  73. zou/app/blueprints/source/csv/shots.py +47 -6
  74. zou/app/blueprints/source/csv/task_type_estimations.py +95 -35
  75. zou/app/blueprints/source/kitsu.py +433 -11
  76. zou/app/blueprints/source/otio.py +215 -20
  77. zou/app/blueprints/source/shotgun/assets.py +146 -0
  78. zou/app/blueprints/source/shotgun/base.py +85 -14
  79. zou/app/blueprints/source/shotgun/episode.py +124 -0
  80. zou/app/blueprints/source/shotgun/import_errors.py +105 -14
  81. zou/app/blueprints/source/shotgun/notes.py +132 -0
  82. zou/app/blueprints/source/shotgun/person.py +163 -0
  83. zou/app/blueprints/source/shotgun/project.py +120 -0
  84. zou/app/blueprints/source/shotgun/scene.py +120 -0
  85. zou/app/blueprints/source/shotgun/sequence.py +134 -0
  86. zou/app/blueprints/source/shotgun/shot.py +166 -0
  87. zou/app/blueprints/source/shotgun/status.py +129 -0
  88. zou/app/blueprints/source/shotgun/steps.py +138 -0
  89. zou/app/blueprints/source/shotgun/tasks.py +199 -0
  90. zou/app/blueprints/source/shotgun/team.py +132 -0
  91. zou/app/blueprints/source/shotgun/versions.py +155 -0
  92. zou/app/blueprints/tasks/resources.py +1197 -308
  93. zou/app/models/metadata_descriptor.py +1 -0
  94. zou/app/services/persons_service.py +1 -1
  95. zou/app/services/projects_service.py +45 -1
  96. zou/app/services/time_spents_service.py +1 -1
  97. zou/migrations/versions/a1b2c3d4e5f6_add_position_to_metadata_descriptor.py +32 -0
  98. {zou-0.20.83.dist-info → zou-0.20.85.dist-info}/METADATA +18 -18
  99. {zou-0.20.83.dist-info → zou-0.20.85.dist-info}/RECORD +103 -102
  100. {zou-0.20.83.dist-info → zou-0.20.85.dist-info}/WHEEL +0 -0
  101. {zou-0.20.83.dist-info → zou-0.20.85.dist-info}/entry_points.txt +0 -0
  102. {zou-0.20.83.dist-info → zou-0.20.85.dist-info}/licenses/LICENSE +0 -0
  103. {zou-0.20.83.dist-info → zou-0.20.85.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(milestone["project_id"])
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
+ )