code: def validate(self, name: str, obj):
      super().validate(name, obj)
      unknown_keys = set(obj.keys()) - set(self.checkers.keys())
      if len(unknown_keys) != 0:
          raise ValidationError(
              f"unknown keys in {name}: {unknown_keys}"
          )
      for k, (checker, required) in self.checkers.items():
          if required and k not in obj:
              raise ValidationError(f"{name} missing required key {k}.")
          if k in obj:
              checker.validate(f"{name}.{k}", obj[k])
  
imports: from typing import Union, Dict, Pattern, Callable, Any, List, Optional
  import re
  import logging
label_desc: Use image node_id 3 for calling the KeyedValidator obj's underlying member method code with example usage: obj.validate(name, obj) without return types