diff --git a/lib/build/sphinx_ext.py b/lib/build/sphinx_ext.py
index 93410fca63b7137daa669cb015a9ae4e9e53d34d..b3ef049a723635b58357621a3da9ff56514925a3 100644
--- a/lib/build/sphinx_ext.py
+++ b/lib/build/sphinx_ext.py
@@ -492,6 +492,43 @@ def _DescribeHandlerAccess(handler, method):
     return "*(none)*"
 
 
+class _RapiHandlersForDocsHelper(object):
+  @classmethod
+  def Build(cls):
+    """Returns dictionary of resource handlers.
+
+    """
+    resources = \
+      rapi.connector.GetHandlers("[node_name]", "[instance_name]",
+                                 "[group_name]", "[network_name]", "[job_id]",
+                                 "[disk_index]", "[resource]",
+                                 translate=cls._TranslateResourceUri)
+
+    return resources
+
+  @classmethod
+  def _TranslateResourceUri(cls, *args):
+    """Translates a resource URI for use in documentation.
+
+    @see: L{rapi.connector.GetHandlers}
+
+    """
+    return "".join(map(cls._UriPatternToString, args))
+
+  @staticmethod
+  def _UriPatternToString(value):
+    """Converts L{rapi.connector.UriPattern} to strings.
+
+    """
+    if isinstance(value, rapi.connector.UriPattern):
+      return value.content
+    else:
+      return value
+
+
+_RAPI_RESOURCES_FOR_DOCS = _RapiHandlersForDocsHelper.Build()
+
+
 def _BuildRapiAccessTable(res):
   """Build a table with access permissions needed for all RAPI resources.
 
@@ -523,13 +560,7 @@ class RapiAccessTable(s_compat.Directive):
   option_spec = {}
 
   def run(self):
-    resources = \
-      rapi.connector.GetHandlers("[node_name]", "[instance_name]",
-                                 "[group_name]", "[network_name]", "[job_id]",
-                                 "[disk_index]", "[resource]",
-                                 translate=self._TranslateResourceUri)
-
-    include_text = "\n".join(_BuildRapiAccessTable(resources))
+    include_text = "\n".join(_BuildRapiAccessTable(_RAPI_RESOURCES_FOR_DOCS))
 
     # Inject into state machine
     include_lines = docutils.statemachine.string2lines(include_text, _TAB_WIDTH,
@@ -538,25 +569,6 @@ class RapiAccessTable(s_compat.Directive):
 
     return []
 
-  @classmethod
-  def _TranslateResourceUri(cls, *args):
-    """Translates a resource URI for use in documentation.
-
-    @see: L{rapi.connector.GetHandlers}
-
-    """
-    return "".join(map(cls._UriPatternToString, args))
-
-  @staticmethod
-  def _UriPatternToString(value):
-    """Converts L{rapi.connector.UriPattern} to strings.
-
-    """
-    if isinstance(value, rapi.connector.UriPattern):
-      return value.content
-    else:
-      return value
-
 
 def setup(app):
   """Sphinx extension callback.