Skip to content

Commit

Permalink
python-poetry#1350 - Improvements to handling of License file(s)
Browse files Browse the repository at this point in the history
- Added support for specifying a set of license files as part of the project config.
- Moved the license file config into the package configuration. (`Poetry.create()`) this matches how similar configurations such as “readme” are configured.
- Updated the builders to use the project level license file list instead of searching for their own (previously different) lists of license files.
- Moved the existing auto-discovery behaviours to become the default case during `create()` if nothing specific was configured.
- Fix python-poetry#866 by modifing the base template used by `SdistBuilder`. It now uses `setuptools`, since as documented by @seifertm in issue python-poetry#866 `pip` uses `setuptools` anyway and this clears the way to immediately supporting pypa/setuptools#1767 once this is merged and released from `setuptools`. Until `setuptools` updates to support multiple license files, this will result in a single log line in the debug output from `setuptools` so this is ok to merge before the change to `setuptools` is merged.
  • Loading branch information
Samuel Bishop committed Sep 10, 2019
1 parent 7b13f00 commit eafc18d
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 6 deletions.
5 changes: 3 additions & 2 deletions poetry/masonry/builders/builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,8 +146,9 @@ def find_files_to_add(self, exclude_build=True): # type: (bool) -> list
)
to_add.append(Path("pyproject.toml"))

# If a license file exists, add it
for license_file in self._path.glob("LICENSE*"):
# If any license files exist, add them.
for license_filename in list(self._package.license_files):
license_file = self._path / license_filename
self._io.write_line(
" - Adding: <comment>{}</comment>".format(
license_file.relative_to(self._path)
Expand Down
8 changes: 7 additions & 1 deletion poetry/masonry/builders/sdist.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

SETUP = """\
# -*- coding: utf-8 -*-
from distutils.core import setup
from setuptools import setup
{before}
setup_kwargs = {{
Expand Down Expand Up @@ -137,6 +137,12 @@ def build_setup(self): # type: () -> bytes
else:
pass

license_file_list = list(self._package.license_files)
if len(license_file_list) == 1:
extra.append("'license_file': \"{}\",".format(license_file_list[0]))
elif len(license_file_list) > 1:
extra.append("'license_file': \"{}\",".format(list(map(str, license_file_list))))

if package_dir:
before.append("package_dir = \\\n{}\n".format(pformat(package_dir)))
extra.append("'package_dir': package_dir,")
Expand Down
5 changes: 2 additions & 3 deletions poetry/masonry/builders/wheel.py
Original file line number Diff line number Diff line change
Expand Up @@ -181,9 +181,8 @@ def _write_metadata(self, wheel):
with self._write_to_zip(wheel, self.dist_info + "/entry_points.txt") as f:
self._write_entry_points(f)

for base in ("COPYING", "LICENSE"):
for path in sorted(self._path.glob(base + "*")):
self._add_file(wheel, path, "%s/%s" % (self.dist_info, path.name))
for license_file in self._package.license_files:
self._add_file(wheel, license_file, "%s/%s" % (self.dist_info, license_file.name))

with self._write_to_zip(wheel, self.dist_info + "/WHEEL") as f:
self._write_wheel_file(f)
Expand Down
1 change: 1 addition & 0 deletions poetry/packages/package.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ def __init__(self, name, version, pretty_version=None):
self.documentation_url = None
self.keywords = []
self._license = None
self.license_files = set()
self.readme = None

self.source_name = ""
Expand Down
10 changes: 10 additions & 0 deletions poetry/poetry.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,16 @@ def create(cls, cwd): # type: (Path) -> Poetry
if "readme" in local_config:
package.readme = Path(poetry_file.parent) / local_config["readme"]

# Add any manually defined or automatically discovered license files.
if "license-files" in local_config:
for file in local_config["license-files"].items():
package.license_files.add(Path(poetry_file.parent) / file)
else:
for license_file in poetry_file.parent.glob("LICENSE*"):
package.license_files.add(license_file.relative_to(poetry_file.parent))
for license_file in poetry_file.parent.glob("COPYING*"):
package.license_files.add(license_file.relative_to(poetry_file.parent))

if "platform" in local_config:
package.platform = local_config["platform"]

Expand Down

0 comments on commit eafc18d

Please sign in to comment.