Loading MCP_module/models/qod_models.py +24 −7 Original line number Diff line number Diff line from ipaddress import IPv6Address from pydantic import BaseModel, model_validator from pydantic import BaseModel, Field, field_validator, model_validator from typing import Optional, Dict, Any import re class IPv4Address(BaseModel): publicAddress: str publicPort: int E164_REGEX = re.compile(r'^\+[1-9]\d{1,14}$') class DeviceInput(BaseModel): phoneNumber: Optional[str] = None networkAccessIdentifier: Optional[str] = None ipv4Address: Optional[IPv4Address] = None ipv6Address: Optional[IPv6Address] = None duration: Optional[int] = Field(None, ge=60, le=86400, description="Duration in seconds (60-86400)") @field_validator("phoneNumber") @classmethod def validate_phone_number(cls, v): if v is not None and not E164_REGEX.match(v): raise ValueError("phoneNumber must conform to E.164 format (e.g., +1234567890)") return v @model_validator(mode='before') @model_validator(mode="before") @classmethod def check_one_identifier(cls, values): if isinstance(values, dict): if not (values.get("phoneNumber") or values.get("networkAccessIdentifier") or values.get("ipv4Address")) or values.get("ipv6Address"): if not ( values.get("phoneNumber") or values.get("networkAccessIdentifier") or values.get("ipv4Address") or values.get("ipv6Address") ): raise ValueError( "Device must include at least one of: phoneNumber, networkAccessIdentifier, or ipv4Address or ipv6Address" "Device must include at least one of: phoneNumber, networkAccessIdentifier, ipv4Address, or ipv6Address" ) return values Loading Loading
MCP_module/models/qod_models.py +24 −7 Original line number Diff line number Diff line from ipaddress import IPv6Address from pydantic import BaseModel, model_validator from pydantic import BaseModel, Field, field_validator, model_validator from typing import Optional, Dict, Any import re class IPv4Address(BaseModel): publicAddress: str publicPort: int E164_REGEX = re.compile(r'^\+[1-9]\d{1,14}$') class DeviceInput(BaseModel): phoneNumber: Optional[str] = None networkAccessIdentifier: Optional[str] = None ipv4Address: Optional[IPv4Address] = None ipv6Address: Optional[IPv6Address] = None duration: Optional[int] = Field(None, ge=60, le=86400, description="Duration in seconds (60-86400)") @field_validator("phoneNumber") @classmethod def validate_phone_number(cls, v): if v is not None and not E164_REGEX.match(v): raise ValueError("phoneNumber must conform to E.164 format (e.g., +1234567890)") return v @model_validator(mode='before') @model_validator(mode="before") @classmethod def check_one_identifier(cls, values): if isinstance(values, dict): if not (values.get("phoneNumber") or values.get("networkAccessIdentifier") or values.get("ipv4Address")) or values.get("ipv6Address"): if not ( values.get("phoneNumber") or values.get("networkAccessIdentifier") or values.get("ipv4Address") or values.get("ipv6Address") ): raise ValueError( "Device must include at least one of: phoneNumber, networkAccessIdentifier, or ipv4Address or ipv6Address" "Device must include at least one of: phoneNumber, networkAccessIdentifier, ipv4Address, or ipv6Address" ) return values Loading