Пример #1
0
  def with_input_types(
      self, input_type_hint, *side_inputs_arg_hints, **side_input_kwarg_hints):
    """Annotates the types of main inputs and side inputs for the PTransform.

    Args:
      input_type_hint: An instance of an allowed built-in type, a custom class,
        or an instance of a typehints.TypeConstraint.
      *side_inputs_arg_hints: A variable length argument composed of
        of an allowed built-in type, a custom class, or a
        typehints.TypeConstraint.
      **side_input_kwarg_hints: A dictionary argument composed of
        of an allowed built-in type, a custom class, or a
        typehints.TypeConstraint.

    Example of annotating the types of side-inputs:
      FlatMap().with_input_types(int, int, bool)

    Raises:
      TypeError: If 'type_hint' is not a valid type-hint. See
        typehints.validate_composite_type_param for further details.

    Returns:
      A reference to the instance of this particular PTransform object. This
      allows chaining type-hinting related methods.
    """
    super(PTransformWithSideInputs, self).with_input_types(input_type_hint)

    for si in side_inputs_arg_hints:
      validate_composite_type_param(si, 'Type hints for a PTransform')
    for si in side_input_kwarg_hints.values():
      validate_composite_type_param(si, 'Type hints for a PTransform')

    self.side_inputs_types = side_inputs_arg_hints
    return WithTypeHints.with_input_types(
        self, input_type_hint, *side_inputs_arg_hints, **side_input_kwarg_hints)
Пример #2
0
  def with_input_types(
      self, input_type_hint, *side_inputs_arg_hints, **side_input_kwarg_hints):
    """Annotates the types of main inputs and side inputs for the PTransform.

    Args:
      input_type_hint: An instance of an allowed built-in type, a custom class,
        or an instance of a typehints.TypeConstraint.
      *side_inputs_arg_hints: A variable length argument composed of
        of an allowed built-in type, a custom class, or a
        typehints.TypeConstraint.
      **side_input_kwarg_hints: A dictionary argument composed of
        of an allowed built-in type, a custom class, or a
        typehints.TypeConstraint.

    Example of annotating the types of side-inputs:
      FlatMap().with_input_types(int, int, bool)

    Raises:
      TypeError: If 'type_hint' is not a valid type-hint. See
        typehints.validate_composite_type_param for further details.

    Returns:
      A reference to the instance of this particular PTransform object. This
      allows chaining type-hinting related methods.
    """
    super(PTransformWithSideInputs, self).with_input_types(input_type_hint)

    for si in side_inputs_arg_hints:
      validate_composite_type_param(si, 'Type hints for a PTransform')
    for si in side_input_kwarg_hints.values():
      validate_composite_type_param(si, 'Type hints for a PTransform')

    self.side_inputs_types = side_inputs_arg_hints
    return WithTypeHints.with_input_types(
        self, input_type_hint, *side_inputs_arg_hints, **side_input_kwarg_hints)
Пример #3
0
  def annotate(f):
    if isinstance(f, types.FunctionType):
      for t in list(positional_hints) + list(keyword_hints.values()):
        validate_composite_type_param(
            t, error_msg_prefix='All type hint arguments')

    get_type_hints(f).set_input_types(*positional_hints, **keyword_hints)
    return f
Пример #4
0
    def annotate(f):
        if isinstance(f, types.FunctionType):
            for t in list(positional_hints) + list(keyword_hints.values()):
                validate_composite_type_param(
                    t, error_msg_prefix='All type hint arguments')

        get_type_hints(f).set_input_types(*positional_hints, **keyword_hints)
        return f
Пример #5
0
  def with_output_types(self, type_hint):
    """Annotates the output type of a PTransform with a type-hint.

    Args:
      type_hint: An instance of an allowed built-in type, a custom class, or a
        typehints.TypeConstraint.

    Raises:
      TypeError: If 'type_hint' is not a valid type-hint. See
        typehints.validate_composite_type_param for further details.

    Returns:
      A reference to the instance of this particular PTransform object. This
      allows chaining type-hinting related methods.
    """
    validate_composite_type_param(type_hint, 'Type hints for a PTransform')
    return super(PTransform, self).with_output_types(type_hint)
Пример #6
0
    def with_output_types(self, type_hint):
        """Annotates the output type of a PTransform with a type-hint.

    Args:
      type_hint: An instance of an allowed built-in type, a custom class, or a
        typehints.TypeConstraint.

    Raises:
      TypeError: If 'type_hint' is not a valid type-hint. See
        typehints.validate_composite_type_param for further details.

    Returns:
      A reference to the instance of this particular PTransform object. This
      allows chaining type-hinting related methods.
    """
        validate_composite_type_param(type_hint, 'Type hints for a PTransform')
        return super(PTransform, self).with_output_types(type_hint)
Пример #7
0
def with_output_types(*return_type_hint, **kwargs):
  """A decorator that type-checks defined type-hints for return values(s).

  This decorator will type-check the return value(s) of the decorated function.

  Only a single type-hint is accepted to specify the return type of the return
  value. If the function to be decorated has multiple return values, then one
  should use: 'Tuple[type_1, type_2]' to annotate the types of the return
  values.

  If the ultimate return value for the function violates the specified type-hint
  a TypeCheckError will be raised detailing the type-constraint violation.

  This decorator is intended to be used like::

    * @with_output_types(Set[Coordinate])
      def parse_ints(ints):
        ....
        return [Coordinate.from_int(i) for i in ints]

  Or with a simple type-hint::

    * @with_output_types(bool)
      def negate(p):
        return not p if p else p

  Args:
    *return_type_hint: A type-hint specifying the proper return type of the
      function. This argument should either be a built-in Python type or an
      instance of a 'TypeConstraint' created by 'indexing' a
      'CompositeTypeHint'.
    **kwargs: Not used.

  Raises:
    ValueError: If any kwarg parameters are passed in, or the length of
      'return_type_hint' is greater than 1. Or if the inner wrapper function
      isn't passed a function object.
    TypeCheckError: If the 'return_type_hint' object is in invalid type-hint.

  Returns:
    The original function decorated such that it enforces type-hint constraints
    for all return values.
  """
  if kwargs:
    raise ValueError("All arguments for the 'returns' decorator must be "
                     "positional arguments.")

  if len(return_type_hint) != 1:
    raise ValueError("'returns' accepts only a single positional argument. In "
                     "order to specify multiple return types, use the 'Tuple' "
                     "type-hint.")

  return_type_hint = return_type_hint[0]

  validate_composite_type_param(
      return_type_hint,
      error_msg_prefix='All type hint arguments'
  )

  def annotate(f):
    get_type_hints(f).set_output_types(return_type_hint)
    return f
  return annotate
Пример #8
0
def with_output_types(*return_type_hint, **kwargs):
    """A decorator that type-checks defined type-hints for return values(s).

  This decorator will type-check the return value(s) of the decorated function.

  Only a single type-hint is accepted to specify the return type of the return
  value. If the function to be decorated has multiple return values, then one
  should use: 'Tuple[type_1, type_2]' to annotate the types of the return
  values.

  If the ultimate return value for the function violates the specified type-hint
  a TypeCheckError will be raised detailing the type-constraint violation.

  This decorator is intended to be used like::

    * @with_output_types(Set[Coordinate])
      def parse_ints(ints):
        ....
        return [Coordinate.from_int(i) for i in ints]

  Or with a simple type-hint::

    * @with_output_types(bool)
      def negate(p):
        return not p if p else p

  Args:
    *return_type_hint: A type-hint specifying the proper return type of the
      function. This argument should either be a built-in Python type or an
      instance of a 'TypeConstraint' created by 'indexing' a
      'CompositeTypeHint'.
    **kwargs: Not used.

  Raises:
    ValueError: If any kwarg parameters are passed in, or the length of
      'return_type_hint' is greater than 1. Or if the inner wrapper function
      isn't passed a function object.
    TypeCheckError: If the 'return_type_hint' object is in invalid type-hint.

  Returns:
    The original function decorated such that it enforces type-hint constraints
    for all return values.
  """
    if kwargs:
        raise ValueError("All arguments for the 'returns' decorator must be "
                         "positional arguments.")

    if len(return_type_hint) != 1:
        raise ValueError(
            "'returns' accepts only a single positional argument. In "
            "order to specify multiple return types, use the 'Tuple' "
            "type-hint.")

    return_type_hint = return_type_hint[0]

    validate_composite_type_param(return_type_hint,
                                  error_msg_prefix='All type hint arguments')

    def annotate(f):
        get_type_hints(f).set_output_types(return_type_hint)
        return f

    return annotate