44from datetime import timedelta
55
66import yaml
7- from google .protobuf import duration_pb2 , field_mask_pb2
7+ from google .protobuf import duration_pb2 , field_mask_pb2 , json_format
88from grpc .aio import Channel
99from jumpstarter_protocol import kubernetes_pb2
1010from jumpstarter_protocol .jumpstarter .client .v1 import client_pb2 , client_pb2_grpc
11- from pydantic import BaseModel , ConfigDict
11+ from pydantic import BaseModel , ConfigDict , Field , field_serializer
1212
1313
1414def parse_identifier (identifier : str , kind : str ) -> (str , str ):
@@ -22,6 +22,10 @@ def parse_identifier(identifier: str, kind: str) -> (str, str):
2222 return segments [1 ], segments [3 ]
2323
2424
25+ def parse_client_identifier (identifier : str ) -> (str , str ):
26+ return parse_identifier (identifier , "clients" )
27+
28+
2529def parse_exporter_identifier (identifier : str ) -> (str , str ):
2630 return parse_identifier (identifier , "exporters" )
2731
@@ -44,25 +48,35 @@ def from_protobuf(cls, data: client_pb2.Exporter) -> Exporter:
4448class Lease (BaseModel ):
4549 namespace : str
4650 name : str
51+ client : str
4752 exporter : str
4853 conditions : list [kubernetes_pb2 .Condition ]
4954
5055 model_config = ConfigDict (arbitrary_types_allowed = True )
5156
57+ @field_serializer ("conditions" )
58+ def serialize_conditions (self , conditions : list [kubernetes_pb2 .Condition ], _info ):
59+ return [json_format .MessageToDict (condition ) for condition in conditions ]
60+
5261 @classmethod
5362 def from_protobuf (cls , data : client_pb2 .Lease ) -> Lease :
5463 namespace , name = parse_lease_identifier (data .name )
64+
65+ _ , client = parse_client_identifier (data .client )
66+ _ , exporter = parse_exporter_identifier (data .exporter )
67+
5568 return cls (
5669 namespace = namespace ,
5770 name = name ,
58- exporter = data .exporter ,
71+ client = client ,
72+ exporter = exporter ,
5973 conditions = data .conditions ,
6074 )
6175
6276
6377class ExporterList (BaseModel ):
6478 exporters : list [Exporter ]
65- next_page_token : str | None
79+ next_page_token : str | None = Field ( exclude = True )
6680
6781 @classmethod
6882 def from_protobuf (cls , data : client_pb2 .ListExportersResponse ) -> ExporterList :
@@ -80,7 +94,7 @@ def dump_yaml(self):
8094
8195class LeaseList (BaseModel ):
8296 leases : list [Lease ]
83- next_page_token : str | None
97+ next_page_token : str | None = Field ( exclude = True )
8498
8599 @classmethod
86100 def from_protobuf (cls , data : client_pb2 .ListLeasesResponse ) -> LeaseList :
0 commit comments