@@ -50,6 +50,8 @@ class ProjectFetchType(Enum):
5050
5151
5252class ProjectsAPI (BaseServerAPI ):
53+ _project_product_base_type_fields = None
54+
5355 def get_project_anatomy_presets (self ) -> list [AnatomyPresetDict ]:
5456 """Anatomy presets available on server.
5557
@@ -802,13 +804,9 @@ def _get_project_graphql_fields(
802804 elif field == "productBaseTypes" :
803805 must_use_graphql = True
804806 fields .discard (field )
805- for f_name in DEFAULT_PRODUCT_BASE_TYPE_FIELDS :
807+ for f_name in self . _get_project_product_base_type_fields () :
806808 graphql_fields .add (f"{ field } .{ f_name } " )
807809
808- if self .get_server_version_tuple () > (1 , 15 , 3 ):
809- graphql_fields .add ("productBaseTypes.icon" )
810- graphql_fields .add ("productBaseTypes.color" )
811-
812810 elif field .startswith ("productBaseTypes" ):
813811 must_use_graphql = True
814812 graphql_fields .add (field )
@@ -1021,3 +1019,17 @@ def _get_project_roots_values(
10211019 )
10221020 response .raise_for_status ()
10231021 return response .data
1022+
1023+ def _get_project_product_base_type_fields (self ) -> set [str ]:
1024+ if self ._project_product_base_type_fields is not None :
1025+ return self ._project_product_base_type_fields
1026+
1027+ graphql_schema = self .get_graphql_schema ()
1028+
1029+ field_names = {"name" }
1030+ for type_def in graphql_schema ["__schema" ]["types" ]:
1031+ if type_def ["name" ] == "ProductBaseType" :
1032+ field_names = {field ["name" ] for field in type_def ["fields" ]}
1033+ break
1034+ self ._project_product_base_type_fields = field_names
1035+ return field_names
0 commit comments