From 1af011b1f1dac17485c0cf8fe9eb08c43b5b6f2a Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sun, 22 May 2016 15:53:06 -0400 Subject: Extract duplicate code into a single method. --- setuptools/command/build_py.py | 48 ++++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 20 deletions(-) (limited to 'setuptools/command/build_py.py') diff --git a/setuptools/command/build_py.py b/setuptools/command/build_py.py index cd91a85e..1db0acb9 100644 --- a/setuptools/command/build_py.py +++ b/setuptools/command/build_py.py @@ -94,17 +94,12 @@ class build_py(orig.build_py, Mixin2to3): def find_data_files(self, package, src_dir): """Return filenames for package's data files in 'src_dir'""" - spec = self.package_data - raw_patterns = itertools.chain( - spec.get('', []), - spec.get(package, []), - ) - platform_patterns = ( - # Each pattern has to be converted to a platform-specific path - os.path.join(src_dir, convert_path(pattern)) - for pattern in raw_patterns + patterns = self._get_platform_patterns( + self.package_data, + package, + src_dir, ) - globs_expanded = map(glob, platform_patterns) + globs_expanded = map(glob, patterns) # flatten the expanded globs into an iterable of matches globs_matches = itertools.chain.from_iterable(globs_expanded) glob_files = filter(os.path.isfile, globs_matches) @@ -197,19 +192,14 @@ class build_py(orig.build_py, Mixin2to3): def exclude_data_files(self, package, src_dir, files): """Filter filenames for package's data files in 'src_dir'""" files = list(files) - spec = self.exclude_package_data - raw_patterns = itertools.chain( - spec.get('', []), - spec.get(package, []), - ) - platform_patterns = ( - # Each pattern has to be converted to a platform-specific path - os.path.join(src_dir, convert_path(pattern)) - for pattern in raw_patterns + patterns = self._get_platform_patterns( + self.exclude_package_data, + package, + src_dir, ) match_groups = ( fnmatch.filter(files, pattern) - for pattern in platform_patterns + for pattern in patterns ) # flatten the groups of matches into an iterable of matches matches = itertools.chain.from_iterable(match_groups) @@ -223,6 +213,24 @@ class build_py(orig.build_py, Mixin2to3): and not next(seen[fn]) ] + @staticmethod + def _get_platform_patterns(spec, package, src_dir): + """ + yield platfrom-specific path patterns (suitable for glob + or fn_match) from a glob-based spec (such as + self.package_data or self.exclude_package_data) + matching package in src_dir. + """ + raw_patterns = itertools.chain( + spec.get('', []), + spec.get(package, []), + ) + return ( + # Each pattern has to be converted to a platform-specific path + os.path.join(src_dir, convert_path(pattern)) + for pattern in raw_patterns + ) + def assert_relative(path): if not os.path.isabs(path): -- cgit v1.2.1