Unverified Commit b0e9e0cd authored by Sébastien Eustace's avatar Sébastien Eustace
Browse files

Add support for Markdown README files

parent deff8fa6
Loading
Loading
Loading
Loading
+1 −0
Changes for CHANGELOG.md: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@
- Added the `run` command to execute commands inside the created virtualenvs.
- Added the `debug:resolve` command to debug dependency resolution.
- Added `pyproject.toml` file validation.
- Added support for Markdown readme files.

### Fixed

+2 −0
Changes for poetry/masonry/builders/builder.py: 2 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ from poetry.semver.constraints import MultiConstraint
from poetry.semver.version_parser import VersionParser
from poetry.vcs import get_vcs

from ..metadata import Metadata
from ..utils.module import Module


@@ -33,6 +34,7 @@ class Builder:
        self._module = Module(
            self._package.name, self._path.as_posix()
        )
        self._meta = Metadata.from_package(self._package)

    def build(self):
        raise NotImplementedError()
+14 −17
Changes for poetry/masonry/builders/sdist.py: 14 added lines, 17 removed lines.
Original line number Diff line number Diff line
@@ -89,14 +89,13 @@ class SdistBuilder(Builder):
            tar_info.size = len(setup)
            tar.addfile(tar_info, BytesIO(setup))

            author = self.convert_author(self._package.authors[0])
            pkg_info = PKG_INFO.format(
                name=self._package.name,
                version=self._package.version,
                summary=self._package.description,
                home_page=self._package.homepage or self._package.repository_url,
                author=author['name'],
                author_email=author['email'],
                name=self._meta.name,
                version=self._meta.version,
                summary=self._meta.summary,
                home_page=self._meta.home_page,
                author=self._meta.author,
                author_email=self._meta.author_email,
            ).encode('utf-8')

            tar_info = tarfile.TarInfo(pjoin(tar_dir, 'PKG-INFO'))
@@ -146,21 +145,19 @@ class SdistBuilder(Builder):
            extra.append("'entry_points': entry_points,")

        if self._package.python_versions != '*':
            python_requires = format_python_constraint(self._package.python_constraint)
            python_requires = self._meta.requires_python

            extra.append("'python_requires': {!r},".format(python_requires))

        author = self.convert_author(self._package.authors[0])

        return SETUP.format(
            before='\n'.join(before),
            name=self._package.name,
            version=self._package.version,
            description=self._package.description,
            long_description=self._package.readme,
            author=author['name'],
            author_email=author['email'],
            url=self._package.homepage or self._package.repository_url,
            name=self._meta.name,
            version=self._meta.version,
            description=self._meta.summary,
            long_description=self._meta.description,
            author=self._meta.author,
            author_email=self._meta.author_email,
            url=self._meta.home_page,
            extra='\n    '.join(extra),
            after='\n'.join(after)
        ).encode('utf-8')
+27 −23
Changes for poetry/masonry/builders/wheel.py: 27 added lines, 23 removed lines.
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ from poetry.semver.constraints import MultiConstraint
from poetry.vcs import get_vcs
from poetry.version.helpers import format_python_constraint

from ..metadata import Metadata
from ..utils.helpers import normalize_file_permissions
from ..utils.tags import get_abbr_impl
from ..utils.tags import get_abi_tag
@@ -292,36 +293,39 @@ class WheelBuilder(Builder):

    def _write_metadata_file(self, fp):
        """
        Write out metadata in the 1.x format (email like)
        Write out metadata in the 2.x format (email like)
        """
        fp.write('Metadata-Version: 1.2\n')
        fp.write(f'Name: {self._package.name}\n')
        fp.write(f'Version: {self._package.version}\n')
        fp.write(f'Summary: {self._package.description}\n')
        fp.write(f'Home-page: {self._package.homepage or self._package.repository_url or "UNKNOWN"}\n')
        fp.write(f'License: {self._package.license or "UNKOWN"}\n')
        fp.write('Metadata-Version: 2.1\n')
        fp.write(f'Name: {self._meta.name}\n')
        fp.write(f'Version: {self._meta.version}\n')
        fp.write(f'Summary: {self._meta.summary}\n')
        fp.write(f'Home-page: {self._meta.home_page or "UNKNOWN"}\n')
        fp.write(f'License: {self._meta.license or "UNKOWN"}\n')

        # Optional fields
        if self._package.keywords:
            fp.write(f"Keywords: {','.join(self._package.keywords)}\n")
        if self._meta.keywords:
            fp.write(f"Keywords: {self._meta.keywords}\n")

        if self._package.authors:
            author = self.convert_author(self._package.authors[0])
        if self._meta.author:
            fp.write(f'Author: {self._meta.author}\n')

            fp.write(f'Author: {author["name"]}\n')
            fp.write(f'Author-email: {author["email"]}\n')
        if self._meta.author_email:
            fp.write(f'Author-email: {self._meta.author_email}\n')

        if self._package.python_versions != '*':
            python_requires = format_python_constraint(self._package.python_constraint)
        if self._meta.requires_python:
            fp.write(f'Requires-Python: {self._meta.requires_python}\n')

            fp.write(f'Requires-Python: {python_requires}\n')

        classifiers = self.get_classifers()
        for classifier in classifiers:
        for classifier in self._meta.classifiers:
            fp.write(f'Classifier: {classifier}\n')

        for dep in self._package.requires:
            fp.write('Requires-Dist: {}\n'.format(dep.to_pep_508()))
        for dep in self._meta.requires_dist:
            fp.write(f'Requires-Dist: {dep}\n')

        if self._meta.description_content_type:
            fp.write(f'Description-Content-Type: '
                     f'{self._meta.description_content_type}\n')

        # TODO: Provides extra

        if self._package.readme is not None:
            fp.write('\n' + self._package.readme + '\n')
        if self._meta.description is not None:
            fp.write('\n' + self._meta.description + '\n')
+19 −3
Changes for poetry/masonry/metadata.py: 19 added lines, 3 removed lines.
Original line number Diff line number Diff line
from poetry.semver.constraints import MultiConstraint
from poetry.utils.helpers import canonicalize_name
from poetry.version.helpers import format_python_constraint


class Metadata:

    metadata_version = '1.2'
    metadata_version = '2.1'
    # version 1.0
    name = None
    version = None
@@ -34,6 +33,10 @@ class Metadata:
    obsoletes_dist = ()
    project_urls = ()

    # Version 2.1
    description_content_type = None
    provides_extra = []

    @classmethod
    def from_package(cls, package) -> 'Metadata':
        meta = cls()
@@ -41,7 +44,10 @@ class Metadata:
        meta.name = canonicalize_name(package.name)
        meta.version = package.version
        meta.summary = package.description
        meta.description = package.readme
        if package.readme:
            with package.readme.open() as f:
                meta.description = f.read()

        meta.keywords = ','.join(package.keywords)
        meta.home_page = package.homepage or package.repository_url
        meta.author = package.author_name
@@ -58,4 +64,14 @@ class Metadata:
        # Requires python
        meta.requires_python = format_python_constraint(package.python_constraint)

        # Version 2.1
        if package.readme:
            if package.readme.suffix == '.rst':
                meta.description_content_type = 'text/x-rst'
            elif package.readme.suffix in ['.md', '.markdown']:
                meta.description_content_type = 'text/markdown'
            else:
                meta.description_content_type = 'text/plain'

        # TODO: Provides extra
        return meta
Loading