Example #1
0
    def to_structural_def(self, node, class_name):
        """Convert this Unknown to a pytd.Class."""
        self_param = (pytd.Parameter("self", pytd.AnythingType(),
                                     pytd.ParameterKind.REGULAR, False,
                                     None), )
        starargs = None
        starstarargs = None

        def _make_sig(args, ret):
            return pytd.Signature(self_param + self._make_params(node, args),
                                  starargs,
                                  starstarargs,
                                  return_type=Unknown._to_pytd(node, ret),
                                  exceptions=(),
                                  template=())

        calls = tuple(
            pytd_utils.OrderedSet(
                _make_sig(args, ret) for args, _, ret in self._calls))
        if calls:
            methods = (pytd.Function("__call__", calls,
                                     pytd.MethodKind.METHOD), )
        else:
            methods = ()
        return pytd.Class(name=class_name,
                          metaclass=None,
                          bases=(pytd.NamedType("builtins.object"), ),
                          methods=methods,
                          constants=tuple(
                              pytd.Constant(name, Unknown._to_pytd(node, c))
                              for name, c in self.members.items()),
                          classes=(),
                          decorators=(),
                          slots=None,
                          template=())
Example #2
0
 def test_ordered_set(self):
     ordered_set = pytd_utils.OrderedSet(n // 2 for n in range(10))
     ordered_set.add(-42)
     ordered_set.add(3)
     self.assertEqual(tuple(ordered_set), (0, 1, 2, 3, 4, -42))
Example #3
0
 def VisitFunction(self, node):
     # We remove duplicates, but keep existing entries in the same order.
     return node.Replace(
         signatures=tuple(pytd_utils.OrderedSet(node.signatures)))