@@ -562,21 +562,24 @@ def schema(cls, as_dict=False, locale: Any = None):
562
562
else :
563
563
ref_info = {}
564
564
565
- minimum = field .metadata .get ('min' , None )
566
- maximum = field .metadata .get ('max' , None )
567
- secret = field .metadata .get ('secret' , None )
565
+ _metadata = field .metadata .copy ()
566
+
567
+ minimum = _metadata .pop ('min' , None )
568
+ maximum = _metadata .pop ('max' , None )
569
+ secret = _metadata .pop ('secret' , None )
570
+
568
571
# custom endpoint for every field:
569
- custom_endpoint = field . metadata . get ('endpoint' , None )
572
+ custom_endpoint = _metadata . pop ('endpoint' , None )
570
573
571
574
if field .metadata .get ('required' , False ) or field .metadata .get ('primary' , False ):
572
575
required .append (name )
573
576
574
577
# UI objects:
575
578
ui_objects = {
576
- k .replace ('_' , ':' ): v for k , v in field . metadata .items () if k .startswith ('ui_' )
579
+ k .replace ('_' , ':' ): v for k , v in _metadata .items () if k .startswith ('ui_' )
577
580
}
578
581
# schema_extra:
579
- schema_extra = field . metadata . get ('schema_extra' , {})
582
+ schema_extra = _metadata . pop ('schema_extra' , {})
580
583
meta_description = cls ._get_metadata (
581
584
cls ,
582
585
field ,
@@ -602,14 +605,35 @@ def schema(cls, as_dict=False, locale: Any = None):
602
605
fields [name ]["endpoint" ] = custom_endpoint
603
606
604
607
if 'write_only' in field .metadata :
605
- fields [name ]["writeOnly" ] = field . metadata . get ('write_only' , False )
608
+ fields [name ]["writeOnly" ] = _metadata . pop ('write_only' , False )
606
609
607
610
if 'pattern' in field .metadata :
608
- fields [name ]["attrs" ]["pattern" ] = field . metadata [ 'pattern' ]
611
+ fields [name ]["attrs" ]["pattern" ] = _metadata . pop ( 'pattern' )
609
612
610
613
if field .repr is False :
611
614
fields [name ]["attrs" ]["visible" ] = False
612
615
616
+ _meta = {}
617
+ _rejected = [
618
+ 'required' ,
619
+ 'nullable' ,
620
+ 'primary' ,
621
+ 'readonly' ,
622
+ 'label' ,
623
+ 'validator' ,
624
+ 'encoder' ,
625
+ 'decoder'
626
+ ]
627
+ for key , val in _metadata .items ():
628
+ if key not in _rejected :
629
+ _meta [key ] = val
630
+
631
+ if _meta :
632
+ fields [name ]["attrs" ] = {
633
+ ** fields [name ]["attrs" ],
634
+ ** _meta
635
+ }
636
+
613
637
if field .default :
614
638
d = field .default
615
639
if is_callable (d ):
0 commit comments