示例#1
0
    def test_duplicates_module_depth(self):
        class Parent(object):
            pass

        tf = types.ModuleType('tf')
        tf.__file__ = '/tmp/tf/__init__.py'
        tf.submodule = types.ModuleType('submodule')
        tf.submodule.submodule2 = types.ModuleType('submodule2')
        tf.Parent = Parent
        tf.submodule.submodule2.Parent = Parent

        visitor = generate_lib.extract([('tf', tf)],
                                       base_dir=os.path.dirname(tf.__file__),
                                       private_map={},
                                       do_not_descend_map={},
                                       visitor_cls=NoDunderVisitor)

        self.assertEqual(
            {
                'tf.Parent':
                sorted(['tf.Parent', 'tf.submodule.submodule2.Parent']),
            }, visitor.duplicates)

        self.assertEqual({'tf.submodule.submodule2.Parent': 'tf.Parent'},
                         visitor.duplicate_of)

        self.assertEqual(
            {
                id(tf): 'tf',
                id(tf.submodule): 'tf.submodule',
                id(tf.submodule.submodule2): 'tf.submodule.submodule2',
                id(Parent): 'tf.Parent',
            }, visitor.reverse_index)
    def test_duplicates_name(self):
        class Parent(object):
            obj1 = object()

        Parent.obj2 = Parent.obj1

        tf = types.ModuleType('tf')
        tf.__file__ = '/tmp/tf/__init__.py'
        tf.submodule = types.ModuleType('submodule')
        tf.submodule.Parent = Parent

        visitor = generate_lib.extract([('tf', tf)],
                                       base_dir=os.path.dirname(tf.__file__),
                                       private_map={},
                                       visitor_cls=NoDunderVisitor)
        self.assertEqual(
            sorted([
                'tf.submodule.Parent.obj1',
                'tf.submodule.Parent.obj2',
            ]), visitor.duplicates['tf.submodule.Parent.obj1'])

        self.assertEqual(
            {
                'tf.submodule.Parent.obj2': 'tf.submodule.Parent.obj1',
            }, visitor.duplicate_of)

        self.assertEqual(
            {
                id(tf): 'tf',
                id(tf.submodule): 'tf.submodule',
                id(Parent): 'tf.submodule.Parent',
                id(Parent.obj1): 'tf.submodule.Parent.obj1',
            }, visitor.reverse_index)
    def test_duplicates_defining_class(self):
        class Parent(object):
            obj1 = object()

        class Child(Parent):
            pass

        tf = types.ModuleType('tf')
        tf.__file__ = '/tmp/tf/__init__.py'
        tf.Parent = Parent
        tf.Child = Child

        visitor = generate_lib.extract([('tf', tf)],
                                       base_dir=os.path.dirname(tf.__file__),
                                       private_map={},
                                       do_not_descend_map={},
                                       visitor_cls=NoDunderVisitor)

        self.assertEqual(sorted([
            'tf.Parent.obj1',
            'tf.Child.obj1',
        ]), visitor.duplicates['tf.Parent.obj1'])

        self.assertEqual({
            'tf.Child.obj1': 'tf.Parent.obj1',
        }, visitor.duplicate_of)

        self.assertEqual(
            {
                id(tf): 'tf',
                id(Parent): 'tf.Parent',
                id(Child): 'tf.Child',
                id(Parent.obj1): 'tf.Parent.obj1',
            }, visitor.reverse_index)
示例#4
0
    def test_duplicates_contrib(self):
        class Parent(object):
            pass

        tf = types.ModuleType('tf')
        tf.__file__ = '/tmp/tf/__init__.py'
        tf.contrib = types.ModuleType('contrib')
        tf.submodule = types.ModuleType('submodule')
        tf.contrib.Parent = Parent
        tf.submodule.Parent = Parent

        visitor = generate_lib.extract([('tf', tf)],
                                       base_dir=os.path.dirname(tf.__file__),
                                       private_map={},
                                       visitor_cls=NoDunderVisitor)

        self.assertCountEqual(['tf.contrib.Parent', 'tf.submodule.Parent'],
                              visitor.duplicates['tf.submodule.Parent'])

        self.assertEqual({
            'tf.contrib.Parent': 'tf.submodule.Parent',
        }, visitor.duplicate_of)

        self.assertEqual(
            {
                id(tf): 'tf',
                id(tf.submodule): 'tf.submodule',
                id(Parent): 'tf.submodule.Parent',
                id(tf.contrib): 'tf.contrib',
            }, visitor.reverse_index)
  def test_duplicates_module_depth(self):

    class Parent(object):
      pass

    tf = types.ModuleType('tf')
    tf.__file__ = '/tmp/tf/__init__.py'
    tf.submodule = types.ModuleType('submodule')
    tf.submodule.submodule2 = types.ModuleType('submodule2')
    tf.Parent = Parent
    tf.submodule.submodule2.Parent = Parent

    visitor = generate_lib.extract(
        [('tf', tf)],
        base_dir=os.path.dirname(tf.__file__),
        private_map={},
        do_not_descend_map={},
        visitor_cls=NoDunderVisitor)

    self.assertEqual({
        'tf.Parent': sorted(['tf.Parent', 'tf.submodule.submodule2.Parent']),
    }, visitor.duplicates)

    self.assertEqual({
        'tf.submodule.submodule2.Parent': 'tf.Parent'
    }, visitor.duplicate_of)

    self.assertEqual({
        id(tf): 'tf',
        id(tf.submodule): 'tf.submodule',
        id(tf.submodule.submodule2): 'tf.submodule.submodule2',
        id(Parent): 'tf.Parent',
    }, visitor.reverse_index)
    def test_duplicates_defining_class(self):
        class Parent(object):
            obj1 = object()

        class Child(Parent):
            pass

        tf = types.ModuleType('tf')
        tf.Parent = Parent
        tf.Child = Child

        visitor = generate_lib.extract([('tf', tf)],
                                       private_map={},
                                       do_not_descend_map={},
                                       visitor_cls=NoDunderVisitor)

        self.assertEqual(
            {
                'tf.Parent.obj1': sorted([
                    'tf.Parent.obj1',
                    'tf.Child.obj1',
                ]),
            }, visitor.duplicates)

        self.assertEqual({
            'tf.Child.obj1': 'tf.Parent.obj1',
        }, visitor.duplicate_of)

        self.assertEqual(
            {
                id(tf): 'tf',
                id(Parent): 'tf.Parent',
                id(Child): 'tf.Child',
                id(Parent.obj1): 'tf.Parent.obj1',
            }, visitor.reverse_index)
    def test_duplicates_contrib(self):
        class Parent(object):
            pass

        tf = types.ModuleType('tf')
        tf.contrib = types.ModuleType('contrib')
        tf.submodule = types.ModuleType('submodule')
        tf.contrib.Parent = Parent
        tf.submodule.Parent = Parent

        visitor = generate_lib.extract([('tf', tf)],
                                       private_map={},
                                       do_not_descend_map={},
                                       visitor_cls=NoDunderVisitor)

        self.assertEqual(
            {
                'tf.submodule.Parent':
                sorted(['tf.contrib.Parent', 'tf.submodule.Parent']),
            }, visitor.duplicates)

        self.assertEqual({
            'tf.contrib.Parent': 'tf.submodule.Parent',
        }, visitor.duplicate_of)

        self.assertEqual(
            {
                id(tf): 'tf',
                id(tf.submodule): 'tf.submodule',
                id(Parent): 'tf.submodule.Parent',
                id(tf.contrib): 'tf.contrib',
            }, visitor.reverse_index)
示例#8
0
    def test_api_tree_toc_integration(self):
        tf = self._make_fake_module()

        visitor = generate_lib.extract([('tf', tf)],
                                       base_dir=os.path.dirname(tf.__file__),
                                       private_map={},
                                       visitor_cls=NoDunderVisitor)

        api_tree = doc_generator_visitor.ApiTree.from_path_tree(
            visitor.path_tree, visitor._score_name)

        toc = toc_lib.TocBuilder(site_path='/').build(api_tree)

        stream = io.StringIO()
        toc.write(stream)

        expected = textwrap.dedent("""\
        toc:
        - title: tf
          section:
          - title: Overview
            path: /tf
          - title: Outer
            path: /tf/Outer
          - title: Outer.Nested
            path: /tf/Outer/Nested
          - title: fun1
            path: /tf/fun1
          - title: sub1
            section:
            - title: Overview
              path: /tf/sub1
            - title: Parent
              path: /tf/sub1/Parent
          - title: sub2
            section:
            - title: Overview
              path: /tf/sub2
            - title: Child
              path: /tf/sub2/Child
            - title: fun2
              path: /tf/sub2/fun2
        """)

        self.assertEqual(expected, stream.getvalue())
示例#9
0
    def test_handles_duplicate_singleton_attributes(self):
        class MyClass:
            simple = 1

        tf = types.ModuleType('fake_tf')
        tf.__file__ = '/tmp/tf/__init__.py'
        tf.MyClass = MyClass
        tf.sub = types.ModuleType('sub')
        tf.sub.MyClass = MyClass

        visitor = generate_lib.extract([('tf', tf)],
                                       base_dir=os.path.dirname(tf.__file__),
                                       private_map={},
                                       visitor_cls=NoDunderVisitor)

        paths = ['.'.join(p) for p in visitor.path_tree.keys()]

        expected = [
            '',
            'tf',
            'tf.MyClass',
            'tf.MyClass.simple',
            'tf.sub',
            'tf.sub.MyClass',
            'tf.sub.MyClass.simple',
        ]
        self.assertCountEqual(expected, paths)

        apis = ['.'.join(p) for p in visitor.api_tree.keys()]
        expected = [
            '',
            'tf',
            'tf.MyClass',
            'tf.MyClass.simple',
            'tf.sub',
            'tf.sub.MyClass',
            'tf.sub.MyClass.simple',
        ]
        self.assertCountEqual(expected, apis)

        self.assertIs(visitor.api_tree[('tf', 'MyClass')],
                      visitor.api_tree[('tf', 'sub', 'MyClass')])
        self.assertIs(visitor.api_tree[('tf', 'MyClass', 'simple')],
                      visitor.api_tree[('tf', 'sub', 'MyClass', 'simple')])
示例#10
0
    def test_handles_duplicate_classmethods(self):
        class MyClass:
            @classmethod
            def from_value(cls, value):
                pass

        tf = types.ModuleType('fake_tf')
        tf.__file__ = '/tmp/tf/__init__.py'
        tf.MyClass = MyClass
        tf.sub = types.ModuleType('sub')
        tf.sub.MyClass = MyClass

        visitor = generate_lib.extract([('tf', tf)],
                                       base_dir=os.path.dirname(tf.__file__),
                                       private_map={},
                                       visitor_cls=NoDunderVisitor)

        paths = ['.'.join(p) for p in visitor.path_tree.keys()]

        expected = [
            '',
            'tf',
            'tf.MyClass',
            'tf.MyClass.from_value',
            'tf.sub',
            'tf.sub.MyClass',
            'tf.sub.MyClass.from_value',
        ]
        self.assertCountEqual(expected, paths)

        apis = [node.full_name for node in visitor.api_tree.iter_nodes()]
        expected = [
            'tf',
            'tf.sub',
            'tf.sub.MyClass',
            'tf.sub.MyClass.from_value',
        ]
        self.assertCountEqual(expected, apis)

        self.assertIs(visitor.api_tree[('tf', 'MyClass')],
                      visitor.api_tree[('tf', 'sub', 'MyClass')])
        self.assertIs(visitor.api_tree[('tf', 'MyClass', 'from_value')],
                      visitor.api_tree[('tf', 'sub', 'MyClass', 'from_value')])
  def test_duplicates_defining_class(self):

    class Parent(object):
      obj1 = object()

    class Child(Parent):
      pass

    tf = types.ModuleType('tf')
    tf.__file__ = '/tmp/tf/__init__.py'
    tf.Parent = Parent
    tf.Child = Child

    visitor = generate_lib.extract(
        [('tf', tf)],
        base_dir=os.path.dirname(tf.__file__),
        private_map={},
        do_not_descend_map={},
        visitor_cls=NoDunderVisitor)

    self.assertEqual({
        'tf.Parent.obj1': sorted([
            'tf.Parent.obj1',
            'tf.Child.obj1',
        ]),
    }, visitor.duplicates)

    self.assertEqual({
        'tf.Child.obj1': 'tf.Parent.obj1',
    }, visitor.duplicate_of)

    self.assertEqual({
        id(tf): 'tf',
        id(Parent): 'tf.Parent',
        id(Child): 'tf.Child',
        id(Parent.obj1): 'tf.Parent.obj1',
    }, visitor.reverse_index)
示例#12
0
    def test_duplicates_name(self):
        class Parent(object):
            obj1 = object()

        Parent.obj2 = Parent.obj1

        tf = types.ModuleType('tf')
        tf.submodule = types.ModuleType('submodule')
        tf.submodule.Parent = Parent

        visitor = generate_lib.extract([('tf', tf)],
                                       private_map={},
                                       do_not_descend_map={},
                                       visitor_cls=NoDunderVisitor)

        self.assertEqual(
            {
                'tf.submodule.Parent.obj1':
                sorted([
                    'tf.submodule.Parent.obj1',
                    'tf.submodule.Parent.obj2',
                ]),
            }, visitor.duplicates)

        self.assertEqual(
            {
                'tf.submodule.Parent.obj2': 'tf.submodule.Parent.obj1',
            }, visitor.duplicate_of)

        self.assertEqual(
            {
                id(tf): 'tf',
                id(tf.submodule): 'tf.submodule',
                id(Parent): 'tf.submodule.Parent',
                id(Parent.obj1): 'tf.submodule.Parent.obj1',
            }, visitor.reverse_index)