class V: v1: +v(int) v2: +v(str) @validate() def ver1(self): return len(self.v2) > self.v1 @validate() def ver2(self, context: ValidationContext): context.put(ver2=True) return self.v1 > context.value
class V: v1: v([int]) = [1] v2: +v([int]) = [2] v3: v([("c2", int)]) = [3] v4: v([E]) = [E.E5] v5: v([p(int, base=2)]) = [5] v6: v([int], [gt0]) = [6] v7: v([int], [gt0], [lt]) = [7] v8: v([int], [gt0], longer) = [8]
class V: v1: +v(int) v2: +v(int) v3: +v(int) @validate() def ver1(self): return self.v1 > 0 @validate(v1=True) def ver2(self): return self.v1 > 0 @validate(v1=True, v2=True) def ver3(self): return self.v1 > 0 @validate(v1=True, v3=False) def ver4(self): return self.v1 > 0
class V: v1: +v({P}) = None v2: +v({Q}) = None
class C: v1: v({D})
class C: c1: +v([int], [gt0]) = [1] c2: +v(int, gt0) = 2
class V: v1: +v(int) v2: +v(str) v3: +v({U})
class D: v2: v(int)
class V: v1: v(lambda x: 0 if x is None else 1) v2: v([int])
class U: u1: +v(int)
class V: # don't fail v1: v(str) = "v1" # required v2: +v(str) = "v2" # converter v3: v(int) = 3 # converter without default v4: v(int) # named converter v5: v(("c5", int)) = 5 # Enum v6: v(E) = E.E2 # converter with partial v7: v(p(int, base=2)) = 7 # verifier v8: v(int, gt0) = 8 # verifier without default v9: v(int, gt0) # multiple verifiers v10: v(int, gt0, lt) = 10 # named verifier v11: v(int, ("v13", gt0)) = 11 # verifier with partial v12: v(int, p(gt, th=0)) = 12
class Requirement: v1 = None v2: int v3: v(int) v4: +v(int) v5: v(int) & None | ...= 5
class P: p1: +v({Q}) = None p2: +v({Q}) = None
class C: v1: v(int)
class Q: q1: +v(int) q2: +v(int)
class V: v1: +v({P}) = None v2: +v([{P}]) = []
class P: p1: +v({C}) = None p2: +v([{C}]) = []
class C: c1: +v([int]) = [1] c2: +v(int) = 2
class C: v1: v(int, key="value-1")