Source code for airflow_pydantic.extras.balancer.port

from typing import Self

from pydantic import Field, model_validator

from ...core import BaseModel
from .host import Host

__all__ = ("Port",)


[docs] class Port(BaseModel): name: str = "" host: Host | None = None host_name: str = "" port: int = Field(default=None, ge=1, le=65535, description="Port number") tags: list[str] = Field(default_factory=list) @property def _calc_name(self): if not self.name: if self.host: return f"{self.host.name}-{self.port}" return f"{self.host_name}-{self.port}" return self.name def __lt__(self, other): return self._calc_name < other._calc_name def __eq__(self, other): return self._calc_name == other._calc_name def __hash__(self): return hash(self._calc_name) @property def pool(self): return self._calc_name @model_validator(mode="after") def _validate(self) -> Self: if not self.host and not self.host_name: raise ValueError("Either host or host_name must be provided") if self.host and self.host_name and self.host.name != self.host_name: raise ValueError("Host and host_name must match") return self