From fc72a3a3a20dd3fa6810f292bff0d8b5079a3c4b Mon Sep 17 00:00:00 2001
From: Oleksiy Mishchenko <oleksiy@google.com>
Date: Thu, 29 Jan 2009 15:02:20 +0000
Subject: [PATCH] RAPI: Implement /2 resource

Reviewed-by: iustinp
---
 lib/rapi/connector.py                  | 37 +++++++++++++++++++++++++-
 test/ganeti.rapi.resources_unittest.py |  2 +-
 2 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/lib/rapi/connector.py b/lib/rapi/connector.py
index 0b81c57d7..cb843b894 100644
--- a/lib/rapi/connector.py
+++ b/lib/rapi/connector.py
@@ -114,12 +114,47 @@ class R_root(baserlib.R_Generic):
     return baserlib.BuildUriList(rootlist, "/%s")
 
 
+def _getResources(id):
+  """Return a list of resources underneath given id.
+
+  This is to generalize querying of version resources lists.
+
+  @return: a list of resources names.
+
+  """
+  r_pattern = re.compile('^R_%s_([a-zA-Z0-9]+)$' % id)
+
+  rlist = []
+  for handler in CONNECTOR.values():
+    m = r_pattern.match(handler.__name__)
+    if m:
+      name = m.group(1)
+      rlist.append(name)
+
+  return rlist
+
+
+class R_2(baserlib.R_Generic):
+  """ /2 resourse.
+
+  """
+  DOC_URI = "/2"
+
+  def GET(self):
+    """Show the list of mapped resources.
+
+    @return: a dictionary with 'name' and 'uri' keys for each of them.
+
+    """
+    return baserlib.BuildUriList(_getResources("2"), "/2/%s")
+
+
 CONNECTOR.update({
   "/": R_root,
 
   "/version": rlib1.R_version,
 
-
+  "/2": R_2,
   "/2/jobs": rlib2.R_2_jobs,
   "/2/nodes": rlib2.R_2_nodes,
   "/2/instances": rlib2.R_2_instances,
diff --git a/test/ganeti.rapi.resources_unittest.py b/test/ganeti.rapi.resources_unittest.py
index 9a5bef6d9..b40e0da49 100755
--- a/test/ganeti.rapi.resources_unittest.py
+++ b/test/ganeti.rapi.resources_unittest.py
@@ -76,7 +76,7 @@ class R_RootTests(unittest.TestCase):
 
   def testGet(self):
     expected = [
-        # TODO: {'name': 'info', 'uri': '/2'},
+      {'name': '2', 'uri': '/2'},
       {'name': 'version', 'uri': '/version'},
       ]
     self.assertEquals(self.root.GET(), expected)
-- 
GitLab