pike/discovery/filesystem.py
import os
EXCLUDED_MODULE_NAMES = ['__init__.py']
def is_package(path):
"""Checks if path string is a package"""
return os.path.exists(os.path.join(path, '__init__.py'))
def is_module(path):
"""Checks if path string is a module"""
return path.endswith('.py')
def get_name(path):
filename = os.path.basename(path)
name, _ = os.path.splitext(filename)
return name
def find_modules(path):
"""Finds all modules located on a path"""
for pathname in os.listdir(path):
if pathname in EXCLUDED_MODULE_NAMES:
continue
full_path = os.path.join(path, pathname)
if os.path.isfile(full_path) and is_module(full_path):
yield full_path
def find_packages(path):
"""Finds all packages located on a path"""
for pathname in os.listdir(path):
full_path = os.path.join(path, pathname)
if os.path.isdir(full_path) and is_package(full_path):
yield full_path
def recursive_find_packages(path):
"""Recursively finds all packages located on a path"""
for pkg in find_packages(path):
yield pkg
for sub_pkg in recursive_find_packages(pkg):
yield sub_pkg
def recursive_find_modules(path):
"""Recursively finds all modules located on a path"""
for module_path in find_modules(path):
yield module_path
for pkg_path in recursive_find_packages(path):
for module_path in find_modules(pkg_path):
yield module_path