#43 Query errata repo IDs
Merged 8 years ago by cqi. Opened 8 years ago by cqi.
cqi/freshmaker query-errata-repo-ids  into  master

file modified
+34 -5
@@ -50,10 +50,27 @@ 

  

          :param str server_url: Base URL of Errata server.

          """

+         self._rest_api_ver = 'api/v1'

          self.server_url = server_url.rstrip('/')

  

-     def _errata_get(self, endpoint):

-         r = requests.get("%s/%s" % (self.server_url, endpoint),

+     def _errata_rest_get(self, endpoint):

+         """Request REST-style API

+ 

+         Document: /developer-guide/api-http-api.html

+         """

+         r = requests.get("%s/%s/%s" % (self.server_url,

+                                        self._rest_api_ver,

+                                        endpoint.lstrip('/')),

+                          auth=HTTPKerberosAuth())

+         r.raise_for_status()

+         return r.json()

+ 

+     def _errata_http_get(self, endpoint):

+         """Request Errata legacy HTTP API

+ 

+         See also Legacy section in /developer-guide/api-http-api.html

+         """

+         r = requests.get('{}/{}'.format(self.server_url, endpoint),

                           auth=HTTPKerberosAuth())

          r.raise_for_status()

          return r.json()
@@ -71,7 +88,7 @@ 

          :rtype: list

          """

          if isinstance(event, BrewRPMSignEvent):

-             build = self._errata_get("api/v1/build/%s" % str(event.nvr))

+             build = self._errata_rest_get("/build/%s" % str(event.nvr))

              if "all_errata" not in build:

                  return []

              return [
@@ -87,7 +104,7 @@ 

          :return: True if all builds in advisory are signed.

          :rtype: bool

          """

-         builds_per_product = self._errata_get(

+         builds_per_product = self._errata_rest_get(

              "advisory/%s/builds.json" % str(errata_id))

  

          # Store NVRs of all builds in advisory to nvrs set.
@@ -98,8 +115,20 @@ 

  

          # For each NVR, check that all the rpms are signed.

          for nvr in nvrs:

-             build = self._errata_get("api/v1/build/%s" % str(nvr))

+             build = self._errata_rest_get("build/%s" % str(nvr))

              if "rpms_signed" not in build or not build["rpms_signed"]:

                  return False

  

          return True

+ 

+     def get_pulp_repository_ids(self, errata_id):

+         """Get Pulp repository IDs where packages included in errata will end up

+ 

+         :param errata_id: Errata advisory ID, e.g. 25713.

+         :type errata_id: str or int

+         :return: a list of strings each of them represents a pulp repository ID

+         :rtype: list

+         """

+         data = self._errata_http_get(

+             '/errata/get_pulp_packages/{}.json'.format(errata_id))

+         return data.keys()

file modified
+41 -20
@@ -28,12 +28,12 @@ 

  from freshmaker.events import BrewRPMSignEvent, GitRPMSpecChangeEvent

  

  

- class MockedErrataAPI(object):

+ class MockedErrataRESTAPI(object):

      """

      Class mocking methods accessing Errata API in Errata class.

      """

-     def __init__(self, errata_get):

-         errata_get.side_effect = (self.errata_get)

+     def __init__(self, errata_rest_get):

+         errata_rest_get.side_effect = (self.errata_rest_get)

  

          self.builds_json = {

              "PRODUCT1": [
@@ -66,10 +66,10 @@ 

              "all_errata": [{"id": 28484, "name": "RHSA-2017:28484", "status": "QE"}],

              "rpms_signed": True}

  

-     def errata_get(self, endpoint):

+     def errata_rest_get(self, endpoint):

          if endpoint.endswith("builds.json"):

              return self.builds_json

-         elif endpoint.find("api/v1/build/") != -1:

+         elif endpoint.find("build/") != -1:

              nvr = endpoint.split("/")[-1]

              return self.builds[nvr]

  
@@ -78,17 +78,17 @@ 

      def setUp(self):

          self.errata = Errata("https://localhost/")

  

-     @patch.object(Errata, "_errata_get")

-     def test_advisories_from_event(self, errata_get):

-         MockedErrataAPI(errata_get)

+     @patch.object(Errata, "_errata_rest_get")

+     def test_advisories_from_event(self, errata_rest_get):

+         MockedErrataRESTAPI(errata_rest_get)

          event = BrewRPMSignEvent("msgid", "libntirpc-1.4.3-4.el7rhgs")

          advisories = self.errata.advisories_from_event(event)

          self.assertEqual(len(advisories), 1)

          self.assertEqual(advisories[0].errata_id, 28484)

  

-     @patch.object(Errata, "_errata_get")

-     def test_advisories_from_event_missing_all_errata(self, errata_get):

-         mocked_errata = MockedErrataAPI(errata_get)

+     @patch.object(Errata, "_errata_rest_get")

+     def test_advisories_from_event_missing_all_errata(self, errata_rest_get):

+         mocked_errata = MockedErrataRESTAPI(errata_rest_get)

          del mocked_errata.builds["libntirpc-1.4.3-4.el7rhgs"]["all_errata"]

  

          event = BrewRPMSignEvent("msgid", "libntirpc-1.4.3-4.el7rhgs")
@@ -100,19 +100,40 @@ 

          with self.assertRaises(ValueError):

              self.errata.advisories_from_event(event)

  

-     @patch.object(Errata, "_errata_get")

-     def test_builds_signed_all_signed(self, errata_get):

-         MockedErrataAPI(errata_get)

+     @patch.object(Errata, "_errata_rest_get")

+     def test_builds_signed_all_signed(self, errata_rest_get):

+         MockedErrataRESTAPI(errata_rest_get)

          self.assertTrue(self.errata.builds_signed(28484))

  

-     @patch.object(Errata, "_errata_get")

-     def test_builds_signed_some_unsigned(self, errata_get):

-         mocked_errata = MockedErrataAPI(errata_get)

+     @patch.object(Errata, "_errata_rest_get")

+     def test_builds_signed_some_unsigned(self, errata_rest_get):

+         mocked_errata = MockedErrataRESTAPI(errata_rest_get)

          mocked_errata.builds["libntirpc-1.4.3-4.el7rhgs"]["rpms_signed"] = False

          self.assertFalse(self.errata.builds_signed(28484))

  

-     @patch.object(Errata, "_errata_get")

-     def test_builds_signed_missing_data(self, errata_get):

-         mocked_errata = MockedErrataAPI(errata_get)

+     @patch.object(Errata, "_errata_rest_get")

+     def test_builds_signed_missing_data(self, errata_rest_get):

+         mocked_errata = MockedErrataRESTAPI(errata_rest_get)

          mocked_errata.builds["libntirpc-1.4.3-4.el7rhgs"] = {}

          self.assertFalse(self.errata.builds_signed(28484))

+ 

+     @patch('freshmaker.errata.requests.get')

+     def test_get_errata_repo_ids(self, get):

+         get.return_value.json.return_value = {

+             'rhel-6-server-eus-source-rpms__6_DOT_7__x86_64': [

+             ],

+             'rhel-6-server-eus-optional-debug-rpms__6_DOT_7__i386': [

+                 '/path/to/package.rpm',

+                 '/path/to/package1.rpm',

+                 '/path/to/package2.rpm',

+             ],

+             'rhel-6-server-eus-rpms__6_DOT_7__x86_64': [

+             ],

+         }

+ 

+         repo_ids = self.errata.get_pulp_repository_ids(25718)

+ 

+         self.assertEqual(set(['rhel-6-server-eus-source-rpms__6_DOT_7__x86_64',

+                               'rhel-6-server-eus-optional-debug-rpms__6_DOT_7__i386',

+                               'rhel-6-server-eus-rpms__6_DOT_7__x86_64']),

+                          set(repo_ids))

no initial comment

How about add:

self.server_rest_url = self.server_url + '/api/v1'

I think the name is not so good, how about keep _errata_get as it was, and rename this to _errata_rest_get?

or add rest_api=False in _errata_get, and then:

server = self.server_rest_url if rest_api else self.server_url

def _errata_rest_get(self, endpoint): 
    return self._errata_get(self, endpoint, rest_api=True)

2 new commits added

  • Query errata repo IDs
  • Avoid repeating api/v1/ in Errata
8 years ago

Rename _errata_http_api to _errata_http_get.
Rename _errata_rest_api to _errata_rest_get.

Pull-Request has been merged by cqi

8 years ago