Skip to content

Commit 072bef1

Browse files
committed
♻️ add check and more support in graphql
1 parent 7c83f11 commit 072bef1

File tree

3 files changed

+31
-8
lines changed

3 files changed

+31
-8
lines changed

ayon_api/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
get_info,
5555
get_server_version,
5656
get_server_version_tuple,
57+
product_base_type_supported,
5758
get_users,
5859
get_user_by_name,
5960
get_user,
@@ -321,6 +322,7 @@
321322
"get_info",
322323
"get_server_version",
323324
"get_server_version_tuple",
325+
"product_base_type_supported",
324326
"get_users",
325327
"get_user_by_name",
326328
"get_user",

ayon_api/_api.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -719,6 +719,13 @@ def get_server_version_tuple() -> ServerVersion:
719719
return con.get_server_version_tuple()
720720

721721

722+
def product_base_type_supported() -> bool:
723+
"""Product base types are available on server.
724+
"""
725+
con = get_server_api_connection()
726+
return con.product_base_type_supported()
727+
728+
722729
def get_users(
723730
project_name: Optional[str] = None,
724731
usernames: Optional[Iterable[str]] = None,
@@ -4809,22 +4816,21 @@ def get_products(
48094816
fields: Optional[Iterable[str]] = None,
48104817
own_attributes=_PLACEHOLDER,
48114818
) -> Generator[ProductDict, None, None]:
4812-
"""Query products from the server.
4819+
"""Query products from server.
48134820
48144821
Todos:
48154822
Separate 'name_by_folder_ids' filtering to separated method. It
48164823
cannot be combined with some other filters.
48174824
48184825
Args:
4819-
project_name (str): Name of the project.
4826+
project_name (str): Name of project.
48204827
product_ids (Optional[Iterable[str]]): Task ids to filter.
48214828
product_names (Optional[Iterable[str]]): Task names used for
48224829
filtering.
48234830
folder_ids (Optional[Iterable[str]]): Ids of task parents.
4824-
Use 'None' if folder is direct child of the project.
4831+
Use 'None' if folder is direct child of project.
48254832
product_types (Optional[Iterable[str]]): Product types used for
48264833
filtering.
4827-
product_base_types (Optional[Iterable[str]]): Product base types
48284834
product_name_regex (Optional[str]): Filter products by name regex.
48294835
product_path_regex (Optional[str]): Filter products by path regex.
48304836
Path starts with folder path and ends with product name.
@@ -4935,7 +4941,7 @@ def get_product_types(
49354941
) -> list[ProductTypeDict]:
49364942
"""Types of products.
49374943
4938-
This is the server-wide information. Product types have 'name', 'icon' and
4944+
This is server wide information. Product types have 'name', 'icon' and
49394945
'color'.
49404946
49414947
Args:
@@ -5012,6 +5018,7 @@ def create_product(
50125018
tags: Optional[Iterable[str]] = None,
50135019
status: Optional[str] = None,
50145020
active: Optional[bool] = None,
5021+
product_base_type: Optional[str] = None,
50155022
product_id: Optional[str] = None,
50165023
) -> str:
50175024
"""Create new product.
@@ -5026,6 +5033,7 @@ def create_product(
50265033
tags (Optional[Iterable[str]]): Product tags.
50275034
status (Optional[str]): Product status.
50285035
active (Optional[bool]): Product active state.
5036+
product_base_type (Optional[str]): Product base type.
50295037
product_id (Optional[str]): Product id. If not passed new id is
50305038
generated.
50315039
@@ -5044,6 +5052,7 @@ def create_product(
50445052
tags=tags,
50455053
status=status,
50465054
active=active,
5055+
product_base_type=product_base_type,
50475056
product_id=product_id,
50485057
)
50495058

@@ -5054,6 +5063,7 @@ def update_product(
50545063
name: Optional[str] = None,
50555064
folder_id: Optional[str] = None,
50565065
product_type: Optional[str] = None,
5066+
product_base_type: Optional[str] = None,
50575067
attrib: Optional[dict[str, Any]] = None,
50585068
data: Optional[dict[str, Any]] = None,
50595069
tags: Optional[Iterable[str]] = None,
@@ -5073,6 +5083,7 @@ def update_product(
50735083
name (Optional[str]): New product name.
50745084
folder_id (Optional[str]): New product id.
50755085
product_type (Optional[str]): New product type.
5086+
product_base_type (Optional[str]): New product base type.
50765087
attrib (Optional[dict[str, Any]]): New product attributes.
50775088
data (Optional[dict[str, Any]]): New product data.
50785089
tags (Optional[Iterable[str]]): New product tags.
@@ -5087,6 +5098,7 @@ def update_product(
50875098
name=name,
50885099
folder_id=folder_id,
50895100
product_type=product_type,
5101+
product_base_type=product_base_type,
50905102
attrib=attrib,
50915103
data=data,
50925104
tags=tags,

ayon_api/_api_helpers/products.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,10 @@ def get_products(
3333
self,
3434
project_name: str,
3535
product_ids: Optional[Iterable[str]] = None,
36-
product_names: Optional[Iterable[str]]=None,
37-
folder_ids: Optional[Iterable[str]]=None,
38-
product_types: Optional[Iterable[str]]=None,
36+
product_names: Optional[Iterable[str]] = None,
37+
folder_ids: Optional[Iterable[str]] = None,
38+
product_types: Optional[Iterable[str]] = None,
39+
product_base_types: Optional[Iterable[str]] = None,
3940
product_name_regex: Optional[str] = None,
4041
product_path_regex: Optional[str] = None,
4142
names_by_folder_ids: Optional[dict[str, Iterable[str]]] = None,
@@ -60,6 +61,8 @@ def get_products(
6061
Use 'None' if folder is direct child of project.
6162
product_types (Optional[Iterable[str]]): Product types used for
6263
filtering.
64+
product_base_types (Optional[Iterable[str]]): Product base types
65+
used for filtering.
6366
product_name_regex (Optional[str]): Filter products by name regex.
6467
product_path_regex (Optional[str]): Filter products by path regex.
6568
Path starts with folder path and ends with product name.
@@ -84,6 +87,11 @@ def get_products(
8487
if not project_name:
8588
return
8689

90+
if product_base_types and not self.product_base_type_supported():
91+
raise UnsupportedServerVersion(
92+
"Product base type is not supported for your server version."
93+
)
94+
8795
# Prepare these filters before 'name_by_filter_ids' filter
8896
filter_product_names = None
8997
if product_names is not None:
@@ -151,6 +159,7 @@ def get_products(
151159
filters,
152160
("productIds", product_ids),
153161
("productTypes", product_types),
162+
("productBaseTypes", product_base_types),
154163
("productStatuses", statuses),
155164
("productTags", tags),
156165
):

0 commit comments

Comments
 (0)