Exemplo n.º 1
0
    def process_args(self, args):
        r'''Processes `args`.

        Returns none.
        '''
        private_classes = []
        private_functions = []
        public_classes = []
        public_functions = []
        generator = documentationtools.yield_all_modules(
            code_root=args.path,
            visit_private_modules=True,
            )
        for module in generator:
            module_file_name = module.__file__
            if module_file_name.endswith('.pyc'):
                module_file_name = module_file_name[:-1]
            with open(module_file_name, 'r') as f:
                lines = f.readlines()
                for line in lines:
                    if line.startswith('def '):
                        name = line.split()[1].partition('(')[0]
                        payload = (name, os.path.relpath(module_file_name))
                        if name.startswith('_'):
                            private_functions.append(payload)
                        else:
                            public_functions.append(payload)
                    elif line.startswith('class '):
                        name = line.split()[1].partition('(')[0]
                        payload = (name, os.path.relpath(module_file_name))
                        if name.startswith('_'):
                            private_classes.append(payload)
                        else:
                            public_classes.append(payload)
        print('PUBLIC FUNCTIONS:  {}'.format(len(public_functions)))
        print('PUBLIC CLASSES:    {}'.format(len(public_classes)))
        print('PRIVATE FUNCTIONS: {}'.format(len(private_functions)))
        if args.verbose:
            for x in private_functions:
                name, file_name = x
                print('\t{}:'.format(file_name))
                print('\t\t{}'.format(name))
        print('PRIVATE CLASSES:   {}'.format(len(private_classes)))
        if args.verbose:
            for x in private_classes:
                name, file_name = x
                print('\t{}:'.format(file_name))
                print('\t\t{}'.format(name))
Exemplo n.º 2
0
    def process_args(self, args):
        r'''Processes `args`.

        Returns none.
        '''
        private_classes = []
        private_functions = []
        public_classes = []
        public_functions = []
        generator = documentationtools.yield_all_modules(
            code_root=args.path,
            visit_private_modules=True,
        )
        for module in generator:
            module_file_name = module.__file__
            if module_file_name.endswith('.pyc'):
                module_file_name = module_file_name[:-1]
            with open(module_file_name, 'r') as f:
                lines = f.readlines()
                for line in lines:
                    if line.startswith('def '):
                        name = line.split()[1].partition('(')[0]
                        payload = (name, os.path.relpath(module_file_name))
                        if name.startswith('_'):
                            private_functions.append(payload)
                        else:
                            public_functions.append(payload)
                    elif line.startswith('class '):
                        name = line.split()[1].partition('(')[0]
                        payload = (name, os.path.relpath(module_file_name))
                        if name.startswith('_'):
                            private_classes.append(payload)
                        else:
                            public_classes.append(payload)
        print('PUBLIC FUNCTIONS:  {}'.format(len(public_functions)))
        print('PUBLIC CLASSES:    {}'.format(len(public_classes)))
        print('PRIVATE FUNCTIONS: {}'.format(len(private_functions)))
        if args.verbose:
            for x in private_functions:
                name, file_name = x
                print('\t{}:'.format(file_name))
                print('\t\t{}'.format(name))
        print('PRIVATE CLASSES:   {}'.format(len(private_classes)))
        if args.verbose:
            for x in private_classes:
                name, file_name = x
                print('\t{}:'.format(file_name))
                print('\t\t{}'.format(name))
Exemplo n.º 3
0
    def _process_args(self, args):
        from abjad.tools import documentationtools
        path = args.path
        if not os.path.isdir(path):
            path = os.path.dirname(path)
        counts = self._setup_counts()
        for module in documentationtools.yield_all_modules(
                code_root=path,
                ignored_file_names=[],
        ):
            with open(module.__file__, 'r') as file_pointer:
                contents = file_pointer.read()
                counts['source_lines'] += contents.count('\n')
            for obj in self._iterate_module(module):
                if isinstance(obj, types.FunctionType):
                    if obj.__name__.startswith('_'):
                        counts['private_functions'] += 1
                    else:
                        counts['public_functions'] += 1
                elif isinstance(obj, type):
                    if obj.__name__.startswith('_'):
                        counts['private_classes'] += 1
                    else:
                        counts['public_classes'] += 1
                        for attr in inspect.classify_class_attrs(obj):
                            if attr.defining_class != obj:
                                continue
                            if attr.kind in ('method', 'class method',
                                             'static method'):
                                if attr.name.startswith('_'):
                                    counts['unique_private_methods'] += 1
                                else:
                                    counts['unique_public_methods'] += 1
                            elif attr.kind in ('property,'):
                                if attr.name.startswith('_'):
                                    counts['unique_private_properties'] += 1
                                else:
                                    counts['unique_public_properties'] += 1

        self._print_results(counts)
Exemplo n.º 4
0
def yield_all_functions(
    code_root=None,
    include_private_objects=False,
    root_package_name=None,
    ):
    r'''Yields all functions in `code_root`.

    Returns generator.
    '''
    from abjad.tools import documentationtools
    for module in documentationtools.yield_all_modules(
        code_root=code_root,
        root_package_name=root_package_name,
        ):
        name = module.__name__.split('.')[-1]
        if not include_private_objects and name.startswith('_'):
            continue
        if not hasattr(module, name):
            continue
        obj = getattr(module, name)
        if isinstance(obj, types.FunctionType):
            yield obj
Exemplo n.º 5
0
def yield_all_classes(
    code_root=None,
    include_private_objects=False,
    root_package_name=None,
):
    r'''Yields all classes encountered in `code_root`.

    Returns generator.
    '''
    from abjad.tools import documentationtools
    for module in documentationtools.yield_all_modules(
            code_root=code_root,
            root_package_name=root_package_name,
    ):
        name = module.__name__.split('.')[-1]
        if not include_private_objects and name.startswith('_'):
            continue
        if not hasattr(module, name):
            continue
        obj = getattr(module, name)
        if isinstance(obj, type):
            yield obj
Exemplo n.º 6
0
    def _process_args(self, args):
        from abjad.tools import documentationtools
        path = args.path
        if not os.path.isdir(path):
            path = os.path.dirname(path)
        counts = self._setup_counts()
        for module in documentationtools.yield_all_modules(
            code_root=path,
            ignored_file_names=[],
            ):
            with open(module.__file__, 'r') as file_pointer:
                contents = file_pointer.read()
                counts['source_lines'] += contents.count('\n')
            for obj in self._iterate_module(module):
                if isinstance(obj, types.FunctionType):
                    if obj.__name__.startswith('_'):
                        counts['private_functions'] += 1
                    else:
                        counts['public_functions'] += 1
                elif isinstance(obj, type):
                    if obj.__name__.startswith('_'):
                        counts['private_classes'] += 1
                    else:
                        counts['public_classes'] += 1
                        for attr in inspect.classify_class_attrs(obj):
                            if attr.defining_class != obj:
                                continue
                            if attr.kind in ('method', 'class method', 'static method'):
                                if attr.name.startswith('_'):
                                    counts['unique_private_methods'] += 1
                                else:
                                    counts['unique_public_methods'] += 1
                            elif attr.kind in ('property,'):
                                if attr.name.startswith('_'):
                                    counts['unique_private_properties'] += 1
                                else:
                                    counts['unique_public_properties'] += 1

        self._print_results(counts)