diff --git a/ayon_api/_api_helpers/projects.py b/ayon_api/_api_helpers/projects.py index 51c501176..df602d808 100644 --- a/ayon_api/_api_helpers/projects.py +++ b/ayon_api/_api_helpers/projects.py @@ -9,7 +9,6 @@ from ayon_api.constants import ( PROJECT_NAME_REGEX, - DEFAULT_PRODUCT_BASE_TYPE_FIELDS, DEFAULT_PRODUCT_TYPE_FIELDS, ) from ayon_api.utils import prepare_query_string, fill_own_attribs @@ -50,6 +49,8 @@ class ProjectFetchType(Enum): class ProjectsAPI(BaseServerAPI): + _project_product_base_type_fields = None + def get_project_anatomy_presets(self) -> list[AnatomyPresetDict]: """Anatomy presets available on server. @@ -802,7 +803,8 @@ def _get_project_graphql_fields( elif field == "productBaseTypes": must_use_graphql = True fields.discard(field) - for f_name in DEFAULT_PRODUCT_BASE_TYPE_FIELDS: + # for f_name in DEFAULT_PRODUCT_BASE_TYPE_FIELDS: + for f_name in self._get_project_product_base_type_fields(): graphql_fields.add(f"{field}.{f_name}") elif field.startswith("productBaseTypes"): @@ -1017,3 +1019,17 @@ def _get_project_roots_values( ) response.raise_for_status() return response.data + + def _get_project_product_base_type_fields(self) -> set[str]: + if self._project_product_base_type_fields is not None: + return self._project_product_base_type_fields + + graphql_schema = self.get_graphql_schema() + + field_names = {"name"} + for type_def in graphql_schema["__schema"]["types"]: + if type_def["name"] == "ProductBaseType": + field_names = {field["name"] for field in type_def["fields"]} + break + self._project_product_base_type_fields = field_names + return field_names