Ines Almeida has proposed merging 
~ines-almeida/launchpad:bam-description-not-none into launchpad:master.

Commit message:
Allow binary package release wheel without description
    
The previous version of the `pkginfo` library we used would set the description 
field to an empty string if none was found. The current version sets it to None 
which lead to a DB exception. This change mimics the behavior of the previous 
version of the `pkginfo` library by setting the description of a binary package 
release to an empty string if none is found
    
LP:#2075530

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~ines-almeida/launchpad/+git/launchpad/+merge/470785

Another solution would be to update the DB restriction, but given we already do 
such a similar thing of `summary=wheel.summary or ""` in 2 other fields, it 
seems coherent to do the same in this one.
-- 
Your team Launchpad code reviewers is requested to review the proposed merge of 
~ines-almeida/launchpad:bam-description-not-none into launchpad:master.
diff --git a/lib/lp/soyuz/model/archivejob.py b/lib/lp/soyuz/model/archivejob.py
index b3beedf..4aeb4c8 100644
--- a/lib/lp/soyuz/model/archivejob.py
+++ b/lib/lp/soyuz/model/archivejob.py
@@ -442,7 +442,7 @@ class CIBuildUploadJob(ArchiveJobDerived):
                 name=wheel.name,
                 version=wheel.version,
                 summary=wheel.summary or "",
-                description=wheel.description,
+                description=wheel.description or "",
                 architecturespecific="any" not in parsed_path.platform_tags,
                 homepage=wheel.home_page or "",
             )
diff --git a/lib/lp/soyuz/tests/data/wheel-no-description/README.md b/lib/lp/soyuz/tests/data/wheel-no-description/README.md
new file mode 100644
index 0000000..3135dc3
--- /dev/null
+++ b/lib/lp/soyuz/tests/data/wheel-no-description/README.md
@@ -0,0 +1 @@
+An example package.  Build a wheel from this with `pyproject-build`.
diff --git a/lib/lp/soyuz/tests/data/wheel-no-description/dist/wheel_no_description-0.0.1-py3-none-any.whl b/lib/lp/soyuz/tests/data/wheel-no-description/dist/wheel_no_description-0.0.1-py3-none-any.whl
new file mode 100644
index 0000000..7f3ece4
Binary files /dev/null and b/lib/lp/soyuz/tests/data/wheel-no-description/dist/wheel_no_description-0.0.1-py3-none-any.whl differ
diff --git a/lib/lp/soyuz/tests/data/wheel-no-description/dist/wheel_no_description-0.0.1.tar.gz b/lib/lp/soyuz/tests/data/wheel-no-description/dist/wheel_no_description-0.0.1.tar.gz
new file mode 100644
index 0000000..8e0a594
Binary files /dev/null and b/lib/lp/soyuz/tests/data/wheel-no-description/dist/wheel_no_description-0.0.1.tar.gz differ
diff --git a/lib/lp/soyuz/tests/data/wheel-no-description/pyproject.toml b/lib/lp/soyuz/tests/data/wheel-no-description/pyproject.toml
new file mode 100644
index 0000000..b0f0765
--- /dev/null
+++ b/lib/lp/soyuz/tests/data/wheel-no-description/pyproject.toml
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["setuptools>=42"]
+build-backend = "setuptools.build_meta"
diff --git a/lib/lp/soyuz/tests/data/wheel-no-description/setup.cfg b/lib/lp/soyuz/tests/data/wheel-no-description/setup.cfg
new file mode 100644
index 0000000..b103bfd
--- /dev/null
+++ b/lib/lp/soyuz/tests/data/wheel-no-description/setup.cfg
@@ -0,0 +1,3 @@
+[metadata]
+name = wheel-no-description
+version = 0.0.1
diff --git a/lib/lp/soyuz/tests/test_archivejob.py b/lib/lp/soyuz/tests/test_archivejob.py
index 3244e4d..d961c3a 100644
--- a/lib/lp/soyuz/tests/test_archivejob.py
+++ b/lib/lp/soyuz/tests/test_archivejob.py
@@ -337,6 +337,48 @@ class TestCIBuildUploadJob(TestCaseWithFactory):
             ),
         )
 
+    def test__scanFiles_wheel_no_description(self):
+        """Ensure scanning a wheel without a description produces metadata with
+        empty string instead of None"""
+        archive = self.factory.makeArchive()
+        distroseries = self.factory.makeDistroSeries(
+            distribution=archive.distribution
+        )
+        build = self.makeCIBuild(archive.distribution)
+        report = self.factory.makeRevisionStatusReport(ci_build=build)
+        job = CIBuildUploadJob.create(
+            build,
+            build.git_repository.owner,
+            archive,
+            distroseries,
+            PackagePublishingPocket.RELEASE,
+            target_channel="edge",
+        )
+        path = Path(
+            "wheel-no-description/dist/"
+            "wheel_no_description-0.0.1-py3-none-any.whl"
+        )
+        tmpdir = Path(self.useFixture(TempDir()).path)
+        shutil.copy2(datadir(str(path)), str(tmpdir))
+        all_metadata = job._scanFiles(report, tmpdir)
+
+        self.assertThat(
+            all_metadata,
+            MatchesDict(
+                {
+                    path.name: MatchesStructure(
+                        format=Equals(BinaryPackageFormat.WHL),
+                        name=Equals("wheel-no-description"),
+                        version=Equals("0.0.1"),
+                        summary=Equals(""),
+                        description=Equals(""),
+                        architecturespecific=Is(False),
+                        homepage=Equals(""),
+                    ),
+                }
+            ),
+        )
+
     def test__scanFiles_sdist(self):
         archive = self.factory.makeArchive()
         distroseries = self.factory.makeDistroSeries(
_______________________________________________
Mailing list: https://launchpad.net/~launchpad-reviewers
Post to     : launchpad-reviewers@lists.launchpad.net
Unsubscribe : https://launchpad.net/~launchpad-reviewers
More help   : https://help.launchpad.net/ListHelp

Reply via email to