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,4 +1,5 @@
1
1
  from flask import current_app
2
+ from flask_jwt_extended import jwt_required
2
3
 
3
4
  from zou.app.models.task_status import TaskStatus
4
5
  from zou.app.utils import colors
@@ -10,6 +11,88 @@ from zou.app.blueprints.source.shotgun.base import (
10
11
 
11
12
 
12
13
  class ImportShotgunStatusResource(BaseImportShotgunResource):
14
+ @jwt_required()
15
+ def post(self):
16
+ """
17
+ Import shotgun task statuses
18
+ ---
19
+ description: Import Shotgun task statuses. Send a list of Shotgun
20
+ status entries in the JSON body. Returns created or updated task
21
+ statuses with colors.
22
+ tags:
23
+ - Import
24
+ requestBody:
25
+ required: true
26
+ content:
27
+ application/json:
28
+ schema:
29
+ type: array
30
+ items:
31
+ type: object
32
+ properties:
33
+ id:
34
+ type: integer
35
+ description: Shotgun ID of the status
36
+ example: 12345
37
+ name:
38
+ type: string
39
+ description: Status name
40
+ example: "In Progress"
41
+ code:
42
+ type: string
43
+ description: Status short code
44
+ example: "IP"
45
+ bg_color:
46
+ type: string
47
+ description: Background color in RGB format
48
+ example: "255,128,0"
49
+ example:
50
+ - id: 12345
51
+ name: "In Progress"
52
+ code: "IP"
53
+ bg_color: "255,128,0"
54
+ responses:
55
+ 200:
56
+ description: Task statuses imported successfully
57
+ content:
58
+ application/json:
59
+ schema:
60
+ type: array
61
+ items:
62
+ type: object
63
+ properties:
64
+ id:
65
+ type: string
66
+ format: uuid
67
+ description: Task status unique identifier
68
+ example: a24a6ea4-ce75-4665-a070-57453082c25
69
+ name:
70
+ type: string
71
+ description: Status name
72
+ example: "In Progress"
73
+ short_name:
74
+ type: string
75
+ description: Status short code
76
+ example: "IP"
77
+ color:
78
+ type: string
79
+ description: Status color in hex format
80
+ example: "#FF8000"
81
+ created_at:
82
+ type: string
83
+ format: date-time
84
+ description: Creation timestamp
85
+ example: "2024-01-15T10:30:00Z"
86
+ updated_at:
87
+ type: string
88
+ format: date-time
89
+ description: Update timestamp
90
+ example: "2024-01-15T11:00:00Z"
91
+ 400:
92
+ description: Invalid request body or data format error
93
+ """
94
+ return super().post()
95
+
13
96
  def import_entry(self, data):
14
97
  task_status = self.get_existing_status(data)
15
98
  if task_status is None:
@@ -44,3 +127,49 @@ class ImportShotgunStatusResource(BaseImportShotgunResource):
44
127
  class ImportRemoveShotgunStatusResource(ImportRemoveShotgunBaseResource):
45
128
  def __init__(self):
46
129
  ImportRemoveShotgunBaseResource.__init__(self, TaskStatus)
130
+
131
+ @jwt_required()
132
+ def post(self):
133
+ """
134
+ Remove shotgun task status
135
+ ---
136
+ description: Remove a Shotgun task status from the database. Provide
137
+ the Shotgun entry ID in the JSON body.
138
+ tags:
139
+ - Import
140
+ requestBody:
141
+ required: true
142
+ content:
143
+ application/json:
144
+ schema:
145
+ type: object
146
+ required:
147
+ - id
148
+ properties:
149
+ id:
150
+ type: integer
151
+ description: Shotgun ID of the task status to remove
152
+ example: 12345
153
+ example:
154
+ id: 12345
155
+ responses:
156
+ 200:
157
+ description: Removal result returned
158
+ content:
159
+ application/json:
160
+ schema:
161
+ type: object
162
+ properties:
163
+ success:
164
+ type: boolean
165
+ description: Whether the removal was successful
166
+ example: true
167
+ removed_instance_id:
168
+ type: string
169
+ format: uuid
170
+ description: ID of the removed task status, if found
171
+ example: a24a6ea4-ce75-4665-a070-57453082c25
172
+ 400:
173
+ description: Invalid request body or instance not found
174
+ """
175
+ return super().post()
@@ -1,5 +1,6 @@
1
1
  from flask import current_app
2
2
  from flask_restful import Resource
3
+ from flask_jwt_extended import jwt_required
3
4
 
4
5
  from zou.app.models.department import Department
5
6
  from zou.app.models.task_type import TaskType
@@ -16,6 +17,97 @@ class ImportShotgunStepsResource(BaseImportShotgunResource):
16
17
  def __init__(self):
17
18
  Resource.__init__(self)
18
19
 
20
+ @jwt_required()
21
+ def post(self):
22
+ """
23
+ Import shotgun steps
24
+ ---
25
+ description: Import Shotgun steps (task types). Send a list of
26
+ Shotgun step entries in the JSON body. Returns created or updated
27
+ task types with departments.
28
+ tags:
29
+ - Import
30
+ requestBody:
31
+ required: true
32
+ content:
33
+ application/json:
34
+ schema:
35
+ type: array
36
+ items:
37
+ type: object
38
+ properties:
39
+ id:
40
+ type: integer
41
+ description: Shotgun ID of the step
42
+ example: 12345
43
+ code:
44
+ type: string
45
+ description: Step code (used to extract department)
46
+ example: "Animation Modeling"
47
+ short_name:
48
+ type: string
49
+ description: Step short name
50
+ example: "mod"
51
+ color:
52
+ type: string
53
+ description: Color in RGB format
54
+ example: "255,128,0"
55
+ entity_type:
56
+ type: string
57
+ description: Entity type this step applies to
58
+ example: "Asset"
59
+ example:
60
+ - id: 12345
61
+ code: "Animation Modeling"
62
+ short_name: "mod"
63
+ color: "255,128,0"
64
+ entity_type: "Asset"
65
+ responses:
66
+ 200:
67
+ description: Task types imported successfully
68
+ content:
69
+ application/json:
70
+ schema:
71
+ type: array
72
+ items:
73
+ type: object
74
+ properties:
75
+ id:
76
+ type: string
77
+ format: uuid
78
+ description: Task type unique identifier
79
+ example: a24a6ea4-ce75-4665-a070-57453082c25
80
+ name:
81
+ type: string
82
+ description: Task type name
83
+ example: "Animation Modeling"
84
+ short_name:
85
+ type: string
86
+ description: Task type short name
87
+ example: "mod"
88
+ color:
89
+ type: string
90
+ description: Task type color in hex format
91
+ example: "#FF8000"
92
+ for_entity:
93
+ type: string
94
+ description: Entity type
95
+ example: "Asset"
96
+ created_at:
97
+ type: string
98
+ format: date-time
99
+ description: Creation timestamp
100
+ example: "2024-01-15T10:30:00Z"
101
+ updated_at:
102
+ type: string
103
+ format: date-time
104
+ description: Update timestamp
105
+ example: "2024-01-15T11:00:00Z"
106
+ 400:
107
+ description: Invalid request body or data format error
108
+ """
109
+ return super().post()
110
+
19
111
  def extract_data(self, sg_step):
20
112
  color = self.extract_color(sg_step)
21
113
  department_name = self.extract_department_name(sg_step)
@@ -85,3 +177,49 @@ class ImportShotgunStepsResource(BaseImportShotgunResource):
85
177
  class ImportRemoveShotgunStepResource(ImportRemoveShotgunBaseResource):
86
178
  def __init__(self):
87
179
  ImportRemoveShotgunBaseResource.__init__(self, TaskType)
180
+
181
+ @jwt_required()
182
+ def post(self):
183
+ """
184
+ Remove shotgun step
185
+ ---
186
+ description: Remove a Shotgun step (task type) from the database.
187
+ Provide the Shotgun entry ID in the JSON body.
188
+ tags:
189
+ - Import
190
+ requestBody:
191
+ required: true
192
+ content:
193
+ application/json:
194
+ schema:
195
+ type: object
196
+ required:
197
+ - id
198
+ properties:
199
+ id:
200
+ type: integer
201
+ description: Shotgun ID of the step to remove
202
+ example: 12345
203
+ example:
204
+ id: 12345
205
+ responses:
206
+ 200:
207
+ description: Removal result returned
208
+ content:
209
+ application/json:
210
+ schema:
211
+ type: object
212
+ properties:
213
+ success:
214
+ type: boolean
215
+ description: Whether the removal was successful
216
+ example: true
217
+ removed_instance_id:
218
+ type: string
219
+ format: uuid
220
+ description: ID of the removed step, if found
221
+ example: a24a6ea4-ce75-4665-a070-57453082c25
222
+ 400:
223
+ description: Invalid request body or instance not found
224
+ """
225
+ return super().post()
@@ -1,4 +1,5 @@
1
1
  from flask import current_app
2
+ from flask_jwt_extended import jwt_required
2
3
 
3
4
  from zou.app.models.task_type import TaskType
4
5
  from zou.app.models.task_status import TaskStatus
@@ -15,6 +16,158 @@ from zou.app.blueprints.source.shotgun.base import (
15
16
 
16
17
 
17
18
  class ImportShotgunTasksResource(BaseImportShotgunResource):
19
+ @jwt_required()
20
+ def post(self):
21
+ """
22
+ Import shotgun tasks
23
+ ---
24
+ description: Import Shotgun tasks. Send a list of Shotgun task
25
+ entries in the JSON body. Only tasks with steps and projects are
26
+ imported. Returns created or updated tasks with assignees.
27
+ tags:
28
+ - Import
29
+ requestBody:
30
+ required: true
31
+ content:
32
+ application/json:
33
+ schema:
34
+ type: array
35
+ items:
36
+ type: object
37
+ properties:
38
+ id:
39
+ type: integer
40
+ description: Shotgun ID of the task
41
+ example: 12345
42
+ cached_display_name:
43
+ type: string
44
+ description: Task display name
45
+ example: "Modeling for Asset"
46
+ start_date:
47
+ type: string
48
+ format: date
49
+ description: Start date
50
+ example: "2024-01-15"
51
+ due_date:
52
+ type: string
53
+ format: date
54
+ description: Due date
55
+ example: "2024-02-15"
56
+ sg_sort_order:
57
+ type: integer
58
+ description: Sort order
59
+ example: 1
60
+ duration:
61
+ type: integer
62
+ description: Duration in days
63
+ example: 30
64
+ step:
65
+ type: object
66
+ description: Step (task type) information
67
+ properties:
68
+ id:
69
+ type: integer
70
+ example: 11111
71
+ project:
72
+ type: object
73
+ description: Project information
74
+ properties:
75
+ id:
76
+ type: integer
77
+ example: 22222
78
+ entity:
79
+ type: object
80
+ description: Entity information
81
+ properties:
82
+ id:
83
+ type: integer
84
+ example: 33333
85
+ type:
86
+ type: string
87
+ example: "Asset"
88
+ sg_status_list:
89
+ type: string
90
+ description: Status short name
91
+ example: "IP"
92
+ created_by:
93
+ type: object
94
+ description: Creator information
95
+ properties:
96
+ id:
97
+ type: integer
98
+ example: 44444
99
+ task_assignees:
100
+ type: array
101
+ description: Task assignees
102
+ items:
103
+ type: object
104
+ properties:
105
+ id:
106
+ type: integer
107
+ example: 55555
108
+ example:
109
+ - id: 12345
110
+ cached_display_name: "Modeling for Asset"
111
+ start_date: "2024-01-15"
112
+ due_date: "2024-02-15"
113
+ sg_sort_order: 1
114
+ duration: 30
115
+ step:
116
+ id: 11111
117
+ project:
118
+ id: 22222
119
+ entity:
120
+ id: 33333
121
+ type: "Asset"
122
+ sg_status_list: "IP"
123
+ created_by:
124
+ id: 44444
125
+ task_assignees:
126
+ - id: 55555
127
+ responses:
128
+ 200:
129
+ description: Tasks imported successfully
130
+ content:
131
+ application/json:
132
+ schema:
133
+ type: array
134
+ items:
135
+ type: object
136
+ properties:
137
+ id:
138
+ type: string
139
+ format: uuid
140
+ description: Task unique identifier
141
+ example: a24a6ea4-ce75-4665-a070-57453082c25
142
+ name:
143
+ type: string
144
+ description: Task name
145
+ example: "Modeling for Asset"
146
+ start_date:
147
+ type: string
148
+ format: date
149
+ description: Start date
150
+ example: "2024-01-15"
151
+ due_date:
152
+ type: string
153
+ format: date
154
+ description: Due date
155
+ example: "2024-02-15"
156
+ created_at:
157
+ type: string
158
+ format: date-time
159
+ description: Creation timestamp
160
+ example: "2024-01-15T10:30:00Z"
161
+ updated_at:
162
+ type: string
163
+ format: date-time
164
+ description: Update timestamp
165
+ example: "2024-01-15T11:00:00Z"
166
+ 400:
167
+ description: Invalid request body or data format error
168
+ """
169
+ return super().post()
170
+
18
171
  def prepare_import(self):
19
172
  self.project_ids = Project.get_id_map()
20
173
  self.person_ids = Person.get_id_map()
@@ -122,6 +275,52 @@ class ImportRemoveShotgunTaskResource(ImportRemoveShotgunBaseResource):
122
275
  def __init__(self):
123
276
  ImportRemoveShotgunBaseResource.__init__(self, Task, self.delete_func)
124
277
 
278
+ @jwt_required()
279
+ def post(self):
280
+ """
281
+ Remove shotgun task
282
+ ---
283
+ description: Remove a Shotgun task from the database. Provide the
284
+ Shotgun entry ID in the JSON body.
285
+ tags:
286
+ - Import
287
+ requestBody:
288
+ required: true
289
+ content:
290
+ application/json:
291
+ schema:
292
+ type: object
293
+ required:
294
+ - id
295
+ properties:
296
+ id:
297
+ type: integer
298
+ description: Shotgun ID of the task to remove
299
+ example: 12345
300
+ example:
301
+ id: 12345
302
+ responses:
303
+ 200:
304
+ description: Removal result returned
305
+ content:
306
+ application/json:
307
+ schema:
308
+ type: object
309
+ properties:
310
+ success:
311
+ type: boolean
312
+ description: Whether the removal was successful
313
+ example: true
314
+ removed_instance_id:
315
+ type: string
316
+ format: uuid
317
+ description: ID of the removed task, if found
318
+ example: a24a6ea4-ce75-4665-a070-57453082c25
319
+ 400:
320
+ description: Invalid request body or instance not found
321
+ """
322
+ return super().post()
323
+
125
324
  def delete_func(self, entity):
126
325
  deletion_service.remove_task(entity.id)
127
326
  tasks_service.clear_task_cache(str(entity.id))
@@ -1,4 +1,5 @@
1
1
  from flask import current_app
2
+ from flask_jwt_extended import jwt_required
2
3
 
3
4
  from zou.app.models.project import Project
4
5
  from zou.app.models.project import ProjectPersonLink
@@ -14,6 +15,91 @@ class ImportShotgunProjectConnectionsResource(BaseImportShotgunResource):
14
15
  def __init__(self):
15
16
  BaseImportShotgunResource.__init__(self)
16
17
 
18
+ @jwt_required()
19
+ def post(self):
20
+ """
21
+ Import shotgun project connections
22
+ ---
23
+ description: Import Shotgun project-user connections. Send a list of
24
+ Shotgun project connection entries in the JSON body. Returns
25
+ projects with team members added.
26
+ tags:
27
+ - Import
28
+ requestBody:
29
+ required: true
30
+ content:
31
+ application/json:
32
+ schema:
33
+ type: array
34
+ items:
35
+ type: object
36
+ properties:
37
+ id:
38
+ type: integer
39
+ description: Shotgun ID of the connection
40
+ example: 12345
41
+ project:
42
+ type: object
43
+ description: Project information
44
+ properties:
45
+ id:
46
+ type: integer
47
+ example: 11111
48
+ user:
49
+ type: object
50
+ description: User information
51
+ properties:
52
+ id:
53
+ type: integer
54
+ example: 22222
55
+ example:
56
+ - id: 12345
57
+ project:
58
+ id: 11111
59
+ user:
60
+ id: 22222
61
+ responses:
62
+ 200:
63
+ description: Project connections imported successfully
64
+ content:
65
+ application/json:
66
+ schema:
67
+ type: array
68
+ items:
69
+ type: object
70
+ properties:
71
+ id:
72
+ type: string
73
+ format: uuid
74
+ description: Project unique identifier
75
+ example: a24a6ea4-ce75-4665-a070-57453082c25
76
+ name:
77
+ type: string
78
+ description: Project name
79
+ example: "My Project"
80
+ team:
81
+ type: array
82
+ description: Team member IDs
83
+ items:
84
+ type: string
85
+ format: uuid
86
+ example:
87
+ - b35b7fb5-df86-5776-b181-68564193d36
88
+ created_at:
89
+ type: string
90
+ format: date-time
91
+ description: Creation timestamp
92
+ example: "2024-01-15T10:30:00Z"
93
+ updated_at:
94
+ type: string
95
+ format: date-time
96
+ description: Update timestamp
97
+ example: "2024-01-15T11:00:00Z"
98
+ 400:
99
+ description: Invalid request body or data format error
100
+ """
101
+ return super().post()
102
+
17
103
  def prepare_import(self):
18
104
  pass
19
105
 
@@ -55,3 +141,49 @@ class ImportRemoveShotgunProjectConnectionResource(
55
141
  ):
56
142
  def __init__(self):
57
143
  ImportRemoveShotgunBaseResource.__init__(self, ProjectPersonLink)
144
+
145
+ @jwt_required()
146
+ def post(self):
147
+ """
148
+ Remove shotgun project connection
149
+ ---
150
+ description: Remove a Shotgun project-user connection from the
151
+ database. Provide the Shotgun entry ID in the JSON body.
152
+ tags:
153
+ - Import
154
+ requestBody:
155
+ required: true
156
+ content:
157
+ application/json:
158
+ schema:
159
+ type: object
160
+ required:
161
+ - id
162
+ properties:
163
+ id:
164
+ type: integer
165
+ description: Shotgun ID of the connection to remove
166
+ example: 12345
167
+ example:
168
+ id: 12345
169
+ responses:
170
+ 200:
171
+ description: Removal result returned
172
+ content:
173
+ application/json:
174
+ schema:
175
+ type: object
176
+ properties:
177
+ success:
178
+ type: boolean
179
+ description: Whether the removal was successful
180
+ example: true
181
+ removed_instance_id:
182
+ type: string
183
+ format: uuid
184
+ description: ID of the removed connection, if found
185
+ example: a24a6ea4-ce75-4665-a070-57453082c25
186
+ 400:
187
+ description: Invalid request body or instance not found
188
+ """
189
+ return super().post()