diff --git a/packagetree.py b/packagetree.py index 094b03c..c9ce29e 100644 --- a/packagetree.py +++ b/packagetree.py @@ -30,6 +30,9 @@ def __init__(self, module, root=None, directory=None): directory = directory or "" self.directory = "{}/{}".format(directory, self.module) + if root is not None: + self.module = ".{}".format(module) + self.subpackages = {} self.classes = self.__import_classes() @@ -85,13 +88,14 @@ def _filter_directories(self, root): Args: root - A pathlib.Path object. """ - all_subfolders = [x for x in root.glob('**/')] + all_subfolders = [x for x in root.glob('*/')] # Folders that aren't packages should be ignored. allowed_folders = [] for folder in all_subfolders: - if '__init__.py' in os.listdir(folder): - allowed_folders.append(folder) + if folder.is_dir(): + if '__init__.py' in os.listdir(folder): + allowed_folders.append(folder) # The root path may appear in the list of paths. # We don't need it, since classes from the root are imported on init. @@ -101,7 +105,7 @@ def _filter_directories(self, root): pass return allowed_folders - + def _gather_subpackages(self): """ Search a specific folder and its subfolders for Class objects. @@ -130,8 +134,9 @@ def _gather_subpackages(self): parts = '.'.join(parts) child_container = PackageTree( - module='.{}'.format(parts), - root=self.module + module=parts, + root=".".join(root_parts[1:]), + directory=self.directory ) # Add each subfolder as a child of this PackageTree. diff --git a/tests/test_repr.py b/tests/test_repr.py new file mode 100644 index 0000000..522575c --- /dev/null +++ b/tests/test_repr.py @@ -0,0 +1,12 @@ +from packagetree import PackageTree + + +def test_repr(): + """Test the string formatting of .__repr__().""" + container = PackageTree( + module='TopLevelPackage', root=None, directory="tests" + ) + + expected = ("PackageTree(module=TopLevelPackage, " + "root=None, directory=tests/TopLevelPackage)") + assert str(container) == expected diff --git a/tox.ini b/tox.ini index 33e034b..aa1477e 100644 --- a/tox.ini +++ b/tox.ini @@ -4,11 +4,11 @@ envlist = py36,flake8 # Unit tests [testenv] -deps = +deps = pytest pytest-cov commands = - py.test -s -vv --cov=packagetree tests + py.test -s -vv {posargs} --cov=packagetree tests # Code style [testenv:flake8]