@@ -102,6 +102,11 @@ class GeneratedField:
102102 be marked as experimental in docstring.
103103 """
104104
105+ deprecated : bool
106+ """
107+ If true, the field is deprecated and should be marked as deprecated in docstring.
108+ """
109+
105110 def __post_init__ (self ):
106111 if self .default_factory is not None and self .default is not None :
107112 raise ValueError ("Can't have both default and default_factory" , self )
@@ -131,6 +136,7 @@ class GeneratedDataclass:
131136 fields : list [GeneratedField ]
132137 extends : list [GeneratedType ]
133138 experimental : bool
139+ deprecated : bool
134140
135141
136142def generate_field (
@@ -156,6 +162,7 @@ def generate_field(
156162 default_factory = "dict" ,
157163 create_func_default = "None" ,
158164 experimental = prop .stage == Stage .PRIVATE ,
165+ deprecated = prop .deprecated or False ,
159166 )
160167 elif field_type .name == "VariableOrList" :
161168 return GeneratedField (
@@ -168,6 +175,7 @@ def generate_field(
168175 default_factory = "list" ,
169176 create_func_default = "None" ,
170177 experimental = prop .stage == Stage .PRIVATE ,
178+ deprecated = prop .deprecated or False ,
171179 )
172180 elif is_required :
173181 return GeneratedField (
@@ -180,6 +188,7 @@ def generate_field(
180188 default_factory = None ,
181189 create_func_default = None ,
182190 experimental = prop .stage == Stage .PRIVATE ,
191+ deprecated = prop .deprecated or False ,
183192 )
184193 else :
185194 return GeneratedField (
@@ -192,6 +201,7 @@ def generate_field(
192201 default_factory = None ,
193202 create_func_default = "None" ,
194203 experimental = prop .stage == Stage .PRIVATE ,
204+ deprecated = prop .deprecated or False ,
195205 )
196206
197207
@@ -326,6 +336,7 @@ def generate_dataclass(
326336 fields = fields ,
327337 extends = extends ,
328338 experimental = schema .stage == Stage .PRIVATE ,
339+ deprecated = schema .deprecated or False ,
329340 )
330341
331342
@@ -365,10 +376,19 @@ def _append_dataclass(b: CodeBuilder, generated: GeneratedDataclass):
365376 b .append (":" ).newline ()
366377
367378 # FIXME should contain class docstring
368- if not generated .description and not generated .experimental :
379+ if (
380+ not generated .description
381+ and not generated .experimental
382+ and not generated .deprecated
383+ ):
369384 b .indent ().append_triple_quote ().append_triple_quote ().newline ().newline ()
370385 else :
371- _append_description (b , generated .description , generated .experimental )
386+ _append_description (
387+ b ,
388+ generated .description ,
389+ experimental = generated .experimental ,
390+ deprecated = generated .deprecated ,
391+ )
372392
373393
374394def _append_field (b : CodeBuilder , field : GeneratedField ):
@@ -446,7 +466,12 @@ def _append_typed_dict(b: CodeBuilder, generated: GeneratedDataclass):
446466 b .indent ().append_triple_quote ().append_triple_quote ().newline ().newline ()
447467
448468
449- def _append_description (b : CodeBuilder , description : Optional [str ], experimental : bool ):
469+ def _append_description (
470+ b : CodeBuilder , description : Optional [str ], * , experimental : bool , deprecated : bool
471+ ):
472+ if deprecated :
473+ description = "[DEPRECATED] " + (description or "" )
474+
450475 if description or experimental :
451476 b .indent ().append_triple_quote ().newline ()
452477 if experimental :
@@ -472,7 +497,12 @@ def get_code(generated: GeneratedDataclass) -> str:
472497
473498 for field in generated .fields :
474499 _append_field (b , field )
475- _append_description (b , field .description , field .experimental )
500+ _append_description (
501+ b ,
502+ field .description ,
503+ experimental = field .experimental ,
504+ deprecated = field .deprecated ,
505+ )
476506
477507 b .newline ()
478508
@@ -485,7 +515,12 @@ def get_code(generated: GeneratedDataclass) -> str:
485515
486516 for field in generated .fields :
487517 _append_typed_dict_field (b , field )
488- _append_description (b , field .description , field .experimental )
518+ _append_description (
519+ b ,
520+ field .description ,
521+ experimental = field .experimental ,
522+ deprecated = field .deprecated ,
523+ )
489524
490525 b .newline ()
491526
0 commit comments