Commit c2d9a6b8 by Sébastien Eustace

Add support for the Project-URL metadata

parent 13f2776a
......@@ -8,6 +8,7 @@
- Added support for multi-constraints dependencies.
- Added a cache version system.
- Added a `--lock` option to `update` to only update the lock file without executing operations.
- Added support for the `Project-URL` metadata.
### Changed
......
......@@ -221,6 +221,9 @@ class SdistBuilder(Builder):
for dep in sorted(self._meta.requires_dist):
pkg_info += "Requires-Dist: {}\n".format(dep)
for name, url in sorted(self._meta.project_urls, key=lambda u: u[0]):
pkg_info += "Project-URL: {}, {}\n".format(name, url)
return encode(pkg_info)
def find_packages(self, include):
......
......@@ -325,6 +325,9 @@ class WheelBuilder(Builder):
for dep in sorted(self._meta.requires_dist):
fp.write("Requires-Dist: {}\n".format(dep))
for name, url in sorted(self._meta.project_urls, key=lambda u: u[0]):
fp.write("Project-URL: {}, {}\n".format(name, url))
if self._meta.description_content_type:
fp.write(
"Description-Content-Type: "
......
......@@ -80,4 +80,11 @@ class Metadata:
meta.provides_extra = [e for e in package.extras]
if package.urls:
for name, url in package.urls.items():
if name == "Homepage" and meta.home_page == url:
continue
meta.project_urls += ((name, url),)
return meta
......@@ -49,6 +49,7 @@ class Package(object):
self.homepage = None
self.repository_url = None
self.documentation_url = None
self.keywords = []
self._license = None
self.readme = None
......@@ -221,6 +222,21 @@ class Package(object):
return sorted(classifiers)
@property
def urls(self):
urls = {}
if self.homepage:
urls["Homepage"] = self.homepage
if self.repository_url:
urls["Repository"] = self.repository_url
if self.documentation_url:
urls["Documentation"] = self.documentation_url
return urls
def is_prerelease(self):
return self._version.is_prerelease()
......
......@@ -106,6 +106,7 @@ class Poetry:
package.description = local_config.get("description", "")
package.homepage = local_config.get("homepage")
package.repository_url = local_config.get("repository")
package.documentation_url = local_config.get("documentation")
try:
license_ = license_by_id(local_config.get("license"))
except ValueError:
......
......@@ -150,6 +150,8 @@ Provides-Extra: time
Requires-Dist: cachy[msgpack] (>=0.2.0,<0.3.0)
Requires-Dist: cleo (>=0.6,<0.7)
Requires-Dist: pendulum (>=1.4,<2.0); extra == "time"
Project-URL: Documentation, https://poetry.eustace.io/docs
Project-URL: Repository, https://github.com/sdispater/poetry
Description-Content-Type: text/x-rst
My Package
......
......@@ -165,6 +165,12 @@ def test_make_pkg_info():
'pendulum (>=1.4,<2.0); extra == "time"',
]
urls = parsed.get_all("Project-URL")
assert urls == [
"Documentation, https://poetry.eustace.io/docs",
"Repository, https://github.com/sdispater/poetry",
]
def test_make_pkg_info_any_python():
poetry = Poetry.create(project("module1"))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment