Exemplo n.º 1
0
 def _run_repeat_test_bad(self, repeat):
   # Various mismatches.
   with self.assertRaises(typehints.TypeCheckError):
     ['a', 'bb', 'c'] | beam.Map(repeat, 'z')
   with self.assertRaises(typehints.TypeCheckError):
     ['a', 'bb', 'c'] | beam.Map(repeat, times='z')
   with self.assertRaises(typehints.TypeCheckError):
     ['a', 'bb', 'c'] | beam.Map(repeat, 3, 4)
   if not getfullargspec(repeat).defaults:
     with self.assertRaises(typehints.TypeCheckError):
       ['a', 'bb', 'c'] | beam.Map(repeat)
 def _run_repeat_test_bad(self, repeat):
   # Various mismatches.
   with self.assertRaises(typehints.TypeCheckError):
     ['a', 'bb', 'c'] | beam.Map(repeat, 'z')
   with self.assertRaises(typehints.TypeCheckError):
     ['a', 'bb', 'c'] | beam.Map(repeat, times='z')
   with self.assertRaises(typehints.TypeCheckError):
     ['a', 'bb', 'c'] | beam.Map(repeat, 3, 4)
   if not getfullargspec(repeat).defaults:
     with self.assertRaises(typehints.TypeCheckError):
       ['a', 'bb', 'c'] | beam.Map(repeat)
Exemplo n.º 3
0
 def _inspect(self):
     """
     Inspect function overrides the way Beam gets argspec.
     """
     wrapped_func = WRAPPED_FUNC.format(func_name)
     if hasattr(self, wrapped_func):
         process_func = getattr(self, wrapped_func)
     else:
         process_func = getattr(self, func_name)
         setattr(self, func_name, _wrap_task_call(process_func))
         setattr(self, wrapped_func, process_func)
     return getfullargspec(process_func)
Exemplo n.º 4
0
    def expand(self, pcoll):
        # Since the PTransform will be implemented entirely as a function
        # (once called), we need to pass through any type-hinting information that
        # may have been annotated via the .with_input_types() and
        # .with_output_types() methods.
        kwargs = dict(self._kwargs)
        args = tuple(self._args)

        # TODO(BEAM-5878) Support keyword-only arguments.
        try:
            if 'type_hints' in getfullargspec(self._fn).args:
                args = (self.get_type_hints(), ) + args
        except TypeError:
            # Might not be a function.
            pass
        return self._fn(pcoll, *args, **kwargs)
Exemplo n.º 5
0
  def expand(self, pcoll):
    # Since the PTransform will be implemented entirely as a function
    # (once called), we need to pass through any type-hinting information that
    # may have been annotated via the .with_input_types() and
    # .with_output_types() methods.
    kwargs = dict(self._kwargs)
    args = tuple(self._args)

    # TODO(BEAM-5878) Support keyword-only arguments.
    try:
      if 'type_hints' in getfullargspec(self._fn).args:
        args = (self.get_type_hints(),) + args
    except TypeError:
      # Might not be a function.
      pass
    return self._fn(pcoll, *args, **kwargs)
Exemplo n.º 6
0
    def _inspect(self):
        """
        Inspect function overrides the way Beam gets argspec.
        """
        wrapped_func = WRAPPED_FUNC.format(func_name)
        if hasattr(self, wrapped_func):
            process_func = getattr(self, wrapped_func)
        else:
            process_func = getattr(self, func_name)
            setattr(self, func_name, _wrap_task_call(process_func))
            setattr(self, wrapped_func, process_func)

        # getfullargspec is deprecated in more recent beam versions and get_function_args_defaults
        # (which uses Signatures internally) should be used instead.
        try:
            from apache_beam.transforms.core import get_function_args_defaults

            return get_function_args_defaults(process_func)
        except ImportError:
            return getfullargspec(process_func)
 def wrapper(*args, **kwargs):
   hints = get_type_hints(f)
   if hints.input_types:  # pylint: disable=too-many-nested-blocks
     input_hints = getcallargs_forhints(
         f, *hints.input_types[0], **hints.input_types[1])
     inputs = inspect.getcallargs(f, *args, **kwargs)
     for var, hint in input_hints.items():
       value = inputs[var]
       new_value = check_or_interleave(hint, value, var)
       if new_value is not value:
         if var in kwargs:
           kwargs[var] = new_value
         else:
           args = list(args)
           for ix, pvar in enumerate(getfullargspec(f).args):
             if pvar == var:
               args[ix] = new_value
               break
           else:
             raise NotImplementedError('Iterable in nested argument %s' % var)
   res = f(*args, **kwargs)
   return check_or_interleave(hints.simple_output_type('typecheck'), res, None)
Exemplo n.º 8
0
 def wrapper(*args, **kwargs):
     hints = get_type_hints(f)
     if hints.input_types:  # pylint: disable=too-many-nested-blocks
         input_hints = getcallargs_forhints(f, *hints.input_types[0],
                                            **hints.input_types[1])
         inputs = inspect.getcallargs(f, *args, **kwargs)
         for var, hint in input_hints.items():
             value = inputs[var]
             new_value = check_or_interleave(hint, value, var)
             if new_value is not value:
                 if var in kwargs:
                     kwargs[var] = new_value
                 else:
                     args = list(args)
                     for ix, pvar in enumerate(getfullargspec(f).args):
                         if pvar == var:
                             args[ix] = new_value
                             break
                     else:
                         raise NotImplementedError(
                             'Iterable in nested argument %s' % var)
     res = f(*args, **kwargs)
     return check_or_interleave(hints.simple_output_type('typecheck'), res,
                                None)