| 129 | |
| 130 | @staticmethod |
| 131 | def from_json(data: dict): |
| 132 | assert isinstance(data, dict) |
| 133 | |
| 134 | # Load metadata |
| 135 | _meta = meta.Meta.from_json(data.get("meta")) |
| 136 | |
| 137 | # Load extensions |
| 138 | _extensions = [] |
| 139 | for _extension_data in data.get("extensions", []): |
| 140 | _extensions.append(extension.Extension.from_json(_extension_data)) |
| 141 | |
| 142 | # Load monitors |
| 143 | _monitors = [] |
| 144 | for _monitor_data in data.get("monitors", []): |
| 145 | _monitors.append(monitor.Monitor.from_json(_monitor_data)) |
| 146 | |
| 147 | # Load sprites (targets) |
| 148 | _sprites = [] |
| 149 | for _sprite_data in data.get("targets", []): |
| 150 | _sprites.append(sprite.Sprite.from_json(_sprite_data)) |
| 151 | |
| 152 | return Project(None, _meta, _extensions, _monitors, _sprites) |
| 153 | |
| 154 | @staticmethod |
| 155 | def load_json(data: str | bytes | TextIOWrapper | BinaryIO, load_assets: bool = True, _name: Optional[str] = None): # noqa: C901 |