@@ -132,12 +132,14 @@ class RawModel(ModelBase):
132132
133133 :param str name: The model public name
134134 :param str mask: an optional default model mask
135+ :param bool strict: validation should raise error when there is param not provided in schema
135136 """
136137
137138 wrapper = dict
138139
139140 def __init__ (self , name , * args , ** kwargs ):
140141 self .__mask__ = kwargs .pop ("mask" , None )
142+ self .__strict__ = kwargs .pop ("strict" , False )
141143 if self .__mask__ and not isinstance (self .__mask__ , Mask ):
142144 self .__mask__ = Mask (self .__mask__ )
143145 super (RawModel , self ).__init__ (name , * args , ** kwargs )
@@ -160,15 +162,18 @@ def _schema(self):
160162 if getattr (field , "discriminator" , False ):
161163 discriminator = name
162164
163- return not_none (
164- {
165- "required" : sorted (list (required )) or None ,
166- "properties" : properties ,
167- "discriminator" : discriminator ,
168- "x-mask" : str (self .__mask__ ) if self .__mask__ else None ,
169- "type" : "object" ,
170- }
171- )
165+ definition = {
166+ "required" : sorted (list (required )) or None ,
167+ "properties" : properties ,
168+ "discriminator" : discriminator ,
169+ "x-mask" : str (self .__mask__ ) if self .__mask__ else None ,
170+ "type" : "object" ,
171+ }
172+
173+ if self .__strict__ :
174+ definition ['additionalProperties' ] = False
175+
176+ return not_none (definition )
172177
173178 @cached_property
174179 def resolved (self ):
@@ -240,6 +245,7 @@ def __deepcopy__(self, memo):
240245 self .name ,
241246 [(key , copy .deepcopy (value , memo )) for key , value in iteritems (self )],
242247 mask = self .__mask__ ,
248+ strict = self .__strict__ ,
243249 )
244250 obj .__parents__ = self .__parents__
245251 return obj
0 commit comments