diff options
author | Jason R. Coombs <jaraco@jaraco.com> | 2016-05-22 15:53:06 -0400 |
---|---|---|
committer | Jason R. Coombs <jaraco@jaraco.com> | 2016-05-22 15:53:06 -0400 |
commit | 1af011b1f1dac17485c0cf8fe9eb08c43b5b6f2a (patch) | |
tree | aeeebd440530f0c68faa5bc4526caba5029c16da | |
parent | c05fd0799bb2a83ab877f317e8630a403a3514f7 (diff) | |
download | external_python_setuptools-1af011b1f1dac17485c0cf8fe9eb08c43b5b6f2a.tar.gz external_python_setuptools-1af011b1f1dac17485c0cf8fe9eb08c43b5b6f2a.tar.bz2 external_python_setuptools-1af011b1f1dac17485c0cf8fe9eb08c43b5b6f2a.zip |
Extract duplicate code into a single method.
-rw-r--r-- | setuptools/command/build_py.py | 48 |
1 files changed, 28 insertions, 20 deletions
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): |