#5 Add binary package filters to module metadata
Merged 7 years ago by psabata. Opened 7 years ago by karsten.
karsten/modulemd master  into  master

file modified
+13
@@ -145,6 +145,11 @@ 

                          if "multilib" in e:

                              extras["multilib"] = e["multilib"]

                          self.components.rpms.add_package(p, **extras)

+                 if "filter" in yml["data"]["components"]["rpms"]:

+                     self.components.rpms.filter = \

+                         set(yml["data"]["components"]["rpms"]["filter"])

+                 else:

+                     self.components.rpms.filter = set()

  

      def dump(self, f):

          """Dumps the metadata into the supplied file.
@@ -226,6 +231,9 @@ 

                              extra["multilib"] = e["multilib"]

                          data["data"]["components"]["rpms"]["packages"][p] = \

                              extra

+                 if self.components.rpms.filter:

+                     data["data"]["components"]["rpms"]["filter"] = \

+                         list(self.components.rpms.filter)

          return yaml.dump(data)

  

      def validate(self):
@@ -299,6 +307,11 @@ 

              for a in self.components.rpms.api:

                  if not isinstance(a, str):

                      raise TypeError("rpms.api must be a set of strings")

+             if not isinstance(self.components.rpms.filter, set):

+                 raise TypeError("rpms.filter must be a set")

+             for a in self.components.rpms.filter:

+                 if not isinstance(a, str):

+                     raise TypeError("rpms.filter must be a set of strings")

              if self.components.rpms.packages:

                  if not isinstance(self.components.rpms.packages, dict):

                      raise TypeError("rpms.packages must be a dictionary")

file modified
+33
@@ -34,6 +34,7 @@ 

          self._dependencies = False

          self._api = set()

          self._packages = dict()

+         self._filter = set()

  

      def add_package(self, p, rationale="", commit=None, repository=None, cache=None, arches=None, multilib=None):

          """Adds a package to the package list.
@@ -91,6 +92,38 @@ 

          self._dependencies = bool(b)

  

      @property

+     def filter(self):

+         """A list of binary package names to be filtered out

+         """

+         return self._filter

+ 

+     @filter.setter

+     def filter(self, ss):

+         if not isinstance(ss, set):

+             raise TypeError("filter requires a set")

+         self._filter = ss

+ 

+     def add_filter(self, s):

+         """Adds a string to the set of filters

+ 

+         :param str s: RPM binary package name

+         """

+         self._filter.add(str(s))

+ 

+     update_filter = add_filter

+ 

+     def del_filter(self, s):

+         """Remove the supplied binary package name from the set of filters.

+ 

+         :param str s: RPM binary package name

+         """

+         self._filter.discard(str(s))

+ 

+     def clear_filter(self):

+         """Clears the RPM package name filter set."""

+         self._filter.clear()

+ 

+     @property

      def api(self):

          """A set of RPM binary package names representing the external,

          supported API of the module.

file modified
+3
@@ -38,6 +38,9 @@ 

                          api:

                                  - alfa

                                  - alfa-extras

+                         filter:

+                                 - filter_1

+                                 - filter_2

                          packages:

                                  alfa:

                                          rationale: alfa rationale

file modified
+4
@@ -58,6 +58,7 @@ 

          cls.mmd.components.rpms.dependencies = True

          cls.mmd.components.rpms.api = set([ "api" ])

          cls.mmd.components.rpms.packages = { "rpm" : { "rationale" : "" } }

+         cls.mmd.components.rpms.filter = set([ "filter_1", "filter_2" ])

  

      def test_mdversion(self):

          self.assertIn(self.mmd.mdversion, modulemd.supported_mdversions)
@@ -122,5 +123,8 @@ 

      def test_rpm_packages(self):

          self.assertEqual(self.mmd.components.rpms.packages, { "rpm" : { "rationale" : "" } })

  

+     def test_rpm_filter(self):

+         self.assertEqual(self.mmd.components.rpms.filter, set([ "filter_1", "filter_2" ]))

+ 

  if __name__ == "__main__":

      unittest.main()

file modified
+11
@@ -66,6 +66,8 @@ 

                            "commit" : "foxtrot",

                            "repository" : "golf",

                            "cache" : "hotel" } } )

+         self.assertEqual(mmd.components.rpms.filter,

+             set([ "filter_1", "filter_2" ]))

  

      def test_loads(self, yaml=None):

          mmd = modulemd.ModuleMetadata()
@@ -115,6 +117,9 @@ 

                                  commit: foxtrot

                                  repository: golf

                                  cache: hotel

+                         filter:

+                                - filter_1

+                                - filter_2

          """

          if not yaml:

              yaml = document
@@ -147,6 +152,8 @@ 

                            "commit" : "foxtrot",

                            "repository" : "golf",

                            "cache" : "hotel" } } )

+         self.assertEqual(mmd.components.rpms.filter,

+             set([ "filter_1", "filter_2" ]))

  

      def test_dump(self):

          mmd = modulemd.ModuleMetadata()
@@ -177,6 +184,8 @@ 

          mmd.components.rpms.add_package("bravo", rationale="bravo rationale",

              arches=["charlie", "delta"], multilib=["echo"],

              commit="foxtrot", repository="golf", cache="hotel")

+         mmd.components.rpms.add_filter("filter_1")

+         mmd.components.rpms.add_filter("filter_2")

          mmd.dump("tests/dump.yaml")

          self.test_load(filename="tests/dump.yaml")

  
@@ -209,6 +218,8 @@ 

          mmd.components.rpms.add_package("bravo", rationale="bravo rationale",

              arches=["charlie", "delta"], multilib=["echo"],

              commit="foxtrot", repository="golf", cache="hotel")

+         mmd.components.rpms.add_filter("filter_1")

+         mmd.components.rpms.add_filter("filter_2")

          self.test_loads(yaml=mmd.dumps())

  

  if __name__ == "__main__":

file modified
+15
@@ -115,5 +115,20 @@ 

          self.mr.clear_api()

          self.assertEqual(self.mr.api, set([]))

  

+     def test_add_filter(self):

+         self.assertNotIn("AddRPMAPI", self.mr.filter)

+         self.mr.add_filter("AddRPMAPI")

+         self.assertIn("AddRPMAPI", self.mr.filter)

+ 

+     def test_del_filter(self):

+         self.mr.filter = set(["DelRPMAPI"])

+         self.mr.del_filter("DelRPMAPI")

+         self.assertNotIn("DelRPMAPI", self.mr.filter)

+ 

+     def test_clear_filter(self):

+         self.mr.filter = set(["ClearRPMAPI"])

+         self.mr.clear_filter()

+         self.assertEqual(self.mr.filter, set([]))

+ 

  if __name__ == "__main__":

      unittest.main()

file modified
+40
@@ -217,5 +217,45 @@ 

          self.mmd.components.rpms._packages = { "foo" : { "rationale" : "", "cache" : 1 } }

          self.assertRaises(TypeError, self.mmd.validate)

  

+     def test_validate_rpms_api1(self):

+         self.mmd.components.rpms._api = None

+         self.assertRaises(TypeError, self.mmd.validate)

+ 

+     def test_validate_rpms_api2(self):

+         self.mmd.components.rpms._api = 42

+         self.assertRaises(TypeError, self.mmd.validate)

+ 

+     def test_validate_rpms_api3(self):

+         self.mmd.components.rpms._api = "foo"

+         self.assertRaises(TypeError, self.mmd.validate)

+ 

+     def test_validate_rpms_api4(self):

+         self.mmd.components.rpms._api = [ "foo", "bar" ]

+         self.assertRaises(TypeError, self.mmd.validate)

+ 

+     def test_validate_rpms_api5(self):

+         self.mmd.components.rpms._api = { "foo", 1 }

+         self.assertRaises(TypeError, self.mmd.validate)

+ 

+     def test_validate_rpms_filter1(self):

+         self.mmd.components.rpms._filter = None

+         self.assertRaises(TypeError, self.mmd.validate)

+ 

+     def test_validate_rpms_filter2(self):

+         self.mmd.components.rpms._filter = 42

+         self.assertRaises(TypeError, self.mmd.validate)

+ 

+     def test_validate_rpms_filter3(self):

+         self.mmd.components.rpms._filter = "foo"

+         self.assertRaises(TypeError, self.mmd.validate)

+ 

+     def test_validate_rpms_filter4(self):

+         self.mmd.components.rpms._filter = [ "foo", "bar" ]

+         self.assertRaises(TypeError, self.mmd.validate)

+ 

+     def test_validate_rpms_filter5(self):

+         self.mmd.components.rpms._filter = { "foo", 1 }

+         self.assertRaises(TypeError, self.mmd.validate)

+ 

  if __name__ == "__main__":

      unittest.main()