@@ -100,14 +100,16 @@ def types(self):
100100 def is_link (self ) -> bool :
101101 return issubclass (self .types [0 ], Node )
102102
103- def validate (self , value , ignore = None ):
103+ def validate (self , value , ignore = None , seen = None ):
104104 """
105105 Check whether `value` satisfies all constraints.
106106
107107 Arguments:
108108 value: the value to be checked
109109 ignore: an optional list of check types that should be ignored
110110 ("required", "type", "multiplicity")
111+ seen: for internal use: contains a set with Python object ids that have
112+ already been encountered in the validation tree.
111113
112114 Returns a dict containing information about any validation failures.
113115 """
@@ -131,11 +133,10 @@ def validate(self, value, ignore=None):
131133 else :
132134 item_type = f"value contains { type (item )} "
133135 failures ["type" ].append (
134- f"{ self .name } : Expected { ', ' .join (t .__name__ for t in self .types )} , " +
135- item_type
136+ f"{ self .name } : Expected { ', ' .join (t .__name__ for t in self .types )} , " + item_type
136137 )
137138 elif isinstance (item , (Node , IRI )):
138- failures .update (item .validate (ignore = ignore ))
139+ failures .update (item ._validate (ignore = ignore , seen = seen ))
139140 if self .min_items :
140141 if len (value ) < self .min_items and "multiplicity" not in ignore :
141142 failures ["multiplicity" ].append (
@@ -167,11 +168,10 @@ def validate(self, value, ignore=None):
167168 else :
168169 value_type = f"value contains { type (value )} "
169170 failures ["type" ].append (
170- f"{ self .name } : Expected { ', ' .join (t .__name__ for t in self .types )} , " +
171- value_type
171+ f"{ self .name } : Expected { ', ' .join (t .__name__ for t in self .types )} , " + value_type
172172 )
173173 elif isinstance (value , (Node , IRI )):
174- failures .update (value .validate (ignore = ignore ))
174+ failures .update (value ._validate (ignore = ignore , seen = seen ))
175175 # todo: check formatting, multiline
176176 return failures
177177
0 commit comments