mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 12:54:40 +01:00
Merge pull request #1543 from ynput/enhancement/projects-fetch-force-graphql
Tools: Use GraphQl to get projects
This commit is contained in:
commit
837b36cccf
1 changed files with 30 additions and 3 deletions
|
|
@ -1,11 +1,13 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import contextlib
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import Any, Optional
|
||||
from dataclasses import dataclass
|
||||
|
||||
import ayon_api
|
||||
from ayon_api.graphql_queries import projects_graphql_query
|
||||
|
||||
from ayon_core.style import get_default_entity_icon_color
|
||||
from ayon_core.lib import CacheItem, NestedCacheItem
|
||||
|
|
@ -275,7 +277,7 @@ class ProductTypeIconMapping:
|
|||
return self._definitions_by_name
|
||||
|
||||
|
||||
def _get_project_items_from_entitiy(
|
||||
def _get_project_items_from_entity(
|
||||
projects: list[dict[str, Any]]
|
||||
) -> list[ProjectItem]:
|
||||
"""
|
||||
|
|
@ -290,6 +292,7 @@ def _get_project_items_from_entitiy(
|
|||
return [
|
||||
ProjectItem.from_entity(project)
|
||||
for project in projects
|
||||
if project["active"]
|
||||
]
|
||||
|
||||
|
||||
|
|
@ -538,8 +541,32 @@ class ProjectsModel(object):
|
|||
self._projects_cache.update_data(project_items)
|
||||
return self._projects_cache.get_data()
|
||||
|
||||
def _fetch_graphql_projects(self) -> list[dict[str, Any]]:
|
||||
"""Fetch projects using GraphQl.
|
||||
|
||||
This method was added because ayon_api had a bug in 'get_projects'.
|
||||
|
||||
Returns:
|
||||
list[dict[str, Any]]: List of projects.
|
||||
|
||||
"""
|
||||
api = ayon_api.get_server_api_connection()
|
||||
query = projects_graphql_query({"name", "active", "library", "data"})
|
||||
|
||||
projects = []
|
||||
for parsed_data in query.continuous_query(api):
|
||||
for project in parsed_data["projects"]:
|
||||
project_data = project["data"]
|
||||
if project_data is None:
|
||||
project["data"] = {}
|
||||
elif isinstance(project_data, str):
|
||||
project["data"] = json.loads(project_data)
|
||||
projects.append(project)
|
||||
return projects
|
||||
|
||||
def _query_projects(self) -> list[ProjectItem]:
|
||||
projects = ayon_api.get_projects(fields=["name", "active", "library"])
|
||||
projects = self._fetch_graphql_projects()
|
||||
|
||||
user = ayon_api.get_user()
|
||||
pinned_projects = (
|
||||
user
|
||||
|
|
@ -548,7 +575,7 @@ class ProjectsModel(object):
|
|||
.get("pinnedProjects")
|
||||
) or []
|
||||
pinned_projects = set(pinned_projects)
|
||||
project_items = _get_project_items_from_entitiy(list(projects))
|
||||
project_items = _get_project_items_from_entity(list(projects))
|
||||
for project in project_items:
|
||||
project.is_pinned = project.name in pinned_projects
|
||||
return project_items
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue