From 631717fe8555c3ce7d1a81427393bdd2efaf220f Mon Sep 17 00:00:00 2001 From: Laszlo Magyar Date: Wed, 12 Nov 2025 14:33:36 +0100 Subject: [PATCH 1/3] add default None values to Optional fileds --- src/tailscale/models.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/tailscale/models.py b/src/tailscale/models.py index b23a1a75..bddf7a21 100644 --- a/src/tailscale/models.py +++ b/src/tailscale/models.py @@ -14,12 +14,15 @@ class ClientSupports(DataClassORJSONMixin): """Object holding Tailscale device information.""" - hair_pinning: bool | None = field(metadata=field_options(alias="hairPinning")) - ipv6: bool | None - pcp: bool | None - pmp: bool | None - udp: bool | None - upnp: bool | None + hair_pinning: bool | None = field( + default=None, + metadata=field_options(alias="hairPinning"), + ) + ipv6: bool | None = None + pcp: bool | None = None + pmp: bool | None = None + udp: bool | None = None + upnp: bool | None = None @dataclass @@ -47,16 +50,20 @@ class Device(DataClassORJSONMixin): metadata=field_options(alias="blocksIncomingConnections") ) client_connectivity: ClientConnectivity | None = field( - metadata=field_options(alias="clientConnectivity") + default=None, + metadata=field_options(alias="clientConnectivity"), ) client_version: str = field(metadata=field_options(alias="clientVersion")) - created: datetime | None + created: datetime | None = None device_id: str = field(metadata=field_options(alias="id")) - expires: datetime | None + expires: datetime | None = None hostname: str is_external: bool = field(metadata=field_options(alias="isExternal")) key_expiry_disabled: bool = field(metadata=field_options(alias="keyExpiryDisabled")) - last_seen: datetime | None = field(metadata=field_options(alias="lastSeen")) + last_seen: datetime | None = field( + default=None, + metadata=field_options(alias="lastSeen"), + ) machine_key: str = field(metadata=field_options(alias="machineKey")) name: str node_key: str = field(metadata=field_options(alias="nodeKey")) From 774ae35b79fe41083e828189d07a7ece1035fac1 Mon Sep 17 00:00:00 2001 From: Laszlo Magyar Date: Wed, 12 Nov 2025 14:35:42 +0100 Subject: [PATCH 2/3] rearrange fields to avoid errors like: TypeError: non-default argument 'client_version' follows default argument --- src/tailscale/models.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/tailscale/models.py b/src/tailscale/models.py index bddf7a21..40e972bc 100644 --- a/src/tailscale/models.py +++ b/src/tailscale/models.py @@ -49,21 +49,11 @@ class Device(DataClassORJSONMixin): blocks_incoming_connections: bool = field( metadata=field_options(alias="blocksIncomingConnections") ) - client_connectivity: ClientConnectivity | None = field( - default=None, - metadata=field_options(alias="clientConnectivity"), - ) client_version: str = field(metadata=field_options(alias="clientVersion")) - created: datetime | None = None device_id: str = field(metadata=field_options(alias="id")) - expires: datetime | None = None hostname: str is_external: bool = field(metadata=field_options(alias="isExternal")) key_expiry_disabled: bool = field(metadata=field_options(alias="keyExpiryDisabled")) - last_seen: datetime | None = field( - default=None, - metadata=field_options(alias="lastSeen"), - ) machine_key: str = field(metadata=field_options(alias="machineKey")) name: str node_key: str = field(metadata=field_options(alias="nodeKey")) @@ -78,6 +68,17 @@ class Device(DataClassORJSONMixin): ) tags: list[str] = field(default_factory=list) + client_connectivity: ClientConnectivity | None = field( + default=None, + metadata=field_options(alias="clientConnectivity"), + ) + created: datetime | None = None + expires: datetime | None = None + last_seen: datetime | None = field( + default=None, + metadata=field_options(alias="lastSeen"), + ) + @classmethod def __pre_deserialize__(cls, d: dict[Any, Any]) -> dict[Any, Any]: """Handle some fields that are inconsistently named in the API. From 2c60545dd1f13306b4751af4ff5c30fd312b6b32 Mon Sep 17 00:00:00 2001 From: Laszlo Magyar Date: Wed, 12 Nov 2025 16:58:21 +0100 Subject: [PATCH 3/3] rearrange fields --- src/tailscale/models.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/tailscale/models.py b/src/tailscale/models.py index 40e972bc..2e401058 100644 --- a/src/tailscale/models.py +++ b/src/tailscale/models.py @@ -63,21 +63,20 @@ class Device(DataClassORJSONMixin): advertised_routes: list[str] = field( default_factory=list, metadata=field_options(alias="advertisedRoutes") ) - enabled_routes: list[str] = field( - default_factory=list, metadata=field_options(alias="enabledRoutes") - ) - tags: list[str] = field(default_factory=list) - client_connectivity: ClientConnectivity | None = field( default=None, metadata=field_options(alias="clientConnectivity"), ) created: datetime | None = None + enabled_routes: list[str] = field( + default_factory=list, metadata=field_options(alias="enabledRoutes") + ) expires: datetime | None = None last_seen: datetime | None = field( default=None, metadata=field_options(alias="lastSeen"), ) + tags: list[str] = field(default_factory=list) @classmethod def __pre_deserialize__(cls, d: dict[Any, Any]) -> dict[Any, Any]: