Skip to content

Commit 9aea674

Browse files
committed
added skeleton filtering to project methods
1 parent 17e8c31 commit 9aea674

2 files changed

Lines changed: 42 additions & 9 deletions

File tree

ayon_api/_api_helpers/projects.py

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ def get_rest_projects(
174174
self,
175175
active: Optional[bool] = True,
176176
library: Optional[bool] = None,
177+
skeleton: bool = False,
177178
) -> Generator[ProjectDict, None, None]:
178179
"""Query available project entities.
179180
@@ -184,12 +185,13 @@ def get_rest_projects(
184185
are returned if 'None' is passed.
185186
library (Optional[bool]): Filter standard/library projects. Both
186187
are returned if 'None' is passed.
188+
skeleton (bool): Include skeleton projects.
187189
188190
Returns:
189191
Generator[ProjectDict, None, None]: Available projects.
190192
191193
"""
192-
for project_name in self.get_project_names(active, library):
194+
for project_name in self.get_project_names(active, library, skeleton):
193195
project = self.get_rest_project(project_name)
194196
if project:
195197
yield project
@@ -198,6 +200,7 @@ def get_rest_projects_list(
198200
self,
199201
active: Optional[bool] = True,
200202
library: Optional[bool] = None,
203+
skeleton: bool = False,
201204
) -> list[ProjectListDict]:
202205
"""Receive available projects.
203206
@@ -208,6 +211,7 @@ def get_rest_projects_list(
208211
are returned if 'None' is passed.
209212
library (Optional[bool]): Filter standard/library projects. Both
210213
are returned if 'None' is passed.
214+
skeleton (bool): Include skeleton projects.
211215
212216
Returns:
213217
list[ProjectListDict]: List of available projects.
@@ -219,10 +223,14 @@ def get_rest_projects_list(
219223
if library is not None:
220224
library = "true" if library else "false"
221225

222-
query = prepare_query_string({
226+
query_data = {
223227
"active": active,
224228
"library": library,
225-
})
229+
}
230+
if skeleton:
231+
query_data["skeleton"] = "true"
232+
233+
query = prepare_query_string(query_data)
226234
response = self.get(f"projects{query}")
227235
response.raise_for_status()
228236
data = response.data
@@ -232,6 +240,7 @@ def get_project_names(
232240
self,
233241
active: Optional[bool] = True,
234242
library: Optional[bool] = None,
243+
skeleton: bool = False,
235244
) -> list[str]:
236245
"""Receive available project names.
237246
@@ -242,20 +251,24 @@ def get_project_names(
242251
are returned if 'None' is passed.
243252
library (Optional[bool]): Filter standard/library projects. Both
244253
are returned if 'None' is passed.
254+
skeleton (bool): Include skeleton projects.
245255
246256
Returns:
247257
list[str]: List of available project names.
248258
249259
"""
250260
return [
251261
project["name"]
252-
for project in self.get_rest_projects_list(active, library)
262+
for project in self.get_rest_projects_list(
263+
active, library, skeleton
264+
)
253265
]
254266

255267
def get_projects(
256268
self,
257269
active: Optional[bool] = True,
258270
library: Optional[bool] = None,
271+
skeleton: bool = False,
259272
fields: Optional[Iterable[str]] = None,
260273
own_attributes: bool = False,
261274
) -> Generator[ProjectDict, None, None]:
@@ -280,14 +293,15 @@ def get_projects(
280293

281294
graphql_fields, fetch_type = self._get_project_graphql_fields(fields)
282295
if fetch_type == ProjectFetchType.RESTList:
283-
yield from self.get_rest_projects_list(active, library)
296+
yield from self.get_rest_projects_list(active, library, skeleton)
284297
return
285298

286299
projects_by_name = {}
287300
if graphql_fields:
288301
projects = list(self._get_graphql_projects(
289302
active,
290303
library,
304+
skeleton=skeleton,
291305
fields=graphql_fields,
292306
own_attributes=own_attributes,
293307
))
@@ -296,7 +310,9 @@ def get_projects(
296310
return
297311
projects_by_name = {p["name"]: p for p in projects}
298312

299-
for project in self.get_rest_projects(active=active, library=library):
313+
for project in self.get_rest_projects(
314+
active=active, library=library, skeleton=skeleton
315+
):
300316
if own_attributes:
301317
fill_own_attribs(project)
302318

@@ -356,6 +372,8 @@ def create_project(
356372
project_code: str,
357373
library_project: bool = False,
358374
preset_name: Optional[str] = None,
375+
data: dict[str, Any] | None = None,
376+
skeleton: bool = False,
359377
) -> ProjectDict:
360378
"""Create project using AYON settings.
361379
@@ -375,6 +393,8 @@ def create_project(
375393
library_project (Optional[bool]): Project is library project.
376394
preset_name (Optional[str]): Name of anatomy preset. Default is
377395
used if not passed.
396+
data (dict[str, Any]): Project data.
397+
skeleton (bool): Project is skeleton project.
378398
379399
Raises:
380400
ValueError: When project name already exists.
@@ -395,12 +415,19 @@ def create_project(
395415

396416
preset = self.get_project_anatomy_preset(preset_name)
397417

418+
if data is None:
419+
data = {}
420+
421+
if skeleton:
422+
data["skeleton"] = True
423+
398424
result = self.post(
399425
"projects",
400426
name=project_name,
401427
code=project_code,
402428
anatomy=preset,
403-
library=library_project
429+
library=library_project,
430+
data=data,
404431
)
405432

406433
if result.status != 201:
@@ -858,8 +885,9 @@ def _fill_project_entity_data(self, project: dict[str, Any]) -> None:
858885

859886
def _get_graphql_projects(
860887
self,
861-
active: Optional[bool],
862-
library: Optional[bool],
888+
active: bool | None,
889+
library: bool | None,
890+
skeleton: bool,
863891
fields: set[str],
864892
own_attributes: bool,
865893
project_name: Optional[str] = None
@@ -876,6 +904,9 @@ def _get_graphql_projects(
876904
if project_name is not None:
877905
query.set_variable_value("projectName", project_name)
878906

907+
if skeleton:
908+
query.set_variable_value("skeleton", True)
909+
879910
attributes = {}
880911
if "allAttrib" in fields:
881912
attributes = self.get_attributes_for_type("project")

ayon_api/graphql_queries.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,10 @@ def project_graphql_query(fields):
9191
def projects_graphql_query(fields):
9292
query = GraphQlQuery("ProjectsQuery")
9393
project_name_var = query.add_variable("projectName", "String!")
94+
skeleton_var = query.add_variable("skeleton", "Boolean!")
9495
projects_field = query.add_field_with_edges("projects")
9596
projects_field.set_filter("name", project_name_var)
97+
projects_field.set_filter("includeSkeleton", skeleton_var)
9698

9799
nested_fields = fields_to_dict(fields)
98100

0 commit comments

Comments
 (0)