@@ -123,13 +123,18 @@ def default_deserializer(_cls: Type[Any], obj: Any) -> Any:
123123 """
124124
125125
126- def _get_by_aliases (d : Dict [str , str ], aliases : List [str ]) -> str :
126+ def _get_by_aliases (
127+ d : Dict [str , str ], aliases : List [str ], raise_error : bool = True
128+ ) -> Optional [str ]:
127129 if not aliases :
128- raise KeyError ("Tried all aliases, but key not found" )
130+ if raise_error :
131+ raise KeyError ("Tried all aliases, but key not found" )
132+ else :
133+ return None
129134 if aliases [0 ] in d :
130135 return d [aliases [0 ]]
131136 else :
132- return _get_by_aliases (d , aliases [1 :])
137+ return _get_by_aliases (d , aliases [1 :], raise_error = raise_error )
133138
134139
135140def _exists_by_aliases (d : Dict [str , str ], aliases : List [str ]) -> bool :
@@ -804,7 +809,13 @@ def opt(self, arg: DeField[Any]) -> str:
804809 if arg .iterbased :
805810 exists = f"{ arg .data } is not None"
806811 else :
807- exists = f'{ arg .datavar } .get("{ arg .conv_name ()} ") is not None'
812+ name = arg .conv_name ()
813+ if arg .alias :
814+ aliases = (f'"{ s } "' for s in [name , * arg .alias ])
815+ get = f"_get_by_aliases(data, [{ ',' .join (aliases )} ], raise_error=False)"
816+ else :
817+ get = f'{ arg .datavar } .get("{ name } ")'
818+ exists = f"{ get } is not None"
808819 return f"({ self .render (value_arg )} ) if { exists } else None"
809820
810821 def list (self , arg : DeField [Any ]) -> str :
0 commit comments