diff --git a/src/main/python/pybuilder/core.py b/src/main/python/pybuilder/core.py index f66ab4bc7..6958250cf 100644 --- a/src/main/python/pybuilder/core.py +++ b/src/main/python/pybuilder/core.py @@ -324,6 +324,7 @@ def __init__(self, basedir, version="1.0.dev0", name=None): self._requires_python = "" self._obsoletes = [] self._explicit_namespaces = [] + self._package_dir = {} self._properties = {"verbose": False} self._install_dependencies = set() self._build_dependencies = set() @@ -374,6 +375,14 @@ def explicit_namespaces(self): def explicit_namespaces(self, value): self._explicit_namespaces = as_list(value) + @property + def package_dir(self): + return self._package_dir + + @package_dir.setter + def package_dir(self, value): + self._package_dir = dict(value) + @property def dist_version(self): return self._dist_version diff --git a/src/main/python/pybuilder/plugins/python/distutils_plugin.py b/src/main/python/pybuilder/plugins/python/distutils_plugin.py index 4e009e0ee..12e0f53e4 100644 --- a/src/main/python/pybuilder/plugins/python/distutils_plugin.py +++ b/src/main/python/pybuilder/plugins/python/distutils_plugin.py @@ -81,6 +81,7 @@ def run(self): url = $url, scripts = $scripts, packages = $packages, + package_dir = $package_dir, namespace_packages = $namespace_packages, py_modules = $modules, classifiers = $classifiers, @@ -175,6 +176,7 @@ def render_setup_script(project): "url": as_str(default(project.url)), "scripts": build_scripts_string(project), "packages": build_packages_string(project), + "package_dir": build_package_dir_string(project), "namespace_packages": build_namespace_packages_string(project), "modules": build_modules_string(project), "classifiers": build_classifiers_string(project), @@ -493,6 +495,10 @@ def build_namespace_packages_string(project): return build_string_from_array([pkg for pkg in project.explicit_namespaces]) +def build_package_dir_string(project): + return build_string_from_dict(project.package_dir) + + def build_packages_string(project): return build_string_from_array([pkg for pkg in project.list_packages()]) @@ -577,6 +583,8 @@ def build_string_from_array(arr, indent=12): def build_string_from_dict(d, indent=12): + if not d: + return "{}" element_separator = ",\n" element_separator += " " * indent map_elements = [] diff --git a/src/main/python/pybuilder/reactor.py b/src/main/python/pybuilder/reactor.py index 272e43761..c55c16733 100644 --- a/src/main/python/pybuilder/reactor.py +++ b/src/main/python/pybuilder/reactor.py @@ -287,6 +287,7 @@ def apply_project_attributes(self): self.propagate_property("license") self.propagate_property("url") self.propagate_property("explicit_namespaces") + self.propagate_property("package_dir") self.propagate_property("requires_python") self.propagate_property("obsoletes") diff --git a/src/unittest/python/plugins/python/distutils_plugin_tests.py b/src/unittest/python/plugins/python/distutils_plugin_tests.py index 41931e503..d500390b9 100644 --- a/src/unittest/python/plugins/python/distutils_plugin_tests.py +++ b/src/unittest/python/plugins/python/distutils_plugin_tests.py @@ -421,6 +421,7 @@ def run(self): 'spam', 'eggs' ], + package_dir = {}, namespace_packages = [ 'foo.bar', 'quick.brown.fox' @@ -491,6 +492,7 @@ def run(self): 'spam', 'eggs' ], + package_dir = {}, namespace_packages = [ 'foo.bar', 'quick.brown.fox'