|  | # coding: utf-8 | 
|  |  | 
|  | """ | 
|  | Airflow API | 
|  |  | 
|  | Airflow API. All endpoints located under ``/api/v2`` can be used safely, are stable and backward compatible. Endpoints located under ``/ui`` are dedicated to the UI and are subject to breaking change depending on the need of the frontend. Users should not rely on those but use the public ones instead. | 
|  |  | 
|  | The version of the OpenAPI document: 2 | 
|  | Generated by OpenAPI Generator (https://openapi-generator.tech) | 
|  |  | 
|  | Do not edit the class manually. | 
|  | """  # noqa: E501 | 
|  |  | 
|  |  | 
|  | from __future__ import annotations | 
|  | import pprint | 
|  | import re  # noqa: F401 | 
|  | import json | 
|  |  | 
|  | from pydantic import BaseModel, ConfigDict, StrictStr, field_validator | 
|  | from typing import Any, ClassVar, Dict, List, Optional | 
|  | from typing import Optional, Set | 
|  | from typing_extensions import Self | 
|  |  | 
|  | class ExternalViewResponse(BaseModel): | 
|  | """ | 
|  | Serializer for External View Plugin responses. | 
|  | """ # noqa: E501 | 
|  | category: Optional[StrictStr] = None | 
|  | destination: Optional[StrictStr] = 'nav' | 
|  | href: StrictStr | 
|  | icon: Optional[StrictStr] = None | 
|  | icon_dark_mode: Optional[StrictStr] = None | 
|  | name: StrictStr | 
|  | url_route: Optional[StrictStr] = None | 
|  | __properties: ClassVar[List[str]] = ["category", "destination", "href", "icon", "icon_dark_mode", "name", "url_route"] | 
|  |  | 
|  | @field_validator('destination') | 
|  | def destination_validate_enum(cls, value): | 
|  | """Validates the enum""" | 
|  | if value is None: | 
|  | return value | 
|  |  | 
|  | if value not in set(['nav', 'dag', 'dag_run', 'task', 'task_instance']): | 
|  | raise ValueError("must be one of enum values ('nav', 'dag', 'dag_run', 'task', 'task_instance')") | 
|  | return value | 
|  |  | 
|  | model_config = ConfigDict( | 
|  | populate_by_name=True, | 
|  | validate_assignment=True, | 
|  | protected_namespaces=(), | 
|  | ) | 
|  |  | 
|  |  | 
|  | def to_str(self) -> str: | 
|  | """Returns the string representation of the model using alias""" | 
|  | return pprint.pformat(self.model_dump(by_alias=True)) | 
|  |  | 
|  | def to_json(self) -> str: | 
|  | """Returns the JSON representation of the model using alias""" | 
|  | # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead | 
|  | return json.dumps(self.to_dict()) | 
|  |  | 
|  | @classmethod | 
|  | def from_json(cls, json_str: str) -> Optional[Self]: | 
|  | """Create an instance of ExternalViewResponse from a JSON string""" | 
|  | return cls.from_dict(json.loads(json_str)) | 
|  |  | 
|  | def to_dict(self) -> Dict[str, Any]: | 
|  | """Return the dictionary representation of the model using alias. | 
|  |  | 
|  | This has the following differences from calling pydantic's | 
|  | `self.model_dump(by_alias=True)`: | 
|  |  | 
|  | * `None` is only added to the output dict for nullable fields that | 
|  | were set at model initialization. Other fields with value `None` | 
|  | are ignored. | 
|  | """ | 
|  | excluded_fields: Set[str] = set([ | 
|  | ]) | 
|  |  | 
|  | _dict = self.model_dump( | 
|  | by_alias=True, | 
|  | exclude=excluded_fields, | 
|  | exclude_none=True, | 
|  | ) | 
|  | return _dict | 
|  |  | 
|  | @classmethod | 
|  | def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: | 
|  | """Create an instance of ExternalViewResponse from a dict""" | 
|  | if obj is None: | 
|  | return None | 
|  |  | 
|  | if not isinstance(obj, dict): | 
|  | return cls.model_validate(obj) | 
|  |  | 
|  | _obj = cls.model_validate({ | 
|  | "category": obj.get("category"), | 
|  | "destination": obj.get("destination") if obj.get("destination") is not None else 'nav', | 
|  | "href": obj.get("href"), | 
|  | "icon": obj.get("icon"), | 
|  | "icon_dark_mode": obj.get("icon_dark_mode"), | 
|  | "name": obj.get("name"), | 
|  | "url_route": obj.get("url_route") | 
|  | }) | 
|  | return _obj | 
|  |  | 
|  |  |