Skip to content

icon_definitions

Icon definitions.

There are multiple places where icons are defined for UI.

AYONUrlIcon dataclass

Bases: IconBase

Relative url to an image file on AYON server.

Instead of using full url use relative path to image file on AYON server. - 'https://studio.ayon.app/addons/1.0.0/public/icon.png' - 'addons/1.0.0/public/icon.png'

The main difference from 'UrlIcon' is that this approach also has access to endpoints that do require authentication.

Source code in client/ayon_core/lib/icon_definitions.py
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
@dataclass
class AYONUrlIcon(IconBase):
    """Relative url to an image file on AYON server.

    Instead of using full url use relative path to image file on AYON server.
    - 'https://studio.ayon.app/addons/1.0.0/public/icon.png'
    - 'addons/1.0.0/public/icon.png'

    The main difference from 'UrlIcon' is that this approach also has access
        to endpoints that do require authentication.

    """
    type: ClassVar[str] = "ayon_url"
    url: str

    def __post_init__(self):
        self.url = self.url.lstrip("/")

    def get_unique_id(self) -> str:
        return f"{self.type}|{self.url}"

    def get_content(self) -> bytes:
        url = f"{ayon_api.get_base_url()}/{self.url}"
        try:
            stream = io.BytesIO()
            ayon_api.download_file_to_stream(url, stream)
            return stream.getvalue()
        except Exception:
            log.warning(
                "Failed to download image '%s'", url, exc_info=True
            )
            return b""

    def to_data(self) -> dict:
        return {
            "type": self.type,
            "url": self.url,
        }

AwesomeFontIcon dataclass

Bases: IconBase

Awesome Font icon.

Source code in client/ayon_core/lib/icon_definitions.py
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
@dataclass
class AwesomeFontIcon(IconBase):
    """Awesome Font icon."""
    type: ClassVar[str] = "awesome-font"
    name: str
    color: str = field(default=DEFAULT_WEB_ICON_COLOR)

    def get_unique_id(self) -> str:
        return f"{self.type}|{self.name}|{self.color}"

    def to_data(self) -> dict:
        return {
            "type": self.type,
            "name": self.name,
            "color": self.color,
        }

IconBase

Bases: ABC

Base class for icon definition.

The base class is meant to be used for type validation of icon definition passed to functions.

Source code in client/ayon_core/lib/icon_definitions.py
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class IconBase(ABC):
    """Base class for icon definition.

    The base class is meant to be used for type validation of icon definition
        passed to functions.
    """

    @property
    @abstractmethod
    def type(self) -> str:
        pass

    @abstractmethod
    def get_unique_id(self) -> str:
        pass

    @abstractmethod
    def to_data(self) -> dict:
        pass

MaterialSymbolsIcon dataclass

Bases: IconBase

Material Symbols icon.

Source code in client/ayon_core/lib/icon_definitions.py
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
@dataclass
class MaterialSymbolsIcon(IconBase):
    """Material Symbols icon."""
    type: ClassVar[str] = "material-symbols"
    name: str
    color: str = field(default=DEFAULT_WEB_ICON_COLOR)

    def get_unique_id(self) -> str:
        return f"{self.type}|{self.name}|{self.color}"

    def to_data(self) -> dict:
        return {
            "type": self.type,
            "name": self.name,
            "color": self.color,
        }

PathIcon dataclass

Bases: IconBase

Path to image file on disk.

Source code in client/ayon_core/lib/icon_definitions.py
44
45
46
47
48
49
50
51
52
53
54
55
56
57
@dataclass
class PathIcon(IconBase):
    """Path to image file on disk."""
    type: ClassVar[str] = "path"
    path: str

    def get_unique_id(self) -> str:
        return f"{self.type}|{self.path}"

    def to_data(self) -> dict:
        return {
            "type": self.type,
            "path": self.path,
        }

TransparentIcon dataclass

Bases: IconBase

Transparent icon.

Source code in client/ayon_core/lib/icon_definitions.py
161
162
163
164
165
166
167
168
169
170
171
172
173
174
@dataclass
class TransparentIcon(IconBase):
    """Transparent icon."""
    type: ClassVar[str] = "transparent"
    size: int = 256

    def get_unique_id(self):
        return f"{self.type}|{self.size}"

    def to_data(self) -> dict:
        return {
            "type": self.type,
            "size": self.size,
        }

UrlIcon dataclass

Bases: IconBase

Url to an image file.

Source code in client/ayon_core/lib/icon_definitions.py
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
@dataclass
class UrlIcon(IconBase):
    """Url to an image file."""
    type: ClassVar[str] = "url"
    url: str

    def get_unique_id(self) -> str:
        return f"{self.type}|{self.url}"

    def get_content(self) -> bytes | None:
        try:
            return urllib.request.urlopen(self.url).read()
        except Exception:
            log.warning(
                "Failed to download image '%s'", self.url, exc_info=True
            )
            return b""

    def to_data(self) -> dict:
        return {
            "type": self.type,
            "url": self.url,
        }