示例#1
0
  def type_check_inputs(self, pvalueish):
    type_hints = self.get_type_hints().input_types
    if type_hints:
      args, kwargs = self.raw_side_inputs

      def element_type(side_input):
        if isinstance(side_input, pvalue.AsSideInput):
          return side_input.element_type
        else:
          return instance_to_type(side_input)
      arg_types = [pvalueish.element_type] + [element_type(v) for v in args]
      kwargs_types = {k: element_type(v) for (k, v) in kwargs.items()}
      argspec_fn = self.process_argspec_fn()
      bindings = getcallargs_forhints(argspec_fn, *arg_types, **kwargs_types)
      hints = getcallargs_forhints(argspec_fn, *type_hints[0], **type_hints[1])
      for arg, hint in hints.items():
        if arg.startswith('%unknown%'):
          continue
        if hint is None:
          continue
        if not typehints.is_consistent_with(
            bindings.get(arg, typehints.Any), hint):
          raise typehints.TypeCheckError(
              'Type hint violation for \'%s\': requires %s but got %s for %s'
              % (self.label, hint, bindings[arg], arg))
示例#2
0
文件: ptransform.py 项目: zhpshu/beam
    def type_check_inputs(self, pvalueish):
        type_hints = self.get_type_hints().input_types
        if type_hints:
            args, kwargs = self.raw_side_inputs

            def element_type(side_input):
                if isinstance(side_input, pvalue.AsSideInput):
                    return side_input.element_type
                return instance_to_type(side_input)

            arg_types = [pvalueish.element_type
                         ] + [element_type(v) for v in args]
            kwargs_types = {k: element_type(v) for (k, v) in kwargs.items()}
            argspec_fn = self.process_argspec_fn()
            bindings = getcallargs_forhints(argspec_fn, *arg_types,
                                            **kwargs_types)
            hints = getcallargs_forhints(argspec_fn, *type_hints[0],
                                         **type_hints[1])
            for arg, hint in hints.items():
                if arg.startswith('%unknown%'):
                    continue
                if hint is None:
                    continue
                if not typehints.is_consistent_with(
                        bindings.get(arg, typehints.Any), hint):
                    raise typehints.TypeCheckError(
                        'Type hint violation for \'%s\': requires %s but got %s for %s'
                        % (self.label, hint, bindings[arg], arg))